macOS Keychain
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Haupt-Schlüsselbunde
Der Benutzerschlüsselbund (
~/Library/Keychains/login.keycahin-db
), der verwendet wird, um benutzerspezifische Anmeldeinformationen wie Anwendungskennwörter, Internetkennwörter, benutzergenerierte Zertifikate, Netzwerkkennwörter und benutzergenerierte öffentliche/private Schlüssel zu speichern.Der Systemschlüsselbund (
/Library/Keychains/System.keychain
), der systemweite Anmeldeinformationen wie WiFi-Kennwörter, Systemstammzertifikate, systemweite private Schlüssel und systemweite Anwendungskennwörter speichert.
Passwort Schlüsselbund Zugriff
Diese Dateien, obwohl sie keinen inhärenten Schutz haben und heruntergeladen werden können, sind verschlüsselt und erfordern das Klartextkennwort des Benutzers zur Entschlüsselung. Ein Tool wie Chainbreaker könnte zur Entschlüsselung verwendet werden.
Schutz der Schlüsselbund-Einträge
ACLs
Jeder Eintrag im Schlüsselbund wird durch Zugriffskontrolllisten (ACLs) geregelt, die festlegen, wer verschiedene Aktionen auf dem Schlüsselbund-Eintrag ausführen kann, einschließlich:
ACLAuhtorizationExportClear: Ermöglicht dem Inhaber, den Klartext des Geheimnisses zu erhalten.
ACLAuhtorizationExportWrapped: Ermöglicht dem Inhaber, den Klartext zu erhalten, der mit einem anderen bereitgestellten Kennwort verschlüsselt ist.
ACLAuhtorizationAny: Ermöglicht dem Inhaber, jede Aktion auszuführen.
Die ACLs werden zusätzlich von einer Liste vertrauenswürdiger Anwendungen begleitet, die diese Aktionen ohne Aufforderung ausführen können. Dies könnte sein:
N
il
(keine Autorisierung erforderlich, jeder ist vertrauenswürdig)Eine leere Liste (niemand ist vertrauenswürdig)
Liste spezifischer Anwendungen.
Außerdem könnte der Eintrag den Schlüssel ACLAuthorizationPartitionID
enthalten, der verwendet wird, um die teamid, apple und cdhash zu identifizieren.
Wenn die teamid angegeben ist, muss die verwendete Anwendung, um den Eintrag ohne Aufforderung zu zugreifen, die gleiche teamid haben.
Wenn apple angegeben ist, muss die App von Apple signiert sein.
Wenn die cdhash angegeben ist, muss die App die spezifische cdhash haben.
Erstellen eines Schlüsselbund-Eintrags
Wenn ein neuer Eintrag mit Keychain Access.app
erstellt wird, gelten die folgenden Regeln:
Alle Apps können verschlüsseln.
Keine Apps können exportieren/entschlüsseln (ohne den Benutzer aufzufordern).
Alle Apps können die Integritätsprüfung sehen.
Keine Apps können die ACLs ändern.
Die partitionID wird auf
apple
gesetzt.
Wenn eine Anwendung einen Eintrag im Schlüsselbund erstellt, sind die Regeln etwas anders:
Alle Apps können verschlüsseln.
Nur die erstellende Anwendung (oder andere ausdrücklich hinzugefügte Apps) können exportieren/entschlüsseln (ohne den Benutzer aufzufordern).
Alle Apps können die Integritätsprüfung sehen.
Keine Apps können die ACLs ändern.
Die partitionID wird auf
teamid:[teamID hier]
gesetzt.
Zugriff auf den Schlüsselbund
security
security
APIs
Die Aufzählung und das Dumpen von Geheimnissen, die keine Eingabeaufforderung erzeugen, kann mit dem Tool LockSmith durchgeführt werden.
Liste und erhalte Informationen über jeden Schlüsselbund-Eintrag:
Die API
SecItemCopyMatching
gibt Informationen über jeden Eintrag und es gibt einige Attribute, die du beim Verwenden festlegen kannst:kSecReturnData
: Wenn wahr, wird versucht, die Daten zu entschlüsseln (auf falsch setzen, um potenzielle Pop-ups zu vermeiden)kSecReturnRef
: Erhalte auch einen Verweis auf das Schlüsselbund-Element (auf wahr setzen, falls du später siehst, dass du ohne Pop-up entschlüsseln kannst)kSecReturnAttributes
: Erhalte Metadaten über EinträgekSecMatchLimit
: Wie viele Ergebnisse zurückgegeben werden sollenkSecClass
: Welche Art von Schlüsselbund-Eintrag
Erhalte ACLs jedes Eintrags:
Mit der API
SecAccessCopyACLList
kannst du die ACL für das Schlüsselbund-Element abrufen, und es wird eine Liste von ACLs zurückgegeben (wieACLAuhtorizationExportClear
und die zuvor genannten), wobei jede Liste hat:Beschreibung
Vertrauenswürdige Anwendungs-Liste. Dies könnte sein:
Eine App: /Applications/Slack.app
Ein Binary: /usr/libexec/airportd
Eine Gruppe: group://AirPort
Exportiere die Daten:
Die API
SecKeychainItemCopyContent
erhält den KlartextDie API
SecItemExport
exportiert die Schlüssel und Zertifikate, könnte aber erforderlich sein, Passwörter festzulegen, um den Inhalt verschlüsselt zu exportieren
Und dies sind die Anforderungen, um ein Geheimnis ohne Eingabeaufforderung zu exportieren:
Wenn 1+ vertrauenswürdige Apps aufgelistet sind:
Benötige die entsprechenden Berechtigungen (
Nil
, oder Teil der erlaubten Liste von Apps in der Berechtigung, um auf die geheimen Informationen zuzugreifen)Benötige eine Codesignatur, die mit PartitionID übereinstimmt
Benötige eine Codesignatur, die mit der eines vertrauenswürdigen App übereinstimmt (oder Mitglied der richtigen KeychainAccessGroup sein)
Wenn alle Anwendungen vertrauenswürdig sind:
Benötige die entsprechenden Berechtigungen
Benötige eine Codesignatur, die mit PartitionID übereinstimmt
Wenn keine PartitionID, dann ist dies nicht erforderlich
Daher, wenn 1 Anwendung aufgelistet ist, musst du Code in dieser Anwendung injizieren.
Wenn apple in der PartitionID angegeben ist, könntest du darauf mit osascript
zugreifen, sodass alles, was alle Anwendungen mit apple in der PartitionID vertraut, darauf zugreifen kann. Python
könnte auch dafür verwendet werden.
Zwei zusätzliche Attribute
Unsichtbar: Es ist ein boolesches Flag, um den Eintrag in der UI Schlüsselbund-App zu verstecken
Allgemein: Es dient zur Speicherung von Metadaten (also ist es NICHT VERSCHLÜSSELT)
Microsoft speicherte alle Refresh-Token im Klartext, um auf sensible Endpunkte zuzugreifen.
Referenzen
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated