macOS Keychain

Reading time: 7 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें

मुख्य कीचेन

  • यूजर कीचेन (~/Library/Keychains/login.keychain-db), जिसका उपयोग यूजर-विशिष्ट क्रेडेंशियल्स जैसे एप्लिकेशन पासवर्ड, इंटरनेट पासवर्ड, यूजर-जनित सर्टिफिकेट, नेटवर्क पासवर्ड, और यूजर-जनित सार्वजनिक/निजी कुंजियों को स्टोर करने के लिए किया जाता है।
  • सिस्टम कीचेन (/Library/Keychains/System.keychain), जो सिस्टम-व्यापी क्रेडेंशियल्स जैसे WiFi पासवर्ड, सिस्टम रूट सर्टिफिकेट, सिस्टम निजी कुंजियाँ, और सिस्टम एप्लिकेशन पासवर्ड को स्टोर करता है।
  • /System/Library/Keychains/* में सर्टिफिकेट जैसे अन्य घटक मिल सकते हैं।
  • iOS में केवल एक कीचेन है जो /private/var/Keychains/ में स्थित है। इस फ़ोल्डर में TrustStore, सर्टिफिकेट प्राधिकरण (caissuercache) और OSCP प्रविष्टियों (ocspache) के लिए डेटाबेस भी होते हैं।
  • ऐप्स कीचेन में केवल उनके एप्लिकेशन पहचानकर्ता के आधार पर उनके निजी क्षेत्र में प्रतिबंधित होंगे।

पासवर्ड कीचेन एक्सेस

ये फ़ाइलें, जबकि इनमें अंतर्निहित सुरक्षा नहीं है और इन्हें डाउनलोड किया जा सकता है, एन्क्रिप्टेड हैं और इन्हें डिक्रिप्ट करने के लिए यूजर का प्लेनटेक्स्ट पासवर्ड आवश्यक है। डिक्रिप्शन के लिए Chainbreaker जैसे टूल का उपयोग किया जा सकता है।

कीचेन प्रविष्टियों की सुरक्षा

ACLs

कीचेन में प्रत्येक प्रविष्टि एक्सेस कंट्रोल सूचियों (ACLs) द्वारा शासित होती है जो यह निर्धारित करती है कि कौन कीचेन प्रविष्टि पर विभिन्न क्रियाएँ कर सकता है, जिसमें शामिल हैं:

  • ACLAuhtorizationExportClear: धारक को रहस्य का स्पष्ट पाठ प्राप्त करने की अनुमति देता है।
  • ACLAuhtorizationExportWrapped: धारक को दूसरे प्रदान किए गए पासवर्ड के साथ एन्क्रिप्टेड स्पष्ट पाठ प्राप्त करने की अनुमति देता है।
  • ACLAuhtorizationAny: धारक को कोई भी क्रिया करने की अनुमति देता है।

ACLs के साथ एक विश्वसनीय एप्लिकेशनों की सूची होती है जो बिना प्रॉम्प्ट के ये क्रियाएँ कर सकती हैं। यह हो सकता है:

  • Nil (कोई प्राधिकरण आवश्यक नहीं, सभी विश्वसनीय हैं)
  • एक खाली सूची (कोई भी विश्वसनीय नहीं है)
  • विशिष्ट एप्लिकेशनों की सूची

इसके अलावा प्रविष्टि में कुंजी ACLAuthorizationPartitionID हो सकती है, जिसका उपयोग teamid, apple, और cdhash की पहचान के लिए किया जाता है।

  • यदि teamid निर्दिष्ट है, तो प्रविष्टि मान बिना प्रॉम्प्ट के एक्सेस करने के लिए उपयोग की जाने वाली एप्लिकेशन का समान teamid होना चाहिए।
  • यदि apple निर्दिष्ट है, तो ऐप को Apple द्वारा साइन किया जाना चाहिए।
  • यदि cdhash निर्दिष्ट है, तो ऐप को विशिष्ट cdhash होना चाहिए।

कीचेन प्रविष्टि बनाना

जब Keychain Access.app का उपयोग करके एक नया प्रविष्टि बनाई जाती है, तो निम्नलिखित नियम लागू होते हैं:

  • सभी ऐप्स एन्क्रिप्ट कर सकते हैं।
  • कोई ऐप्स निर्यात/डिक्रिप्ट नहीं कर सकते (यूजर को प्रॉम्प्ट किए बिना)।
  • सभी ऐप्स इंटीग्रिटी चेक देख सकते हैं।
  • कोई ऐप्स ACLs को बदल नहीं सकते।
  • partitionID को apple पर सेट किया गया है।

जब एक एप्लिकेशन कीचेन में एक प्रविष्टि बनाता है, तो नियम थोड़े अलग होते हैं:

  • सभी ऐप्स एन्क्रिप्ट कर सकते हैं।
  • केवल बनाने वाला एप्लिकेशन (या कोई अन्य ऐप्स जो स्पष्ट रूप से जोड़े गए हैं) निर्यात/डिक्रिप्ट कर सकते हैं (यूजर को प्रॉम्प्ट किए बिना)।
  • सभी ऐप्स इंटीग्रिटी चेक देख सकते हैं।
  • कोई ऐप्स ACLs को नहीं बदल सकते।
  • partitionID को teamid:[teamID here] पर सेट किया गया है।

कीचेन तक पहुँच

security

bash
# 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

कीचेन सूचीकरण और रहस्यों का डंप जो प्रॉम्प्ट उत्पन्न नहीं करेगा उसे LockSmith टूल के साथ किया जा सकता है।

अन्य API एंडपॉइंट्स SecKeyChain.h स्रोत कोड में पाए जा सकते हैं।

Security Framework का उपयोग करके प्रत्येक कीचेन प्रविष्टि के बारे में जानकारी सूचीबद्ध करें और प्राप्त करें या आप एप्पल के ओपन-सोर्स CLI टूल security** को भी देख सकते हैं।** कुछ API उदाहरण:

  • API SecItemCopyMatching प्रत्येक प्रविष्टि के बारे में जानकारी देता है और जब आप इसका उपयोग करते हैं तो कुछ विशेषताएँ सेट कर सकते हैं:
  • kSecReturnData: यदि सत्य है, तो यह डेटा को डिक्रिप्ट करने की कोशिश करेगा (संभावित पॉप-अप से बचने के लिए इसे गलत सेट करें)
  • kSecReturnRef: कीचेन आइटम के लिए संदर्भ भी प्राप्त करें (यदि बाद में आप देखते हैं कि आप बिना पॉप-अप के डिक्रिप्ट कर सकते हैं तो इसे सत्य पर सेट करें)
  • kSecReturnAttributes: प्रविष्टियों के बारे में मेटाडेटा प्राप्त करें
  • kSecMatchLimit: कितने परिणाम लौटाने हैं
  • kSecClass: कीचेन प्रविष्टि का प्रकार

प्रत्येक प्रविष्टि के ACLs प्राप्त करें:

  • API SecAccessCopyACLList के साथ आप कीचेन आइटम के लिए ACL प्राप्त कर सकते हैं, और यह ACLs की एक सूची लौटाएगा (जैसे ACLAuhtorizationExportClear और पहले उल्लेखित अन्य) जहाँ प्रत्येक सूची में है:
  • विवरण
  • विश्वसनीय एप्लिकेशन सूची। यह हो सकता है:
  • एक ऐप: /Applications/Slack.app
  • एक बाइनरी: /usr/libexec/airportd
  • एक समूह: group://AirPort

डेटा निर्यात करें:

  • API SecKeychainItemCopyContent प्लेनटेक्स्ट प्राप्त करता है
  • API SecItemExport कुंजी और प्रमाणपत्रों को निर्यात करता है लेकिन सामग्री को एन्क्रिप्टेड निर्यात करने के लिए पासवर्ड सेट करना पड़ सकता है

और ये हैं एक रहस्य को बिना प्रॉम्प्ट के निर्यात करने के लिए आवश्यकताएँ:

  • यदि 1+ विश्वसनीय ऐप्स सूचीबद्ध हैं:
  • उचित अधिकार की आवश्यकता है (Nil, या रहस्य जानकारी तक पहुँचने के लिए अनुमति प्राप्त ऐप्स की सूची का भाग होना)
  • PartitionID से मेल खाने के लिए कोड हस्ताक्षर की आवश्यकता है
  • एक विश्वसनीय ऐप का कोड हस्ताक्षर मेल खाने की आवश्यकता है (या सही KeychainAccessGroup का सदस्य होना)
  • यदि सभी एप्लिकेशन विश्वसनीय हैं:
  • उचित अधिकार की आवश्यकता है
  • PartitionID से मेल खाने के लिए कोड हस्ताक्षर की आवश्यकता है
  • यदि कोई PartitionID नहीं है, तो यह आवश्यक नहीं है

caution

इसलिए, यदि 1 एप्लिकेशन सूचीबद्ध है, तो आपको उस एप्लिकेशन में कोड इंजेक्ट करने की आवश्यकता है।

यदि apple partitionID में इंगित है, तो आप इसे osascript के साथ एक्सेस कर सकते हैं इसलिए कुछ भी जो सभी एप्लिकेशनों को partitionID में apple के साथ भरोसा कर रहा है। इसके लिए Python का भी उपयोग किया जा सकता है।

Two additional attributes

  • Invisible: यह UI कीचेन ऐप से प्रविष्टि को छिपाने के लिए एक बूलियन फ्लैग है
  • General: यह मेटाडेटा संग्रहीत करने के लिए है (इसलिए यह एन्क्रिप्टेड नहीं है)
  • Microsoft संवेदनशील एंडपॉइंट तक पहुँचने के लिए सभी रिफ्रेश टोकन को प्लेन टेक्स्ट में संग्रहीत कर रहा था।

References

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें