Linux con seguridad mejorada en Android,Linux con seguridad mejorada en Android

Como parte del modelo de seguridad de Android, Android utiliza Linux con seguridad mejorada (SELinux) para imponer el control de acceso obligatorio (MAC) sobre todos los procesos, incluso 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 en 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: todo lo que no esté permitido explícitamente se niega. SELinux puede operar en dos modos globales:

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

Android incluye SELinux en modo obligatorio y una política de seguridad correspondiente que funciona de forma predeterminada en AOSP. En el modo de cumplimiento, 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 perfeccionar 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 mantiene el resto del sistema en vigor).

Fondo

El modelo de seguridad de Android se basa en parte en el concepto de entornos limitados de aplicaciones . Cada aplicación se ejecuta en su propia zona de pruebas. 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 utilizan SELinux para definir aún más los límites del entorno limitado de aplicaciones de Android.

En Android 5.0 y posteriores, 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, Android pasó de aplicar la aplicación en un conjunto limitado de dominios cruciales ( installd , netd , vold y zygote ) a todo (más de 60 dominios). Específicamente:

  • Todo está en modo obligatorio en Android 5.x y superior.
  • Ningún proceso distinto de init debe ejecutarse en el dominio init .
  • Cualquier denegación genérica (para 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 restricción de los dominios SELinux y acceso /proc extremadamente limitado.

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 del servidor de medios monolítico en procesos más pequeños para reducir el alcance de sus permisos. Para obtener más detalles, consulte Proteger Android con más defensas del kernel de Linux y Reforzar la pila de medios .

Android 8.0 actualizó SELinux para que funcione 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 proveedores de SOC actualicen sus partes de la política, creen 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 (framework) superior o más nueva ejecutándose en el dispositivo, el caso opuesto no es compatible; 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 más nueva de la plataforma podría presentar problemas de compatibilidad con SELinux porque la política de la plataforma SELinux tiene una versión más nueva que las partes de la política del proveedor SELinux. El modelo Android 8.0 proporciona un método para conservar la compatibilidad y evitar OTA simultáneas innecesarias.

Recursos adicionales

Para obtener ayuda para construir políticas SELinux útiles, consulte los siguientes recursos.