Das (mögliche) Problem eines Gefängnisausbruchs unter iOS

4 Kommentare Drucken

Gefahren und Schutzmaßnahmen von iOS-Geräten 

Apple kämpft seit 2007 – mit dem Erscheinen des ersten iPhones – an einer Absicherung seines iOS (damals iPhone OS) Betriebssystems, da der erste Jailbreak (Gefängnisausbruch) bereits zwei Wochen nach dem Veröffentlichen des ersten iPhones erschien. Was am Anfang als einfache Spielerei wirkte, konnten die ersten Jailbreaks doch nur die Klingeltöne des iPhones ändern, entwickelte sich zu einem ernsthaften Katz- und Mausspiel zwischen Apple und der Jailbreak-Community. Apple härtet seitdem mit jeder neuen Software- und Hardwaregeneration sein geschlossenes Ökosystem gegen die „gewaltvolle“ Öffnung durch Dritte. Denn auch ein goldener Käfig bleibt ein Käfig. Aber jede Veröffentlichung schließt zwar bestehende, bringt aber immer noch neue Schwachstellen. Der folgende Text gibt Ihnen einen Einblick in die wichtigsten Ereignisse und Begrifflichkeiten aus der Welt der Jailbreak-Community und zeigt Ihnen, wie Apple seine Hardware / Software absichert.

Dieser Text stellt keine Aufforderung dazu dar, sein iOS-Gerät einem Jailbreak zu unterziehen. Die Rechtmäßigkeit des Jailbreaks eines iOS-Geräts hängt zusätzlich noch von den einzelnen Ländern/Regionen ab.

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.
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 Schwachstellen (https://zerodium.com/program.html#changelog) in iOS.

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überlauf (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).

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 Jeailbreak
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 Jeailbreak 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.

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.

Ist mein iOS-Gerät betroffen?
Eine Jailbreak-Erkennung ist nicht zu 100% möglich und basiert auf Indizien. Anzeichen dafür, ob ein Jailbreak auf einem Gerät stattgefunden hat oder nicht, gibt es in verschiedenen Ausprägungen und Kombinationen. Indizien sind:

  • der Prozess Besitzer ist root (pid = 0) und nicht mehr mobil (pid = 501)
  • es existieren verdächtige Apps auf dem Gerät (z.B. Cydia)
  • einige Prozesse können nur auf Jailbreak-Geräten (z. B. sshd) existieren
  • Systemordner sind per Symbolik Link einem anderen Standort zugeordnet
  • Applikationen haben Zugriff außerhalb der Sandbox
  • Unsignierte Apps können ausgeführt werden
  • es befinden sich unbekannte Bibliotheken / Frameworks im App-Ordner
  • eine SSH-Loopback-Verbindung ist möglich (Versuch einer Verbindung auf 127.0.01:22, obwohl iOS keinen SSH-Port ohne Jailbreak erlaubt)
  • Aufruf von system() liefert als Rückgabewert eine „1“
  • dynamische Bibliotheken sind vorhanden (dyldimagecount(), dyldgetimagename() enthalten fremde Bibliotheken)

Es gibt (leider) kaum Apps im AppStore, die ausführliche Prüfungen anbieten. Apple ging in der Vergangenheit auch mehr oder weniger ablehnend mit derartigen App-Angeboten um.
So hat Apple im Jahr 2016 eine von einem Kölner Anbieter (SektionEins) entwickelte App wieder aus seinem App Store entfernt, mit der Begründung, dass derartige Apps ungenaue Informationen liefern würden und damit zu einer Verunsicherung der Nutzer beitragen könnten. Die App erkannte, gemäß Herstellerangaben, verschiedene Systemmodifikationen, die auf einen Jailbreak schließen lassen. Viele MDM Anbieter bauen derartige Funktionen jedoch in ihren MDM-Clients mit ein.

Wer sich damals die SysSecInfo App von SectionEins gekauft hat, kann diese noch heute aus dem AppStore laden. Da der Hersteller aber keine Updates mehr bereitstellen kann, werden aktuelle iOS-Versionen als „Custom Jailbreak“ Fehlinterpretiert.

Wer abseits dieser MDM-Clients Wert auf eine solche Prüfung legt, muss selbst Hand an den Code legen und etwas Eigenes entwickeln. Es ist dabei zu beachten, dass es sich um keine einmalige Entwicklung handelt. Vielmehr müssen Sie das Verhalten von jeder neuen iOS Version auf Ihre Prüfungen testen. Auch ein neuer öffentlicher Jailbreak sollte nach bestem Wissen und Gewissen unter kontrollierten Bedingungen ausgetestet werden. Nur so können Sie sicher sein, dass dieser erkannt wird.

Natürlich können Angreifer die Methoden Ihrer App zur Jailbreak Prüfung umgehen oder aushebeln, sobald ein Gerät entsprechend manipuliert wurde. Auch hier bieten sich strenge Vorgaben an die eigene App Entwicklung an. Diese und andere Vorgaben, Verfahren und Empfehlungen behandele ich in meinem Seminar, das Sie bei Interesse gerne besuchen können.

zugeordnete Kategorien: Cloud Computing, Endgeräte, IT-Sicherheit, UC
zugeordnete Tags:

Sie fanden diesen Beitrag interessant? Sie können



4 Kommentare zu "Das (mögliche) Problem eines Gefängnisausbruchs unter iOS":

  1. Wolfgang Reibenspies schreibt:

    Das ist eine sehr gute und insbesondere nachvollziehbare Aufbereitung der Thematik. Lesbar und verständlich mit hoher Fachkompetenz. Sehr gut!

  2. Thomas Weidner schreibt:

    Da hat sich ein Fehler eingeschlichen.
    „In den meisten Linux Distributionen, genau so auch bei Debian auf dem iOS basiert“
    iOS basiert nicht auf Debian (Linux) sondern auf Darwin bzw. dem Mach Kernel. iOS kommt mehr oder weniger aus der BSD Ecke, also einem richtigen UNIX.

    Gruß
    Thomas

  3. Ludwig Weßbecher schreibt:

    @Wolfgang:
    Du bist immer noch im Thema … (und auch zu späten/frühen Uhrzeiten). So kennt man ihn!
    Deiner Aussage kann ich nur zustimmen.

    Gruß
    Ludwig

Anmerkungen, Fragen, Kommentare, Lob und Kritik:

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

.