macOS Keychain
Main Keychains
Korisnički ključ (
~/Library/Keychains/login.keycahin-db
), koji se koristi za čuvanje korisničkih kredencijala kao što su lozinke za aplikacije, 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 za sistemske aplikacije.
Pristup lozinkama u ključu
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 ključ
ACLs
Svaki unos u ključu je pod kontrolom Lista 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.
ACLs su dodatno praćene listom pouzdanih aplikacija koje mogu izvršiti ove radnje bez traženja potvrde. 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 potvrde aplikacija koja se koristi mora imati isti teamid.
Ako je apple specificiran, tada aplikacija mora biti potpisana od strane Apple.
Ako je cdhash naznačen, tada aplikacija mora imati specifični cdhash.
Kreiranje unosa u ključ
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/dekriptovati (bez traženja potvrde od korisnika).
Sve aplikacije mogu videti proveru integriteta.
Nijedna aplikacija ne može menjati ACLs.
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 koja druga aplikacija eksplicitno dodata) može izvesti/dekriptovati (bez traženja potvrde od korisnika).
Sve aplikacije mogu videti proveru integriteta.
Nijedna aplikacija ne može menjati ACLs.
partitionID je postavljen na
teamid:[teamID ovde]
.
Pristupanje ključu
security
security
APIs
Enumeracija i dumpovanje tajni koje neće generisati prompt može se uraditi sa alatom LockSmith
Lista i dobijanje informacija o svakom unosu u keychain:
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 unosimakSecMatchLimit
: Koliko rezultata da se vratikSecClass
: Koja vrsta unosa u keychain
Dobijanje ACL-ova svakog unosa:
Sa API-jem
SecAccessCopyACLList
možete dobiti ACL za stavku keychain-a, i vratiće listu ACL-ova (kao što suACLAuhtorizationExportClear
i drugi 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
Izvoz podataka:
API
SecKeychainItemCopyContent
dobija plaintextAPI
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 su 1+ pouzdane aplikacije navedene:
Potrebne su odgovarajuće autorizacije (
Nil
, ili biti deo dozvoljene liste aplikacija u autorizaciji za pristup tajnim informacijama)Potrebna je potpisna šifra koja se poklapa sa PartitionID
Potrebna je potpisna šifra koja se poklapa sa jednom pouzdanom aplikacijom (ili biti član prave KeychainAccessGroup)
Ako su sve aplikacije pouzdane:
Potrebne su odgovarajuće autorizacije
Potrebna je potpisna šifra 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 sa 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 za sakrivanje unosa iz UI aplikacije Keychain
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.
Reference
Last updated