macOS Keychain

Support HackTricks

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 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.

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:

  • 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.

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

# 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

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.

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

Support HackTricks

Last updated