macOS Keychain
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:
HackTricks Opleiding GCP Red Team Expert (GRTE)
Hoof Sleutelsakke
Die Gebruiker Sleutelsak (
~/Library/Keychains/login.keycahin-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 Sleutelsak (
/Library/Keychains/System.keychain
), wat stelsel-wye akrediteer soos WiFi wagwoorde, stelsel wortelsertifikate, stelsel privaat sleutels, en stelsel toepassingswagwoorde stoor.
Wagwoord Sleutelsak Toegang
Hierdie lêers, terwyl hulle nie inherente beskerming het nie en afgelaai kan word, is versleuteld en vereis die gebruiker se platte wagwoord om ontsleuteld te word. 'n Gereedskap soos Chainbreaker kan gebruik word vir ontsleuteling.
Sleutelsak Inskrywings Beskerming
ACLs
Elke inskrywing in die sleutelsak word gereguleer deur Toegang Beheer Lyste (ACLs) wat bepaal wie verskillende aksies op die sleutelsak 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:
N
il
(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 verkry 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ê.
Skep 'n Sleutelsak Inskrywing
Wanneer 'n nuwe inskrywing geskep word met Keychain Access.app
, geld die volgende reëls:
Alle apps kan versleutel.
Geen apps kan uitvoer/ontsleutel (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 sleutelsak skep, is die reëls effens anders:
Alle apps kan versleutel.
Slegs die skep-toepassing (of enige ander apps wat eksplisiet bygevoeg is) kan uitvoer/ontsleutel (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]
.
Toegang tot die Sleutelsak
security
security
APIs
Die keychain enumerasie en dumping van geheime wat nie 'n prompt sal genereer nie kan gedoen word met die hulpmiddel LockSmith
Lys en kry inligting oor elke keychain inskrywing:
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 inskrywingskSecMatchLimit
: Hoeveel resultate om terug te geekSecClass
: 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 (soosACLAuhtorizationExportClear
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 teksDie 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 autorisasies (
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 autorisasies
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 alle toepassings met apple in die partitionID vertrou. Python
kan ook hiervoor gebruik word.
Twee addisionele eienskappe
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 VERSPREID nie)
Microsoft het al die verfrissingstokens in platte teks gestoor om toegang tot sensitiewe eindpunte te verkry.
References
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated