macOS Gatekeeper / Quarantine / XProtect
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Gatekeeper ist eine Sicherheitsfunktion, die für Mac-Betriebssysteme entwickelt wurde, um sicherzustellen, dass Benutzer nur vertrauenswürdige Software auf ihren Systemen ausführen. Es funktioniert, indem es Software validiert, die ein Benutzer herunterlädt und versucht zu öffnen, aus Quellen außerhalb des App Store, wie einer App, einem Plug-in oder einem Installationspaket.
Der Schlüsselmechanismus von Gatekeeper liegt in seinem Überprüfungsprozess. Es wird überprüft, ob die heruntergeladene Software von einem anerkannten Entwickler signiert ist, um die Authentizität der Software sicherzustellen. Darüber hinaus wird festgestellt, ob die Software von Apple notariell beglaubigt wurde, was bestätigt, dass sie frei von bekanntem schädlichem Inhalt ist und nach der Notarisierung nicht manipuliert wurde.
Zusätzlich verstärkt Gatekeeper die Benutzerkontrolle und Sicherheit, indem es Benutzer auffordert, das Öffnen der heruntergeladenen Software zum ersten Mal zu genehmigen. Diese Sicherheitsmaßnahme hilft, zu verhindern, dass Benutzer versehentlich potenziell schädlichen ausführbaren Code ausführen, den sie möglicherweise fälschlicherweise für eine harmlose Datendatei gehalten haben.
Anwendungssignaturen, auch bekannt als Codesignaturen, sind ein kritischer Bestandteil der Sicherheitsinfrastruktur von Apple. Sie werden verwendet, um die Identität des Softwareautors (des Entwicklers) zu überprüfen und sicherzustellen, dass der Code seit der letzten Signierung nicht manipuliert wurde.
So funktioniert es:
Signieren der Anwendung: Wenn ein Entwickler bereit ist, seine Anwendung zu verteilen, signiert er die Anwendung mit einem privaten Schlüssel. Dieser private Schlüssel ist mit einem Zertifikat verbunden, das Apple dem Entwickler ausstellt, wenn er sich im Apple Developer Program anmeldet. Der Signierungsprozess umfasst die Erstellung eines kryptografischen Hashs aller Teile der App und die Verschlüsselung dieses Hashs mit dem privaten Schlüssel des Entwicklers.
Verteilen der Anwendung: Die signierte Anwendung wird dann zusammen mit dem Zertifikat des Entwicklers verteilt, das den entsprechenden öffentlichen Schlüssel enthält.
Überprüfen der Anwendung: Wenn ein Benutzer die Anwendung herunterlädt und versucht, sie auszuführen, verwendet das Mac-Betriebssystem den öffentlichen Schlüssel aus dem Zertifikat des Entwicklers, um den Hash zu entschlüsseln. Es berechnet dann den Hash basierend auf dem aktuellen Zustand der Anwendung neu und vergleicht diesen mit dem entschlüsselten Hash. Wenn sie übereinstimmen, bedeutet dies, dass die Anwendung nicht verändert wurde, seit der Entwickler sie signiert hat, und das System erlaubt es, die Anwendung auszuführen.
Anwendungssignaturen sind ein wesentlicher Bestandteil der Gatekeeper-Technologie von Apple. Wenn ein Benutzer versucht, eine Anwendung zu öffnen, die aus dem Internet heruntergeladen wurde, überprüft Gatekeeper die Anwendungssignatur. Wenn sie mit einem Zertifikat signiert ist, das von Apple an einen bekannten Entwickler ausgestellt wurde, und der Code nicht manipuliert wurde, erlaubt Gatekeeper die Ausführung der Anwendung. Andernfalls blockiert es die Anwendung und warnt den Benutzer.
Seit macOS Catalina überprüft Gatekeeper auch, ob die Anwendung von Apple notariell beglaubigt wurde, was eine zusätzliche Sicherheitsebene hinzufügt. Der Notarisierungsprozess überprüft die Anwendung auf bekannte Sicherheitsprobleme und schädlichen Code, und wenn diese Überprüfungen bestanden werden, fügt Apple der Anwendung ein Ticket hinzu, das Gatekeeper überprüfen kann.
Beim Überprüfen einer Malwareprobe sollten Sie immer die Signatur der Binärdatei überprüfen, da der Entwickler, der sie signiert hat, möglicherweise bereits mit Malware in Verbindung steht.
Apples Notarisierungsprozess dient als zusätzliche Sicherheitsmaßnahme, um Benutzer vor potenziell schädlicher Software zu schützen. Er umfasst das Einreichen der Anwendung durch den Entwickler zur Prüfung durch Apples Notarservice, der nicht mit der App-Überprüfung verwechselt werden sollte. Dieser Service ist ein automatisiertes System, das die eingereichte Software auf das Vorhandensein von schädlichem Inhalt und mögliche Probleme mit der Code-Signierung überprüft.
Wenn die Software diese Inspektion ohne Bedenken besteht, generiert der Notarservice ein Notarisierungsticket. Der Entwickler ist dann verpflichtet, dieses Ticket an seiner Software anzuhängen, ein Prozess, der als 'Stapeln' bekannt ist. Darüber hinaus wird das Notarisierungsticket auch online veröffentlicht, wo Gatekeeper, Apples Sicherheitstechnologie, darauf zugreifen kann.
Bei der ersten Installation oder Ausführung der Software des Benutzers informiert die Existenz des Notarisierungstickets - ob an die ausführbare Datei angeheftet oder online gefunden - Gatekeeper darüber, dass die Software von Apple notariert wurde. Infolgedessen zeigt Gatekeeper eine beschreibende Nachricht im ersten Startdialog an, die darauf hinweist, dass die Software von Apple auf schädlichen Inhalt überprüft wurde. Dieser Prozess erhöht somit das Vertrauen der Benutzer in die Sicherheit der Software, die sie auf ihren Systemen installieren oder ausführen.
Beachten Sie, dass ab der Sequoia-Version spctl
keine Änderungen an der Gatekeeper-Konfiguration mehr zulässt.
spctl
ist das CLI-Tool, um Gatekeeper aufzulisten und mit ihm zu interagieren (über den syspolicyd
-Daemon via XPC-Nachrichten). Zum Beispiel ist es möglich, den Status von GateKeeper mit folgendem Befehl zu sehen:
Beachten Sie, dass die GateKeeper-Signaturprüfungen nur für Dateien mit dem Quarantäneattribut durchgeführt werden, nicht für jede Datei.
GateKeeper überprüft, ob ein Binärprogramm gemäß den Einstellungen und der Signatur ausgeführt werden kann:
syspolicyd
ist der Hauptdaemon, der für die Durchsetzung von Gatekeeper verantwortlich ist. Er verwaltet eine Datenbank, die sich in /var/db/SystemPolicy
befindet, und es ist möglich, den Code zur Unterstützung der Datenbank hier und die SQL-Vorlage hier zu finden. Beachten Sie, dass die Datenbank von SIP nicht eingeschränkt und von root beschreibbar ist und die Datenbank /var/db/.SystemPolicy-default
als ursprüngliches Backup verwendet wird, falls die andere beschädigt wird.
Darüber hinaus enthalten die Bundles /var/db/gke.bundle
und /var/db/gkopaque.bundle
Dateien mit Regeln, die in die Datenbank eingefügt werden. Sie können diese Datenbank als root mit folgendem Befehl überprüfen:
syspolicyd
stellt auch einen XPC-Server mit verschiedenen Operationen wie assess
, update
, record
und cancel
zur Verfügung, die auch über die Security.framework
's SecAssessment*
APIs erreichbar sind, und xpctl
kommuniziert tatsächlich über XPC mit syspolicyd
.
Beachten Sie, wie die erste Regel mit "App Store" endete und die zweite mit "Developer ID" und dass im vorherigen Bild es aktiviert war, Apps aus dem App Store und von identifizierten Entwicklern auszuführen. Wenn Sie diese Einstellung auf den App Store ändern, werden die "Notarized Developer ID" Regeln verschwinden.
Es gibt auch Tausende von Regeln vom Typ GKE:
Diese sind Hashes, die von:
/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth
/var/db/gke.bundle/Contents/Resources/gk.db
/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db
Oder Sie könnten die vorherigen Informationen mit auflisten:
Die Optionen --master-disable
und --global-disable
von spctl
werden diese Signaturprüfungen vollständig deaktivieren:
Wenn vollständig aktiviert, wird eine neue Option erscheinen:
Es ist möglich, zu überprüfen, ob eine App von GateKeeper erlaubt wird mit:
Es ist möglich, neue Regeln in GateKeeper hinzuzufügen, um die Ausführung bestimmter Apps zu erlauben mit:
Bezüglich Kernel-Erweiterungen enthält der Ordner /var/db/SystemPolicyConfiguration
Dateien mit Listen von kexts, die geladen werden dürfen. Darüber hinaus hat spctl
die Berechtigung com.apple.private.iokit.nvram-csr
, da es in der Lage ist, neue vorab genehmigte Kernel-Erweiterungen hinzuzufügen, die ebenfalls in NVRAM unter einem kext-allowed-teams
Schlüssel gespeichert werden müssen.
Beim Herunterladen einer Anwendung oder Datei fügen bestimmte macOS Anwendungen wie Webbrowser oder E-Mail-Clients dem heruntergeladenen Datei ein erweitertes Dateiattribut hinzu, das allgemein als "Quarantäne-Flag" bekannt ist. Dieses Attribut dient als Sicherheitsmaßnahme, um die Datei als von einer nicht vertrauenswürdigen Quelle (dem Internet) stammend zu kennzeichnen und potenziell Risiken zu tragen. Allerdings fügen nicht alle Anwendungen dieses Attribut hinzu; beispielsweise umgeht gängige BitTorrent-Client-Software normalerweise diesen Prozess.
Das Vorhandensein eines Quarantäne-Flags signalisiert die Gatekeeper-Sicherheitsfunktion von macOS, wenn ein Benutzer versucht, die Datei auszuführen.
Im Fall, dass das Quarantäne-Flag nicht vorhanden ist (wie bei Dateien, die über einige BitTorrent-Clients heruntergeladen wurden), werden die Überprüfungen von Gatekeeper möglicherweise nicht durchgeführt. Daher sollten Benutzer vorsichtig sein, wenn sie Dateien öffnen, die aus weniger sicheren oder unbekannten Quellen heruntergeladen wurden.
Die Überprüfung der Gültigkeit von Codesignaturen ist ein ressourcenintensiver Prozess, der das Generieren kryptografischer Hashes des Codes und aller seiner gebündelten Ressourcen umfasst. Darüber hinaus beinhaltet die Überprüfung der Zertifikatsgültigkeit eine Online-Überprüfung bei den Apple-Servern, um zu sehen, ob es nach der Ausstellung widerrufen wurde. Aus diesen Gründen ist eine vollständige Überprüfung der Codesignatur und Notarisierung unpraktisch, um sie jedes Mal auszuführen, wenn eine App gestartet wird.
Daher werden diese Überprüfungen nur bei der Ausführung von Apps mit dem Quarantäne-Attribut durchgeführt.
Dieses Attribut muss von der Anwendung, die die Datei erstellt/herunterlädt, gesetzt werden.
Allerdings haben Dateien, die sandboxed sind, dieses Attribut für jede Datei, die sie erstellen, gesetzt. Und nicht sandboxed Apps können es selbst setzen oder den LSFileQuarantineEnabled Schlüssel in der Info.plist angeben, was das System veranlasst, das com.apple.quarantine
erweiterte Attribut auf den erstellten Dateien zu setzen,
Darüber hinaus sind alle Dateien, die von einem Prozess erstellt werden, der qtn_proc_apply_to_self
aufruft, quarantiniert. Oder die API qtn_file_apply_to_path
fügt dem angegebenen Dateipfad das Quarantäne-Attribut hinzu.
Es ist möglich, den Status zu überprüfen und zu aktivieren/deaktivieren (Root erforderlich) mit:
Du kannst auch herausfinden, ob eine Datei das Quarantäne-Erweiterungsattribut hat mit:
Überprüfen Sie den Wert der erweiterten Attribute und finden Sie die App, die das Quarantäne-Attribut mit folgendem geschrieben hat:
Tatsächlich könnte ein Prozess "Quarantäne-Flags für die Dateien setzen, die er erstellt" (ich habe bereits versucht, das USER_APPROVED-Flag in einer erstellten Datei anzuwenden, aber es wird nicht angewendet):
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)