A nivel del sistema operativo, la plataforma Android proporciona la seguridad del kernel de Linux, así como una función de comunicación segura entre procesos (IPC) para permitir una comunicación segura entre aplicaciones que se ejecutan en diferentes procesos. Estas características de seguridad a nivel del sistema operativo garantizan que incluso el código nativo esté restringido por Application Sandbox. 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 maliciosa dañe otras aplicaciones, el sistema Android o el dispositivo mismo. 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 las configuraciones requeridas.
Seguridad Linux
La base de la plataforma Android es el kernel de Linux. El kernel de Linux se ha utilizado ampliamente durante años y se utiliza en millones de entornos sensibles a la seguridad. A través de su historia de constante investigación, ataque y reparación por parte de miles de desarrolladores, Linux se ha convertido en un núcleo 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 características de seguridad clave, que incluyen:
- Un modelo de permisos basado en el usuario
- Aislamiento de procesos
- Mecanismo extensible para una 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:
- Evita que el usuario A lea los archivos del usuario B
- Garantiza que el usuario A no agote la memoria del usuario B
- Garantiza que el usuario A no agote los recursos de 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 aplicaciones
La seguridad de las aplicaciones de Android se aplica mediante el entorno de pruebas de aplicaciones, que aísla las aplicaciones entre sí y las protege y el sistema de aplicaciones maliciosas. Para obtener más detalles, consulte Aplicación Sandbox .
Partición del sistema y modo seguro
Las diversas particiones protegidas de 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 estilo UNIX, los permisos del sistema de archivos garantizan que un usuario no pueda alterar ni 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, otra aplicación no puede leer ni modificar los archivos creados por una aplicación.
Linux con seguridad mejorada
Android utiliza Security-Enhanced Linux (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 detalles.
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 del 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 utilicen el almacenamiento de credenciales del sistema para claves privadas y cadenas de certificados.
Rooteo de dispositivos
De forma predeterminada, en Android sólo el kernel y un pequeño subconjunto de los servicios principales se ejecutan con permisos de root. SELinux todavía restringe los procesos de espacio de usuario que se ejecutan como root. El arranque verificado evita que un usuario o servicio con permisos de root 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 posibilidad 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 para 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 riesgos, el mecanismo de desbloqueo del gestor de arranque requiere que el gestor de arranque borre todos los datos de usuario existentes como parte del paso de desbloqueo. El acceso raíz obtenido mediante la explotación de un error del kernel o un agujero de seguridad puede evitar esta protección.
Cifrar datos con una clave almacenada en el dispositivo no protege los datos de la aplicación de los usuarios root en dispositivos rooteados. Las aplicaciones pueden agregar una capa de protección de datos mediante cifrado con una clave almacenada fuera del dispositivo, como en un servidor o una contraseña de usuario. Este enfoque puede proporcionar protección temporal mientras la clave no esté presente, pero en algún momento la clave se debe proporcionar a la aplicación y luego será accesible para los usuarios raíz.
Un enfoque más sólido para proteger los datos de los usuarios root 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 reproducción de video o almacenamiento confiable relacionado con NFC para Google Wallet. 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 inician con Android 10 o superior, y la mayoría de los dispositivos que se inician con Android 6.0 o superior, habiliten el cifrado de almacenamiento de fábrica.
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 del usuario, utilizando diferentes claves para diferentes directorios. Proporciona directorios de almacenamiento cifrados con credenciales y dispositivos 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 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 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 para los datos cifrados con credenciales. El administrador del dispositivo puede exigir 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 remotamente (es decir, restablecer los valores predeterminados de fábrica) los teléfonos perdidos o robados.
Además de su 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 .