macOS Keychain
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)
Korisnički ključ (~/Library/Keychains/login.keychain-db
), koji se koristi za čuvanje korisničkih kredencijala kao što su lozinke aplikacija, lozinke za internet, korisnički generisani sertifikati, lozinke za mrežu i korisnički generisani javni/privatni ključevi.
Sistemski ključ (/Library/Keychains/System.keychain
), koji čuva sistemske kredencijale kao što su WiFi lozinke, sistemski root sertifikati, sistemski privatni ključevi i lozinke aplikacija sistema.
Moguće je pronaći druge komponente kao što su sertifikati u /System/Library/Keychains/*
U iOS-u postoji samo jedan ključ smešten u /private/var/Keychains/
. Ova fascikla takođe sadrži baze podataka za TrustStore
, sertifikacione autoritete (caissuercache
) i OSCP unose (ocspache
).
Aplikacije će biti ograničene u ključu samo na njihovu privatnu oblast na osnovu njihovog identifikatora aplikacije.
Ove datoteke, iako nemaju inherentnu zaštitu i mogu biti preuzete, su enkriptovane i zahtevaju korisničku lozinku u čistom tekstu za dešifrovanje. Alat kao što je Chainbreaker može se koristiti za dešifrovanje.
Svaki unos u ključu je regulisan Listama kontrole pristupa (ACLs) koje određuju ko može da izvrši različite radnje na unosu u ključ, 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 potvrde. Ovo može biti:
Nil
(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 potvrde korišćena aplikacija 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.
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/dešifrovati (bez traženja potvrde od 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 ključ, pravila su malo drugačija:
Sve aplikacije mogu enkriptovati.
Samo aplikacija koja kreira (ili bilo koje druge aplikacije eksplicitno dodate) može izvesti/dešifrovati (bez traženja potvrde od korisnika).
Sve aplikacije mogu videti proveru integriteta.
Nijedna aplikacija ne može menjati ACL-ove.
partitionID je postavljen na teamid:[teamID ovde]
.
security
Enumeracija i iskopavanje 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 svakom unosu u keychain koristeći Security Framework ili možete proveriti i Apple-ov open source cli alat security. Neki primeri API-ja:
API SecItemCopyMatching
daje informacije o svakom unosu 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 unosima
kSecMatchLimit
: Koliko rezultata da vrati
kSecClass
: Koja vrsta unosa u keychain
Dobijte ACL svakog unosa:
Sa API-jem SecAccessCopyACLList
možete dobiti ACL za stavku keychain-a, i vratiće listu ACL-ova (kao što su ACLAuhtorizationExportClear
i ostali prethodno pomenuti) gde svaka lista ima:
Opis
Lista pouzdanih aplikacija. Ovo može biti:
Aplikacija: /Applications/Slack.app
Binarni fajl: /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 šifrovanog
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 digitalna potpisna oznaka koja se poklapa sa PartitionID
Potrebna je digitalna potpisna oznaka koja se poklapa sa jednom pouzdanom aplikacijom (ili biti član pravog KeychainAccessGroup)
Ako su sve aplikacije pouzdane:
Potrebne su odgovarajuće autorizacije
Potrebna je digitalna potpisna oznaka koja se poklapa sa PartitionID
Ako nema PartitionID, onda ovo nije potrebno
Dakle, ako postoji 1 aplikacija navedena, potrebno je 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.
Nevidljivo: To je boolean zastavica za sakrivanje unosa iz UI Keychain aplikacije
Opšte: To je za čuvanje metapodataka (tako da nije ŠIFROVANO)
Microsoft je čuvao u običnom tekstu sve osvežavajuće tokene za pristup osetljivim krajnjim tačkama.
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)