SuperSU BETA: Root Android Lollipop en Stock Kernel

Hasta ahora, si deseaba obtener root en Android 5.0, necesitaba actualizar un kernel modificado en su dispositivo para evitar algunas restricciones de SELinux. El desarrollador reconocido Senior Chainfire lanzó recientemente el paquete CF-Auto-Root previamente necesario, que realizó las modificaciones necesarias de ramdisk del núcleo para eliminar la restricción SELinux del script install-recovery.sh en AOSP. Esta mañana, sin embargo, Chainfire trajo sonrisas a muchas caras, ya que anunció en Twitter que esto ya no sería necesario en el futuro.

Hasta hoy, Chainfire había planeado lanzar una herramienta de parcheo automática basada en ZIP, para parchear automáticamente las imágenes del kernel desde la recuperación TWRP, hasta que encontró un método adecuado para eliminar la necesidad de esto.

Esta revelación significa que los usuarios de Android 5.0 ya no necesitan ejecutar un kernel modificado para obtener acceso a la raíz a través de SuperSU (u otras soluciones de raíz). Si bien no es un gran problema en los dispositivos Nexus con cargadores de arranque desbloqueables, la necesidad de modificaciones de ramdisk era preocupante para muchos usuarios de dispositivos bloqueados con cargador de arranque para los que no hay desbloqueo disponible (sí, desafortunadamente existen). La respuesta a sus oraciones ya está aquí, y podemos presentar una explicación exclusiva de los cambios necesarios. Al menos por ahora (hasta / a menos que Google parche esto), es posible obtener acceso de root y luego instalar y usar SuperSU en un dispositivo Android 5.0 de serie, sin ningún ajuste de ramdisk del núcleo. La razón de esto es la necesidad de que SuperSU ejecute un servicio como root, para permitir el acceso root sin restricciones en dispositivos protegidos con SELinux.

Anteriormente, SuperSU aprovechaba el servicio flash_recovery de AOSP preinstalado (utilizado en AOSP para actualizar la recuperación después de una instalación OTA) para iniciar el demonio SuperSU (que en realidad proporciona los privilegios de root para las aplicaciones que lo solicitan). Con el lanzamiento de Lollipop, este servicio se ha agregado a un contexto SELinux restringido, lo que significa que ya no tiene acceso sin adulterar al sistema. Las modificaciones previas del kernel buscaban eliminar las restricciones SELinux de este script.

La última versión beta de Chainfire de SuperSU resuelve esto mediante el uso del servicio principal 'Zygote' (responsable del lanzamiento de todos los servicios de Java y, por lo tanto, de todas las aplicaciones instaladas en un dispositivo). Dado que Zygote es uno de los únicos servicios disponibles en Android L, que se inicia como raíz dentro del contexto SELinux "init" sin restricciones, esto lo convierte en un objetivo principal para su uso en la operación de SuperSU. Después del arranque, el servicio Zygote tiene su contexto SELinux "init" en transición a su contexto final (restringido) "Zygote". Chainfire ha logrado modificar con éxito los archivos Zygote, con el fin de ejecutar el código como usuario root, dentro del contexto "init" sin restricciones, lo que hace que SuperSU vuelva a Android L, sin modificaciones del kernel.

Esta no es la primera vez que Chainfire recurre a Zygote para resolver estos problemas; la versión 2.23 beta anterior usaba Zygote como un medio para evitar otros problemas de SELinux (que causaban que las aplicaciones raíz se rompieran en Android L). Esto permitió que algunas (pero no todas) las aplicaciones que no funcionaban funcionaran; el resto requiere algunas actualizaciones por parte de sus desarrolladores. Desafortunadamente, cuando se consultó el código 5.0 AOSP, se supo que Google ya había roto este método de hacerse cargo del servicio Zygote. Dado que todos sus intentos anteriores para hacerse cargo de Zygote habían fallado, este es un paso prometedor hacia adelante.

Chainfire estaba interesado en señalar que SuperSU ha sido capaz de modificar las políticas de SELinux en un sistema en ejecución (y advierte sobre la facilidad con la que un OEM podría deshabilitar esto, y realmente prevenir el acceso a la raíz simple y significativo), y cómo se realizaron las modificaciones Zygote debe hacerse con cuidado, dado que el servicio se ejecuta desde varios contextos diferentes, para diferentes tareas, y esto plantea la posibilidad de una serie de fallas sutiles (desagradables). Esta nueva SuperSU beta 2.27 es una construcción para entusiastas y otros técnicos con los que jugar, para descubrir qué se rompe. Crucemos los dedos: no hay errores inesperados para detener el espectáculo, y este es un camino viable hacia adelante.

Tome nota: incluso si esta versión beta funciona y Zygote es la vía preferida para obtener acceso a la raíz, en adelante, todo el proceso es solo un cambio de una sola línea para que Google no lo rompa, lo que haría que los ramdisks del kernel parcheados sean el futuro para la raíz acceso en Android (descartando la raíz para dispositivos bloqueados por el gestor de arranque). De hecho, como una advertencia, el nuevo proceso puede que ni siquiera funcione en una compilación de AOSP completamente actualizada, debido a algunos cambios SELinux bastante grandes en los últimos meses, que no se incluyeron en los dispositivos minoristas, pero que sin duda estará allí en futuras versiones. Sin embargo, tarde o temprano, parece probable que los ramdisks del núcleo modificados sean necesarios para la raíz, pero esta nueva versión beta puede ofrecer una breve suspensión de la ejecución antes de que tengamos que ir en esa dirección.

Consulte las notas de la versión para obtener más información sobre los riesgos involucrados en probar esto y para obtener enlaces. Los desarrolladores también deben tener en cuenta que Chainfire actualmente está trabajando arduamente en la guía "How-To SU" (totalmente actualizada para Android 5.0), que debería estar disponible en los próximos días.

[Un gran agradecimiento a Chainfire por su trabajo aquí y su ayuda en la preparación de este artículo.]