Google is committed to advancing racial equity for Black communities. See how.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Linux con seguridad mejorada en Android

Como parte del modelo de seguridad de Android, Android utiliza Security-Enhanced Linux (SELinux) para imponer el control de acceso obligatorio (MAC) en todos los procesos, incluso en los procesos que se ejecutan con privilegios de root / superusuario (capacidades de Linux). Muchas empresas y organizaciones han contribuido a la implementación de SELinux de Android. Con SELinux, Android puede proteger y limitar mejor los servicios del sistema, controlar el acceso a los datos de las aplicaciones y los registros del sistema, reducir los efectos del software malicioso y proteger a los usuarios de posibles fallas en el código de los dispositivos móviles.

SELinux opera según el principio de denegación predeterminada: se niega todo lo que no esté permitido explícitamente. SELinux puede operar en dos modos globales:

  • Modo permisivo , en el que las denegaciones de permisos se registran pero no se aplican.
  • Modo de ejecución , en el que las denegaciones de permisos se registran y se hacen cumplir.

Android incluye SELinux en modo de aplicación y una política de seguridad correspondiente que funciona de forma predeterminada en AOSP. En el modo de ejecución, se evitan las acciones no permitidas y el kernel registra todos los intentos de infracción en dmesg y logcat . Al desarrollar, debe utilizar estos errores para refinar su software y las políticas de SELinux antes de aplicarlas. Para obtener más detalles, consulte Implementación de SELinux .

SELinux también admite un modo permisivo por dominio en el que dominios (procesos) específicos pueden volverse permisivos mientras se coloca el resto del sistema en modo de aplicación global. Un dominio es simplemente una etiqueta que identifica un proceso o conjunto de procesos en la política de seguridad, donde todos los procesos etiquetados con el mismo dominio son tratados de manera idéntica por la política de seguridad. El modo permisivo por dominio permite la aplicación incremental de SELinux a una porción cada vez mayor del sistema y el desarrollo de políticas para nuevos servicios (mientras se mantiene el cumplimiento del resto del sistema).

Antecedentes

El modelo de seguridad de Android se basa en parte en el concepto de entornos de prueba de aplicaciones . Cada aplicación se ejecuta en su propia caja de arena. Antes de Android 4.3, estos entornos sandbox se definían mediante la creación de un UID de Linux único para cada aplicación en el momento de la instalación. Android 4.3 y versiones posteriores usan SELinux para definir aún más los límites del entorno limitado de aplicaciones de Android.

En Android 5.0 y posterior, SELinux se aplica por completo, basándose en la versión permisiva de Android 4.3 y la aplicación parcial de Android 4.4. Con este cambio, se desplazó de la aplicación Android en un conjunto limitado de dominios cruciales ( installd , netd , vold y zygote ) de todo (más de 60 dominios). Específicamente:

  • Todo está en modo de ejecución en Android 5.xy versiones posteriores.
  • Ningún otro proceso que no sea init debe ejecutarse en el dominio init .
  • Cualquier denegación genérica (para un block_device , socket_device , default_service ) indica que el dispositivo necesita un dominio especial.

Android 6.0 fortaleció el sistema al reducir la permisividad de nuestra política para incluir un mejor aislamiento entre usuarios, filtrado IOCTL, menor amenaza de servicios expuestos, mayor endurecimiento de los dominios SELinux y acceso extremadamente limitado /proc .

Android 7.0 actualizó la configuración de SELinux para bloquear aún más la zona de pruebas de la aplicación y reducir la superficie de ataque. Esta versión también dividió la pila monolítica de servidores de medios en procesos más pequeños para reducir el alcance de sus permisos. Para obtener más detalles, consulte Protección de Android con más defensas del kernel de Linux y Fortalecimiento de la pila de medios .

Android 8.0 actualizó SELinux para funcionar con Treble , que separa el código del proveedor de nivel inferior del marco del sistema Android. Esta versión actualizó la política de SELinux para permitir que los fabricantes de dispositivos y los proveedores de SOC actualicen sus partes de la política, vendor.img sus imágenes ( vendor.img , boot.img , etc.) y luego actualicen esas imágenes independientemente de la plataforma o viceversa.

Si bien es posible tener una versión de plataforma (marco) superior / más nueva ejecutándose en el dispositivo, no se admite el caso contrario; las imágenes del proveedor ( vendor.img/odm.img ) no pueden tener una versión más reciente que la plataforma ( system.img ). Por lo tanto, una versión de plataforma más nueva podría presentar problemas de compatibilidad con SELinux porque la política de SELinux de la plataforma tiene una versión más reciente que las partes de la política de SELinux del proveedor. El modelo Android 8.0 proporciona un método para mantener la compatibilidad y evitar OTA simultáneas innecesarias.

Recursos adicionales

Para obtener ayuda sobre la construcción de políticas SELinux útiles, consulte los siguientes recursos: