macOS Keychain

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

मुख्य Keychains

  • उपयोगकर्ता Keychain (~/Library/Keychains/login.keycahin-db), जिसका उपयोग उपयोगकर्ता-विशिष्ट प्रमाणपत्रों जैसे एप्लिकेशन पासवर्ड, इंटरनेट पासवर्ड, उपयोगकर्ता द्वारा उत्पन्न प्रमाणपत्र, नेटवर्क पासवर्ड और उपयोगकर्ता द्वारा उत्पन्न सार्वजनिक/निजी कुंजी आदि संदर्भित करने के लिए किया जाता है।

  • सिस्टम Keychain (/Library/Keychains/System.keychain), जिसमें सिस्टम-स्तरीय प्रमाणपत्र जैसे WiFi पासवर्ड, सिस्टम रूट प्रमाणपत्र, सिस्टम निजी कुंजी और सिस्टम एप्लिकेशन पासवर्ड संग्रहीत होते हैं।

पासवर्ड Keychain एक्सेस

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

Keychain Entries संरक्षण

ACLs

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

  • ACLAuhtorizationExportClear: धारक को गोपनीय सीक्रेट का स्पष्ट पाठ प्राप्त करने की अनुमति देता है।

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

  • ACLAuhtorizationAny: धारक को किसी भी क्रिया का प्रदर्शन करने की अनुमति देता है।

ACLs के साथ एक विश्वसनीय एप्लिकेशनों की सूची भी होती है जो इन क्रियाओं को प्रदर्शित कर सकती हैं बिना पूछे। यह हो सकता है:

  • Nil (कोई अधिकारीकरण आवश्यक नहीं है, सभी विश्वसनीय हैं)

  • एक खाली सूची (कोई नहीं विश्वसनीय है)

  • विशिष्ट एप्लिकेशनों की सूची

इसके अलावा, एंट्री में कुंजी ACLAuthorizationPartitionID भी हो सकती है, जिसका उपयोग टीमआईडी, एप्पल, और सीडीहैश की पहचान के लिए किया जाता है।

  • यदि टीमआईडी निर्दिष्ट किया गया है, तो एंट्री मान प्रम्प्ट के बिना पहुंचने के लिए उपयोग किया गया एप्लिकेशन को एंट्री मान में समान टीमआईडी होना चाहिए।

  • यदि एप्पल निर्दिष्ट किया गया है, तो एप्लिकेशन को एप्पल द्वारा साइन किया गया होना चाहिए।

  • यदि सीडीहैश निर्दिष्ट किया गया है, तो एप्लिकेशन को विशिष्ट सीडीहैश होना चाहिए।

एक Keychain Entry बनाना

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

  • सभी एप्लिकेशन एन्क्रिप्ट कर सकते हैं।

  • कोई एप्लिकेशन निर्यात/डिक्रिप्ट नहीं कर सकते (उपयोगकर्ता को पूछे बिना)।

  • सभी एप्लिकेशन अखंडता जांच देख सकते हैं।

  • कोई एप्लिकेशन ACLs नहीं बदल सकते।

  • पार्टीशनआईडी को एप्पल पर सेट किया जाता है।

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

  • सभी एप्लिकेशन एन्क्रिप्ट कर सकते हैं।

  • केवल बनाने वाला एप्लिकेशन (या कोई अन्य एप्लिकेशन विशेष रूप से जोड़े गए हों) निर्यात/डिक्रिप्ट कर सकते हैं (उपयोगकर्ता को पूछे बिना)।

  • सभी एप्लिकेशन अखंडता जांच देख सकते हैं।

  • कोई एप्लिकेशन ACLs नहीं बदल सकते।

  • पार्टीशनआईडी को teamid:[टीमआईडी यहाँ] पर सेट किया जाता है।

Keychain तक पहुंचना

सुरक्षा

# 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

एपीआई

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

प्रत्येक कीचेन एंट्री के बारे में जानकारी की सूची और प्राप्त करें:

  • एपीआई SecItemCopyMatching प्रत्येक एंट्री के बारे में जानकारी देती है और इसका उपयोग करते समय कुछ विशेषताएँ आप सेट कर सकते हैं:

  • kSecReturnData: यदि सत्य है, तो यह डेटा को डिक्रिप्ट करने का प्रयास करेगा (पॉप-अप से बचने के लिए इसे असत्य पर सेट करें)

  • kSecReturnRef: कीचेन आइटम का संदर्भ भी प्राप्त करें (यदि बाद में आप देखते हैं कि आप पॉप-अप के बिना डिक्रिप्ट कर सकते हैं तो इसे सत्य पर सेट करें)

  • kSecReturnAttributes: एंट्रीज के बारे में मेटाडेटा प्राप्त करें

  • kSecMatchLimit: वापसी करने के लिए कितने परिणाम

  • kSecClass: किस प्रकार की कीचेन एंट्री

प्रत्येक एंट्री की ACLs प्राप्त करें:

  • एपीआई SecAccessCopyACLList के साथ आप कीचेन आइटम के लिए ACL प्राप्त कर सकते हैं, और यह ACL की सूची वापसी करेगा (जैसे ACLAuhtorizationExportClear और पहले उल्लिखित अन्य) जिसमें प्रत्येक सूची में होता है:

  • विवरण

  • विश्वसनीय एप्लिकेशन सूची। यह हो सकता है:

  • एक ऐप: /Applications/Slack.app

  • एक बाइनरी: /usr/libexec/airportd

  • एक समूह: group://AirPort

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

  • एपीआई SecKeychainItemCopyContent प्लेनटेक्स्ट प्राप्त करती है

  • एपीआई SecItemExport कुंजियाँ और प्रमाणपत्रों को निर्यात करती है लेकिन संदेश एन्क्रिप्टेड निर्यात करने के लिए पासवर्ड सेट करना पड़ सकता है

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

  • यदि 1+ विश्वसनीय एप्लिकेशन सूचीज़ हैं:

  • उचित अधिकारण की आवश्यकता है (Nil, या गुप्त सूची में एप्लिकेशनों की अनुमति के लिए सीक्रेट जानकारी तक पहुंचने के लिए)

  • कोड साइनेचर को मिलाना चाहिए PartitionID के साथ

  • कोड साइनेचर को मिलाना चाहिए उस एक विश्वसनीय एप्लिकेशन के साथ (या सही KeychainAccessGroup का सदस्य होना)

  • यदि सभी एप्लिकेशन विश्वसनीय हैं:

  • उचित अधिकारण की आवश्यकता है

  • कोड साइनेचर को मिलाना चाहिए PartitionID के साथ

  • यदि कोई PartitionID नहीं है, तो यह की आवश्यकता नहीं है

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

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

दो अतिरिक्त विशेषताएँ

  • अदृश्य: यह एक बूलियन फ्लैग है जो एंट्री को UI कीचेन ऐप से छुपाने के लिए है

  • सामान्य: यह मेटाडेटा को स्टोर करने के लिए है (इसलिए यह एन्क्रिप्टेड नहीं है)

  • माइक्रोसॉफ्ट सभी संवेदनशील अंत बिंदु तक पहुंचने के लिए सारे रिफ्रेश टोकन को सादा पाठ में स्टोर कर रहा था।

संदर्भ

Last updated