Forschung unter der Leitung von Hu Ke und Nir Avraham
Jamf Threat Labs hat eine Manipulationstechnik nach einem erfolgreichen Exploit identifiziert, die alle visuellen Hinweise auf einen funktionierenden Blockierungsmodus liefert, ohne die Schutzmaßnahmen, die normalerweise von dem Dienst implementiert würden. Beachten Sie, dass es sich hierbei nicht um einen Fehler im Blockierungsmodus oder eine iOS-Schwachstelle an sich handelt, sondern um eine nachträgliche Manipulationstechnik, mit der eine Malware den Benutzer:innen vorgaukelt, dass sich das Telefon im Blockierungsmodus befindet. Diese Technik wurde bisher noch nicht in der Praxis beobachtet und ist nur auf einem bereits kompromittierten Gerät möglich.
Ziel dieser Untersuchung ist es, deutlich zu machen, dass Benutzer:innen weiterhin anfällig für Angriffe sein können, wenn sie nicht wissen, wie der Blockierungsmodus funktioniert und welche Einschränkungen er mit sich bringt. Auch wenn der Blockierungsmodus die Angriffsfläche auf einem iOS-Gerät effektiv reduziert, ist es wichtig, zu beachten, dass der Blockierungsmodus Malware nicht daran hindert, zu arbeiten, wenn ein Gerät bereits kompromittiert ist. Der Blockierungsmodus ist keine Antivirus-Software, erkennt keine bestehenden Infektionen und hat keinen Einfluss auf die Fähigkeit, ein bereits kompromittiertes Gerät auszuspionieren. Er ist eigentlich nur dann wirksam – also bevor ein Angriff stattfindet –, wenn es darum geht, die Anzahl der für die Angreifer:innen verfügbaren Einfallstore zu reduzieren.
Dieses Bild stammt aus einem Beitrag von Apple Newsroom.
In dieser Forschungsarbeit wird ein Szenario untersucht, in dem ein anfälliges Gerät von einem Angreifer kompromittiert wird und den Code zur Implementierung eines gefälschten Blockierungsmodus einschleust. Wenn ein Benutzer mit hohem Risiko (z. B. Journalisten, Regierungsbeamte, Führungskräfte) des kompromittierten Geräts den Blockierungsmodus aktiviert, löst er damit den Code des Angreifers aus, der die visuellen Anzeigen des Blockierungsmodus implementiert, jedoch keine Änderungen an der Konfiguration des Geräts vornimmt.
Wurde Ihr Blockierungsmodus manipuliert?
Der Blockierungsmodus von Apple in iOS 16 ist eine nützliche Funktion für bestimmte Situationen, aber wenn Ihr Telefon bereits kompromittiert wurde, schützt Sie der Blockierungsmodus nicht mehr. Dieser Blog-Beitrag befasst sich mit unseren Untersuchungen zum vorgetäuschten Blockierungsmodus, aus denen hervorgeht, dass ein Hacker, der sich bereits Zugriff zu Ihrem Gerät verschafft hat, dafür sorgen kann, dass der Blockierungsmodus „umgangen“ wird, wenn dieser aktiviert wird.
Die Einführung des Blockierungsmodus
Apple führte den Blockierungsmodus im September 2022 als Reaktion auf den Anstieg der weltweiten Cyberangriffe ein. Wie unten dargestellt und laut der Threat Analysis Group (TAG) von Google, wurde in den Jahren 2021 und 2022 die höchste Anzahl von Zero-Day-Angriffen unter realen Bedingungen verzeichnet, seit die TAG Mitte 2014 mit der Erfassung solcher Vorfälle begann. Bezeichnenderweise kann eine der berüchtigtsten Spyware-Marken, Pegasus, das neueste iPhone infizieren, ohne dass eine Interaktion des Benutzers erforderlich ist – bekannt als Zero-Click-Angriff. Trotz der kontinuierlichen Bemühungen von Apple, seine Sicherheitsarchitektur in den letzten Jahren zu verbessern, haben die Betreiber:innen von Pegasus die bemerkenswerte Fähigkeit bewiesen, neue Schwachstellen zu entdecken und Zero-Click-Angriffe durchzuführen. Diese Situation löste bei den Benutzern Besorgnis aus, was zur Einführung des Blockierungsmodus führte, um diesem wachsenden Trend entgegenzuwirken und den iPhone-Benutzer:innen Sicherheit zu geben.
Der Blockierungsmodus funktioniert so, dass er die Funktionalitäten minimiert, auf die potenzielle Angreifer:innen aus der Ferne zugreifen können. Dieser Ansatz ist zwar einfach, aber wirkungsvoll, denn je weniger Code Sie preisgeben, desto weniger Code können Cyberkriminelle nutzen, um Schwachstellen auszunutzen. Apple beschreibt den Blockierungsmodus wie folgt:
Der Blockierungsmodus ist ein optionaler, extrem wirksamer Schutz, der für die wenigen Personen gedacht ist, die aufgrund ihrer Person oder ihrer Tätigkeit möglicherweise im Visier einiger der raffiniertesten digitalen Bedrohungen stehen. Die meisten Menschen werden nie Ziel von Angriffen dieser Art.
Wenn der Blockierungsmodus aktiviert ist, funktioniert Ihr Gerät nicht wie gewohnt. Um die Angriffsfläche zu verringern, die potenziell von gezielter Söldner-Spyware ausgenutzt werden könnte, sind bestimmte Apps, Websites und Funktionen aus Sicherheitsgründen stark eingeschränkt, und einige Funktionen stehen möglicherweise gar nicht zur Verfügung.
Der Blockierungsmodus ist für iOS 16 oder höher, iPadOS 16 oder höher, watchOS 10 oder höher und macOS Ventura oder höher verfügbar. Zusätzliche Schutzmaßnahmen sind in iOS 17, iPadOS 17, watchOS 10 und macOS Sonoma verfügbar. Um von einem vollständigen Schutz zu profitieren, sollten Sie Ihre Geräte auf die neueste Softwareversion aktualisieren, bevor Sie den Blockierungsmodus aktivieren.
Im Blockierungsmodus wird beispielsweise eine eingeschränkte Webbrowser-Engine für die Verwendung mit Captive Portals. Ein Captive Portal ist eine Webseite, die in der Regel angezeigt wird, wenn Sie eine Verbindung zu einem öffentlichen WLAN-Netzwerk herstellen, und die häufig zu Werbe- oder Authentifizierungszwecken verwendet wird. Die Web-Engine, die hinter Captive-Portalen steht, unterliegt weiteren Beschränkungen. Eine der wichtigsten Einschränkungen ist die Deaktivierung der Just-In-Time (JIT)-JavaScript-Kompilierung aus Sicherheitsgründen. Diese Einschränkung gilt auch für den Blockierungsmodus. Das führt dazu, dass die Nutzung des Blockierungsmodus bei Webanwendungen zu Leistungs- und Reaktionsfähigkeitseinbußen von bis zu 95 Prozent führt, wenn es um die JavaScript-Engine geht.
Wenn Sie den Blockierungsmodus aktivieren, wird die Unterstützung für bestimmte Dateiformate entfernt, primär aufgrund ihrer Vergangenheit in Bezug auf deren Ausnutzung. Außerdem werden Komfortfunktionen deaktiviert, so werden beispielsweise keine Vorschauen von über Nachrichten gesendeten Links mehr angezeigt, geteilte Alben werden deaktiviert und die Installation von Konfigurationsprofilen sowie die Registrierung in Mobilgeräteverwaltungssoftware (MDM) wird verhindert.
Die folgende Abbildung von blacktop auf GitHub zeigt, was der Blockierungsmodus deaktiviert.
Spulen wir ins Jahr 2023 vor - die Wirksamkeit des Blockierungsmodus ist mittlerweile offensichtlich. Im September 2023 identifizierte CitizenLab eine aktiv ausgenutzte Zero-Click-Exploit-Kette mit der Bezeichnung BLASTPASS, die auf die neueste iOS 16-Version abzielte, die zu diesem Zeitpunkt verfügbar war. Sowohl CitizenLab als auch Apple haben bestätigt, dass die Aktivierung des Blockierungsmodus diesen spezifischen Angriff verhindert. Obwohl sie keine weiteren Details veröffentlicht haben, um einen potenziellen Missbrauch zu verhindern, ist es wahrscheinlich, dass nun ein gewisses Maß an Benutzerinteraktion erforderlich ist, um den Exploit auszulösen, nachdem der Blockierungsmodus aktiviert wurde. Dadurch wird die Zero-Click-Fähigkeit des Angriffs deaktiviert, was den Benutzer:innen die Möglichkeit gibt, zu reagieren.
Einschränkungen des Blockierungsmodus
Der Blockierungsmodus hat sich zwar in bestimmten Szenarien als wirksam erwiesen, doch unsere Untersuchung des Modus hat gezeigt, dass er einen Angriff, durch den das Gerät bereits kompromittiert wurde, nicht mehr stoppen kann. iPhone Benutzer:innen sollten sich darüber im Klaren sein, dass die Aktivierung des Blockierungsmodus keinen Einfluss auf einen Trojaner hat, der bereits in das System eingeschleust wurde. Der Blockierungsmodus dient in erster Linie dazu, potenzielle Angriffsvektoren zu reduzieren, und nicht darin, zusätzliche Sicherheitsmaßnahmen einzuführen, um die Ausführung bösartiger Payloads zu verhindern.
Im weiteren Verlauf des Artikels wird gezeigt, wie der Blockierungsmodus bei einem bereits infizierten iPhone manipuliert werden kann, um dem Benutzer ein falsches Sicherheitsgefühl zu vermitteln.
Der Schalter
Wie unten gezeigt, sehen wir uns zunächst die Umschaltfunktion für den Blockierungsmodus in der App „Einstellungen“ an. Viele der Vorgänge, die hinter den Kulissen ablaufen, sind für die Benutzer:innen unsichtbar, außer beim Neustart. Wir haben im dyldcache nach der Zeichenfolge „lockdownMode“ gesucht und festgestellt, dass ein Framework namens PrivacySettingsUI zwei C-Funktionen mit den folgenden Namen implementiert hat:
bool isLockdownModeEnabled()
void setLockdownModeEnabled(bool)
In der Funktion void setLockdownModeEnabled(bool) wird der boolesche Wert des Schlüssels LDMGlobalEnabled über die NSUserDefaults API auf „Ja“ konfiguriert. Durch die Überwachung von Dateiänderungsereignissen haben wir den Pfad dieser Datei gefunden: /var/mobile/Library/Preferences/.GlobalPreferences.plist
Dieser Einzelwert dient als primärer Indikator dafür, ob das System den Blockierungsmodus als aktiv betrachtet oder nicht. Durch manuelles Überschreiben der Standarddatenbank des Benutzers und Setzen dieses Werts auf „Ja“ – was über einen solchen Befehl erreicht wird:
[[NSUserDefaults standardUserDefaults] setObject: [NSNumber numberWithBool: 1] forKey:@"LDMGlobalEnabled" inDomain: @"NSGlobalDomain"]
Dieser Befehl kann in fast jedem Prozess außerhalb der Sandbox ausgeführt werden. In den Rückgabewerten zahlreicher Funktionen sind Änderungen zu beobachten; diese Funktionen finden Sie, indem Sie im dyldcache den Befehl „grep -i lockdownMode“ ausführen.
Einige wenige Funktionen, wie PUILockdownModeController, erfordern die Initialisierung einer neuen Instanz, da das Lesen der Datei in der Initialisierungsmethode erfolgt. Dennoch liefern alle diese Prozesse nach ihrem Neustart positive Ergebnisse, wodurch der Blockierungsmodus auf dem gesamten Gerät aktiviert wird, und diese Änderung wird ohne einen vollständigen Neustart des Geräts wirksam.
Dies bestätigt unsere Vermutung, dass der Blockierungsmodus ab iOS 16.5 weiterhin als Benutzerbereich-Artefakt funktioniert (der Kernel ist sich dessen nicht bewusst). Wir haben im Kernel von iOS 16.5 keine Code-Implementierung für den Blockierungsmodus gefunden. Ein Neustart des Systems ist zum Aktivieren oder Deaktivieren des Blockierungsmodus in diesem Stadium nicht erforderlich.
Aber das ist nur im Moment so. Unter Bezugnahme auf die Erkenntnisse aus der „Anatomie des Blockierungsmodus“ von blacktop hat Apple seit iOS 17 den Blockierungsmodus auf die Kernel-Ebene gehoben. Es enthält nun einen eigenen Hintergrund-Daemon, zu finden unter /System/Library/PrivateFrameworks/LockdownMode.framework/lockdownmoded, und ein KEXT namens com.apple.driver.AppleLockdownMode. Dieser strategische Schritt ist ein wichtiger Meilenstein zur Verbesserung der Sicherheit, da Änderungen, die durch den Blockierungsmodus im Kernel vorgenommen werden, dank bestehender Sicherheitsvorkehrungen normalerweise nicht ohne einen Neustart des Systems rückgängig gemacht werden können.
Der Neustart wurde vereitelt
Zurück zum Thema „Manipulation des Blockierungsmodus“: Unser Ziel in Bezug auf die App „Einstellungen“ ist es, den Blockierungsmodus unwirksam zu machen und den Neustart des Systems durch einen Neustart im Benutzerbereich zu ersetzen. Diese Demonstration soll zeigen, wie Malware die Benutzer:innen austricksen kann. Im Falle eines kompromittierten Telefons gibt es keine Sicherheitsvorkehrungen, die verhindern, dass die Malware im Hintergrund läuft, unabhängig davon, ob der Benutzer den Blockierungsmodus aktiviert oder nicht.
Wenn ein Benutzer in der App „Einstellungen“ den Blockierungsmodus aktiviert, wird die Methode -[PUILockdownModeController setLockdownModeGloballyEnabled:] ausgelöst, und die darin enthaltene Abfolge von Ereignissen gibt einen klaren Überblick über die Funktionsweise des Blockierungsmodus. Es beginnt mit der Deaktivierung von freigegebenen Alben und Linkvorschauen, gefolgt von der Deaktivierung des Entwicklermodus und der Aktivierung des eingeschränkten USB-Modus. Die Profilinstallation wird ebenfalls deaktiviert und der Schlüssel LDMGlobalEnabled in der Standarddatenbank des Benutzers wird auf „Ja“ gesetzt, wobei die Änderungen synchronisiert werden. Innerhalb der Funktion _DaemonReady wird CFNotificationCenterPostNotification() aufgerufen, um WebKit-Prozesse über die Konfigurationsänderung zu informieren. Zum Schluss wird das Gerät neu gestartet.
Da -[PUILockdownModeController setLockdownModeGloballyEnabled:] eine Objective-C-Methode ist, können Sie die method_exchangeImplementations Hooking-Technik verwenden, um ihren Inhalt zu ersetzen. Was wir gemacht haben, ist ganz einfach: Immer wenn der Benutzer den Blockierungsmodus einschaltet, wird eine Datei mit dem Namen /fakelockdownmode_on als Indikator erstellt, und ein Neustart des Benutzerbereichs wird eingeleitet. Wir haben auch andere Funktionen abgefangen, wie zum Beispiel -[PUILockdownModeController lockdownModeEnabled], um Ergebnisse basierend auf der Existenz dieser Datei zurückzugeben.
Auf diese Weise wurde das Gerät nicht wirklich neu gestartet, sodass unser eingeschleuster Code weiterhin die flexible Kontrolle über den Blockierungsmodus behalten konnte. Das bedeutet auch, dass selbst Malware, die nicht persistent ist, dauerhaft ausgeführt werden und die Benutzer:innen überwachen kann.
Vorgetäuschter Blockierungsmodus in Safari
Zur weiteren Veranschaulichung der Manipulation des Blockierungsmodus haben wir Safari gewählt, eine der am häufigsten verwendeten Anwendungen. Wenn ein Benutzer mit Safari auf einer Website surft, sieht er eine auffällige Kennzeichnung mit der Aufschrift „Lockdown aktiviert“. Diese Kennzeichnung dient als Hinweis darauf, dass zum Darstellen der aktuellen Webseite eine Captive-Portal-Version der Web-Engine verwendet wird. Wenn aus irgendeinem Grund stattdessen die reguläre Web-Engine verwendet wird, zeigt Safari an prominenter Stelle „Lockdown aus“ in einer roten, auffälligen Schriftart an. Dieses Szenario tritt auf, wenn ein Benutzer eine vertrauenswürdige Website besucht – eine Einstellung, die in den Website-Einstellungen angepasst werden kann.
Safari verlässt sich vollständig auf eine einzige Funktion, +[WBSUIFeatureAvailability isLockdownModeEnabledForSafari], um den Status des Blockierungsmodus zu bestimmen. Indem wir diese Funktion mit einem Hook versehen, können wir dafür sorgen, dass diese Funktion in verschiedenen Szenarien die gewünschten Ergebnisse liefert. Beispielsweise können wir festlegen, dass die Funktion „Nein“ zurückgibt, wenn es darum geht, zu entscheiden, ob die Captive-Portal-Web-Engine verwendet werden soll, und „Ja“, wenn es darum geht, das Erscheinungsbild oberflächlicher Elemente wie die Beschriftung „Lockdown bereit“ in der Benutzeroberfläche festzulegen.
Jetzt verhält sich Safari so, als ob alle Websites vertrauenswürdig sind, und wir müssen einige Schritte unternehmen, um die Kennzeichnung „Lockdown aus“ zu ändern. Um dies zu erreichen, suchen wir zunächst nach der Zeichenfolge „Lockdown aus“ und lokalisieren die Funktion namens WBSAnnotationStringForLockdownModeStatus. Durch die Überwachung des Backtrace sehen wir, dass sie von -[SFLockdownStatusBar _updateLabelWithLockdownStatus:] aufgerufen wurde, einer Objective-C-Methode, die sich bequem abfangen lässt. Wir ändern diese Funktion so, dass sie „Lockdown aktiv“ anzeigt, obwohl sie normalerweise „Lockdown aus“ anzeigen würde.
Demo-Video
In diesem Demonstrationsvideo aktiviert ein Benutzer den Blockierungsmodus in den Einstellungen. Obwohl das Gerät im Blockierungsmodus zu sein scheint, ist dieser in Wirklichkeit deaktiviert, da wir immer noch PDF-Dateien in Safari anzeigen können. Bei unserer Demonstration wurde auch eine von crypt.ee entwickelte Website verwendet, die mit technischen Mitteln den Status des Blockierungsmodus überprüft.
Jamf Mobile Forensics kann ausgeklügelte Angriffe identifizieren, um Ihre Benutzer:innen zu schützen.
Abonnieren Sie den Jamf Blog
Wir sorgen dafür, dass Apple Updates sowie Jamf Neuigkeiten direkt bei Ihnen im Postfach landen.
Um mehr darüber zu erfahren, wie wir Ihre Informationen sammeln, verwenden, offenlegen, übertragen und speichern, werfen Sie bitte einen Blick auf unsere Datenschutzbestimmungen.