Was ist Jailbreaking?
Jedes iOS-Gerät verfügt über eine Bootchain, die versucht sicherzustellen, dass nur vertrauenswürdiger und signierter Code geladen und ausgeführt wird.
Führt ein Anwender einen Jailbreak auf einem iOS-Gerät aus, erhält dieser volle Kontrolle über das iOS-Gerät. Dies ermöglicht:
- Ausbruch aus der App-Sandbox (alle Dateien können gelesen und geschrieben werden)
- Root User / Kernel Rechte beim Ausführen von Code erlangen (Entfernen der Sicherheitsmechanismen aus iOS)
Zusätzlich soll das Jailbreaking helfen beim:
- Ausführen vom fremden Code (Installation von Apps, die nicht von Apple signiert sind)
- UI Verändern von iOS/iOS-Apps (Tweaks)
- Sicherheitsanalysen von iOS/iOS-Apps durchführen
Der hier erwähnte fremde Code kann nach einem Jailbreak beispielsweise über DPKG (Debian Package Manager) installiert werden. In den meisten Linux Distributionen, genau so auch bei Darwin, auf dem iOS basiert, kommen Paketmanager zum Einsatz. Die wichtigste Funktion von DPKG besteht darin, das System in einem stabilen Zustand zu halten. Dabei hat der Paketmanager selbst nicht die Möglichkeit, nach Software-Paketen zu suchen, sondern kann nur solche installieren, die ihm als Binärpaket (Dateiendung .deb; Debian-Software-Paket-Format) zur Verfügung gestellt wird.
Bild 1: Sichere Bootkette unter iOS
Damit dies benutzerfreundlich erfolgen kann, wurde die Software Cydia im Laufe der Jailbreak-Geschichte bereitgestellt. Cydia stellt seitdem einen (de)zentralen Package Installer und damit eine grafische und benutzerfreundliche Oberfläche für DPKG dar. Diese (de)zentralen Cydia-Repositories ermöglichen die Installation von Software-Paketen, von denen die meisten kostenlos heruntergeladen werden können. Cydia beinhaltete bis letztes Jahr aber auch einen eigenen Store, in dem eine Reihe von Anwendungen zum Verkauf, ein entsprechendes Benutzerkonto vorausgesetzt, angeboten wurden. Der Store wurde, im Gegensatz zu den restlichen Funktionen, im Jahr 2018 eingestellt.
Aber auch die wirtschaftlichen Interessen eines neuartigem Jailbreaks werden deutlich, wenn man den Wert eines solchen am Markt sieht. Gerade wenn sich dieser ohne Kabelverbindung über das Internet (also z.B. durch den Aufruf einer Webseite) initialisieren lässt, ist dieser enormes Geld wert. Der Zero-Day-Exploit-Händler Zerodium veröffentlicht hier regelmäßig eine Übersicht über den Wert einer solchen ausgenutzten Schwachstelle (https://zerodium.com/program.html#changelog) in iOS.
Bild 2: Übersicht Zerodium
Jailbreaks werden immer schwerer
Es gibt einen Twitter-Eintrag von @s1guza (https://twitter.com/s1guza/status/918793048842211328), der die stetig steigende Schwierigkeit, vor der die Jailbreak-Community stand/steht, vereinfacht unterteilt(e).
Anfänglich waren die Sicherheitslücken in iOS weiträumig verfügbar und eine Goldgräberstimmung setzte ein. Erste Jailbreaking-Anläufe waren beispielsweise durch das Ausnutzen eines Pufferüberlaufs (buffer overflow) in der Image Parsing Library (libTiff) möglich. Dies war besonders kritisch, da hier die Ausnutzung durch den Aufruf einer Webseite mit iOS-Safari bereits möglich war (https://media.ccc.de/v/35c3-9618-jailbreaking_ios).
Ziel der Jailbreaks war es damals, direkt das BootROM anzugreifen. Dies erfolgte in der im Twitter Feed als „Golden Age“ bezeichneten Zeit mithilfe des DFU (Device-Firmeware-Upgrade) Mode der damaligen iOS-Geräte. Der DFU-Modus war ursprünglich dafür da, das iPhone neu zu installieren, falls dieses nicht mehr startet. Durch diesen Modus wurde das Gerät beim eigentlichen Boot-Vorgang unterbrochen und erlaubte dann einen tieferen Zugriff auf das System selbst. Dass dieser Modus nicht nur für besagte Neuinstallationen genutzt werden konnte, war nur eine Frage der Zeit. So zeigte @geohot mit dem limera1n Jailbreak, dass es einen durch Software nicht behebbaren Fehler im Bootprozess auf iPhone bis inkl. iPhone 4 gab, der es ermöglichte, unsignierten Code per USB einzuspeisen. Diese Lücke ermöglicht es, jedes iOS zu brechen, solange sich dieses auf einem iOS-Gerät bis iPhone 4 installieren ließ. Mit dem iPhone 4s und iOS 5 brach ein neues Zeitalter für Jailbreaks an, da der Hardwarebug nachhaltig behoben wurde. Die Jailbreak-Community benötigte also andere Wege in das iOS-System.
Jailbreaks wurden nun aus dem Userland (hier führt das System die normalen Apps aus) heraus angegangen. Um das Konzept von Userland und Kernel besser zu verstehen, hier der Versuch einer Erklärung: Auf einer konzeptionellen Ebene ist der Kernel alles, was auf einer „hoch privilegierteren“ Ebene der CPU-Hardware läuft. Das entspricht der Bezeichnung Ring 0 auf x86-Prozessoren, Exception Level 1 (EL1) auf ARM, Kernelmodus auf MIPS, Supervisor-Modus auf 68xxx, usw. Der Kernel ist dabei in der Regel interrupt gesteuert, entweder Software-Interrupts (Systemaufrufe) oder Hardware-Interrupts (FPU Zugriff, Netzinterfaces, Hardware-Timer).
Bild 3: Die goldenen Zeiten des Jailbreaks sind vorbei
Auf der gleichen konzeptionellen Ebene ist „Userland“ das, was im am wenigsten privilegierten Modus läuft (Ring 3 auf x86-CPUs, User Mode auf ARM (EL0). Userland präsentiert allen Programmen (Apps) die gleiche Betriebssystem-API. Die verschiedenen Ebenen werden dabei durch die Hardware der CPU geschützt. Dies erschwert es, eine Schwachstelle im Kernel (EL1) durch eine App im Userland (EL0) ausnutzen zu lassen. Jailbreaks mussten nun also mehrere Bugs ausnutzen. App-Code musste auf die Geräte gebracht und ausführt werden. Dabei musste dieser (EL0) selbst entsprechende Kernel Bugs (EL1) ausnutzen und sich anschließend, im besten Fall, fest im System einnisten (persistieren), um erfolgreich zu sein.
Dass initial App-Code ausgeführt werden kann, ermöglicht Apple allerdings jedem Entwickler. Dies resultiert aus der einfachen Tatsache heraus, dass Apple freie Entwickleraccounts ermöglichte, die es jedem kostenlos erlaubt, eine eigene App zu erstellen, die bis zu 7 Tage auf iOS-Geräten signiert und ausgeführt werden konnte. Damit wurden Jailbreaks als eigenes IPA (Installierbare App) massentauglich möglich, bzw. haben die notwendige Basis bekommen.
Dies erleichterte die Veränderung des Kernels selbst jedoch noch nicht, aber es erleichterte den Weg, um Code auf das Gerät zu bringen, mit dem man die nächsten Schritte angehen kann. Das Patchen des Kernels ist wie beschrieben das zwingend notwendige Ziel, um Code Signing und andere Einschränkungen zu umgehen. Und genau diese Angriffe gegen den Kernel sind einige Euro, siehe beispielsweise den Hinweis oben zu Zerodium, wert.
Begriffsdefinitionen
Je nachdem wie sich ein Jailbreak auf ein Gerät bringen lässt und ob sich dieser persistieren kann, spricht man von unterschiedlichen Jailbreak-Begriffen.
Tethered Jailbreak
Beim tethered Jailbreak bedarf es eines Computers, damit ein so bearbeitetes iOS-Gerät einen Neustart durchführen kann und der Jailbreak bestehen bleibt. Startet der Anwender das Gerät ohne einen Computer samt entsprechender Jailbreak-Tools, läuft auf dem IOS-Gerät kein gepatchter Kernel mehr und es gelangt nur in einen teilweise gestarteten Zustand. Diese Geräte bleiben meist im Wiederherstellungsmodus stecken. Damit das Gerät vollständig und mit einem gepatchten Kernel starten kann, muss es bei jedem Einschalten mit einem Computer „re-jailbroken“ werden.
Eigenschaften dieses Jailbreaks sind somit:
- Es wird ein Computer benötigt, um ein iOS-Gerät neu starten lassen zu können, da der Jailbreak (Exploid) neu ausgeführt werden muss.
- Tethered Jealbreak-Geräte können nicht eigenständig rebooten, da die „Chan of Trust“ im Bootloader / Kernel verletzt wird.
Semi-thethered Jailbreak
Ein semi-tethered Jailbreak ist eine Lösung, bei der das iOS-Gerät in der Lage ist, von selbst zu starten, aber es nutzt dazu keinen gepatchten Kernel mehr. So bleibt das iOS-Gerät für normale Funktionen verwendbar, ist nach dem Neustart aber nicht mehr gebrochen.
Eigenschaften dieses Jailbreaks sind somit:
- Es wird kein Computer benötigt, um ein iOS-Gerät neu zu starten.
- Geräte starten als „nicht jailbroken“, die „Chain of Trust“ im Bootloader / Kernel wurden nicht verletzt.
Untethered Jailbreak
Ein untethered Jailbreak verwendet Schwachstellen in iOS (Exploits), die mächtig genug sind, um es dem Anwender zu ermöglichen, sein iOS-Gerät nach Belieben neu zu starten und ohne Hilfe eines Computers stetig beim Booten zu patchen – mit anderen Worten: das Gerät führt bei jedem Neustart einen Jailbreak aus.
Eigenschaften dieses Jailbreaks sind somit:
- Es wird kein Computer benötigt, um ein iOS Gerät neu zu starten
- Ein iOS-Gerät ist auch beim / nach Neustart weiterhin einem Jailbreak unterzogen
- Der Jailbreak wird im Rahmen des Boot-Prozesses automatisch stetig neu durchgeführt
Semi-Untethered Jailbreak
Ein semi-untethered Jailbreak gibt die Möglichkeit, das iOS-Gerät selbst zu starten. Beim ersten Start wird dabei kein gepatchter Kernel ausgeführt. Anstatt jedoch ein Tool von einem Computer auszuführen, um die Kernel-Patches zu installieren, kann der Anwender sein Gerät mit Hilfe einer separat installierten App jederzeit erneut Jailbreaken.
Eigenschaften dieses Jailbreaks sind somit:
- Es wird kein Computer benötigt, um ein iOS Gerät neu zu starten
- Ein iOS-Gerät ist auch beim / nach Neustart nicht mehr Jailbroken
- Das Ausführen einer App, nach dem Neustart, führt wieder einen Jailbreak manuell aus
Schutzmechanismen von Apple
Im Gegensatz zu Android-Endgeräten führt Apple bei einer breiten Masse an Geräten ihre Softwareupdates zeitgleich ein. Ich möchte Ihnen an dieser Stelle eine grobe Übersicht der Schutzmaßnahmen geben. Dies soll Ihnen in einem groben Überblick zeigen, wie stark Apple sich im Absichern seines Systems engagiert.
iOS 4.3 : ASLR (Address Space Layout Randomization)
Bei ASLR handelt es sich um eine Form der Datensicherheit, mit der Daten im RAM zufällig angeordnet werden, um zu verhindern, dass Exploits die Kontrolle über das System übernehmen.
iOS 5 Apple führte APTickets im Bootloader ein (Signierungen)
Die Firmware von iOS-Geräten wird seit iOS 5 verschlüsselt ausgeliefert. Der KeyEncryptionKey ist in Hardware eingebrannt und ist bis heute noch nicht erfolgreich extrahiert worden. Alle relevanten Bootdateien liegen mit dem KeyEncryptionKey verschlüsselt im Gerät vor und werden erst zum Startzeitpunkt durch den Boot-Prozess entschlüsselt.
iOS 6 : KASLR (Kernel Address Space Layout Randomization)
Das Ziel von Kernel ASLR ist es zu verhindern, dass ein Angreifer (Kernel-)Daten an bekannten (festen) Adressen ändert oder verwendet (siehe auch ASLR).
iOS 9 : KPP (Kernel Patch Protection)
Apple nennt dieses intern auch „Watchtower“. Dieser Dienst überwacht den Kernel auf Veränderungen und schlägt Alarm, wenn Veränderungen entdeckt werden.
Watchtower wird auf EL3 (ARM Exception Level 3) immer dann mit höchster Priorität im System ausgeführt, wenn eine App mit ihren Events den Zugriff auf die FPU (Floating Point Unit) benötigt. Schlägt die Prüfung durch Watchtower fehl, wird die FPU blockiert.
Watchtower wurde von @qwertyoruiop mit @yalu102 Jailbreak ausgehebelt, in dem der Kernel in den Speicher (EL0) kopiert wurde. Dies ermöglicht es Manipulationen durchzuführen und Watchtower zum Prüfungszeitpunkt eine korrekte Kernel Version zu zeigen.
Apple hat daher auch einige Änderungen auf Seiten der Hardware durchgeführt. Diese sind (teilweise) noch (bis heute) sehr effizient. Zu den letzten wichtigen Änderungen gehören:
A10 CPU (seit iPhone 7) : KTRR (Kernel Text Readonly Region)
Die Veränderungen des Kernels unter Umgehung von Watchtower sollen damit unterbunden werden. Hierzu stellt die CPU sicher, dass es feste Bereiche gibt, in denen Code ausgeführt, gelesen und/oder geschrieben werden darf. Details gibt es unter http://siguza.github.io/KTRR/ zu sehen.
A12 Bionic CPU (seit iPhone XS/XR) : PAC (Pointer Authentication Codes)
Das PAC (Pointer Authentication Codes) Verfahren soll es einem Angreifer nun noch schwieriger machen, geschützte Zeiger (Pointer), dessen Bedeutung eine Speicheradresse ist, zu manipulieren. An solchen Adressen können entweder Daten (Variablen, Objekte), aber auch Programmanweisungen (Code) stehen. Wer mehr dazu lesen möchte, sei dieser Link: https://www.qualcomm.com/documents/whitepaper-pointer-authentication-armv83 zu empfehlen.
Bild 4: Metamodell für CPU Exception Levels (EL3 Watchtower, EL1 Kernel, EL0 Applikationen)
Die guten Seiten des Jailbreaks
Als das erste iPhone auf den Markt kam, hatte Apple einige Funktionen nicht bedacht. Es gab keine AppStore und die Möglichkeit, das Smartphone zu erweitern existierte nicht. Auch das Nutzen von Multitasking war nicht gegeben, so konnte nur die Musik App im Hintergrund ihre Musik weiter wiedergeben. Zusätzlich war das Gerät mit Provider / SIM Sperren versehen und konnte gar nicht überall auf der Welt bzw. bei einem Provider der eigenen Wahl betrieben werden.
Daher bin ich mir persönlich sehr sicher, dass iOS ohne die Jailbreak-Community heute nicht die Funktionen bieten würde, die es heute bereitstellt. Apple musste reagieren und tat das auch. Sicherlich war es teilweise für den ein oder anderen (nicht) verwunderlich, wenn erfolgreiche Funktionen, die durch Jailbreak-Tweaks ermöglicht würden, Einzug in das „normale“ iOS gehalten haben. Apple konnte vieles durch die Jailbreak-Community lernen, was gewünschte Funktionen und Schwachstellen im eigenen System angeht. Jailbreaks haben daher einen positiven Einfluss auf die Evolution von iOS gehabt.
Teile diesen Eintrag