iOS Basics
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
iOS में, उपयोगकर्ता-सुलभ अनुप्रयोगों और प्रणाली के मुख्य प्रक्रियाओं के बीच विशेषाधिकार में भेद है। अनुप्रयोग mobile
उपयोगकर्ता पहचान के तहत चलते हैं, जबकि महत्वपूर्ण प्रणाली प्रक्रियाएँ root
के रूप में कार्य करती हैं। यह विभाजन एक सैंडबॉक्स तंत्र द्वारा बढ़ाया गया है, जो अनुप्रयोगों द्वारा किए जा सकने वाले कार्यों पर कड़े प्रतिबंध लगाता है। उदाहरण के लिए, भले ही अनुप्रयोग एक ही उपयोगकर्ता पहचान साझा करते हों, उन्हें एक-दूसरे के डेटा तक पहुँचने या उसे संशोधित करने की अनुमति नहीं है।
अनुप्रयोग एक विशिष्ट निर्देशिका (private/var/mobile/Applications/{random ID}
) में स्थापित होते हैं और कुछ प्रणाली क्षेत्रों और कार्यक्षमताओं, जैसे SMS और फोन कॉल, तक सीमित पढ़ने की पहुँच होती है। संरक्षित क्षेत्रों तक पहुँचने पर उपयोगकर्ता अनुमति के लिए एक पॉप-अप अनुरोध उत्पन्न होता है।
iOS डेवलपर्स को डेटा सुरक्षा एपीआई प्रदान करता है, जो सुरक्षित एनक्लेव प्रोसेसर (SEP) के ऊपर निर्मित हैं — क्रिप्टोग्राफिक संचालन और कुंजी प्रबंधन के लिए एक समर्पित सह-प्रोसेसर। SEP डेटा सुरक्षा अखंडता को एक अद्वितीय उपकरण-विशिष्ट कुंजी, उपकरण UID, के माध्यम से सुनिश्चित करता है, जो इसके भीतर एम्बेडेड होता है।
फाइल निर्माण के समय, एक अद्वितीय 256-बिट AES एन्क्रिप्शन कुंजी उत्पन्न होती है, जो फाइल की सामग्री को एन्क्रिप्ट करती है। यह एन्क्रिप्शन कुंजी, एक वर्ग ID के साथ, फिर एक वर्ग कुंजी का उपयोग करके एन्क्रिप्ट की जाती है और फाइल के मेटाडेटा में संग्रहीत की जाती है। एक फाइल को डिक्रिप्ट करने में प्रणाली की कुंजी का उपयोग करके मेटाडेटा तक पहुँच प्राप्त करना, वर्ग ID के साथ वर्ग कुंजी को पुनः प्राप्त करना, और फिर फाइल की अद्वितीय एन्क्रिप्शन कुंजी को डिक्रिप्ट करना शामिल है।
iOS डेटा सुरक्षा के लिए चार सुरक्षा वर्ग परिभाषित करता है, जो यह निर्धारित करते हैं कि डेटा कब और कैसे पहुँचा जा सकता है:
पूर्ण सुरक्षा (NSFileProtectionComplete): डेटा तब तक अनुपलब्ध है जब तक उपकरण को उपयोगकर्ता के पासकोड का उपयोग करके अनलॉक नहीं किया जाता।
खुला होने पर सुरक्षित (NSFileProtectionCompleteUnlessOpen): उपकरण बंद होने के बाद भी फाइल तक पहुँच की अनुमति देता है, बशर्ते फाइल को तब खोला गया हो जब उपकरण अनलॉक किया गया था।
पहली उपयोगकर्ता प्रमाणीकरण तक सुरक्षित (NSFileProtectionCompleteUntilFirstUserAuthentication): डेटा पहले उपयोगकर्ता अनलॉक के बाद उपलब्ध है, भले ही उपकरण फिर से बंद हो जाए।
कोई सुरक्षा नहीं (NSFileProtectionNone): डेटा केवल उपकरण UID द्वारा सुरक्षित है, जिससे त्वरित दूरस्थ डेटा मिटाने की सुविधा मिलती है।
सभी वर्गों का एन्क्रिप्शन, NSFileProtectionNone
को छोड़कर, एक कुंजी से किया जाता है जो उपकरण UID और उपयोगकर्ता के पासकोड दोनों से प्राप्त होती है, यह सुनिश्चित करते हुए कि डिक्रिप्शन केवल सही पासकोड वाले उपकरण पर संभव है। iOS 7 से, डिफ़ॉल्ट सुरक्षा वर्ग "पहली उपयोगकर्ता प्रमाणीकरण तक सुरक्षित" है।
डेवलपर्स FileDP का उपयोग कर सकते हैं, जो iPhone पर फाइलों के डेटा सुरक्षा वर्ग का निरीक्षण करने के लिए एक उपकरण है।
iOS में, एक Keychain एक सुरक्षित एन्क्रिप्टेड कंटेनर के रूप में कार्य करता है जो संवेदनशील जानकारी को संग्रहीत करने के लिए है, जिसे केवल वही एप्लिकेशन या वे जो स्पष्ट रूप से अधिकृत हैं, द्वारा एक्सेस किया जा सकता है। यह एन्क्रिप्शन एक अद्वितीय पासवर्ड द्वारा मजबूत किया गया है जो iOS द्वारा उत्पन्न होता है, जो स्वयं AES के साथ एन्क्रिप्टेड है। यह एन्क्रिप्शन प्रक्रिया एक PBKDF2 फ़ंक्शन का उपयोग करती है, जो उपयोगकर्ता के पासकोड को एक नमक के साथ जोड़ती है जो डिवाइस के UID से प्राप्त होता है, एक घटक जिसे केवल सुरक्षित एन्क्लेव चिपसेट एक्सेस कर सकता है। परिणामस्वरूप, भले ही उपयोगकर्ता का पासकोड ज्ञात हो, Keychain की सामग्री किसी अन्य डिवाइस पर अनुपलब्ध रहती है सिवाय उस डिवाइस के जहां उन्हें मूल रूप से एन्क्रिप्ट किया गया था।
Keychain डेटा का प्रबंधन और एक्सेस securityd
डेमन द्वारा किया जाता है, जो विशिष्ट ऐप अधिकारों जैसे Keychain-access-groups
और application-identifier
पर आधारित है।
Keychain API, Apple के Keychain Services दस्तावेज़ में विस्तृत, सुरक्षित संग्रहण प्रबंधन के लिए आवश्यक कार्य प्रदान करता है:
SecItemAdd
: Keychain में एक नया आइटम जोड़ता है।
SecItemUpdate
: Keychain में एक मौजूदा आइटम को अपडेट करता है।
SecItemCopyMatching
: Keychain से एक आइटम प्राप्त करता है।
SecItemDelete
: Keychain से एक आइटम को हटाता है।
Keychain पासवर्ड को ब्रूट-फोर्स करना या तो एन्क्रिप्टेड कुंजी पर सीधे हमला करना या डिवाइस पर पासकोड का अनुमान लगाने का प्रयास करना शामिल है, जिसे असफल प्रयासों के बीच सुरक्षित एन्क्लेव द्वारा लागू किए गए विलंब से काफी हद तक बाधित किया जाता है।
Keychain आइटम के लिए डेटा सुरक्षा स्तरों को आइटम निर्माण या अपडेट के दौरान kSecAttrAccessible
विशेषता का उपयोग करके सेट किया जाता है। ये स्तर, Apple द्वारा निर्दिष्ट, यह निर्धारित करते हैं कि Keychain आइटम कब और कैसे एक्सेस किए जा सकते हैं:
kSecAttrAccessibleAlways
: किसी भी समय, डिवाइस लॉक स्थिति की परवाह किए बिना एक्सेस किया जा सकता है।
kSecAttrAccessibleAlwaysThisDeviceOnly
: हमेशा एक्सेस किया जा सकता है, लेकिन बैकअप में शामिल नहीं है।
kSecAttrAccessibleAfterFirstUnlock
: पहले अनलॉक के बाद एक्सेस किया जा सकता है।
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
: ऊपर जैसा ही, लेकिन नए डिवाइस पर स्थानांतरित नहीं किया जा सकता।
kSecAttrAccessibleWhenUnlocked
: केवल तब एक्सेस किया जा सकता है जब डिवाइस अनलॉक हो।
kSecAttrAccessibleWhenUnlockedThisDeviceOnly
: अनलॉक होने पर एक्सेस किया जा सकता है, बैकअप में शामिल नहीं है।
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
: डिवाइस पासकोड की आवश्यकता होती है, बैकअप में शामिल नहीं है।
AccessControlFlags
एक्सेस विधियों को और अधिक परिष्कृत करते हैं, बायोमेट्रिक प्रमाणीकरण या पासकोड उपयोग की अनुमति देते हैं।
जेलब्रोकन डिवाइसों पर, Keychain की सुरक्षा से समझौता किया गया है, जो एक महत्वपूर्ण सुरक्षा जोखिम प्रस्तुत करता है।
ऐप विशेष डेटा के विपरीत जो ऐप अनइंस्टॉल होने पर हटा दिया जाता है, Keychain डेटा डिवाइस पर बना रहता है। यह विशेषता एक सेकंड-हैंड डिवाइस के नए मालिकों को पिछले मालिक के एप्लिकेशन डेटा तक पहुंचने में सक्षम बना सकती है, बस ऐप्स को फिर से इंस्टॉल करके। डेवलपर्स को इस जोखिम को कम करने के लिए ऐप इंस्टॉलेशन या लॉगआउट के दौरान Keychain डेटा को सक्रिय रूप से साफ करने की सलाह दी जाती है। यहां एक Swift कोड उदाहरण है जो पहले ऐप लॉन्च पर Keychain डेटा को साफ करने का प्रदर्शन करता है:
ऐप विकास के क्षेत्र में, sandboxing सुरक्षा बढ़ाने में एक महत्वपूर्ण भूमिका निभाता है। यह प्रक्रिया सुनिश्चित करती है कि प्रत्येक ऐप अपने अद्वितीय होम डायरेक्टरी के भीतर काम करता है, इस प्रकार इसे सिस्टम फ़ाइलों या अन्य ऐप्स के डेटा तक पहुँचने से रोकता है। इन प्रतिबंधों को लागू करने का कार्य Trusted BSD (MAC) Mandatory Access Control Framework के तहत sandbox नीतियों के माध्यम से किया जाता है।
डेवलपर्स अपने ऐप्स के लिए कुछ क्षमताएँ या अनुमतियाँ कॉन्फ़िगर करने में सक्षम होते हैं, जैसे Data Protection या Keychain Sharing। ये अनुमतियाँ ऐप के इंस्टॉल होते ही लागू होती हैं। फिर भी, कुछ संरक्षित संसाधनों तक पहुँचने के लिए, ऐप को पहले प्रयास के समय उपयोगकर्ता से स्पष्ट सहमति प्राप्त करनी होती है। यह purpose strings या usage description strings के उपयोग के माध्यम से प्राप्त किया जाता है, जो उपयोगकर्ताओं को अनुमति अनुरोध अलर्ट में प्रस्तुत किए जाते हैं।
जिनके पास स्रोत कोड तक पहुँच है, वे Info.plist
फ़ाइल में शामिल अनुमतियों की पुष्टि कर सकते हैं:
Xcode में प्रोजेक्ट खोलें।
Info.plist
फ़ाइल को खोजें और खोलें।
स्पष्टता के लिए "Privacy -"
से प्रारंभ होने वाले कुंजियों की खोज करें, कच्चे कुंजी/मान देखने का विकल्प के साथ।
IPA फ़ाइल के साथ काम करते समय, निम्नलिखित चरणों का पालन किया जा सकता है:
IPA को अनज़िप करें।
Payload/<appname>.app/
के भीतर Info.plist
फ़ाइल को खोजें।
यदि आवश्यक हो, तो फ़ाइल को XML प्रारूप में परिवर्तित करें, ताकि निरीक्षण करना आसान हो।
उदाहरण के लिए, Info.plist
फ़ाइल में purpose strings इस प्रकार दिख सकते हैं:
The Info.plist
फ़ाइल एक ऐप की डिवाइस क्षमताएँ निर्दिष्ट करती है जो ऐप स्टोर को डिवाइस संगतता के लिए ऐप्स को फ़िल्टर करने में मदद करती हैं। ये UIRequiredDeviceCapabilities
कुंजी के अंतर्गत परिभाषित की गई हैं। उदाहरण के लिए:
यह उदाहरण दर्शाता है कि ऐप armv7 निर्देश सेट के साथ संगत है। डेवलपर्स nfc जैसी क्षमताओं को भी निर्दिष्ट कर सकते हैं ताकि यह सुनिश्चित किया जा सके कि उनका ऐप केवल उन उपकरणों के लिए उपलब्ध है जो NFC का समर्थन करते हैं।
अधिकार iOS ऐप विकास का एक और महत्वपूर्ण पहलू हैं, जो कुंजी-मूल्य जोड़े के रूप में कार्य करते हैं जो ऐप्स को रनटाइम जांचों से परे कुछ संचालन करने की अनुमति देते हैं। उदाहरण के लिए, एक ऐप में डेटा सुरक्षा सक्षम करने के लिए Xcode प्रोजेक्ट में एक विशिष्ट अधिकार जोड़ना शामिल है, जो फिर ऐप के अधिकार फ़ाइल या IPAs के लिए एम्बेडेड मोबाइल प्रावधान फ़ाइल में परिलक्षित होता है।