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: Screenshot: sudo (1)

Hier: sudo auf Android

Wie funktioniert das überhaupt?

grundlegende Vorgehensweise:

  1. Aufruf von su
  2. Nachfrage
  3. Ausführen des angegebenen Befehls (oder einer Shell) mit erhöhten Rechten.

Vergleich: "normales" Linux

  1. Aufruf von sudo oder su (suid)
  2. Berechtigungsprüfung (-> PAM)
  3. Ausführung des angegebenen Befehls oder einer Shell

Wie funktionierte das früher?

  1. Aufruf von su (suid)
  2. IPC von su und der Superuser-App
  3. App prüft, ob Zugriff automatisch erlaubt oder verweigert wird
  4. App zeigt Dialog mit Nachfrage an
  5. App zeigt Toast an
  6. IPC von su und der Superuser-App
  7. 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.

  1. (beim Boot) Start eines Daemons als root
  2. Aufruf von su
  3. su erstellt ein virtuelles Terminal
  4. IPC von su, dem Daemon und der Superuser-App
  5. App prüft konfigurierte Regeln und zeigt ggf. einen Dialog an
  6. IPC von su, dem Daemon und der Superuser-App
  7. 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?

  1. durch eine Gerät- oder Android-Versions-spezifische Sicherheitslücke temporären root-Zugriff erhalten
  2. die vorher beschriebenen Schritte
  3. ???
  4. 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

Flavors

  • user
  • userdebug
  • eng

https://stackoverflow.com/a/14472511/2192464 https://source.android.com/setup/develop/new-device#build-variants

Was bringt mir das?

XPosed

XPosed ist ein Framework, um Apps Code in Apps injecten zu lassen.

Siehe z.B. https://api.xposed.info/.