A nivel del sistema operativo, la plataforma Android proporciona la seguridad del kernel de Linux, así como una función de comunicación entre procesos (IPC) segura para permitir la comunicación segura entre aplicaciones que se ejecutan en diferentes procesos. Estas funciones de seguridad a nivel del sistema operativo garantizan que incluso el código nativo esté restringido por el Sandbox de la aplicación. Ya sea que ese código sea el resultado del comportamiento de la aplicación incluida o la explotación de una vulnerabilidad de la aplicación, el sistema está diseñado para evitar que la aplicación no autorizada dañe a otras aplicaciones, al sistema Android o al propio dispositivo. Consulte Configuración del kernel para conocer las medidas que puede tomar para fortalecer el kernel en sus dispositivos. Consulte el Documento de definición de compatibilidad de Android (CDD) para conocer la configuración requerida.
Seguridad Linux
La base de la plataforma Android es el kernel de Linux. El kernel de Linux ha tenido un uso generalizado durante años y se utiliza en millones de entornos sensibles a la seguridad. A través de su historial de investigación, ataques y reparaciones constantes por parte de miles de desarrolladores, Linux se ha convertido en un kernel estable y seguro en el que confían muchas corporaciones y profesionales de la seguridad.
Como base para un entorno informático móvil, el kernel de Linux proporciona a Android varias funciones de seguridad clave, entre ellas:
- Un modelo de permisos basado en el usuario
- Aislamiento de procesos
- Mecanismo extensible para IPC segura
- La capacidad de eliminar partes innecesarias y potencialmente inseguras del kernel
Como sistema operativo multiusuario, un objetivo de seguridad fundamental del kernel de Linux es aislar los recursos de los usuarios entre sí. La filosofía de seguridad de Linux es proteger los recursos de los usuarios entre sí. Así, Linux:
- Impide que el usuario A lea los archivos del usuario B
- Asegura que el usuario A no agote la memoria del usuario B
- Garantiza que el usuario A no agote los recursos de la CPU del usuario B
- Garantiza que el usuario A no agote los dispositivos del usuario B (por ejemplo, telefonía, GPS y Bluetooth)
La zona de pruebas de la aplicación
La seguridad de las aplicaciones de Android se aplica mediante la zona de pruebas de la aplicación, que aísla las aplicaciones entre sí y protege las aplicaciones y el sistema de las aplicaciones maliciosas. Para obtener más detalles, consulte Sandbox de la aplicación .
Partición del sistema y modo seguro
La partición del sistema contiene el kernel de Android, así como las bibliotecas del sistema operativo, el tiempo de ejecución de la aplicación, el marco de la aplicación y las aplicaciones. Esta partición está configurada como de solo lectura. Cuando un usuario inicia el dispositivo en modo seguro, el propietario del dispositivo puede iniciar manualmente aplicaciones de terceros, pero no se inician de forma predeterminada.
Permisos del sistema de archivos
En un entorno de estilo UNIX, los permisos del sistema de archivos aseguran que un usuario no pueda alterar o leer los archivos de otro usuario. En el caso de Android, cada aplicación se ejecuta como su propio usuario. A menos que el desarrollador comparta archivos explícitamente con otras aplicaciones, los archivos creados por una aplicación no pueden ser leídos ni modificados por otra aplicación.
Linux con seguridad mejorada
Android utiliza Linux con seguridad mejorada (SELinux) para aplicar políticas de control de acceso y establecer un control de acceso obligatorio (mac) en los procesos. Consulte Linux con seguridad mejorada en Android para obtener más información.
Arranque verificado
Android 6.0 y versiones posteriores admiten el arranque verificado y device-mapper-verity. El arranque verificado garantiza la integridad del software del dispositivo desde una raíz de confianza de hardware hasta la partición del sistema. Durante el arranque, cada etapa verifica criptográficamente la integridad y autenticidad de la siguiente etapa antes de ejecutarla.
Android 7.0 y versiones posteriores admiten un arranque verificado estrictamente aplicado, lo que significa que los dispositivos comprometidos no pueden arrancar.
Consulte Arranque verificado para obtener más detalles.
Criptografía
Android proporciona un conjunto de API criptográficas para que las utilicen las aplicaciones. Estos incluyen implementaciones de primitivas criptográficas estándar y de uso común, como AES, RSA, DSA y SHA. Además, se proporcionan API para protocolos de nivel superior, como SSL y HTTPS.
Android 4.0 introdujo la clase KeyChain para permitir que las aplicaciones usen el almacenamiento de credenciales del sistema para claves privadas y cadenas de certificados.
Rooteo de Dispositivos
De forma predeterminada, en Android solo el kernel y un pequeño subconjunto de las aplicaciones principales se ejecutan con permisos de root. Android no impide que un usuario o aplicación con permisos de raíz modifique el sistema operativo, el kernel o cualquier otra aplicación. En general, la raíz tiene acceso completo a todas las aplicaciones y todos los datos de la aplicación. Los usuarios que cambian los permisos en un dispositivo Android para otorgar acceso raíz a las aplicaciones aumentan la exposición de seguridad a aplicaciones maliciosas y posibles fallas en las aplicaciones.
La capacidad de modificar un dispositivo Android de su propiedad es importante para los desarrolladores que trabajan con la plataforma Android. En muchos dispositivos Android, los usuarios tienen la capacidad de desbloquear el gestor de arranque para permitir la instalación de un sistema operativo alternativo. Estos sistemas operativos alternativos pueden permitir que un propietario obtenga acceso raíz con el fin de depurar aplicaciones y componentes del sistema o acceder a funciones que las API de Android no presentan a las aplicaciones.
En algunos dispositivos, una persona con control físico de un dispositivo y un cable USB puede instalar un nuevo sistema operativo que proporciona privilegios de root al usuario. Para proteger cualquier dato de usuario existente contra el compromiso, el mecanismo de desbloqueo del cargador de arranque requiere que el cargador de arranque borre cualquier dato de usuario existente como parte del paso de desbloqueo. El acceso a la raíz obtenido mediante la explotación de un error del kernel o un agujero de seguridad puede eludir esta protección.
El cifrado de datos con una clave almacenada en el dispositivo no protege los datos de la aplicación de los usuarios raíz. Las aplicaciones pueden agregar una capa de protección de datos mediante el cifrado con una clave almacenada fuera del dispositivo, como en un servidor o una contraseña de usuario. Este enfoque puede brindar protección temporal mientras la clave no está presente, pero en algún momento se debe proporcionar la clave a la aplicación y luego se vuelve accesible para los usuarios raíz.
Un enfoque más sólido para proteger los datos de los usuarios raíz es mediante el uso de soluciones de hardware. Los OEM pueden optar por implementar soluciones de hardware que limiten el acceso a tipos específicos de contenido, como DRM para la reproducción de video o el almacenamiento confiable relacionado con NFC para la billetera de Google.
En el caso de un dispositivo perdido o robado, el cifrado completo del sistema de archivos en los dispositivos Android utiliza la contraseña del dispositivo para proteger la clave de cifrado, por lo que modificar el gestor de arranque o el sistema operativo no es suficiente para acceder a los datos del usuario sin la contraseña del dispositivo del usuario.
Funciones de seguridad del usuario
Cifrado del sistema de archivos
Android 3.0 y versiones posteriores proporcionan cifrado completo del sistema de archivos, por lo que todos los datos del usuario se pueden cifrar en el kernel.
Android 5.0 y versiones posteriores admiten el cifrado de disco completo . El cifrado de disco completo utiliza una única clave, protegida con la contraseña del dispositivo del usuario, para proteger la totalidad de la partición de datos de usuario de un dispositivo. Al arrancar, los usuarios deben proporcionar sus credenciales antes de que se pueda acceder a cualquier parte del disco.
Android 7.0 y versiones posteriores admiten el cifrado basado en archivos . El cifrado basado en archivos permite cifrar diferentes archivos con diferentes claves que se pueden desbloquear de forma independiente.
Más detalles sobre la implementación del cifrado del sistema de archivos están disponibles en la sección Cifrado .
Protección de contraseña
Android se puede configurar para verificar una contraseña proporcionada por el usuario antes de proporcionar acceso a un dispositivo. Además de evitar el uso no autorizado del dispositivo, esta contraseña protege la clave criptográfica para el cifrado completo del sistema de archivos.
El administrador del dispositivo puede requerir el uso de una contraseña y/o reglas de complejidad de contraseña.
Administración de dispositivos
Android 2.2 y versiones posteriores proporcionan la API de administración de dispositivos Android, que proporciona funciones de administración de dispositivos a nivel del sistema. Por ejemplo, la aplicación de correo electrónico integrada de Android utiliza las API para mejorar la compatibilidad con Exchange. A través de la aplicación de correo electrónico, los administradores de Exchange pueden aplicar políticas de contraseñas, incluidas contraseñas alfanuméricas o PIN numéricos, en todos los dispositivos. Los administradores también pueden borrar de forma remota (es decir, restaurar los valores predeterminados de fábrica) los teléfonos perdidos o robados.
Además del uso en aplicaciones incluidas con el sistema Android, estas API están disponibles para proveedores externos de soluciones de administración de dispositivos. Los detalles sobre la API se proporcionan en Administración de dispositivos .