iOS Basics

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

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

विशेषाधिकार विभाजन और सैंडबॉक्स

iOS में, उपयोगकर्ता-पहुंचनीय एप्लिकेशन और सिस्टम के मौलिक प्रक्रियाओं के बीच विशेषाधिकार का अंतर होता है। एप्लिकेशन mobile उपयोगकर्ता पहचान के तहत चलते हैं, जबकि महत्वपूर्ण सिस्टम प्रक्रियाएँ root के रूप में कार्य करती हैं। इस विभाजन को एक सैंडबॉक्स तंत्र द्वारा बढ़ाया जाता है, जो एप्लिकेशन के कार्रवाई पर सख्त प्रतिबंध लगाता है। उदाहरण के लिए, यदि एप्लिकेशन एक ही उपयोगकर्ता पहचान को साझा करते हैं, तो उन्हें एक-दूसरे के डेटा तक पहुंचने या उसे संशोधित करने से रोका जाता है।

एप्लिकेशन एक विशिष्ट निर्देशिका में स्थापित होती हैं (private/var/mobile/Applications/{random ID}) और कुछ सिस्टम क्षेत्रों और कार्यक्षमताओं के लिए प्रतिबंधित पढ़ने की पहुंच होती है, जैसे कि एसएमएस और फोन कॉल्स। संरक्षित क्षेत्रों तक पहुंचने पर उपयोगकर्ता की अनुमति के लिए एक पॉप-अप अनुरोध प्रेरित होता है।

डेटा संरक्षण

iOS डेटा संरक्षण एपीआई प्रदान करता है, जो सुरक्षित एन्क्लेव प्रोसेसर (SEP) पर निर्मित है — एक विशेष कोप्रोसेसर जो गुप्तचर ऑपरेशन और कुंजी प्रबंधन के लिए निर्धारित है। SEP एक अद्वितीय डिवाइस-विशेष कुंजी, उसमें समाहित डिवाइस UID, के माध्यम से डेटा संरक्षण सत्यापन की गुणवत्ता सुनिश्चित करता है।

फ़ाइल निर्माण के समय, एक अद्वितीय 256-बिट AES एन्क्रिप्शन कुंजी उत्पन्न की जाती है, जो फ़ाइल की सामग्री को एन्क्रिप्ट करती है। इस एन्क्रिप्शन कुंजी के साथ, एक क्लास आईडी के साथ, एक क्लास कुंजी का उपयोग करके इसे एन्क्रिप्ट किया जाता है और फ़ाइल की मेटाडेटा के भीतर संग्रहीत किया जाता है। फ़ाइल को डिक्रिप्ट करने के लिए, सिस्टम कुंजी का उपयोग करके मेटाडेटा तक पहुंचना, क्लास आईडी के साथ क्लास कुंजी प्राप्त करना, और फिर फ़ाइल की अद्वितीय एन्क्रिप्शन कुंजी को डिक्रिप्ट करना होता है।

iOS डेटा सुरक्षा के लिए चार संरक्षण वर्ग परिभाषित करता है, जो यह निर्धारित करते हैं कि कब और कैसे डेटा तक पहुंचा जा सकता है:

  • पूर्ण संरक्षण (NSFileProtectionComplete): डेटा तब तक अज्ञात है जब तक उपयोगकर्ता का पासकोड उन्होंने खोलने के लिए डिवाइस को नहीं किया है।

  • खुला न होने तक संरक्षित (NSFileProtectionCompleteUnlessOpen): डिवाइस तब तक लॉक नहीं होता है, जब तक उपयोगकर्ता ने डिवाइस खोलने के समय फ़ाइल खोली न हो।

  • पहले उपयोगकर्ता प्रमाणीकरण तक संरक्षित (NSFileProtectionCompleteUntilFirstUserAuthentication): पहले उपयोगकर्ता अनलॉक करने के बाद डेटा उपलब्ध होता है, और यह उपलब्ध रहता है यदि डिवाइस फिर से लॉक हो जाता है।

  • कोई संरक्षण नहीं (NSFileProtectionNone): डेटा केवल डिवाइस UID द्वारा संरक्षित है, जल्दी रिमोट डेटा मिटाने की सुविधा प्रदान करता है।

सभी वर्गों का एन्क्रिप्शन, NSFileProtectionNone को छोड़कर, डिवाइस UID और उपयोगकर्ता के पासकोड से उत्पन्न कुंजी से होता है, जिससे डिक्रिप्शन केवल सही पासकोड वाले डिवाइस पर संभव हो। iOS 7 के बाद, डिफ़ॉल्ट संरक्षण वर्ग "पहले उपयोगकर्ता प्रमाणीकरण तक संरक्षित" है।

डेवलपर्स FileDP का उपयोग कर सकते हैं, एक उपकरण जो iPhone पर फ़ाइलों की डेटा संरक्षण वर्ग की जांच के लिए है।

