19 KiB
iOS Basic Testing Operations
{{#include ../../banners/hacktricks-training.md}}
iOS डिवाइस पहचान और पहुंच का सारांश
iOS डिवाइस का UDID पहचानना
iOS डिवाइस को अद्वितीय रूप से पहचानने के लिए, 40 अंकों का अनुक्रम जिसे UDID कहा जाता है, का उपयोग किया जाता है। macOS Catalina या नए संस्करणों पर, इसे Finder ऐप में पाया जा सकता है, क्योंकि iTunes अब मौजूद नहीं है। जब डिवाइस को USB के माध्यम से कनेक्ट किया जाता है और Finder में चुना जाता है, तो इसके नाम के तहत विवरण पर क्लिक करने पर UDID अन्य जानकारी के साथ प्रकट होता है।
macOS के Catalina से पहले के संस्करणों के लिए, iTunes UDID की खोज में सहायता करता है। विस्तृत निर्देश यहां मिल सकते हैं।
कमांड-लाइन उपकरण UDID प्राप्त करने के वैकल्पिक तरीके प्रदान करते हैं:
- I/O Registry Explorer टूल
ioreg
का उपयोग करते हुए:
$ ioreg -p IOUSB -l | grep "USB Serial"
ideviceinstaller
का उपयोग macOS (और Linux) के लिए:
$ brew install ideviceinstaller
$ idevice_id -l
system_profiler
का उपयोग करना:
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
instruments
का उपयोग करके उपकरणों की सूची बनाना:
$ instruments -s devices
डिवाइस शेल तक पहुँचना
SSH पहुँच को OpenSSH पैकेज को जेलब्रेक के बाद स्थापित करके सक्षम किया जाता है, जो ssh root@<device_ip_address>
के माध्यम से कनेक्शन की अनुमति देता है। डिवाइस को सुरक्षित करने के लिए उपयोगकर्ताओं root
और mobile
के लिए डिफ़ॉल्ट पासवर्ड (alpine
) को बदलना महत्वपूर्ण है।
USB के माध्यम से SSH Wi-Fi की अनुपस्थिति में आवश्यक हो जाता है, iproxy
का उपयोग करके SSH कनेक्शनों के लिए डिवाइस पोर्ट को मैप किया जाता है। यह सेटअप USB के माध्यम से SSH पहुँच को सक्षम करता है, इसे चलाकर:
$ iproxy 2222 22
$ ssh -p 2222 root@localhost
ऑन-डिवाइस शेल एप्लिकेशन, जैसे NewTerm 2, सीधे डिवाइस इंटरैक्शन को सुविधाजनक बनाते हैं, जो समस्या निवारण के लिए विशेष रूप से उपयोगी होते हैं। रिवर्स SSH शेल भी होस्ट कंप्यूटर से दूरस्थ पहुंच के लिए स्थापित किए जा सकते हैं।
भूल गए पासवर्ड रीसेट करना
भूल गए पासवर्ड को डिफ़ॉल्ट (alpine
) पर रीसेट करने के लिए, /private/etc/master.passwd
फ़ाइल को संपादित करना आवश्यक है। इसमें मौजूदा हैश को root
और mobile
उपयोगकर्ता प्रविष्टियों के बगल में alpine
के लिए हैश के साथ बदलना शामिल है।
डेटा ट्रांसफर तकनीकें
ऐप डेटा फ़ाइलें स्थानांतरित करना
SSH और SCP के माध्यम से आर्काइविंग और पुनर्प्राप्ति: एप्लिकेशन के डेटा निर्देशिका को tar
का उपयोग करके आर्काइव करना और फिर scp
का उपयोग करके स्थानांतरित करना सीधा है। नीचे दिया गया कमांड डेटा निर्देशिका को .tgz फ़ाइल में आर्काइव करता है, जिसे फिर डिवाइस से खींचा जाता है:
tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
exit
scp -P 2222 root@localhost:/tmp/data.tgz .
ग्राफिकल यूजर इंटरफेस टूल्स
iFunbox और iExplorer का उपयोग करना: ये GUI टूल्स iOS उपकरणों पर फ़ाइलों को प्रबंधित करने के लिए उपयोगी हैं। हालाँकि, iOS 8.4 से शुरू होकर, Apple ने इन टूल्स की पहुँच को एप्लिकेशन सैंडबॉक्स तक सीमित कर दिया है जब तक कि उपकरण जेलब्रोकन न हो।
फ़ाइल प्रबंधन के लिए Objection का उपयोग करना
Objection के साथ इंटरएक्टिव शेल: Objection लॉन्च करने से एक ऐप के Bundle निर्देशिका तक पहुँच मिलती है। यहाँ से, आप ऐप के Documents निर्देशिका में नेविगेट कर सकते हैं और फ़ाइलों का प्रबंधन कर सकते हैं, जिसमें उन्हें iOS उपकरण से डाउनलोड और अपलोड करना शामिल है।
objection --gadget com.apple.mobilesafari explorer
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
file download <filename>
ऐप्स प्राप्त करना और निकालना
IPA फ़ाइल प्राप्त करना
ओवर-दी-एयर (OTA) वितरण लिंक: OTA के माध्यम से परीक्षण के लिए वितरित ऐप्स को ITMS सेवाओं के एसेट डाउनलोडर टूल का उपयोग करके डाउनलोड किया जा सकता है, जिसे npm के माध्यम से स्थापित किया गया है और स्थानीय रूप से IPA फ़ाइल को सहेजने के लिए उपयोग किया जाता है।
npm install -g itms-services
itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa
ऐप बाइनरी निकालना
- IPA से: ऐप बाइनरी तक पहुँचने के लिए IPA को अनज़िप करें।
- जेलब्रोकन डिवाइस से: ऐप इंस्टॉल करें और मेमोरी से डिक्रिप्टेड बाइनरी निकालें।
डिक्रिप्शन प्रक्रिया
मैनुअल डिक्रिप्शन अवलोकन: iOS ऐप बाइनरी को Apple द्वारा FairPlay का उपयोग करके एन्क्रिप्ट किया गया है। रिवर्स-इंजीनियरिंग के लिए, एक को मेमोरी से डिक्रिप्टेड बाइनरी को डंप करना होगा। डिक्रिप्शन प्रक्रिया में PIE फ्लैग की जांच करना, मेमोरी फ्लैग को समायोजित करना, एन्क्रिप्टेड सेक्शन की पहचान करना, और फिर इस सेक्शन को इसके डिक्रिप्टेड रूप के साथ डंप और बदलना शामिल है।
PIE फ्लैग की जांच और संशोधन:
otool -Vh Original_App
python change_macho_flags.py --no-pie Original_App
otool -Vh Hello_World
एन्क्रिप्टेड सेक्शन की पहचान करना और मेमोरी डंप करना:
otool
का उपयोग करके एन्क्रिप्टेड सेक्शन के प्रारंभ और अंत पते निर्धारित करें और जेलब्रोकन डिवाइस से gdb का उपयोग करके मेमोरी डंप करें।
otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
dump memory dump.bin 0x8000 0x10a4000
एन्क्रिप्टेड सेक्शन को ओवरराइट करना:
मूल ऐप बाइनरी में एन्क्रिप्टेड सेक्शन को डिक्रिप्टेड डंप के साथ बदलें।
dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App
अंतिम डिक्रिप्शन: बाइनरी के मेटाडेटा को संशोधित करें ताकि एन्क्रिप्शन की अनुपस्थिति को इंगित किया जा सके, जैसे कि MachOView का उपयोग करते हुए, cryptid
को 0 पर सेट करें।
डिक्रिप्शन (स्वचालित रूप से)
frida-ios-dump
frida-ios-dump उपकरण का उपयोग iOS उपकरणों से ऐप्स को स्वचालित रूप से डिक्रिप्ट और निकालने के लिए किया जाता है। प्रारंभ में, dump.py
को iOS उपकरण से कनेक्ट करने के लिए कॉन्फ़िगर करना आवश्यक है, जिसे iproxy के माध्यम से लोकलहोस्ट पर पोर्ट 2222 के माध्यम से या सीधे उपकरण के IP पते और पोर्ट के माध्यम से किया जा सकता है।
उपकरण पर स्थापित ऐप्स को सूचीबद्ध करने के लिए कमांड का उपयोग किया जा सकता है:
$ python dump.py -l
विशिष्ट ऐप, जैसे कि Telegram, को डंप करने के लिए निम्नलिखित कमांड का उपयोग किया जाता है:
$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph
यह कमांड ऐप डंप शुरू करता है, जिसके परिणामस्वरूप वर्तमान निर्देशिका में Telegram.ipa
फ़ाइल का निर्माण होता है। यह प्रक्रिया जेलब्रोकन उपकरणों के लिए उपयुक्त है, क्योंकि बिना हस्ताक्षरित या नकली हस्ताक्षरित ऐप्स को ios-deploy जैसे उपकरणों का उपयोग करके फिर से स्थापित किया जा सकता है।
flexdecrypt
flexdecrypt उपकरण, इसके रैपर flexdump के साथ, स्थापित अनुप्रयोगों से IPA फ़ाइलों को निकालने की अनुमति देता है। उपकरण पर flexdecrypt के लिए स्थापना कमांड में .deb
पैकेज को डाउनलोड और स्थापित करना शामिल है। flexdump का उपयोग ऐप्स की सूची बनाने और डंप करने के लिए किया जा सकता है, जैसा कि नीचे दिए गए कमांड में दिखाया गया है:
apt install zip unzip
wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump
flexdump list
flexdump dump Twitter.app
bagbak
bagbak, एक और Frida-आधारित उपकरण, ऐप डिक्रिप्शन के लिए एक जेलब्रोकन डिवाइस की आवश्यकता होती है:
bagbak --raw Chrome
r2flutch
r2flutch, radare और frida दोनों का उपयोग करते हुए, ऐप डिक्रिप्शन और डंपिंग के लिए कार्य करता है। अधिक जानकारी इसके GitHub पृष्ठ पर मिल सकती है।
ऐप्स इंस्टॉल करना
Sideloading का अर्थ है आधिकारिक App Store के बाहर एप्लिकेशन इंस्टॉल करना। यह प्रक्रिया installd daemon द्वारा संभाली जाती है और इसके लिए ऐप्स को Apple द्वारा जारी किए गए सर्टिफिकेट के साथ साइन किया जाना आवश्यक है। जेलब्रोकन डिवाइस इस प्रक्रिया को AppSync के माध्यम से बायपास कर सकते हैं, जो नकली-साइन किए गए IPA पैकेजों की स्थापना की अनुमति देता है।
Sideloading टूल्स
-
Cydia Impactor: iOS पर IPA फ़ाइलों और Android पर APK फ़ाइलों को साइन और इंस्टॉल करने के लिए एक टूल। गाइड और समस्या निवारण yalujailbreak.net पर मिल सकते हैं।
-
libimobiledevice: Linux और macOS के लिए एक लाइब्रेरी जो iOS डिवाइस के साथ संवाद करती है। USB के माध्यम से ऐप्स इंस्टॉल करने के लिए ideviceinstaller के लिए इंस्टॉलेशन कमांड और उपयोग के उदाहरण प्रदान किए गए हैं।
-
ipainstaller: यह कमांड-लाइन टूल iOS डिवाइस पर सीधे ऐप इंस्टॉलेशन की अनुमति देता है।
-
ios-deploy: macOS उपयोगकर्ताओं के लिए, ios-deploy कमांड लाइन से iOS ऐप्स इंस्टॉल करता है। IPA को अनज़िप करना और सीधे ऐप लॉन्च के लिए
-m
फ्लैग का उपयोग करना प्रक्रिया का हिस्सा है। -
Xcode: Xcode का उपयोग करके ऐप्स को इंस्टॉल करने के लिए Window/Devices and Simulators पर जाएं और ऐप को Installed Apps में जोड़ें।
गैर-iPad डिवाइस पर एप्लिकेशन इंस्टॉलेशन की अनुमति दें
iPhone या iPod touch डिवाइस पर iPad-विशिष्ट एप्लिकेशन इंस्टॉल करने के लिए, Info.plist फ़ाइल में UIDeviceFamily मान को 1 में बदलना होगा। हालांकि, इस संशोधन के लिए IPA फ़ाइल को फिर से साइन करने की आवश्यकता होती है क्योंकि सिग्नेचर वैलिडेशन चेक होते हैं।
नोट: यह विधि विफल हो सकती है यदि एप्लिकेशन नई iPad मॉडल के लिए विशेष क्षमताओं की मांग करता है जबकि पुरानी iPhone या iPod touch का उपयोग किया जा रहा है।
संदर्भ
- https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/
- https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/
- https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/
- https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/
- https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/
{{#include ../../banners/hacktricks-training.md}}