Seguridad en dispositivos de Android

Adobe AIR 2.5 y posterior

En Android, al igual que sucede en todos los dispositivos informáticos, AIR se ajusta al modelo de seguridad nativo. Al mismo tiempo, AIR mantiene sus propias reglas de seguridad, que pretenden facilitar a los desarrolladores la escritura de aplicaciones seguras y conectadas a Internet.

Las aplicaciones de AIR en Android utilizan el formato de empaquetado de Android, por lo que la instalación falla en el modelo de seguridad de Android. El archivo de instalación de la aplicación de AIR no se utiliza.

El modelo de seguridad de Android presenta tres aspectos principales:

  • Permisos

  • Firmas de la aplicación

  • IDs de usuario de la aplicación

Permisos de Android

Muchas funciones de Android están protegidas por el mecanismo de permisos del sistema operativo. Para poder utilizar una función protegida, el descriptor de la aplicación de AIR debe declarar que la aplicación requiere el permiso necesario. Cuando un usuario intenta instalar la aplicación, el sistema operativo Android muestra todos los permisos solicitados al usuario antes de que continúe la instalación.

La mayor parte de las aplicaciones de AIR necesitarán especificar los permisos de Android en el descriptor de la aplicación. De forma predeterminada, no se incluye ningún permiso. Los siguientes permisos son necesarios para las funciones protegidas de Android expuestas mediante el motor de ejecución de AIR:

ACCESS_COARSE_LOCATION
Permite que la aplicación acceda a datos de ubicación de red WIFI y móvil a través de la clase Geolocation.

ACCESS_FINE_LOCATION
Permite que la aplicación acceda a datos GPS a través de la clase Geolocation.

ACCESS_NETWORK_STATE y ACCESS_WIFI_STATE
Permite que la aplicación acceda a la información de red a través de la clase NetworkInfo.

CAMERA
Permite que la aplicación acceda a la cámara.

INTERNET
Permite que la aplicación realice solicitudes de red y permite la depuración remota.

READ_PHONE_STATE
Permite que el motor de ejecución de AIR silencie el audio cuando se produzca una llamada entrante.

RECORD_AUDIO
Permite que la aplicación acceda al micrófono.

WAKE_LOCK y DISABLE_KEYGUARD
Permite que la aplicación impida que el dispositivo entre en reposo con la configuración de la clase SystemIdleMode.

WRITE_EXTERNAL_STORAGE
Permite que la aplicación escriba en la tarjeta de memoria externa del dispositivo.

Firmas de la aplicación

Todos los paquetes de la aplicación creados para la plataforma Android se deben firmar. Debido a que las aplicaciones de AIR en Android se empaquetan en el formato APK de Android nativo, se firman de acuerdo con las convenciones de Android en lugar de conforme a las convenciones de AIR. Aunque Android y AIR utilizan la firma de código de forma similar, existen diferencias importantes:

  • En Android, la firma verifica que la clave privada esté en posesión del desarrollador, pero no se utiliza para comprobar la identidad del mismo.

  • Para las aplicaciones enviadas al mercado de Android, el certificado debe ser válido durante 25 años como mínimo.

  • Android no admite la migración de la firma del paquete a otro certificado. Si una actualización se firma mediante un certificado diferente, el usuario debe desintalar la aplicación original antes de que pueda instalar la aplicación actualizada.

  • Dos aplicaciones firmadas con el mismo certificado pueden especificar un ID compartido que les permita acceder a los archivos de datos y a la caché entre sí. (Este uso compartido no lo facilita AIR. )

IDs de usuario de la aplicación

Android utiliza un núcleo Linux. A todas las aplicaciones instaladas se les asigna un ID de usuario de tipo Linux que determina sus permisos para las operaciones como el acceso a archivos. Los archivos de los directorios temporales, de almacenamiento de la aplicación y de la propia aplicación se protegen frente al acceso mediante los permisos del sistema de archivos. Los archivos escritos en el almacenamiento externo (es decir, la tarjeta SD) se pueden leer, modificar y eliminar por otras aplicaciones, o por el usuario, cuando la tarjeta SD se instala como dispositivo de almacenamiento masivo en un equipo.

Las cookies recibidas con solicitudes de Internet no se comparten entre aplicaciones de AIR.

Privacidad de la imagen de fondo

Cuando un usuario pone la aplicación en segundo plano, algunas versiones de Android hacen una captura de pantalla que utiliza una miniatura de la lista de aplicaciones recientes. Esta captura de pantalla se almacena en la memoria del dispositivo y a ella puede acceder un atacante con control físico del dispositivo.

Si la aplicación muestra información confidencial, estos datos se deben proteger para que no se capturen mediante la captura de pantalla de fondo. El evento deactivate distribuido mediante el objeto NativeApplication señala que una aplicación está a punto de cambiar a segundo plano. Utilice este evento para borrar u ocultar la información confidencial.

Datos cifrados en Android

Las aplicaciones de AIR en Android pueden utilizar las opciones de cifrado disponibles en la base de datos SQL incorporada para guardar datos cifrados. Para lograr la mejor seguridad, base la clave de cifrado en una contraseña introducida por el usuario que deba facilitarse cada vez que se ejecute la aplicación. Es muy difícil (casi imposible) “ocultar” una clave de cifrado o contraseña almacenada localmente para que ningún atacante pueda acceder a los archivos de la aplicación. Si el atacante puede recuperar la clave, el cifrado de los datos no garantizará protección adicional, más allá de la seguridad del sistema de archivos (basada en el ID de usuario) que proporciona el sistema Android.

La clase EncryptedLocalStore se puede utilizar para guardar datos, pero estos datos no estarán cifrados en dispositivos Android. En su lugar, el modelo de seguridad de Android se basa en el ID de usuario de la aplicación para proteger los datos de otras aplicaciones. Las aplicaciones que utilizan un ID de usuario compartido y que comparten el mismo certificador de firma del código, usan el mismo almacenamiento local de cifrado.

Importante: en un teléfono raíz, cualquier aplicación que se ejecute con privilegios de raíz puede acceder a los archivos de cualquier otra aplicación. Así, los datos guardados en el almacenamiento local de cifrado no están seguros en un dispositivo raíz.