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í, 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
Las diversas particiones protegidas por integridad contienen 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 7.0 y versiones posteriores admiten un arranque verificado estrictamente aplicado, lo que significa que los dispositivos comprometidos no pueden arrancar. 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.
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 los servicios principales se ejecutan con permisos de root. SELinux aún restringe los procesos de espacio de usuario que se ejecutan como root. El arranque verificado evita que un usuario o servicio con permisos de raíz modifique permanentemente el sistema operativo.
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 root en los dispositivos rooteados. 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 de almacenamiento garantiza que no se pueda acceder a los datos del usuario sin conocer la credencial de la pantalla de bloqueo del usuario.
Funciones de seguridad del usuario
Cifrado de almacenamiento
El CDD requiere que todos los dispositivos que se inicien con Android 10 o superior, y la mayoría de los dispositivos que se inicien con Android 6.0 o superior, habiliten el cifrado de almacenamiento de forma inmediata.
La implementación actual de cifrado de almacenamiento de Android es el cifrado basado en archivos en combinación con el cifrado de metadatos . El cifrado basado en archivos cifra de forma transparente el contenido y los nombres de los archivos en la partición de datos de usuario, utilizando diferentes claves para diferentes directorios. Proporciona directorios de almacenamiento con cifrado de credenciales y dispositivo cifrado para cada usuario, incluidos los perfiles de trabajo.
El cifrado de metadatos complementa el cifrado basado en archivos. Cifra todos los bloques en la partición de datos del usuario que aún no están cifrados mediante el cifrado basado en archivos, utilizando una clave que no está vinculada a la credencial de la pantalla de bloqueo de ningún usuario pero que aún está protegida por el Arranque verificado.
Protección de credenciales de pantalla de bloqueo
Android se puede configurar para verificar una credencial de pantalla de bloqueo proporcionada por el usuario (PIN, contraseña o patrón) antes de proporcionar acceso a un dispositivo. Además de evitar el uso no autorizado del dispositivo, la credencial de la pantalla de bloqueo protege la clave criptográfica de los datos cifrados con la credencial. El administrador del dispositivo puede requerir el uso de una credencial de pantalla de bloqueo y/o reglas de complejidad de credenciales.
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 credenciales de pantalla de bloqueo, 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 .