Passwortleck (und noch viel mehr!) unter macOS
Einführung
Dieser Artikel beschreibt die Schwachstelle CVE-2024-54471, die in Apples Sicherheitsupdates enthalten ist. Diese Schwachstelle wurde in macOS Sequoia 15.1, macOS Sonoma 14.7.1 und macOS Ventura 13.7.1 behoben. Wenn du ein macOS-Gerät verwendest, wird empfohlen, auf die neueste Version zu aktualisieren.
Was ist ein Kernel?
Der Code in einem Betriebssystem, der mit der Hardware kommuniziert und Anwendungen ein Multitasking-Modell bereitstellt, wird Kernel genannt. Der Kernel von macOS ist XNU, ein Hybrid-Kernel, der Varianten des BSD-Kernels und des Mach-Kernels enthält.
Die Geschichte von Mach
Der Mach-Kernel ist eng mit den Unix-Kriegen der 1980er- und 1990er-Jahre verflochten. Mach begann als Forschungsprojekt für Betriebssysteme an der Carnegie Mellon University und wurde im Betriebssystem NeXTSTEP eingesetzt, das letztlich die Grundlage für macOS bildete.
Warum Mach?
Mach wurde entwickelt, um die Komplexität von Entwurf und Nutzung von Unix-Systemen zu verringern. Mach besteht aus vier grundlegenden Abstraktionen, die auch im modernen macOS weiterhin verwendet werden.
Die Architektur von Mach
Vier Abstraktionen
- Task: Eine Umgebung, in der Threads ausgeführt werden können, und die grundlegende Einheit der Ressourcenzuweisung.
- Thread: Die grundlegende Einheit der CPU-Nutzung, die innerhalb eines Tasks mit einem unabhängigen Programmzähler arbeitet.
- Port: Ein Kommunikationskanal für Nachrichten, der vom Kernel geschützt wird.
- Nachricht: Eine Menge von Datenobjekten, die zur Kommunikation zwischen Threads verwendet wird.
Tasks, Ports und Port-Rechte
Ports existieren nur im Kernel-Space und werden im User-Space als Port-Rechte offengelegt. Mehrere Tasks können Senderechte für einen Port besitzen, aber das Empfangsrecht kann nur ein einziger Task haben.
Die Struktur von Nachrichten
Jede Mach-Nachricht besteht aus einem Header, optionalen Deskriptoren, einer beliebigen Payload und einem vom Kernel hinzugefügten Trailer.
Wege zum Erhalt von Senderechten
macOS verfügt über einen Bootstrap-Server, der das Empfangsrecht für Ports hält, für die alle Tasks Senderechte besitzen. Clients können beim Bootstrap-Server Senderechte für einen Mach-Service mit einem bestimmten Namen anfordern.
Mach Interface Generator (MIG)
Einführung
MIG ist ein Tool, das funktionale Schnittstellen zum Senden und Empfangen von Mach-Nachrichten erzeugt. Es stellt eine nachrichtenbasierte RPC-ähnliche Schnittstelle bereit und erhöht dadurch die Speichersicherheit.
Technische Details
MIG ist ein Wrapper für Mach-Nachrichten. Jede Funktion wird Routine genannt, und eine Menge von Routinen wird Subsystem genannt. Subsysteme werden über das Message-ID-Feld indiziert.
Schwachstellen in MIG-Servern
Sicherheit von MIG-Servern
Wenn ein MIG-Server den Absender einer Nachricht nicht überprüft, kann jeder Task mit Senderechten die Routinen des Servers aufrufen.
MIG-Server finden
Mit dem CLI-Tool ipsw lassen sich Binärdateien suchen, die das Symbol NDR_record verwenden. Das ist nützlich, um MIG-Server und -Clients zu finden.
Schwachstelle in NetAuthAgent
Einführung in NetAuthAgent
NetAuthAgent ist ein Daemon unter macOS, der Anmeldedaten für Dateiserver verarbeitet. Bevor diese Schwachstelle behoben wurde, lieferte er Server-Anmeldedaten auf Anfrage aus.
So funktioniert NetAuthAgent
NetAuthAgent verwendet den macOS-Schlüsselbund, um Anmeldedaten zu speichern. Der Schlüsselbund ist ein zentraler Secret-Manager, und jeder Eintrag hat seine eigene Access Control List.
Der MIG-Server von NetAuthAgent
NetAuthAgent stellt einen MIG-Server bereit, der beim Bootstrap-Server unter dem Namen com.apple.netauth.user.gui registriert ist. Dieser Server bietet Routinen zum Lesen, Erstellen und Überschreiben von Anmeldedaten.
Auswirkungen der Schwachstelle
Offenlegung von iCloud-API-Tokens
Diese Schwachstelle kann iCloud-API-Tokens offenlegen, wodurch Angreifer Nutzerinformationen exfiltrieren oder den Standort anderer Geräte verfolgen könnten.
Was Apple hätte tun sollen
Dieser Artikel enthält auch eine Diskussion darüber, welche Maßnahmen Apple zur Behebung dieser Schwachstelle hätte ergreifen sollen.
1 Kommentare
Hacker-News-Kommentare
Gut geschriebener Artikel. Er erinnert mich an den Zero-Day-Vorfall, den Apple eine Zeit lang eher herunterzuspielen versuchte. Damals konnte man den Root-Login umgehen, indem man „leeres Passwort zweimal versuchen“ nutzte. Das war wohl 2017 oder 2018
„ACLs don’t“: <a href="https://waterken.sourceforge.net/aclsdont/current.pdf" rel="nofollow">https://waterken.sourceforge.net/aclsdont/current.pdf</a>
Wenn ein Mechanismus offengelegt wird, mit dem ein Prozess Keychain-Abfragen für einen anderen Prozess weiterleiten kann, kann das die Sicherheit des gesamten Systems schwächen
Es gab eine kleine Korrektur im Artikel
Es hat 8 Stunden gedauert, aber dieser Beitrag ist jetzt nicht mehr unter den Top 5 auf der Startseite (derzeit #27, also immer noch auf der Startseite, aber weiter unten). Danke für alle Kommentare
Ich frage mich, ob der Autor tatsächlichen PoC-Code bereitstellt. Ich möchte die Gegenmaßnahmen testen. Ich habe Beispielcode gesehen, aber er wirkt unvollständig
Sehr interessanter Artikel. Ich wusste nicht, dass es zur Entstehung von Mach und des Darwin-Kernels so viel zu erzählen gibt
Im Moment wirkt Mach wie eine verlässliche Quelle für Bugs in macOS. Ich weiß, dass Apple intensiv daran arbeitet, das alles abzuriegeln, aber ich frage mich, ob es einen Weg gibt, sich vollständig von Mach zu lösen
[tot]