macOS Keychain
Reading time: 5 minutes
tip
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)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Main Keychains
- User Keychain (
~/Library/Keychains/login.keychain-db
), ambayo inatumika kuhifadhi akidi 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. - System Keychain (
/Library/Keychains/System.keychain
), ambayo inahifadhi akidi 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 zaTrustStore
, 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.
Password Keychain Access
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.
Keychain Entries Protections
ACLs
Kila kipengele katika keychain kinatawaliwa na Access Control Lists (ACLs) ambazo zinaelekeza nani anaweza kufanya vitendo mbalimbali kwenye kipengele cha keychain, ikiwa ni pamoja na:
- ACLAuhtorizationExportClear: Inaruhusu mwenyewe kupata maandiko ya siri.
- ACLAuhtorizationExportWrapped: Inaruhusu mwenyewe kupata maandiko ya siri yaliyofichwa 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:
- N
il
(hakuna idhini inayohitajika, kila mtu anategemewa) - Orodha bila (hakuna mtu 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 imeonyeshwa, basi programu lazima iwe na cdhash maalum.
Creating a Keychain Entry
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 tu (au programu nyingine yoyote iliyoongezwa wazi) zinaweza kusafirisha/kufungua (bila kuombwa mtumiaji).
- Programu zote zinaweza kuona ukaguzi wa uaminifu.
- Hakuna programu zinaweza kubadilisha ACLs.
- partitionID imewekwa kuwa
teamid:[teamID here]
.
Accessing the Keychain
security
# List keychains
security list-keychains
# Dump all metadata and decrypted secrets (a lot of pop-ups)
security dump-keychain -a -d
# Find generic password for the "Slack" account and print the secrets
security find-generic-password -a "Slack" -g
# Change the specified entrys PartitionID entry
security set-generic-password-parition-list -s "test service" -a "test acount" -S
# Dump specifically the user keychain
security dump-keychain ~/Library/Keychains/login.keychain-db
APIs
tip
Uhesabuji wa keychain na kutolewa kwa siri ambazo hazitazalisha kiashiria zinaweza kufanywa kwa kutumia chombo LockSmith
Nyingine API endpoints zinaweza kupatikana katika SecKeyChain.h msimbo wa chanzo.
Orodhesha na pata info kuhusu kila kiingilio cha keychain kwa kutumia Security Framework au unaweza pia kuangalia chombo cha cli cha chanzo wazi cha Apple security. Baadhi ya mifano ya API:
- API
SecItemCopyMatching
inatoa info kuhusu kila kiingilio na kuna baadhi ya sifa unaweza kuweka unapoitumia: kSecReturnData
: Ikiwa ni kweli, itajaribu kufungua data (weka kuwa uongo ili kuepuka pop-ups zinazoweza kutokea)kSecReturnRef
: Pata pia rejea kwa kipengee cha keychain (weka kuwa kweli ikiwa baadaye utaona unaweza kufungua bila pop-up)kSecReturnAttributes
: Pata metadata kuhusu viingiliokSecMatchLimit
: Ni matokeo mangapi ya kurudishakSecClass
: 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 (kamaACLAuhtorizationExportClear
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
Export data:
- API
SecKeychainItemCopyContent
inapata maandiko - API
SecItemExport
inasafirisha funguo na vyeti lakini inaweza kuhitaji kuweka nywila ili kusafirisha yaliyomo kwa usimbaji
Na hizi ndizo mahitaji ya kuwa na uwezo wa kusafirisha siri bila kiashiria:
- Ikiwa 1+ maombi ya kuaminika yameorodheshwa:
- Inahitaji idhini sahihi (
Nil
, au kuwa sehemu ya orodha inayoruhusiwa ya maombi katika idhini ya kufikia info ya siri) - Inahitaji saini ya msimbo kuendana na PartitionID
- Inahitaji saini ya msimbo 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 kuendana na PartitionID
- Ikiwa hakuna PartitionID, basi hii haitahitajika
caution
Hivyo, ikiwa kuna 1 programu iliyoorodheshwa, unahitaji kuingiza msimbo katika programu hiyo.
Ikiwa apple inaonyeshwa katika partitionID, unaweza kuipata kwa kutumia osascript
hivyo chochote kinachounga mkono maombi yote na apple katika partitionID. Python
inaweza pia kutumika kwa hili.
Sifa mbili za ziada
- Invisible: Ni bendera ya boolean ili kuficha kiingilio kutoka kwa programu ya UI Keychain
- General: Ni kuhifadhi metadata (hivyo SI IMESIMBWA)
- Microsoft ilikuwa ikihifadhi katika maandiko yote ya wazi tokens za refresher kufikia kiwambo nyeti.
References
tip
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)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.