¿Por qué no se puede copiar simplemente el binario su (respuesta técnica por favor)

18

He rooteado varios dispositivos Samsung y el "objetivo" subyacente, por así decirlo, parece ser obtener el subinario /system/xbine instalar Superuser.apk .

Mi pregunta es ¿por qué uno tiene que pasar por todos estos aros para rootear el teléfono (instalar recuperación personalizada y flashear ROM pre-rooteada o explotar la instalación actual)? ¿No podría uno simplemente descargar un su precompilado, moverlo a la tarjeta SD y ejecutarlo a través de adb? Lo que parece hacer una ROM "pre-rooteada" es que tiene Superusuario y el binario su en sus respectivas rutas del sistema. No veo por qué es tan importante que se ejecute /system/xbin.

usuario974896
fuente

Respuestas:

24

El binario su necesita tanto la ejecución como el conjunto de bits de permiso setuid. Lo primero es necesario para que el archivo se pueda ejecutar y lo segundo es que se ejecuta automáticamente con los derechos del propietario del archivo (establecer ID de usuario o setuid. En este caso, el propietario es root. Lea más aquí ).

Los archivos en el almacenamiento externo no tienen establecidos los bits de permisos ejecutables y setuid y no se pueden otorgar sin derechos de root. Tenga en cuenta también que la tarjeta SD está montada con el indicador 'noexec' para evitar que la ejecución generalmente arranque:

shell@android:/sdcard $ ./su
/system/bin/sh: ./su: can't execute: Permission denied
126|shell@android:/sdcard $ chmod 4755 su
Unable to chmod su: Operation not permitted
10|shell@android:/sdcard $ mount | grep /mnt/sdcard
/dev/block/mmcblk0p1 /mnt/sdcard vfat [...],noexec,[...]

Esa es básicamente la razón por la que no puede simplemente copiar suen la tarjeta SD y luego ejecutarla para obtener la raíz.

eldarerathis
fuente
Entonces, ¿eso es lo único que evita el enraizamiento, el hecho de que / sdcard no es ejecutable y no puede chmod? Una vez que su se encuentra en la ubicación adecuada donde puede ser ejecutable chmodded su dorado. Creo que habría una capa de seguridad para evitar que alguien simplemente ejecute su. En mi servidor y cuadro de Debian, no puedo ejecutar su como un usuario normal, se me solicita una contraseña. Supongo que la suposición es que si uno puede instalar su, ¿puede sobrescribir el archivo shadow para cambiar la contraseña?
user974896
3
@ user974896: Bueno no hay otro lugar para un usuario que no sea el sistema para ponerlo que pueda ser ejecutado, y Android ni siquiera tiene passwdo shadowarchivos de todos modos. Literalmente, necesita root para colocar suen una ubicación ejecutable, razón por la cual los métodos de enraizamiento implican una explotación de escalada de privilegios o entrar en una recuperación personalizada (donde todas las apuestas están básicamente desactivadas).
eldarerathis
Si. Esta es la respuesta.
Android Quesito
3
@ user974896: además de que / sdcard se está montando noexec, la llamada al sistema setuid solo se puede invocar cuando el bit de permiso suid está configurado en el ejecutable, y la llamada al sistema chown y chmod solo permitirá que root establezca el bit setuid de un archivo propiedad de root (de hecho, solo root puede crear un ejecutable que pueda ejecutarse con privilegios de root). Cualquiera puede llamar a su, pero a menos que el autor de la llamada pueda hacerlo en la base de datos de Superusuario (o en Linux tradicional, en la base de datos passwd / shadow), la llamada no tendrá éxito. Solo la aplicación Superusuario (y los procesos privilegiados) pueden modificar la base de datos de Superusuario.
Mentira Ryan
3
@ user974896: Esto, además del sistema de seguridad normal en Android en el que cada aplicación dalvik se ejecuta como su propio usuario, significa que las aplicaciones que solo las aplicaciones en la lista blanca de Superuser pueden escalar a la raíz sin aviso, todos los demás serán rechazados (si es en la lista negra), o hará que el Superusuario solicite permiso al usuario.
Lie Ryan
5

El enraizamiento implica explotar la debilidad según la versión de Android, por lo tanto, " saltar a través de todos los aros para rootear el teléfono "

Es un huevo de gallina!

Para explotar root, necesita un demonio adb no seguro (es decir, la capacidad de volver a montar /system) en el teléfono, y para tener un adb no seguro, ¡necesita root! Y también, necesita un gestor de arranque desbloqueado.

Echa un vistazo a un exploit llamado zergRush que se encuentra en github; se llama a la función de interés do_fault()cuando se intenta "romper" el marco de la pila del volddemonio del s al conectarse a la tubería que le pertenece y hacer que se bloquee al sobrescribir el puntero de la pila para apuntar a una copia versión del shell boomshque luego se ejecuta desde /data/local/tmp.

Después de leer la fuente, ahora se dará cuenta de por qué copiar el subinario no es suficiente para tener el teléfono "enraizado" y por qué se deben saltar los aros. Y también, como el bit ejecutable en el nivel del sistema de archivos para la tarjeta SD está bloqueado, entonces no vaya allí, ¡eso está ahí por razones obvias! :)

t0mm13b
fuente
Gracias por los enlaces, los leeré más tarde. Entonces, incluso si la tarjeta sd fue chmodded 777 de fábrica, ¿aún no podría convertirme en root simplemente descargándola y ejecutándola?
user974896
1
¡correcto! ¡No vayas! No hace una gran diferencia y, dado que la ROM instalada de fábrica tendrá esa protección protegida, ¡necesitará root para lograr eso, chmod¡y tendrá los permisos de la tarjeta SD para hacerlo! :)
t0mm13b
1
Bueno, ¿qué hace que su sea tan especial si está en / system / xbin? Si ingresa adb shell (o ejecuta una aplicación como usuario normal), es un usuario no privilegiado. ¿Por qué ejecutar su cuando está en / system / xbin te hace root en lugar de ejecutarlo en nuestro teóricamente chmod 777 / sdcard?
user974896
/system/xbines el directorio donde entran las utilidades de busybox, y ... en un teléfono rooteado, emitir esto echo $PATHgenerará / sbin: / vendor / bin: / system / sbin: / system / bin: / system / xbin <- ¡ notifíquelo ! Está en el camino! Para tener eso allí, necesita raíz, por lo tanto, muchas situaciones de pollo y huevos ...: D
t0mm13b
Sí, sé que es a donde va por defecto. Lo que quiero decir es lo que tiene de especial ejecutarlo allí. ¿Por qué la ejecución de ./su en / sdcard /, / data / o cualquier directorio no root requerido no funciona suponiendo que la fábrica haya enviado la ROM con el directorio chmodded en 777. Lo que quiero decir es que lo único que impide que uno se descargue y ejecutar ./su es el hecho de que los directorios en los que un usuario no root puede hacer esto no son ejecutables o hay una imagen más grande.
user974896