macOS Keychain
Main Keychains
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 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 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:
N
il
(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.
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 (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]
.
Accessing the Keychain
security
security
APIs
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 viingiliokSecMatchLimit
: Ni matokeo mangapi ya kurudishakSecClass
: 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 (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
Sambaza data:
API
SecKeychainItemCopyContent
inapata maandikoAPI
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.
Sifa mbili za ziada
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.
Marejeleo
Last updated