En el nivel del sistema operativo, la plataforma de Android proporciona la seguridad del kernel de Linux, así como una instalación segura de comunicación entre procesos (IPC) para permitir una comunicación segura entre las apps que se ejecutan en diferentes procesos. Estas funciones de seguridad a nivel del SO garantizan que incluso el código nativo esté limitado por la zona de pruebas de aplicaciones. Ya sea que el código sea el resultado de un comportamiento de app incluido o del aprovechamiento de una vulnerabilidad de la app, el sistema está diseñado para evitar que una app no autorizado dañe a otras apps, al sistema Android o al propio dispositivo. Consulta Configuración del kernel para conocer las medidas que puedes tomar para fortalecer el kernel en tus dispositivos. Consulta el Documento de definición de compatibilidad de Android (CDD) para conocer la configuración requerida.
Seguridad de Linux
La base de la plataforma de Android es el kernel de Linux. El kernel de Linux se usa ampliamente desde hace años y se usa en millones de entornos sensibles a la seguridad. Debido a que miles de desarrolladores lo investigan, atacan y corrigen constantemente, Linux se convirtió en un kernel estable y seguro en el que confían muchas corporaciones y profesionales de la seguridad.
Como base de un entorno de computación móvil, el kernel de Linux proporciona a Android varias funciones de seguridad clave, como las siguientes:
- Un modelo de permisos basado en el usuario
- Aislamiento de procesos
- Mecanismo extensible para IPC seguro
- La capacidad de quitar partes innecesarias y potencialmente inseguras del kernel
Como sistema operativo multiusuario, un objetivo de seguridad fundamental del kernel de Linux es aislar los recursos del usuario entre sí. La filosofía de seguridad de Linux es proteger los recursos de los usuarios entre sí. Linux hace lo siguiente:
- Impide 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 la CPU del usuario B.
- Garantiza que el usuario A no agote los dispositivos del usuario B (por ejemplo, la telefonía, el GPS y el Bluetooth).
Zona de pruebas para aplicaciones
La zona de pruebas de aplicaciones aplica la seguridad de las apps de Android, que aísla las apps entre sí y protege las apps y el sistema de apps maliciosas. Para obtener más detalles, consulta Zona de pruebas de aplicaciones.
Partición del sistema y modo seguro
Las diferentes particiones protegidas por integridad contienen el kernel de Android, así como las bibliotecas del sistema operativo, el entorno de ejecución de la app, el framework de la app y las apps. Esta partición se establece como de solo lectura. Cuando un usuario inicia el dispositivo en modo seguro, el propietario del dispositivo puede iniciar apps de terceros de forma manual, pero no se inician de forma predeterminada.
Permisos del sistema de archivos
En un entorno de 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 app se ejecuta como su propio usuario. A menos que el desarrollador comparta archivos con otras apps de forma explícita, una app no puede leer ni alterar los archivos que crea una app.
Security-Enhanced Linux
Android usa Security-Enhanced Linux (SELinux) para aplicar políticas de control de acceso y establecer un control de acceso obligatorio (MAC) en los procesos. Consulta Linux con seguridad mejorada en Android para obtener más información.
Inicio verificado
Android 7.0 y versiones posteriores admiten el inicio verificado de aplicación forzosa, lo que significa que los dispositivos comprometidos no pueden iniciarse. El inicio verificado garantiza la integridad del software del dispositivo, desde una raíz de confianza de hardware hasta la partición del sistema. Durante el inicio, cada etapa verifica de manera criptográfica la integridad y la autenticidad de la siguiente antes de ejecutarla.
Consulta Inicio verificado para obtener más detalles.
Criptografía
Android proporciona un conjunto de APIs de criptografía para que las usen las apps. Estos incluyen implementaciones de primitivas criptográficas estándar y de uso general, como AES, RSA, DSA y SHA. Además, se proporcionan API para protocolos de nivel superior, como SSL y HTTPS.
Android 4.0 presentó la clase KeyChain para permitir que las apps usen el almacenamiento de credenciales del sistema para cadenas de certificados y claves privadas.
Permisos de administrador del dispositivo
De forma predeterminada, en Android, solo el kernel y un pequeño subconjunto de los servicios principales se ejecutan con permisos de raíz. SELinux aún restringe los procesos del espacio de usuario que se ejecutan como raíz. El inicio verificado evita que un usuario o servicio con permisos de administrador modifique el sistema operativo de forma permanente.
La capacidad de modificar un dispositivo Android que poseen es importante para los desarrolladores que trabajan con la plataforma de Android. En muchos dispositivos Android, los usuarios tienen la capacidad de desbloquear el bootloader para permitir la instalación de un sistema operativo alternativo. Estos sistemas operativos alternativos pueden permitir que un propietario obtenga acceso de raíz para depurar apps y componentes del sistema, o bien para acceder a funciones que las APIs de Android no presentan a las apps.
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 administrador al usuario. Para proteger los datos del usuario existentes de la vulneración, el mecanismo de desbloqueo del bootloader requiere que el bootloader borre los datos del usuario existentes como parte del paso de desbloqueo. El acceso raíz obtenido a través de la explotación de un error del kernel o un error de seguridad puede omitir esta protección.
Encriptar los datos con una clave almacenada en el dispositivo no protege los datos de la app de los usuarios con permisos de administrador en dispositivos con permisos de administrador. Las apps pueden agregar una capa de protección de datos mediante encriptación con una clave almacenada fuera del dispositivo, como en un servidor o una contraseña del usuario. Este enfoque puede proporcionar protección temporal mientras la clave no está presente, pero, en algún momento, se debe proporcionar a la app y, luego, los usuarios raíz pueden acceder a ella.
Un enfoque más sólido para proteger los datos de los usuarios raíz es a través del uso de soluciones de hardware. Los OEMs pueden implementar soluciones de hardware que limiten el acceso a tipos específicos de contenido, como la DRM para la reproducción de video o el almacenamiento de confianza relacionado con NFC para la Billetera de Google. En el caso de un dispositivo perdido o robado, la encriptación del 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
Encriptación de almacenamiento
El CDD requiere que todos los dispositivos que se lanzan con Android 10 o versiones posteriores, y la mayoría de los dispositivos que se lanzan con Android 6.0 o versiones posteriores, habiliten la encriptación de almacenamiento lista para usar.
La implementación actual de Android de la encriptación de almacenamiento es la encriptación basada en archivos en combinación con la encriptación de metadatos. La encriptación basada en archivos encripta de forma transparente el contenido y los nombres de los archivos en la partición de datos del usuario, con claves diferentes para diferentes directorios. Proporciona directorios de almacenamiento encriptados por credenciales y por dispositivo para cada usuario, incluidos los perfiles de trabajo.
La encriptación de metadatos complementa la encriptación basada en archivos. Encripta todos los bloques de la partición de datos del usuario que aún no están encriptados por la encriptación basada en archivos con 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 inicio verificado.
Protección de credenciales de la 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 encriptados con credenciales. Un administrador de dispositivos puede exigir el uso de una credencial de bloqueo de pantalla o reglas de complejidad de credenciales.
Administración del dispositivo
Android 2.2 y versiones posteriores proporcionan la API de administración de dispositivos Android, que brinda funciones de administración de dispositivos a nivel del sistema. Por ejemplo, la app de correo electrónico para Android integrada usa las APIs para mejorar la compatibilidad con Exchange. A través de la app 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 limpiar de manera remota (es decir, restablecer la configuración predeterminada de fábrica) los teléfonos perdidos o robados.
Estas APIs se pueden usar en apps incluidas con el sistema Android, pero están disponibles para proveedores externos de soluciones de administración de dispositivos. Los detalles de la API se proporcionan en Administración de dispositivos.