# macOS Keychain
Learn AWS hacking from zero to hero with htARTE (HackTricks AWS Red Team Expert)!
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें**, तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram group**](https://t.me/peass) में या **Twitter** 🐦 पर मुझे **follow** करें [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।
## मुख्य Keychains
* **User Keychain** (`~/Library/Keychains/login.keycahin-db`), जिसका उपयोग **उपयोगकर्ता-विशिष्ट प्रमाण-पत्र** जैसे एप्लिकेशन पासवर्ड, इंटरनेट पासवर्ड, उपयोगकर्ता-निर्मित प्रमाणपत्र, नेटवर्क पासवर्ड, और उपयोगकर्ता-निर्मित सार्वजनिक/निजी कुंजियों को संग्रहीत करने के लिए किया जाता है।
* **System Keychain** (`/Library/Keychains/System.keychain`), जो **सिस्टम-व्यापी प्रमाण-पत्र** जैसे WiFi पासवर्ड, सिस्टम रूट प्रमाणपत्र, सिस्टम निजी कुंजियाँ, और सिस्टम एप्लिकेशन पासवर्ड संग्रहीत करता है।
### Password Keychain Access
ये फाइलें, जबकि इनमें स्वाभाविक सुरक्षा नहीं होती और इन्हें **डाउनलोड** किया जा सकता है, एन्क्रिप्टेड होती हैं और इन्हें डिक्रिप्ट करने के लिए **उपयोगकर्ता के प्लेनटेक्स्ट पासवर्ड की आवश्यकता होती है**। डिक्रिप्शन के लिए [**Chainbreaker**](https://github.com/n0fate/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`
```bash
# 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**](https://github.com/its-a-feature/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 संवेदनशील एंडपॉइंट तक पहुँचने के लिए सभी रिफ्रेश टोकन को सादे पाठ में स्टोर कर रहा था।
## संदर्भ
* [**#OBTS v5.0: "Lock Picking the macOS Keychain" - Cody Thomas**](https://www.youtube.com/watch?v=jKE1ZW33JpY)
Learn AWS hacking from zero to hero with htARTE (HackTricks AWS Red Team Expert)!
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी **कंपनी को HackTricks में विज्ञापित** देखना चाहते हैं या **HackTricks को PDF में डाउनलोड** करना चाहते हैं तो [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) देखें!
* [**official PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा [**NFTs**](https://opensea.io/collection/the-peass-family) का विशेष संग्रह
* 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram group**](https://t.me/peass) में या **Twitter** पर मुझे 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)** का पालन करें**।
* **HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।