Rooting auf Android
früher und heute
Online
http://reveal.ytvwld.de/?p=android-rooting
Download
Inhalte
- Rooting - Was ist das überhaupt?
- Wie funktioniert das im Detail?
- Vergleich: "normales Linux"
- früher
- heute
- Wie bekomme ich das auf mein Gerät?
- Exploit? (Nein!)
- neue Firmware
- Was kann ich damit tun?
- XPosed
Was ist das überhaupt?
Rooting ist die Möglichkeit, Programme auf einem Android-Gerät als root
zu starten.
Bekannt: sudo
auf (Desktop-)Linux:
Hier: sudo
auf Android
Wie funktioniert das überhaupt?
grundlegende Vorgehensweise:
- Aufruf von
su
- Nachfrage
- Ausführen des angegebenen Befehls (oder einer Shell) mit erhöhten Rechten.
Vergleich: "normales" Linux
- Aufruf von
sudo
oder su
(suid)
- Berechtigungsprüfung (-> PAM)
- Ausführung des angegebenen Befehls oder einer Shell
Wie funktionierte das früher?
- Aufruf von
su
(suid)
- IPC von
su
und der Superuser-App
- App prüft, ob Zugriff automatisch erlaubt oder verweigert wird
- App zeigt Dialog mit Nachfrage an
- App zeigt Toast an
- IPC von
su
und der Superuser-App
su
führt den angegebenen Befehl oder eine Shell aus - oder beendet sich
Was muss dafür auf dem Gerät vorhanden sein?
Nicht viel.
su
muss in $PATH
liegen und suid root
haben
- eine Superuser-App muss installiert sein
Wie geht das?
- irgendwie
/system
schreibbar mounten
- irgendwie das
su
-Binary dort hinbekommen
- irgendwie setuid
root
auf su
setzen
- die zugehörige App installieren
Problem: (bis auf den letzten Punkt) muss man für alles bereits root
sein
Wie funktioniert das heute?
"Problem": SELinux erlaubt es Apps nicht, Privilegien zur Laufzeit auf root
zu eskalieren.
- (beim Boot) Start eines Daemons als
root
- Aufruf von
su
su
erstellt ein virtuelles Terminal
- IPC von
su
, dem Daemon und der Superuser-App
- App prüft konfigurierte Regeln und zeigt ggf. einen Dialog an
- IPC von
su
, dem Daemon und der Superuser-App
- Daemon führt den gewünschten Befehl aus
Was muss dafür auf dem Gerät vorhanden sein?
Viel.
- ein ausführbares
su
-Binary in $PATH
- ein spezieller Daemon, der früh startet und als
root
läuft (-> Boot-Partition)
- angepasste SeLinux-Regeln
- eine Superuser-App
Wie geht das?
- Boot-Partition irgendwie überschreiben
- irgendwie
/system
schreibbar mounten
- irgendwie das
su
-Binary dort hinbekommen
- die zugehörige App installieren
Probleme:
- (bis auf den letzten Punkt) muss man für alles bereits
root
sein
- Boot-Partition und SeLinux-Regeln sind schwer nachträglich anzupassen (ohne allzuviel kaputt zu machen)
Wie bekomme ich das auf mein Gerät?
hauptsächlich zwei Möglichkeiten:
- Exploit im laufenden System (-> temporärer root-Zugriff)
- Recovery / Bootloader
Recovery? Was ist das?
Android hat mehrere Partitionen.
- boot
- system
- recovery
- cache
- userdata
- ...
Exploit
Tut es nicht.*
* außer ihr habt ein Gerät, auf dem es nicht anders geht
Exploit: Wie?
- durch eine Gerät- oder Android-Versions-spezifische Sicherheitslücke temporären root-Zugriff erhalten
- die vorher beschriebenen Schritte
- ???
- Profit!
Exploit: Warum nicht?
- Wenn ihr durch eine App ohne besondere Rechte root-Zugriff erlangen könnt, kann das jede App!
- Ihr wisst nicht, was die App sonst noch tut.
- Das System ist nachher in einem merkwürdigen Zustand.
Recovery / Bootloader
Besser: in die Recovery bzw. den Bootloader booten* und Dinge flashen
- am Besten ein neues System
* je nach Gerät muss der Bootloader entsperrt werden