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)
The User Keychain (~/Library/Keychains/login.keychain-db
), ambayo inatumika kuhifadhi akili za mtumiaji kama nywila za programu, nywila za mtandao, vyeti vilivyoundwa na mtumiaji, nywila za mtandao, na funguo za umma/za kibinafsi zilizoundwa na mtumiaji.
The System Keychain (/Library/Keychains/System.keychain
), ambayo inahifadhi akili za mfumo mzima kama nywila za WiFi, vyeti vya mfumo wa mizizi, funguo za kibinafsi za mfumo, na nywila za programu za mfumo.
Inawezekana kupata vipengele vingine kama vyeti katika /System/Library/Keychains/*
Katika iOS kuna Keychain moja iliyoko katika /private/var/Keychains/
. Folda hii pia ina hifadhidata za TrustStore
, mamlaka za vyeti (caissuercache
) na entries za OSCP (ocspache
).
Programu zitakuwa na vizuizi katika keychain tu katika eneo lao la kibinafsi kulingana na kitambulisho chao cha programu.
Faili hizi, ingawa hazina ulinzi wa ndani na zinaweza kupakuliwa, zimefungwa na zinahitaji nywila ya mtumiaji ya maandiko ili kufunguliwa. Chombo kama Chainbreaker kinaweza kutumika kwa ajili ya kufungua.
Kila entry katika keychain inasimamiwa na Access Control Lists (ACLs) ambazo zinaelekeza nani anaweza kufanya vitendo mbalimbali kwenye entry ya keychain, ikiwa ni pamoja na:
ACLAuhtorizationExportClear: Inaruhusu mwenyewe kupata maandiko ya siri.
ACLAuhtorizationExportWrapped: Inaruhusu mwenyewe kupata maandiko ya siri yaliyofungwa kwa nywila nyingine iliyotolewa.
ACLAuhtorizationAny: Inaruhusu mwenyewe kufanya kitendo chochote.
ACLs zinakuja na orodha ya programu zinazotegemewa ambazo zinaweza kufanya vitendo hivi bila kuombwa. Hii inaweza kuwa:
Nil
(hakuna idhini inayohitajika, kila mtu anategemewa)
Orodha bila (hakuna mtu anategemewa)
Orodha ya programu maalum.
Pia entry inaweza kuwa na funguo ACLAuthorizationPartitionID
, ambayo inatumika kutambua teamid, apple, na cdhash.
Ikiwa teamid imeainishwa, basi ili kupata thamani ya entry bila kuombwa programu iliyotumika lazima iwe na teamid sawa.
Ikiwa apple imeainishwa, basi programu inahitaji kuwa imeandikwa na Apple.
Ikiwa cdhash imeainishwa, basi programu lazima iwe na cdhash maalum.
Wakati entry mpya inaundwa kwa kutumia Keychain Access.app
, sheria zifuatazo zinatumika:
Programu zote zinaweza kufunga.
Hakuna programu zinaweza kusafirisha/kufungua (bila kuombwa mtumiaji).
Programu zote zinaweza kuona ukaguzi wa uaminifu.
Hakuna programu zinaweza kubadilisha ACLs.
partitionID imewekwa kuwa apple
.
Wakati programu inaunda entry katika keychain, sheria ni tofauti kidogo:
Programu zote zinaweza kufunga.
Ni programu inayounda (au programu nyingine yoyote iliyoongezwa wazi) pekee inayoweza kusafirisha/kufungua (bila kuombwa mtumiaji).
Programu zote zinaweza kuona ukaguzi wa uaminifu.
Hakuna programu zinaweza kubadilisha ACLs.
partitionID imewekwa kuwa teamid:[teamID hapa]
.
security
Utaratibu wa kuhesabu na kutupa siri ambazo hazitazalisha ujumbe zinaweza kufanywa kwa kutumia chombo LockSmith
Nyingine API endpoints zinaweza kupatikana katika SecKeyChain.h msimbo wa chanzo.
Orodhesha na pata habari kuhusu kila kiingilio cha keychain kwa kutumia Security Framework au unaweza pia kuangalia chombo cha cli cha Apple cha chanzo wazi security. Baadhi ya mifano ya API:
API SecItemCopyMatching
inatoa habari kuhusu kila kiingilio na kuna baadhi ya sifa unaweza kuweka unapoitumia:
kSecReturnData
: Ikiwa ni kweli, itajaribu kufungua data (weka kuwa uongo ili kuepuka pop-up zinazoweza kutokea)
kSecReturnRef
: Pata pia rejeleo la kipengee cha keychain (weka kuwa kweli ikiwa baadaye utaona unaweza kufungua bila pop-up)
kSecReturnAttributes
: Pata metadata kuhusu viingilio
kSecMatchLimit
: Ni matokeo mangapi ya kurudisha
kSecClass
: Ni aina gani ya kiingilio cha keychain
Pata ACLs za kila kiingilio:
Kwa API SecAccessCopyACLList
unaweza kupata ACL kwa kipengee cha keychain, na itarudisha orodha ya ACLs (kama ACLAuhtorizationExportClear
na nyingine zilizotajwa hapo awali) ambapo kila orodha ina:
Maelezo
Orodha ya Maombi ya Kuaminika. Hii inaweza kuwa:
Programu: /Applications/Slack.app
Binary: /usr/libexec/airportd
Kundi: group://AirPort
Sambaza data:
API SecKeychainItemCopyContent
inapata maandiko
API SecItemExport
inasambaza funguo na vyeti lakini inaweza kuhitaji kuweka nywila ili kusambaza yaliyomo kwa usimbuaji
Na haya ndiyo masharti ya kuwa na uwezo wa kusambaza siri bila ujumbe:
Ikiwa 1+ maombi ya kuaminika yameorodheshwa:
Inahitaji idhini sahihi (Nil
, au kuwa sehemu ya orodha inayoruhusiwa ya maombi katika idhini ya kufikia habari ya siri)
Inahitaji saini ya msimbo ili kuendana na PartitionID
Inahitaji saini ya msimbo ili kuendana na ile ya programu moja ya kuaminika (au kuwa mwanachama wa kundi sahihi la KeychainAccessGroup)
Ikiwa maombi yote ni ya kuaminika:
Inahitaji idhini sahihi
Inahitaji saini ya msimbo ili kuendana na PartitionID
Ikiwa hakuna PartitionID, basi hii haitahitajika
Hivyo, ikiwa kuna 1 programu iliyoorodheshwa, unahitaji kuingiza msimbo katika programu hiyo.
Ikiwa apple inaonyeshwa katika partitionID, unaweza kuipata kwa kutumia osascript
hivyo chochote kinachotegemea maombi yote na apple katika partitionID. Python
inaweza pia kutumika kwa hili.
Invisible: Ni bendera ya boolean ili kuficha kiingilio kutoka kwa programu ya UI Keychain
General: Ni kuhifadhi metadata (hivyo HAIJASIMBULIWA)
Microsoft ilikuwa ikihifadhi katika maandiko yote ya wazi tokens za refresher ili kufikia mwisho wa nyeti.
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)