macOS Keychain
Principaux trousseaux
Le trousseau utilisateur (
~/Library/Keychains/login.keycahin-db
), qui est utilisé pour stocker les informations d'identification spécifiques à l'utilisateur telles que les mots de passe d'application, les mots de passe Internet, les certificats générés par l'utilisateur, les mots de passe réseau et les clés publiques/privées générées par l'utilisateur.Le trousseau système (
/Library/Keychains/System.keychain
), qui stocke les informations d'identification à l'échelle du système telles que les mots de passe WiFi, les certificats racine du système, les clés privées du système et les mots de passe d'application système.
Accès au trousseau de mots de passe
Ces fichiers, bien qu'ils n'aient pas de protection inhérente et puissent être téléchargés, sont chiffrés et nécessitent le mot de passe en clair de l'utilisateur pour être déchiffrés. Un outil comme Chainbreaker pourrait être utilisé pour le déchiffrement.
Protections des entrées du trousseau
ACLs
Chaque entrée dans le trousseau est régie par des listes de contrôle d'accès (ACLs) qui dictent qui peut effectuer diverses actions sur l'entrée du trousseau, notamment :
ACLAuhtorizationExportClear : Permet au détenteur d'obtenir le texte en clair du secret.
ACLAuhtorizationExportWrapped : Permet au détenteur d'obtenir le texte en clair chiffré avec un autre mot de passe fourni.
ACLAuhtorizationAny : Permet au détenteur d'effectuer n'importe quelle action.
Les ACLs sont accompagnées d'une liste d'applications de confiance qui peuvent effectuer ces actions sans invitation. Cela pourrait être :
N
il
(aucune autorisation requise, tout le monde est de confiance)Une liste vide (personne n'est de confiance)
Liste d'applications spécifiques.
De plus, l'entrée peut contenir la clé ACLAuthorizationPartitionID
, qui est utilisée pour identifier le teamid, apple, et cdhash.
Si le teamid est spécifié, alors pour accéder à la valeur de l'entrée sans invitation, l'application utilisée doit avoir le même teamid.
Si l'apple est spécifié, alors l'application doit être signée par Apple.
Si le cdhash est indiqué, alors l'application doit avoir le cdhash spécifique.
Création d'une entrée de trousseau
Lorsqu'une nouvelle entrée est créée en utilisant Keychain Access.app
, les règles suivantes s'appliquent :
Toutes les applications peuvent chiffrer.
Aucune application ne peut exporter/déchiffrer (sans inviter l'utilisateur).
Toutes les applications peuvent voir le contrôle d'intégrité.
Aucune application ne peut modifier les ACL.
L'ID de partition est défini sur
apple
.
Lorsqu'une application crée une entrée dans le trousseau, les règles sont légèrement différentes :
Toutes les applications peuvent chiffrer.
Seule l'application créatrice (ou toute autre application ajoutée explicitement) peut exporter/déchiffrer (sans inviter l'utilisateur).
Toutes les applications peuvent voir le contrôle d'intégrité.
Aucune application ne peut modifier les ACL.
L'ID de partition est défini sur
teamid:[teamID ici]
.
Accès au trousseau
security
security
APIs
La numérotation et l'extraction des secrets du trousseau qui ne généreront pas de fenêtre contextuelle peuvent être effectuées avec l'outil LockSmith
Listez et obtenez des informations sur chaque entrée du trousseau :
L'API
SecItemCopyMatching
donne des informations sur chaque entrée et il existe quelques attributs que vous pouvez définir lors de son utilisation :kSecReturnData
: Si vrai, il tentera de décrypter les données (définissez-le sur faux pour éviter les fenêtres contextuelles potentielles)kSecReturnRef
: Obtenez également la référence de l'élément du trousseau (définissez-le sur vrai au cas où vous pourriez décrypter sans fenêtre contextuelle)kSecReturnAttributes
: Obtenez des métadonnées sur les entréeskSecMatchLimit
: Combien de résultats renvoyerkSecClass
: Quel type d'entrée de trousseau
Obtenez les ACL de chaque entrée :
Avec l'API
SecAccessCopyACLList
vous pouvez obtenir l'ACL de l'élément du trousseau, et il renverra une liste d'ACL (commeACLAuhtorizationExportClear
et les autres mentionnés précédemment) où chaque liste a :Description
Liste d'applications de confiance. Cela pourrait être :
Une application : /Applications/Slack.app
Un binaire : /usr/libexec/airportd
Un groupe : group://AirPort
Exportez les données :
L'API
SecKeychainItemCopyContent
obtient le texte en clairL'API
SecItemExport
exporte les clés et certificats mais il peut être nécessaire de définir des mots de passe pour exporter le contenu chiffré
Et voici les exigences pour pouvoir exporter un secret sans fenêtre contextuelle :
Si 1+ applications de confiance sont répertoriées :
Besoin des autorisations appropriées (
Nil
, ou être partie de la liste autorisée d'applications dans l'autorisation pour accéder aux informations secrètes)Besoin que la signature de code corresponde à PartitionID
Besoin que la signature de code corresponde à celle d'une application de confiance (ou être membre du bon KeychainAccessGroup)
Si toutes les applications sont de confiance :
Besoin des autorisations appropriées
Besoin que la signature de code corresponde à PartitionID
Si aucun PartitionID, alors cela n'est pas nécessaire
Par conséquent, s'il y a 1 application répertoriée, vous devez injecter du code dans cette application.
Si apple est indiqué dans le partitionID, vous pourriez y accéder avec osascript
pour tout ce qui fait confiance à toutes les applications avec apple dans le partitionID. Python
pourrait également être utilisé pour cela.
Deux attributs supplémentaires
Invisible : C'est un indicateur booléen pour masquer l'entrée de l'application UI Keychain
Général : C'est pour stocker des métadonnées (donc ce n'est PAS CHIFFRÉ)
Microsoft stockait en texte clair tous les jetons de rafraîchissement pour accéder à des points de terminaison sensibles.
Références
Last updated