Warum kann die su-Binärdatei nicht einfach kopiert werden (technische Antwort bitte)

18

Ich habe mehrere Samsung-Geräte verwurzelt und das zugrunde liegende "Ziel" scheint sozusagen darin zu bestehen, die suBinärdatei einzuspielen/system/xbin und Superuser.apk zu installieren .

Meine Frage ist, warum muss man alle diese Reifen durchspringen, um das Telefon zu rooten (installieren Sie benutzerdefinierte Wiederherstellung und Flash-vorgerooteten ROM oder nutzen Sie die aktuelle Installation)? Könnte man nicht einfach eine vorkompilierte su herunterladen, auf die SD-Karte verschieben und über adb ausführen? Das, was ein ROM anscheinend "vorgerootet" macht, ist, dass es Superuser und die su-Binärdatei in ihren jeweiligen Systempfaden hat. Ich verstehe nicht, warum es so wichtig ist, dass es ausgeführt wird /system/xbin.

user974896
quelle

Antworten:

24

Die su-Binärdatei benötigt sowohl das Ausführungs- als auch das setuid-Berechtigungsbit. Die erste ist erforderlich, damit die Datei ausgeführt werden kann, und die zweite ist, dass sie automatisch mit den Rechten des Dateieigentümers ausgeführt wird (Benutzer-ID oder setuid festlegen. In diesem Fall ist der Eigentümer root. Weitere Informationen finden Sie hier ).

Für Dateien auf dem externen Speicher sind die Berechtigungsbits executable und setuid nicht festgelegt, und sie können nicht ohne Root-Rechte erteilt werden. Beachten Sie auch, dass die SD-Karte mit dem Flag 'noexec' geladen ist, um die Ausführung im Allgemeinen zu verhindern:

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,[...]

Das ist der Grund, warum Sie nicht einfach suauf die SD-Karte kopieren und sie dann ausführen können, um sich selbst Root zu gewähren.

eldarerathis
quelle
Das ist also das einzige, was Rooting verhindert, die Tatsache, dass / sdcard nicht ausführbar ist und Sie nicht chmod können? Sobald su an der richtigen Stelle ist, wo es ausführbar chmodded werden kann, ist Ihr golden. Ich würde denken, dass es eine Sicherheitsschicht geben würde, die verhindert, dass jemand einfach su ausführt. Auf meinem Server und meiner Debian-Box kann ich su nicht einfach als normaler Benutzer ausführen. Ich werde zur Eingabe eines Passworts aufgefordert. Ich vermute, die Annahme ist, dass, wenn man su installieren kann, sie die Schattendatei überschreiben können, um das Passwort zu ändern?
user974896
3
@ user974896: Nun , es für einen Nicht-System - Benutzer nirgendwo sonst ist es zu setzen , dass er ausgeführt werden kann, und Android nicht einmal hat passwdoder shadowsowieso Dateien. Sie benötigen im wahrsten Sinne des Wortes root, um sich suan einem ausführbaren Speicherort zu befinden, weshalb Root- Methoden entweder eine Ausnutzung der Rechteerweiterung beinhalten oder eine benutzerdefinierte Wiederherstellung durchführen (bei der im Grunde alle Wetten deaktiviert sind).
Eldarerathis
Ja. Das ist die Antwort.
Android Quesito
3
@ user974896: Zusätzlich zu der / sdcard, die noexec angehängt wird, kann der Systemaufruf setuid nur aufgerufen werden, wenn das Berechtigungsbit suid in der ausführbaren Datei gesetzt ist, und der Systemaufruf chown und chmod erlaubt root nur, das Bit setuid einer Datei zu setzen Eigentum von root (effektiv kann nur root eine ausführbare Datei erstellen, die mit root-Rechten ausgeführt werden kann). Jeder kann su anrufen, aber es sei denn, der Anrufer darf dies in der Superuser-Datenbank (oder in herkömmlichem Linux in der passwd / shadow-Datenbank) tun, ist der Anruf nicht erfolgreich. Nur die Superuser-App (und privilegierte Prozesse) können die Superuser-Datenbank ändern.
Lie Ryan
3
@ user974896: Zusätzlich zu dem normalen Sicherheitssystem in Android, in dem jede Dalvik-Anwendung als eigener Benutzer ausgeführt wird, bedeutet dies, dass Anwendungen, die nur in der Whitelist des Superbenutzers vorhanden sind, ohne Aufforderung zum Root-Verzeichnis eskalieren können, alle anderen werden abgelehnt (sofern dies der Fall ist) in der Blacklist) oder veranlasst den Superuser, den Benutzer um Erlaubnis zu bitten.
Lie Ryan
5

