macOS Keychain
Reading time: 6 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Glavni Keychain-ovi
- Korisnički Keychain (
~/Library/Keychains/login.keychain-db
), koji se koristi za čuvanje korisničkih kredencijala kao što su lozinke za aplikacije, lozinke za internet, sertifikati koje je korisnik generisao, lozinke za mrežu i javni/privatni ključevi koje je korisnik generisao. - Sistemski Keychain (
/Library/Keychains/System.keychain
), koji čuva sistemske kredencijale kao što su WiFi lozinke, sertifikati sistemskog root-a, privatni ključevi sistema i lozinke za sistemske aplikacije. - Moguće je pronaći druge komponente kao što su sertifikati u
/System/Library/Keychains/*
- U iOS-u postoji samo jedan Keychain smešten u
/private/var/Keychains/
. Ova fascikla takođe sadrži baze podataka zaTrustStore
, sertifikacione autoritete (caissuercache
) i OSCP unose (ocspache
). - Aplikacije će biti ograničene u keychain-u samo na njihovu privatnu oblast na osnovu njihovog identifikatora aplikacije.
Pristup Lozinkama Keychain-a
Ove datoteke, iako nemaju inherentnu zaštitu i mogu biti preuzete, su enkriptovane i zahtevaju korisničku lozinku u čistom tekstu za dekripciju. Alat kao što je Chainbreaker može se koristiti za dekripciju.
Zaštita Unosa u Keychain-u
ACLs
Svaki unos u keychain-u je regulisan Listama Kontrole Pristupa (ACLs) koje određuju ko može da izvrši različite radnje na unosu keychain-a, uključujući:
- ACLAuhtorizationExportClear: Omogućava nosiocu da dobije čist tekst tajne.
- ACLAuhtorizationExportWrapped: Omogućava nosiocu da dobije čist tekst enkriptovan drugom datom lozinkom.
- ACLAuhtorizationAny: Omogućava nosiocu da izvrši bilo koju radnju.
ACL-ovi su dodatno praćeni listom pouzdanih aplikacija koje mogu izvršiti ove radnje bez traženja dozvole. Ovo može biti:
- N
il
(nije potrebna autorizacija, svi su pouzdani) - Prazna lista (niko nije pouzdan)
- Lista specifičnih aplikacija.
Takođe, unos može sadržati ključ ACLAuthorizationPartitionID
, koji se koristi za identifikaciju teamid, apple, i cdhash.
- Ako je teamid specificiran, tada da bi se pristupilo vrednosti unosa bez upita aplikacija koja se koristi mora imati isti teamid.
- Ako je apple specificiran, tada aplikacija mora biti potpisana od strane Apple-a.
- Ako je cdhash naznačen, tada aplikacija mora imati specifični cdhash.
Kreiranje Unosa u Keychain-u
Kada se novi unos kreira koristeći Keychain Access.app
, sledeća pravila se primenjuju:
- Sve aplikacije mogu enkriptovati.
- Nijedna aplikacija ne može izvesti/dekripovati (bez traženja dozvole korisnika).
- Sve aplikacije mogu videti proveru integriteta.
- Nijedna aplikacija ne može menjati ACL-ove.
- partitionID je postavljen na
apple
.
Kada aplikacija kreira unos u keychain-u, pravila su malo drugačija:
- Sve aplikacije mogu enkriptovati.
- Samo aplikacija koja kreira (ili bilo koje druge aplikacije eksplicitno dodate) mogu izvesti/dekripovati (bez traženja dozvole korisnika).
- Sve aplikacije mogu videti proveru integriteta.
- Nijedna aplikacija ne može menjati ACL-ove.
- partitionID je postavljen na
teamid:[teamID ovde]
.
Pristupanje Keychain-u
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
Enumeracija i dumpovanje tajni koje neće generisati prompt može se uraditi pomoću alata LockSmith
Ostali API krajnji tačke mogu se naći u SecKeyChain.h izvorni kod.
Lista i dobijanje informacija o svakoj stavci u keychain-u koristeći Security Framework ili možete proveriti Apple-ov open source cli alat security. Neki primeri API-ja:
- API
SecItemCopyMatching
daje informacije o svakoj stavci i postoje neki atributi koje možete postaviti prilikom korišćenja: kSecReturnData
: Ako je tačno, pokušaće da dekriptuje podatke (postavite na netačno da biste izbegli potencijalne iskačuće prozore)kSecReturnRef
: Takođe dobijate referencu na stavku keychain-a (postavite na tačno u slučaju da kasnije vidite da možete dekriptovati bez iskačućeg prozora)kSecReturnAttributes
: Dobijate metapodatke o stavkamakSecMatchLimit
: Koliko rezultata da se vratikSecClass
: Koja vrsta stavke u keychain-u
Dobijte ACLs svake stavke:
- Sa API-jem
SecAccessCopyACLList
možete dobiti ACL za stavku keychain-a, i vratiće listu ACL-ova (kao što suACLAuhtorizationExportClear
i ostali prethodno pomenuti) gde svaka lista ima: - Opis
- Lista pouzdanih aplikacija. Ovo može biti:
- Aplikacija: /Applications/Slack.app
- Binarni: /usr/libexec/airportd
- Grupa: group://AirPort
Izvezite podatke:
- API
SecKeychainItemCopyContent
dobija plaintext - API
SecItemExport
izvozi ključeve i sertifikate, ali možda će biti potrebno postaviti lozinke za izvoz sadržaja enkriptovanog
I ovo su zahtevi da biste mogli da izvezete tajnu bez prompta:
- Ako je 1+ pouzdana aplikacija navedena:
- Potrebne su odgovarajuće autorizacije (
Nil
, ili biti deo dozvoljene liste aplikacija u autorizaciji za pristup tajnim informacijama) - Potrebna je potpisna šifra da se poklapa sa PartitionID
- Potrebna je potpisna šifra da se poklapa sa jednom pouzdano aplikacijom (ili biti član pravog KeychainAccessGroup)
- Ako su sve aplikacije pouzdane:
- Potrebne su odgovarajuće autorizacije
- Potrebna je potpisna šifra da se poklapa sa PartitionID
- Ako nema PartitionID, onda ovo nije potrebno
caution
Stoga, ako postoji 1 aplikacija navedena, morate ubaciti kod u tu aplikaciju.
Ako je apple naznačen u partitionID, mogli biste mu pristupiti pomoću osascript
tako da bilo šta što veruje svim aplikacijama sa apple u partitionID. Python
se takođe može koristiti za ovo.
Dva dodatna atributa
- Nevidljivo: To je boolean zastavica da sakrije stavku iz UI Keychain aplikacije
- Opšte: To je za čuvanje metapodataka (tako da nije ENKRIPTOVANO)
- Microsoft je čuvao u običnom tekstu sve osvežavajuće tokene za pristup osetljivim krajnjim tačkama.
References
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.