# Example code to use FileDP for checking file protection class
# Note: Ensure your device is jailbroken and has Python installed to use FileDP.
# Installation and usage of FileDP:
git clone https://github.com/abjurato/FileDp-Source
cd FileDp-Source
python filedp.py /path/to/check

कीचेन

iOS में, कीचेन एक सुरक्षित एन्क्रिप्टेड कंटेनर के रूप में काम करता है जिसमें संवेदनशील जानकारी को स्टोर करने के लिए, जिसका उपयोग केवल उस एप्लिकेशन द्वारा किया गया हो या जिन्हें स्पष्ट रूप से अधिकृत किया गया हो। यह एन्क्रिप्शन एक अद्वितीय पासवर्ड द्वारा जनरेट किया गया है जिसे iOS ने, जो खुद में AES के साथ एन्क्रिप्ट किया गया है, द्वारा मजबूत किया गया है। यह एन्क्रिप्शन प्रक्रिया एक PBKDF2 फ़ंक्शन का उपयोग करती है, जो उपयोगकर्ता के पासकोड को डिवाइस के UID से प्राप्त एक साल्ट के साथ मिलाकर, जो केवल सुरक्षित एन्क्लेव चिपसेट तक पहुंच सकता है। इसलिए, यदि उपयोगकर्ता का पासकोड जाना जाता है, तो कीचेन सामग्री केवल उस डिवाइस पर अप्राप्य होती है जहां उन्हें मूल रूप से एन्क्रिप्ट किया गया था।

कीचेन डेटा का प्रबंधन और एक्सेस securityd डेमन द्वारा हैंडल किया जाता है, जो कि Keychain-access-groups और application-identifier जैसे विशेष ऐप अधिकारों पर आधारित है।

कीचेन API ऑपरेशन

कीचेन API, एप्पल की कीचेन सेवाओं दस्तावेज़ीकरण पर विस्तार से विवरणित करता है, सुरक्षित स्टोरेज प्रबंधन के लिए महत्वपूर्ण फ़ंक्शन प्रदान करता है:

  • SecItemAdd: कीचेन में एक नया आइटम जोड़ता है।

  • SecItemUpdate: कीचेन में मौजूदा आइटम को अपडेट करता है।

  • SecItemCopyMatching: कीचेन से एक आइटम प्राप्त करता है।

  • SecItemDelete: कीचेन से एक आइटम हटाता है।

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

कीचेन आइटम डेटा संरक्षण कॉन्फ़िगरेशन

कीचेन आइटम के लिए डेटा संरक्षण स्तर kSecAttrAccessible विशेषता का उपयोग करके आइटम निर्माण या अपडेट के दौरान सेट किए जाते हैं। ये स्तर, जैसा कि एप्पल द्वारा निर्धारित, यह तय करते हैं कि कीचेन आइटम कब और कैसे पहुंचने योग्य हैं:

  • kSecAttrAccessibleAlways: कभी भी पहुंचने योग्य, डिवाइस लॉक स्थिति के बावजूद।

  • kSecAttrAccessibleAlwaysThisDeviceOnly: हमेशा पहुंचने योग्य, लेकिन बैकअप में शामिल नहीं है।

  • kSecAttrAccessibleAfterFirstUnlock: पुनरारंभ के बाद पहले अनलॉक के बाद पहुंचने योग्य।

  • kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly: उपरोक्त के समान, लेकिन नए डिवाइसों में स्थानांतरित नहीं किया जा सकता है।

  • kSecAttrAccessibleWhenUnlocked: केवल जब डिवाइस अनलॉक होता है, तब पहुंचने योग्य है।

  • kSecAttrAccessibleWhenUnlockedThisDeviceOnly: अनलॉक होने पर ही पहुंचने योग्य, बैकअप में शामिल नहीं है।

  • kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly: डिवाइस पासकोड की आवश्यकता है, बैकअप में शामिल नहीं है।

AccessControlFlags और भी अधिक उन्नत पहुंच विधियों को सुधारते हैं, जो जीवाणु प्रमाणीकरण या पासकोड का उपयोग समर्थन करते हैं।

जेलब्रोकन डिवाइस चेतावनी

जेलब्रोकन डिवाइस पर, कीचेन की सुरक्षा सुरक्षा कमजोर हो जाती है, जो एक महत्वपूर्ण सुरक्षा जोखिम प्रस्तुत करता है।

कीचेन डेटा का स्थायित्व

