Una característica de Android no documentada permite que cualquier aplicación arbitraria obtenga acceso raíz en un entorno SELinux permisivo. ¡Siga leyendo para saber más!
En el mundo de la modificación de Android, la gente tiende a considerar el acceso de root como la piedra angular de todo. Permite a los usuarios tomar un control total de sus dispositivos y agregar funciones que no siempre están disponibles en la configuración original. Pero como dicen, "un gran poder conlleva una gran responsabilidad", no es prudente pasar por alto el modelo de seguridad de Android a menos que sepas en lo que te estás metiendo. Los entusiastas veteranos de Android en nuestros foros probablemente conozcan la posibilidad de que existan puertas traseras en su dispositivo, y es más probable que esté ejecutando un mod confiable habilitado para root además de la última versión de Android con la última versión de seguridad parches. Dicho esto, es posible que conozcas a algunas personas a las que realmente no les importa qué ajustes de raíz instalan, siempre y cuando aparentemente funcionen para ellos. Es por eso que todavía puedes encontrar una gran cantidad de modificaciones que solo funcionan cuando SELinux está configurado en permisivo, lo que, a su vez, deja a sus usuarios extremadamente susceptibles a las amenazas a la seguridad.
¿Qué es SELinux?
SELinux, o Linux con seguridad mejorada, es un módulo de seguridad del kernel de Linux diseñado específicamente para el acceso y la gestión de políticas de seguridad. Introducido originalmente en Android 4.3 Jelly Bean y configurado en su modo Enforcing de forma predeterminada desde Android 4.4 KitKat, SELinux ayuda a hacer cumplir los derechos de control de acceso e intenta evitar la escalada de privilegios ataques. En pocas palabras, SELinux actúa como un obstáculo para el control no autorizado de su dispositivo, como una aplicación o una vulnerabilidad que apunta a obtener acceso raíz de manera maliciosa. Configurar SELinux en "Aplicar" de forma predeterminada es una de las formas clave en que los usuarios normales están protegidos contra tales ataques.
Por qué no se recomienda SELinux permisivo
Para reiterar, la forma típica de lograr acceso root en un dispositivo Android no necesariamente requiere cambiar el estado de SELinux. Cambiar el modo SELinux de "Aplicar" a "Permisivo" es deshabilitar intencionalmente una de las funciones de seguridad clave en el dispositivo, razón por la cual el usuario debe permitir explícitamente que esto suceda instalando un kernel personalizado especializado o modificando los parámetros de la imagen de arranque existente. Un mod mal codificado que carece de una política SELinux adecuada generalmente obliga a los usuarios finales a cambiar a SELinux permisivo y esencialmente expande la superficie de ataque. Eso es exactamente lo que el desarrollador vvb2060 demostrado cuando ellos publicó una prueba de concepto del método de escalada de privilegios donde el único requisito para obtener el control es SELinux permisivo.
Entra Mágica
Que un usuario obtenga acceso completo a la raíz en su propio dispositivo con Android 10 (o superior) con SELinux configurado en permisivo es sorprendentemente fácil. hacer: Todo lo que tiene que hacer es presionar instalar, y "Magica" obtendrá automáticamente acceso de root en un servicio e instalará Magisk en el arranque. imagen. Esto es algo mucho más amplio que simplemente modificar su dispositivo. Según el desarrollador senior reconocido de XDA y mantenedor de Magisk topjohnwu, cualquier aplicación arbitraria, incluido el malware, puede rootear permanentemente su dispositivo sin su consentimiento y permiso utilizando el PoC.
Si te preguntas a nivel técnico qué está explotando Magica, topjohnwu explicó lo siguiente en una publicación de Reddit:
"Cuando SELinux es permisivo durante el arranque, zygote lo sabrá y deshabilitará los filtros de llamada al sistema seccomp. Básicamente, esto no restringe las llamadas al sistema que se permiten en procesos de terceros.
En Android 10+, hay una nueva característica "indocumentada" llamada "App Zygote" donde las aplicaciones de terceros pueden generar su propio Zygote para "Servicios aislados" (también casi indocumentado). Tanto "App Zygote" como "Servicios aislados" son funciones especiales diseñadas para Chrome/Webview*. Los procesos de App Zygote se ejecutan con permisos especiales y, con seccomp deshabilitado, puede llamar a setuid 0 y escalar sus privilegios y obtener acceso de root.
Sigue siendo algo restrictivo en comparación con lo que proporcionan las soluciones raíz normales (por ejemplo, Magisk); sin embargo, toneladas de medidas de seguridad en Android serán completamente anuladas cuando UID=0. Por ejemplo, es suficiente para parchear imágenes de arranque, lo que significa que puede usarse para inyectar malware como Magisk modificado para ayudarlo a obtener permisos de root "reales".
Actualización: ¿qué puede hacer el propio UID=0? Dentro del marco de Android, casi todos los servicios tienen luz verde ciega cuando el UID del proceso solicitante es 0. Esto significa que este proceso raíz es capaz de manipular toneladas de cosas usando API específicas de Android (por ejemplo, ActivityManager)".
*Según desarrollador aviraxp, estas dos características están diseñadas de manera más general "para compartir recursos y memoria entre múltiples procesos aislados".
Conclusión
Teniendo en cuenta el daño irreparable que se puede infligir a los usuarios atacados por malware en un entorno SELinux permisivo, sugerimos encarecidamente que todos sigan aplicándolo a menos que sea absolutamente necesario. Si bien tenemos suerte de tener una prueba de concepto de exploit, no tenemos idea de cuántos autores de malware ya conocen esta ruta de ataque. Después de todo, una víctima seguirá siendo ajena al estado comprometido de su dispositivo si no lo hizo. Sea testigo del uso activo del exploit, lo cual no es difícil de lograr para una aplicación fraudulenta que tiene raíz persistente. acceso.