macOS XPC Connecting Process Check
XPC Verbindung Prozessprüfung
Wenn eine Verbindung zu einem XPC-Dienst hergestellt wird, überprüft der Server, ob die Verbindung zulässig ist. Dies sind die üblicherweise durchgeführten Überprüfungen:
Überprüfen Sie, ob der verbindende Prozess mit einem von Apple signierten Zertifikat signiert ist (das nur von Apple vergeben wird).
Wenn dies nicht überprüft wird, könnte ein Angreifer ein gefälschtes Zertifikat erstellen, um jede andere Überprüfung zu erfüllen.
Überprüfen Sie, ob der verbindende Prozess mit dem Zertifikat der Organisation signiert ist (Team-ID-Überprüfung).
Wenn dies nicht überprüft wird, kann jedes Entwicklerzertifikat von Apple zum Signieren und zur Verbindung mit dem Dienst verwendet werden.
Überprüfen Sie, ob der verbindende Prozess eine korrekte Bundle-ID enthält.
Wenn dies nicht überprüft wird, kann jedes von derselben Organisation signierte Tool verwendet werden, um mit dem XPC-Dienst zu interagieren.
(4 oder 5) Überprüfen Sie, ob der verbindende Prozess eine korrekte Softwareversionsnummer hat.
Wenn dies nicht überprüft wird, können alte, unsichere Clients, die anfällig für Prozesseinspritzung sind, verwendet werden, um sich mit dem XPC-Dienst zu verbinden, selbst wenn die anderen Überprüfungen vorhanden sind.
(4 oder 5) Überprüfen Sie, ob der verbindende Prozess eine gehärtete Laufzeit ohne gefährliche Berechtigungen hat (wie solche, die das Laden beliebiger Bibliotheken oder die Verwendung von DYLD-Umgebungsvariablen ermöglichen).
Wenn dies nicht überprüft wird, könnte der Client anfällig für Codeinjektion sein.
Überprüfen Sie, ob der verbindende Prozess eine Berechtigung hat, die ihm die Verbindung mit dem Dienst ermöglicht. Dies gilt für Apple-Binärdateien.
Die Überprüfung muss basierend auf dem Audit-Token des verbindenden Clients erfolgen, anstatt auf seiner Prozess-ID (PID), da ersteres PID-Wiederverwendungsangriffe verhindert.
Entwickler verwenden die Audit-Token-API-Routine selten, da sie privat ist und von Apple jederzeit geändert werden könnte. Außerdem ist die Verwendung privater APIs in Mac App Store-Apps nicht zulässig.
Wenn die Methode
processIdentifier
verwendet wird, könnte sie anfällig sein.Anstelle von
xpc_connection_get_audit_token
solltexpc_dictionary_get_audit_token
verwendet werden, da letztere in bestimmten Situationen ebenfalls anfällig sein könnte.
Kommunikationsangriffe
Weitere Informationen zum Angriff auf die PID-Wiederverwendung finden Sie unter:
pagemacOS PID ReuseWeitere Informationen zum Angriff auf xpc_connection_get_audit_token
finden Sie unter:
Trustcache - Prävention von Downgrade-Angriffen
Trustcache ist eine defensive Methode, die in Apple Silicon-Maschinen eingeführt wurde und eine Datenbank von CDHSAH von Apple-Binärdateien speichert, sodass nur zugelassene, nicht modifizierte Binärdateien ausgeführt werden können. Dadurch wird die Ausführung von Downgrade-Versionen verhindert.
Codebeispiele
Der Server implementiert diese Überprüfung in einer Funktion namens shouldAcceptNewConnection
.
Das Objekt NSXPCConnection hat eine private Eigenschaft auditToken
(die verwendet werden sollte, aber sich ändern könnte) und eine öffentliche Eigenschaft processIdentifier
(die nicht verwendet werden sollte).
Der verbindende Prozess könnte mit etwas Ähnlichem überprüft werden:
Wenn ein Entwickler die Version des Clients nicht überprüfen möchte, könnte er zumindest überprüfen, ob der Client anfällig für Prozessinjektion ist:
Last updated