एप्लिकेशन-विशिष्ट डेटा की तुलना में जो एप्लिकेशन अनइंस्टॉल करने पर हटा दिया जाता है, कीचेन डेटा डिवाइस पर बना रहता है। यह विशेषता दूसरे हाथ में एक द्वितीय-हस्तांतरित डिवाइस के नए मालिकों को एप्लिकेशन डेटा तक पहुंचने की सरलता प्रदान कर सकती है बस एप्लिकेशन को पुनः स्थापित करके। डेवलपरों को इस जोखिम को कम करने के लिए एप्लिकेशन स्थापना के दौरान या लॉगआउट के दौरान सक्रिय रूप से कीचेन डेटा को साफ करने की सलाह दी जाती है। यहाँ एक स्विफ्ट कोड उदाहरण है जो दिखाता है कि पहले एप्लिकेशन लॉन्च पर कीचेन डेटा को कैसे साफ किया जाए:

let userDefaults = UserDefaults.standard

if userDefaults.bool(forKey: "hasRunBefore") == false {
// Remove Keychain items here

// Update the flag indicator
userDefaults.set(true, forKey: "hasRunBefore")
userDefaults.synchronize() // Forces the app to update UserDefaults
}

ऐप क्षमताएँ

ऐप विकास के क्षेत्र में, sandboxing सुरक्षा को बढ़ाने में महत्वपूर्ण भूमिका निभाता है। यह प्रक्रिया सुनिश्चित करती है कि प्रत्येक ऐप अपनी खुद की अद्वितीय होम निर्देशिका के भीतर कार्य करता है, इससे यह रोकती है कि यह सिस्टम फ़ाइल या अन्य ऐप्स के डेटा तक पहुंचे। इन प्रतिबंधों की प्रवर्तन Trusted BSD (MAC) Mandatory Access Control Framework का हिस्सा है।

डेवलपर्स को अपने ऐप्स के लिए कुछ क्षमताएँ या अनुमतियाँ कॉन्फ़िगर करने की क्षमता होती है, जैसे डेटा संरक्षण या कीचेन साझाकरण। ये अनुमतियाँ ऐप स्थापित होने के तुरंत बाद लागू होती हैं। फिर भी, कुछ संरक्षित संसाधनों तक पहुंचने के लिए, ऐप को पहली कोशिश के समय उपयोगकर्ता से स्पष्ट सहमति प्राप्त करनी चाहिए। यह उद्देश्य स्ट्रिंग्स या उपयोग विवरण स्ट्रिंग्स का उपयोग करके होता है, जो उपयोगकर्ताओं को एक अनुमति अनुरोध अलर्ट में प्रस्तुत किए जाते हैं।

स्रोत कोड तक पहुंच वाले व्यक्तियों के लिए, Info.plist फ़ाइल में शामिल अनुमतियों की पुष्टि करने के लिए निम्नलिखित किया जा सकता है:

  1. Xcode में परियोजना खोलें।

  2. Info.plist फ़ाइल को ढूंढें और खोलें।

  3. स्पष्टता के लिए रॉ कुंजी / मान देखने के विकल्प के साथ "Privacy -" से उत्तरदाता की खोज करें।

IPA फ़ाइल के साथ काम करते समय, निम्नलिखित चरण अनुसरण किए जा सकते हैं:

  1. IPA को अनज़िप करें।

  2. Payload/<appname>.app/ के भीतर Info.plist फ़ाइल को ढूंढें।

  3. आवश्यक हो तो फ़ाइल को XML प्रारूप में परिवर्तित करें, जिससे इसे आसानी से जांचा जा सके।

उदाहरण के लिए, Info.plist फ़ाइल में उद्देश्य स्ट्रिंग्स इस तरह दिख सकती हैं:

<plist version="1.0">
<dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Your location is used to provide turn-by-turn directions to your destination.</string>

डिवाइस क्षमताएँ

एक ऐप की Info.plist फ़ाइल डिवाइस संगतता के लिए ऐप स्टोर ऐप्स को फ़िल्टर करने में मदद करने वाली डिवाइस क्षमताएँ निर्दिष्ट करती हैं। ये UIRequiredDeviceCapabilities कुंजी के तहत परिभाषित की जाती हैं। उदाहरण के लिए:

<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>

उदाहरण

यह उदाहरण दिखाता है कि ऐप armv7 इंस्ट्रक्शन सेट के साथ संगत है। डेवलपर यह भी निर्दिष्ट कर सकते हैं कि उनका ऐप केवल NFC का समर्थन करने वाले डिवाइस पर ही उपलब्ध है।

अधिकार

अधिकार iOS ऐप विकास का एक और महत्वपूर्ण पहलू है, जो कुंजी-मान जोड़ी के रूप में काम करता है और ऐप्स को रनटाइम जांचों से परे कुछ ऑपरेशन करने की अनुमति देता है। उदाहरण के लिए, ऐप में डेटा संरक्षण को सक्षम करना एक विशेष अधिकार जोड़ने का मतलब है Xcode परियोजना में, जो फिर ऐप के अधिकार फ़ाइल या IPAs के लिए संबोधित मोबाइल प्राविधि फ़ाइल में प्रतिबिम्बित होता है।

संदर्भ

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

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

Last updated