<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)!
iOS में, उपयोगकर्ता-पहुंचनीय एप्लिकेशन और सिस्टम के मौलिक प्रक्रियाओं के बीच विशेषाधिकार का अंतर होता है। एप्लिकेशन **`mobile`** उपयोगकर्ता पहचान के तहत चलते हैं, जबकि महत्वपूर्ण सिस्टम प्रक्रियाएँ **`root`** के रूप में कार्य करती हैं। इस विभाजन को एक सैंडबॉक्स तंत्र द्वारा बढ़ाया जाता है, जो एप्लिकेशन के कार्रवाई पर सख्त प्रतिबंध लगाता है। उदाहरण के लिए, यदि एप्लिकेशन एक ही उपयोगकर्ता पहचान को साझा करते हैं, तो उन्हें एक-दूसरे के डेटा तक पहुंचने या उसे संशोधित करने से रोका जाता है।
एप्लिकेशन एक विशिष्ट निर्देशिका में स्थापित होती हैं (`private/var/mobile/Applications/{random ID}`) और कुछ सिस्टम क्षेत्रों और कार्यक्षमताओं के लिए प्रतिबंधित पढ़ने की पहुंच होती है, जैसे कि एसएमएस और फोन कॉल्स। संरक्षित क्षेत्रों तक पहुंचने पर उपयोगकर्ता की अनुमति के लिए एक पॉप-अप अनुरोध प्रेरित होता है।
iOS डेटा संरक्षण एपीआई प्रदान करता है, जो सुरक्षित एन्क्लेव प्रोसेसर (SEP) पर निर्मित है — एक विशेष कोप्रोसेसर जो गुप्तचर ऑपरेशन और कुंजी प्रबंधन के लिए निर्धारित है। SEP एक अद्वितीय डिवाइस-विशेष कुंजी, उसमें समाहित डिवाइस UID, के माध्यम से डेटा संरक्षण सत्यापन की गुणवत्ता सुनिश्चित करता है।
फ़ाइल निर्माण के समय, एक अद्वितीय 256-बिट AES एन्क्रिप्शन कुंजी उत्पन्न की जाती है, जो फ़ाइल की सामग्री को एन्क्रिप्ट करती है। इस एन्क्रिप्शन कुंजी के साथ, एक क्लास आईडी के साथ, एक क्लास कुंजी का उपयोग करके इसे एन्क्रिप्ट किया जाता है और फ़ाइल की मेटाडेटा के भीतर संग्रहीत किया जाता है। फ़ाइल को डिक्रिप्ट करने के लिए, सिस्टम कुंजी का उपयोग करके मेटाडेटा तक पहुंचना, क्लास आईडी के साथ क्लास कुंजी प्राप्त करना, और फिर फ़ाइल की अद्वितीय एन्क्रिप्शन कुंजी को डिक्रिप्ट करना होता है।
- **पूर्ण संरक्षण (NSFileProtectionComplete)**: डेटा तब तक अज्ञात है जब तक उपयोगकर्ता का पासकोड उन्होंने खोलने के लिए डिवाइस को नहीं किया है।
- **खुला न होने तक संरक्षित (NSFileProtectionCompleteUnlessOpen)**: डिवाइस तब तक लॉक नहीं होता है, जब तक उपयोगकर्ता ने डिवाइस खोलने के समय फ़ाइल खोली न हो।
- **पहले उपयोगकर्ता प्रमाणीकरण तक संरक्षित (NSFileProtectionCompleteUntilFirstUserAuthentication)**: पहले उपयोगकर्ता अनलॉक करने के बाद डेटा उपलब्ध होता है, और यह उपलब्ध रहता है यदि डिवाइस फिर से लॉक हो जाता है।
- **कोई संरक्षण नहीं (NSFileProtectionNone)**: डेटा केवल डिवाइस UID द्वारा संरक्षित है, जल्दी रिमोट डेटा मिटाने की सुविधा प्रदान करता है।
सभी वर्गों का एन्क्रिप्शन, `NSFileProtectionNone` को छोड़कर, डिवाइस UID और उपयोगकर्ता के पासकोड से उत्पन्न कुंजी से होता है, जिससे डिक्रिप्शन केवल सही पासकोड वाले डिवाइस पर संभव हो। iOS 7 के बाद, डिफ़ॉल्ट संरक्षण वर्ग "पहले उपयोगकर्ता प्रमाणीकरण तक संरक्षित" है।
डेवलपर्स [**FileDP**](https://github.com/abjurato/FileDp-Source) का उपयोग कर सकते हैं, एक उपकरण जो iPhone पर फ़ाइलों की डेटा संरक्षण वर्ग की जांच के लिए है।
```python
# Example code to use FileDP for checking file protection class
# Note: Ensure your device is jailbroken and has Python installed to use FileDP.
iOS में, **कीचेन** एक सुरक्षित **एन्क्रिप्टेड कंटेनर** के रूप में काम करता है जिसमें **संवेदनशील जानकारी** को स्टोर करने के लिए, जिसका उपयोग केवल उस एप्लिकेशन द्वारा किया गया हो या जिन्हें स्पष्ट रूप से अधिकृत किया गया हो। यह एन्क्रिप्शन एक अद्वितीय **पासवर्ड द्वारा जनरेट किया गया है जिसे iOS ने**, जो खुद में **AES** के साथ एन्क्रिप्ट किया गया है, द्वारा मजबूत किया गया है। यह एन्क्रिप्शन प्रक्रिया एक **PBKDF2 फ़ंक्शन** का उपयोग करती है, जो उपयोगकर्ता के पासकोड को डिवाइस के **UID** से प्राप्त एक साल्ट के साथ मिलाकर, जो केवल **सुरक्षित एन्क्लेव चिपसेट** तक पहुंच सकता है। इसलिए, यदि उपयोगकर्ता का पासकोड जाना जाता है, तो कीचेन सामग्री केवल उस डिवाइस पर अप्राप्य होती है जहां उन्हें मूल रूप से एन्क्रिप्ट किया गया था।
कीचेन डेटा का **प्रबंधन और एक्सेस****`securityd` डेमन** द्वारा हैंडल किया जाता है, जो कि `Keychain-access-groups` और `application-identifier` जैसे विशेष ऐप अधिकारों पर आधारित है।
कीचेन API, [एप्पल की कीचेन सेवाओं दस्तावेज़ीकरण](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/02concepts/concepts.html) पर विस्तार से विवरणित करता है, सुरक्षित स्टोरेज प्रबंधन के लिए महत्वपूर्ण फ़ंक्शन प्रदान करता है:
कीचेन पासवर्ड को ब्रूट-फ़ोर्स करने में शामिल है या तो सीधे एन्क्रिप्टेड कुंजी पर हमला करना या डिवाइस पर पासकोड को अनुमान लगाने का प्रयास करना, जिसे सुरक्षित एन्क्लेव के द्वारा असफल प्रयासों के बीच एक देरी के प्रवर्तन द्वारा व्यापक रूप से बाधित किया जाता है।
कीचेन आइटम के लिए डेटा संरक्षण स्तर `kSecAttrAccessible` विशेषता का उपयोग करके आइटम निर्माण या अपडेट के दौरान सेट किए जाते हैं। ये स्तर, [जैसा कि एप्पल द्वारा निर्धारित](https://developer.apple.com/documentation/security/keychain_services/keychain_items/item_attribute_keys_and_values#1679100), यह तय करते हैं कि कीचेन आइटम कब और कैसे पहुंचने योग्य हैं:
एप्लिकेशन-विशिष्ट डेटा की तुलना में जो एप्लिकेशन अनइंस्टॉल करने पर हटा दिया जाता है, **कीचेन डेटा** डिवाइस पर बना रहता है। यह विशेषता दूसरे हाथ में एक द्वितीय-हस्तांतरित डिवाइस के नए मालिकों को एप्लिकेशन डेटा तक पहुंचने की सरलता प्रदान कर सकती है बस एप्लिकेशन को पुनः स्थापित करके। डेवलपरों को इस जोखिम को कम करने के लिए एप्लिकेशन स्थापना के दौरान या लॉगआउट के दौरान सक्रिय रूप से कीचेन डेटा को साफ करने की सलाह दी जाती है। यहाँ एक स्विफ्ट कोड उदाहरण है जो दिखाता है कि पहले एप्लिकेशन लॉन्च पर कीचेन डेटा को कैसे साफ किया जाए:
ऐप विकास के क्षेत्र में, **sandboxing** सुरक्षा को बढ़ाने में महत्वपूर्ण भूमिका निभाता है। यह प्रक्रिया सुनिश्चित करती है कि प्रत्येक ऐप अपनी खुद की अद्वितीय होम निर्देशिका के भीतर कार्य करता है, इससे यह रोकती है कि यह सिस्टम फ़ाइल या अन्य ऐप्स के डेटा तक पहुंचे। इन प्रतिबंधों की प्रवर्तन **Trusted BSD (MAC) Mandatory Access Control Framework** का हिस्सा है।
डेवलपर्स को अपने ऐप्स के लिए कुछ **क्षमताएँ या अनुमतियाँ** कॉन्फ़िगर करने की क्षमता होती है, जैसे **डेटा संरक्षण** या **कीचेन साझाकरण**। ये अनुमतियाँ ऐप स्थापित होने के तुरंत बाद लागू होती हैं। फिर भी, कुछ संरक्षित संसाधनों तक पहुंचने के लिए, ऐप को पहली कोशिश के समय उपयोगकर्ता से स्पष्ट सहमति प्राप्त करनी चाहिए। यह _उद्देश्य स्ट्रिंग्स_ या _उपयोग विवरण स्ट्रिंग्स_ का उपयोग करके होता है, जो उपयोगकर्ताओं को एक अनुमति अनुरोध अलर्ट में प्रस्तुत किए जाते हैं।
एक ऐप की `Info.plist` फ़ाइल डिवाइस संगतता के लिए ऐप स्टोर ऐप्स को फ़िल्टर करने में मदद करने वाली **डिवाइस क्षमताएँ** निर्दिष्ट करती हैं। ये **`UIRequiredDeviceCapabilities`** कुंजी के तहत परिभाषित की जाती हैं। उदाहरण के लिए:
यह उदाहरण दिखाता है कि ऐप armv7 इंस्ट्रक्शन सेट के साथ संगत है। डेवलपर यह भी निर्दिष्ट कर सकते हैं कि उनका ऐप केवल NFC का समर्थन करने वाले डिवाइस पर ही उपलब्ध है।
**अधिकार** iOS ऐप विकास का एक और महत्वपूर्ण पहलू है, जो कुंजी-मान जोड़ी के रूप में काम करता है और ऐप्स को रनटाइम जांचों से परे कुछ ऑपरेशन करने की अनुमति देता है। उदाहरण के लिए, ऐप में **डेटा संरक्षण** को सक्षम करना एक विशेष अधिकार जोड़ने का मतलब है Xcode परियोजना में, जो फिर ऐप के अधिकार फ़ाइल या IPAs के लिए संबोधित मोबाइल प्राविधि फ़ाइल में प्रतिबिम्बित होता है।
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में** दिखाई दे या **HackTricks को PDF में डाउनलोड** करें तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)!