Beim Rooten wird die Schwäche abhängig von der Android-Version ausgenutzt. " Springe durch alle Reifen, um das Telefon zu rooten. "

Es ist ein Huhn-und-Ei!

Um root auszunutzen, benötigen Sie einen ungesicherten adb-Daemon (dh die Fähigkeit zum erneuten Laden /system) auf dem Mobilteil, und um eine ungesicherte adb zu haben, benötigen Sie root! UND außerdem benötigen Sie einen nicht gesperrten Bootloader.

Werfen Sie einen Blick auf einen Exploit namens zergRush , der auf github zu finden ist. Die interessierende Funktion wird aufgerufen, do_fault()wenn versucht wird, den Stapelrahmen des voldDämons zu "unterbrechen", indem eine Verbindung zu der Pipe hergestellt wird, deren Eigentümer er ist, und ein Absturz verursacht wird, indem der Stapelzeiger überschrieben wird, um auf eine Kopie zu zeigen Version der Shell, von boomshder aus dann ausgeführt wird /data/local/tmp.

Nachdem Sie den Quellcode gelesen haben, werden Sie feststellen, warum das Kopieren der suBinärdatei nicht ausreicht, um das Mobilteil "rooten" zu lassen, und warum Rahmen übersprungen werden müssen. Und da das ausführbare Bit auf Dateisystemebene für die SD-Karte blockiert ist, sollten Sie nicht dorthin gehen - das liegt auf der Hand! :)

t0mm13b
quelle
Vielen Dank für die Links, die ich später durchlesen werde. Also, selbst wenn die SD-Karte 777 von der Fabrik chmodded wurde, konnte ich immer noch nicht root werden, indem ich sie einfach herunterlud und ausführte?
user974896
1
richtig! No Go! Macht keinen Unterschied, und da das werkseitig installierte ROM einen chmodsolchen Schutz hat, benötigen Sie root, um dies zu erreichen - und die Berechtigungen der SD-Karte, um dies zu tun! :)
t0mm13b
1
Nun, was macht su so besonders, wenn es in / system / xbin ist? Wenn Sie die adb-Shell aufrufen (oder eine App als normaler Benutzer ausführen), sind Sie ein nicht privilegierter Benutzer. Warum führt das Ausführen von su in / system / xbin dazu, dass Sie root sind, anstatt es in unserer theoretisch chmod 777 / sdcard auszuführen?
user974896
/system/xbindas Verzeichnis, in dem das Busybox - Dienstprogramme in gehen, und ... in einem verwurzelten Hörer, diese Ausgabe echo $PATHnachgeben / sbin: / Verkäufer / ist: / System / sbin: / system / ist: / system / xbin <- Mitteilung it! Es ist auf dem Weg! Um das da
drin
Ja, ich weiß, dass dies standardmäßig der Fall ist. Was ich meine, ist das Besondere daran, es dort laufen zu lassen. Warum würde die Ausführung von ./su in / sdcard /, / data / oder einem nicht als Root erforderlichen Verzeichnis nicht funktionieren, vorausgesetzt, das Werk hat das ROM mit dem Verzeichnis chmodded bei 777 ausgeliefert. Was ich damit meine, ist das einzige, was den Download verhindert und running ./su ist die Tatsache, dass die Verzeichnisse, in denen ein Nicht-Root-Benutzer dies ausführen kann, nicht ausführbar sind oder ein größeres Bild vorliegt.
user974896