16 KiB
macOS Keychain
Learn AWS hacking from zero to hero with htARTE (HackTricks AWS Red Team Expert)!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप चाहते हैं कि आपकी कंपनी का विज्ञापन HackTricks में दिखाई दे या HackTricks को PDF में डाउनलोड करें, तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- The PEASS Family की खोज करें, हमारा विशेष NFTs संग्रह
- 💬 Discord group में शामिल हों या telegram group में या Twitter 🐦 पर मुझे follow करें @carlospolopm.
- HackTricks के github repos और HackTricks Cloud में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।
मुख्य Keychains
- User Keychain (
~/Library/Keychains/login.keycahin-db
), जिसका उपयोग उपयोगकर्ता-विशिष्ट प्रमाण-पत्र जैसे एप्लिकेशन पासवर्ड, इंटरनेट पासवर्ड, उपयोगकर्ता-निर्मित प्रमाणपत्र, नेटवर्क पासवर्ड, और उपयोगकर्ता-निर्मित सार्वजनिक/निजी कुंजियों को संग्रहीत करने के लिए किया जाता है। - System Keychain (
/Library/Keychains/System.keychain
), जो सिस्टम-व्यापी प्रमाण-पत्र जैसे WiFi पासवर्ड, सिस्टम रूट प्रमाणपत्र, सिस्टम निजी कुंजियाँ, और सिस्टम एप्लिकेशन पासवर्ड संग्रहीत करता है।
Password Keychain Access
ये फाइलें, जबकि इनमें स्वाभाविक सुरक्षा नहीं होती और इन्हें डाउनलोड किया जा सकता है, एन्क्रिप्टेड होती हैं और इन्हें डिक्रिप्ट करने के लिए उपयोगकर्ता के प्लेनटेक्स्ट पासवर्ड की आवश्यकता होती है। डिक्रिप्शन के लिए Chainbreaker जैसे टूल का उपयोग किया जा सकता है।
Keychain Entries Protections
ACLs
Keychain में प्रत्येक प्रविष्टि Access Control Lists (ACLs) द्वारा शासित होती है, जो यह निर्धारित करती हैं कि कौन किस प्रकार की क्रियाएं कर सकता है, जिसमें शामिल हैं:
- ACLAuhtorizationExportClear: प्रधारक को गुप्त संदेश का स्पष्ट पाठ प्राप्त करने की अनुमति देता है।
- ACLAuhtorizationExportWrapped: प्रधारक को दूसरे प्रदान किए गए पासवर्ड के साथ एन्क्रिप्टेड स्पष्ट पाठ प्राप्त करने की अनुमति देता है।
- ACLAuhtorizationAny: प्रधारक को कोई भी क्रिया करने की अनुमति देता है।
ACLs के साथ एक विश्वसनीय एप्लिकेशनों की सूची भी होती है जो बिना प्रॉम्प्ट के ये क्रियाएं कर सकते हैं। यह हो सकता है:
- N
il
(कोई अधिकार आवश्यक नहीं, सभी विश्वसनीय हैं) - एक खाली सूची (कोई भी विश्वसनीय नहीं है)
- विशिष्ट एप्लिकेशनों की सूची।
साथ ही प्रविष्टि में ACLAuthorizationPartitionID
, कुंजी भी हो सकती है, जिसका उपयोग teamid, apple, और cdhash की पहचान करने के लिए किया जाता है।
- यदि teamid निर्दिष्ट है, तो प्रविष्टि मूल्य तक बिना प्रॉम्प्ट के पहुँचने के लिए उपयोग किए गए एप्लिकेशन के पास समान teamid होना चाहिए।
- यदि apple निर्दिष्ट है, तो एप्लिकेशन को Apple द्वारा साइन किया जाना चाहिए।
- यदि cdhash इंगित किया गया है, तो एप्लिकेशन के पास विशिष्ट cdhash होना चाहिए।
Keychain Entry बनाना
जब नई प्रविष्टि Keychain Access.app
का उपयोग करके बनाई जाती है, तो निम्नलिखित नियम लागू होते हैं:
- सभी एप्लिकेशन एन्क्रिप्ट कर सकते हैं।
- कोई भी एप्लिकेशन निर्यात/डिक्रिप्ट नहीं कर सकता (उपयोगकर्ता को प्रॉम्प्ट किए बिना)।
- सभी एप्लिकेशन अखंडता जांच देख सकते हैं।
- कोई भी एप्लिकेशन ACLs बदल नहीं सकता।
- partitionID को
apple
पर सेट किया जाता है।
जब कोई एप्लिकेशन keychain में प्रविष्टि बनाता है, तो नियम थोड़े अलग होते हैं:
- सभी एप्लिकेशन एन्क्रिप्ट कर सकते हैं।
- केवल प्रविष्टि बनाने वाला एप्लिकेशन (या विशेष रूप से जोड़े गए अन्य एप्लिकेशन) निर्यात/डिक्रिप्ट कर सकते हैं (उपयोगकर्ता को प्रॉम्प्ट किए बिना)।
- सभी एप्लिकेशन अखंडता जांच देख सकते हैं।
- कोई भी एप्लिकेशन ACLs बदल नहीं सकता।
- partitionID को
teamid:[teamID here]
पर सेट किया जाता है।
Keychain तक पहुँच
security
# 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
APIs
{% hint style="success" %} keychain enumeration और dumping जो prompt नहीं उत्पन्न करेगा उसे LockSmith टूल के साथ किया जा सकता है। {% endhint %}
प्रत्येक keychain प्रविष्टि के बारे में जानकारी प्राप्त करें:
- API
SecItemCopyMatching
प्रत्येक प्रविष्टि के बारे में जानकारी देता है और इसका उपयोग करते समय आप कुछ विशेषताएँ सेट कर सकते हैं: kSecReturnData
: यदि सच है, तो यह डेटा को डिक्रिप्ट करने की कोशिश करेगा (पॉप-अप से बचने के लिए false पर सेट करें)kSecReturnRef
: keychain आइटम का संदर्भ भी प्राप्त करें (यदि बाद में आप देखते हैं कि आप पॉप-अप के बिना डिक्रिप्ट कर सकते हैं तो सच में सेट करें)kSecReturnAttributes
: प्रविष्टियों के बारे में मेटाडेटा प्राप्त करेंkSecMatchLimit
: कितने परिणाम लौटाने हैंkSecClass
: keychain प्रविष्टि का किस प्रकार है
प्रत्येक प्रविष्टि के ACLs प्राप्त करें:
- API
SecAccessCopyACLList
के साथ आप keychain आइटम के लिए ACL प्राप्त कर सकते हैं, और यह ACLs की एक सूची लौटाएगा (जैसेACLAuhtorizationExportClear
और पहले उल्लिखित अन्य) जहाँ प्रत्येक सूची में होगा: - विवरण
- Trusted Application List। यह हो सकता है:
- एक ऐप: /Applications/Slack.app
- एक बाइनरी: /usr/libexec/airportd
- एक समूह: group://AirPort
डेटा निर्यात करें:
- API
SecKeychainItemCopyContent
प्लेनटेक्स्ट प्राप्त करता है - API
SecItemExport
कुंजियों और प्रमाणपत्रों को निर्यात करता है लेकिन सामग्री को एन्क्रिप्टेड निर्यात करने के लिए पासवर्ड सेट करना पड़ सकता है
और ये आवश्यकताएँ हैं जो बिना prompt के एक रहस्य को निर्यात करने के लिए:
- यदि 1+ trusted ऐप्स सूचीबद्ध हैं:
- उचित authorizations की आवश्यकता होती है (
Nil
, या रहस्य जानकारी तक पहुँचने के लिए अनुमति सूची के ऐप्स का भाग होना) - कोड हस्ताक्षर का PartitionID से मेल होना चाहिए
- कोड हस्ताक्षर का एक trusted app के साथ मेल होना चाहिए (या सही KeychainAccessGroup का सदस्य होना चाहिए)
- यदि सभी अनुप्रयोगों को विश्वास है:
- उचित authorizations की आवश्यकता होती है
- कोड हस्ताक्षर का PartitionID से मेल होना चाहिए
- यदि कोई PartitionID नहीं है, तो यह आवश्यक नहीं है
{% hint style="danger" %} इसलिए, यदि 1 अनुप्रयोग सूचीबद्ध है, तो आपको उस अनुप्रयोग में कोड इंजेक्ट करना होगा।
यदि apple को partitionID में इंगित किया गया है, तो आप इसे osascript
के साथ पहुँच सकते हैं, इसलिए कुछ भी जो सभी अनुप्रयोगों को apple के साथ partitionID में विश्वास करता है। Python
भी इसके लिए उपयोग किया जा सकता है।
{% endhint %}
दो अतिरिक्त विशेषताएँ
- Invisible: यह एक बूलियन फ्लैग है जो प्रविष्टि को UI Keychain ऐप से छिपाने के लिए है
- General: यह मेटाडेटा स्टोर करने के लिए है (इसलिए यह ENCRYPTED नहीं है)
- Microsoft संवेदनशील एंडपॉइंट तक पहुँचने के लिए सभी रिफ्रेश टोकन को सादे पाठ में स्टोर कर रहा था।
संदर्भ
Learn AWS hacking from zero to hero with htARTE (HackTricks AWS Red Team Expert)!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप अपनी कंपनी को HackTricks में विज्ञापित देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो SUBSCRIPTION PLANS देखें!
- official PEASS & HackTricks swag प्राप्त करें
- The PEASS Family की खोज करें, हमारा NFTs का विशेष संग्रह
- 💬 Discord group में शामिल हों या telegram group में या Twitter पर मुझे 🐦 @carlospolopm** का पालन करें**।
- HackTricks के github repos और HackTricks Cloud में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।