macOS Keychain
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
Die Gebruiker Sleutelhanger (~/Library/Keychains/login.keychain-db
), wat gebruik word om gebruiker-spesifieke akrediteer soos toepassingswagwoorde, internetwagwoorde, gebruiker-gegenereerde sertifikate, netwerkwagwoorde, en gebruiker-gegenereerde publieke/privaat sleutels te stoor.
Die Stelsel Sleutelhanger (/Library/Keychains/System.keychain
), wat stelsel-wye akrediteer soos WiFi wagwoorde, stelsel wortelsertifikate, stelsel privaat sleutels, en stelsel toepassingswagwoorde stoor.
Dit is moontlik om ander komponente soos sertifikate in /System/Library/Keychains/*
te vind.
In iOS is daar slegs een Sleutelhanger geleë in /private/var/Keychains/
. Hierdie gids bevat ook databasisse vir die TrustStore
, sertifikaatowerhede (caissuercache
) en OSCP inskrywings (ocspache
).
Toepassings sal in die sleutelhanger beperk wees tot hul private area gebaseer op hul toepassingsidentifiseerder.
Hierdie lêers, terwyl hulle nie inherente beskerming het nie en afgelaai kan word, is versleuteld en vereis die gebruiker se platte wagwoord om ontcijfer te word. 'n Gereedskap soos Chainbreaker kan gebruik word vir ontcijfering.
Elke inskrywing in die sleutelhanger word gereguleer deur Toegang Beheer Lyste (ACLs) wat bepaal wie verskillende aksies op die sleutelhanger inskrywing kan uitvoer, insluitend:
ACLAuhtorizationExportClear: Laat die houer toe om die duidelike teks van die geheim te verkry.
ACLAuhtorizationExportWrapped: Laat die houer toe om die duidelike teks wat met 'n ander verskafde wagwoord versleuteld is, te verkry.
ACLAuhtorizationAny: Laat die houer toe om enige aksie uit te voer.
Die ACLs word verder vergesel deur 'n lys van vertroude toepassings wat hierdie aksies kan uitvoer sonder om te vra. Dit kan wees:
Nil
(geen toestemming vereis, elkeen is vertrou)
'n leë lys (niemand is vertrou)
Lys van spesifieke toepassings.
Ook kan die inskrywing die sleutel ACLAuthorizationPartitionID
bevat, wat gebruik word om die teamid, apple, en cdhash te identifiseer.
As die teamid gespesifiseer is, dan om die inskrywing waarde sonder 'n prompt te toegang, moet die gebruikte toepassing die selfde teamid hê.
As die apple gespesifiseer is, dan moet die app onderteken wees deur Apple.
As die cdhash aangedui is, dan moet die app die spesifieke cdhash hê.
Wanneer 'n nuwe inskrywing geskep word met Keychain Access.app
, geld die volgende reëls:
Alle apps kan versleuteld.
Geen apps kan uitvoer/ontcijfer (sonder om die gebruiker te vra).
Alle apps kan die integriteitskontrole sien.
Geen apps kan ACLs verander nie.
Die partitionID is gestel op apple
.
Wanneer 'n toepassing 'n inskrywing in die sleutelhanger skep, is die reëls effens anders:
Alle apps kan versleuteld.
Slegs die skepende toepassing (of enige ander apps wat eksplisiet bygevoeg is) kan uitvoer/ontcijfer (sonder om die gebruiker te vra).
Alle apps kan die integriteitskontrole sien.
Geen apps kan die ACLs verander nie.
Die partitionID is gestel op teamid:[teamID hier]
.
security
Die keychain enumerasie en dumping van geheime wat nie 'n prompt sal genereer nie kan gedoen word met die hulpmiddel LockSmith
Ander API eindpunte kan gevind word in SecKeyChain.h bronkode.
Lys en kry inligting oor elke keychain inskrywing met die Security Framework of jy kan ook die Apple se oopbron cli hulpmiddel security. Sommige API voorbeelde:
Die API SecItemCopyMatching
gee inligting oor elke inskrywing en daar is 'n paar eienskappe wat jy kan stel wanneer jy dit gebruik:
kSecReturnData
: As waar, sal dit probeer om die data te ontsleutel (stel op vals om potensiële pop-ups te vermy)
kSecReturnRef
: Kry ook verwysing na keychain item (stel op waar in geval jy later sien jy kan ontsleutel sonder pop-up)
kSecReturnAttributes
: Kry metadata oor inskrywings
kSecMatchLimit
: Hoeveel resultate om terug te gee
kSecClass
: Watter soort keychain inskrywing
Kry ACLs van elke inskrywing:
Met die API SecAccessCopyACLList
kan jy die ACL vir die keychain item kry, en dit sal 'n lys van ACLs teruggee (soos ACLAuhtorizationExportClear
en die ander voorheen genoem) waar elke lys het:
Beskrywing
Vertroude Toepassing Lys. Dit kan wees:
'n app: /Applications/Slack.app
'n binêre: /usr/libexec/airportd
'n groep: group://AirPort
Eksporteer die data:
Die API SecKeychainItemCopyContent
kry die platte teks
Die API SecItemExport
eksporteer die sleutels en sertifikate maar jy mag dalk wagwoorde moet stel om die inhoud versleuteld te eksporteer
En dit is die vereistes om 'n geheim sonder 'n prompt te kan eksporteer:
As 1+ vertroude apps gelys:
Nodig die toepaslike autorisaties (Nil
, of wees deel van die toegelate lys van apps in die autorisasie om toegang tot die geheime inligting te verkry)
Nodig kodehandtekening om te pas by PartitionID
Nodig kodehandtekening om te pas by een vertroude app (of wees 'n lid van die regte KeychainAccessGroup)
As alle toepassings vertrou:
Nodig die toepaslike autorisaties
Nodig kodehandtekening om te pas by PartitionID
As geen PartitionID, dan is dit nie nodig nie
Daarom, as daar 1 toepassing gelys is, moet jy kode in daardie toepassing inspuit.
As apple aangedui word in die partitionID, kan jy dit met osascript
benader, so enigiets wat al die toepassings met apple in die partitionID vertrou. Python
kan ook hiervoor gebruik word.
Onsigbaar: Dit is 'n booleaanse vlag om die inskrywing van die UI Keychain app te versteek
Algemeen: Dit is om metadata te stoor (so dit is NIE VERSPREKELD nie)
Microsoft het al die verfrissingstokens in platte teks gestoor om toegang tot sensitiewe eindpunte te verkry.
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)