macOS Keychain
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Main Keychains
- Il User Keychain (
~/Library/Keychains/login.keychain-db), che viene utilizzato per memorizzare credenziali specifiche dellâutente come password delle applicazioni, password di internet, certificati generati dallâutente, password di rete e chiavi pubbliche/private generate dallâutente. - Il System Keychain (
/Library/Keychains/System.keychain), che memorizza credenziali a livello di sistema come password WiFi, certificati root di sistema, chiavi private di sistema e password delle applicazioni di sistema. - Ă possibile trovare altri componenti come certificati in
/System/Library/Keychains/* - In iOS câè solo un Keychain situato in
/private/var/Keychains/. Questa cartella contiene anche database per ilTrustStore, autoritĂ di certificazione (caissuercache) e voci OSCP (ocspache). - Le app saranno limitate nel keychain solo alla loro area privata in base al loro identificatore di applicazione.
Password Keychain Access
Questi file, pur non avendo protezione intrinseca e potendo essere scaricati, sono crittografati e richiedono la password in chiaro dellâutente per essere decrittografati. Uno strumento come Chainbreaker potrebbe essere utilizzato per la decrittografia.
Keychain Entries Protections
ACLs
Ogni voce nel keychain è governata da Access Control Lists (ACLs) che determinano chi può eseguire varie azioni sulla voce del keychain, inclusi:
- ACLAuhtorizationExportClear: Consente al titolare di ottenere il testo in chiaro del segreto.
- ACLAuhtorizationExportWrapped: Consente al titolare di ottenere il testo in chiaro crittografato con unâaltra password fornita.
- ACLAuhtorizationAny: Consente al titolare di eseguire qualsiasi azione.
Le ACL sono ulteriormente accompagnate da un elenco di applicazioni fidate che possono eseguire queste azioni senza richiesta. Questo potrebbe essere:
- N
il(nessuna autorizzazione richiesta, tutti sono fidati) - Un elenco vuoto (nessuno è fidato)
- Elenco di applicazioni specifiche.
Inoltre, la voce potrebbe contenere la chiave ACLAuthorizationPartitionID, che viene utilizzata per identificare il teamid, apple, e cdhash.
- Se il teamid è specificato, allora per accedere al valore della voce senza un prompt lâapplicazione utilizzata deve avere lo stesso teamid.
- Se lâapple è specificato, allora lâapp deve essere firmata da Apple.
- Se il cdhash è indicato, allora lâapp deve avere il cdhash specifico.
Creating a Keychain Entry
Quando viene creata una nuova voce utilizzando Keychain Access.app, si applicano le seguenti regole:
- Tutte le app possono crittografare.
- Nessuna app può esportare/decrittografare (senza richiedere allâutente).
- Tutte le app possono vedere il controllo di integritĂ .
- Nessuna app può modificare le ACL.
- Il partitionID è impostato su
apple.
Quando unâapplicazione crea una voce nel keychain, le regole sono leggermente diverse:
- Tutte le app possono crittografare.
- Solo lâapplicazione che crea (o altre app esplicitamente aggiunte) può esportare/decrittografare (senza richiedere allâutente).
- Tutte le app possono vedere il controllo di integritĂ .
- Nessuna app può modificare le ACL.
- Il partitionID è impostato su
teamid:[teamID here].
Accessing the Keychain
security
# List keychains
security list-keychains
# Dump all metadata and decrypted secrets (a lot of pop-ups)
security dump-keychain -a -d
# Find generic password for the "Slack" account and print the secrets
security find-generic-password -a "Slack" -g
# Change the specified entrys PartitionID entry
security set-generic-password-parition-list -s "test service" -a "test acount" -S
# Dump specifically the user keychain
security dump-keychain ~/Library/Keychains/login.keychain-db
APIs
Tip
Lâenumerazione e il dumping del keychain di segreti che non genereranno un prompt possono essere effettuati con lo strumento LockSmith
Altri endpoint API possono essere trovati nel codice sorgente di SecKeyChain.h.
Elenca e ottieni info su ciascun elemento del keychain utilizzando il Security Framework oppure puoi anche controllare lo strumento cli open source di Apple security. Alcuni esempi di API:
- LâAPI
SecItemCopyMatchingfornisce informazioni su ciascun elemento e ci sono alcuni attributi che puoi impostare quando la utilizzi: kSecReturnData: Se vero, tenterĂ di decrittografare i dati (imposta su falso per evitare potenziali pop-up)kSecReturnRef: Ottieni anche un riferimento allâelemento del keychain (imposta su vero nel caso in cui successivamente vedi che puoi decrittografare senza pop-up)kSecReturnAttributes: Ottieni metadati sugli elementikSecMatchLimit: Quanti risultati restituirekSecClass: Che tipo di elemento del keychain
Ottieni ACLs di ciascun elemento:
- Con lâAPI
SecAccessCopyACLListpuoi ottenere lâACL per lâelemento del keychain, e restituirĂ un elenco di ACL (comeACLAuhtorizationExportCleare gli altri precedentemente menzionati) dove ciascun elenco ha: - Descrizione
- Elenco delle Applicazioni Affidabili. Questo potrebbe essere:
- Unâapp: /Applications/Slack.app
- Un binario: /usr/libexec/airportd
- Un gruppo: group://AirPort
Esporta i dati:
- LâAPI
SecKeychainItemCopyContentottiene il testo in chiaro - LâAPI
SecItemExportesporta le chiavi e i certificati ma potrebbe essere necessario impostare le password per esportare il contenuto crittografato
E questi sono i requisiti per poter esportare un segreto senza un prompt:
- Se ci sono 1+ app affidabili elencate:
- Necessita delle appropriate autorizzazioni (
Nil, o essere parte dellâelenco consentito di app nellâautorizzazione per accedere alle informazioni segrete) - Necessita che la firma del codice corrisponda al PartitionID
- Necessita che la firma del codice corrisponda a quella di un app affidabile (o essere un membro del giusto KeychainAccessGroup)
- Se tutte le applicazioni sono affidabili:
- Necessita delle appropriate autorizzazioni
- Necessita che la firma del codice corrisponda al PartitionID
- Se non câè PartitionID, allora questo non è necessario
Caution
Pertanto, se câè 1 applicazione elencata, è necessario iniettare codice in quellâapplicazione.
Se apple è indicato nel partitionID, potresti accedervi con
osascriptquindi qualsiasi cosa che stia fidandosi di tutte le applicazioni con apple nel partitionID.Pythonpotrebbe essere utilizzato anche per questo.
Due attributi aggiuntivi
- Invisible: Ă un flag booleano per nascondere lâelemento dallâapp Keychain UI
- General: Serve a memorizzare metadati (quindi NON è CRITTOGRAFATO)
- Microsoft memorizzava in testo chiaro tutti i token di aggiornamento per accedere a endpoint sensibili.
References
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

