hacktricks/mobile-pentesting/ios-pentesting/ios-basics.md

24 KiB

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

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

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

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

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

डेटा संरक्षण

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 और अधिक रिफाइन एक्सेस विधियों को समर्थित करते हैं, जो जीवाणु प्रमाणीकरण या पासकोड का उपयोग करने की अनुमति देते हैं।

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

{% hint style="warning" %} जेलब्रोकन डिवाइस पर, कीचेन की सुरक्षा संरक्षण कमजोर हो जाती है, जो एक महत्वपूर्ण सुरक्षा जोखिम पैदा करती है। {% endhint %}

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

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

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 ऐप विकास का एक और महत्वपूर्ण पहलू है, जो कुंजी-मान-मान के रूप में काम करता है जो ऐप्स को रनटाइम जांचों से परे कुछ ऑपरेशन करने की अनुमति देता है। उदाहरण के लिए, एक ऐप में डेटा संरक्षण को सक्षम करना एक विशेष अधिकार को एक्सकोड परियोजना में जोड़ने का मतलब है, जो फिर ऐप के अधिकार फ़ाइल या आईपीए के लिए समावेशित मोबाइल प्राविधि फ़ाइल में प्रतिबिम्बित होता है।

संदर्भ

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

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