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, 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 kipengele katika keychain kinatawaliwa na Orodha za Udhibiti wa Ufikiaji (ACLs) ambazo zinaelekeza nani anaweza kufanya vitendo mbalimbali kwenye kipengele cha keychain, ikiwa ni pamoja na:
ACLAuhtorizationExportClear: Inaruhusu mwenye kipengele kupata maandiko ya siri.
ACLAuhtorizationExportWrapped: Inaruhusu mwenye kipengele kupata maandiko ya siri yaliyofichwa kwa nywila nyingine iliyotolewa.
ACLAuhtorizationAny: Inaruhusu mwenye kipengele 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 tyupu (hakuna anategemewa)
Orodha ya programu maalum.
Pia kipengele kinaweza kuwa na funguo ACLAuthorizationPartitionID
, ambayo inatumika kutambua teamid, apple, na cdhash.
Ikiwa teamid imeainishwa, basi ili kufikia thamani ya kipengele 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 kipengele kipya kinaundwa kwa kutumia Keychain Access.app
, sheria zifuatazo zinatumika:
Programu zote zinaweza kuficha.
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 kipengele katika keychain, sheria ni tofauti kidogo:
Programu zote zinaweza kuficha.
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 kutoa 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 kutumia API SecAccessCopyACLList
unaweza kupata ACL kwa kipengee cha keychain, na itarudisha orodha ya ACLs (kama ACLAuhtorizationExportClear
na zingine 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 mahitaji 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 za siri)
Inahitaji saini ya msimbo kuendana na PartitionID
Inahitaji saini ya msimbo kuendana na ile ya programu ya kuaminika (au kuwa mwanachama wa kundi sahihi la KeychainAccessGroup)
Ikiwa maombi yote ni ya kuaminika:
Inahitaji idhini sahihi
Inahitaji saini ya msimbo kuendana na PartitionID
Ikiwa hakuna PartitionID, basi hii haitahitajika
Hivyo, ikiwa kuna programu 1 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 kusasisha 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)