UnjailMe
एक सैंडबॉक्स एस्केप जो निम्न पर आधारित है:
- प्रूफ-ऑफ-कॉन्सेप्ट (CVE-2018-4087) Rani Idan (Zimperium) द्वारा
- @cheesecakeufo का securityd ओवरफ्लो प्रूफ-ऑफ-कॉन्सेप्ट (ज़ीरो-डे, कोई CVE ज्ञात नहीं, धन्यवाद अब्राहम!)
ZIMPERIUM PoC के बारे में
Rani ने Jonathan Levine के sbtool का उपयोग यह पता लगाने के लिए किया कि सैंडबॉक्स के अंदर से संचार के लिए कौन सी सेवाएं सुलभ थीं।
फिर उन्होंने 'more bluetoothd' के अंतर्गत पाया और सेवा से और सेवा तक संदेशों को इंटरसेप्ट करने के लिए कोड सेट किया।
ऐसा करके उन्होंने पाया कि वह कई डेमन्स के सत्र को हाईजैक कर सकते हैं और क्लाइंट पोर्ट को लीक कर सकते हैं।
इस तरह उन्होंने पाया कि bluetoothd से क्लाइंट के कनेक्शन में अतिरिक्त डेटा के साथ एक कॉलबैक जोड़ना संभव था।
इसका परिणाम यह है कि सिस्टम डेमन्स के प्रोसेस काउंटर (कॉलबैक) और रजिस्टर x3 (अतिरिक्त डेटा) पर नियंत्रण प्राप्त किया जा सकता है, जिनसे एक क्लाइंट पोर्ट (सत्र) इंटरसेप्ट किया जाता है।
इससे एक सैंडबॉक्स ऐप को विशेषाधिकार प्राप्त संदर्भ में भागने की संभावना मिलती है, जिससे वह सिस्टम विशेषाधिकारों के साथ कोड चला सकता है।
Apple ने iOS 11.2.5 में सत्र आईडी के लिए arc4random() का उपयोग करके कमजोरियों को पैच किया है।
ऐसा लगता है कि अब क्लाइंट का पोर्ट प्राप्त करना संभव नहीं है, लेकिन सत्रों को इंटरसेप्ट करना अभी भी संभव है।
इस नए पैच में इस arc4random() को ब्रूटफोर्स करने में लगभग 5 दिन लगते हैं (4.294.967.296 संभावनाएं) और इसलिए मैं अभी भी एक अंतिम पैच की प्रतीक्षा कर रहा हूं क्योंकि इसे सुरक्षा समस्या का समाधान नहीं माना जाता है।
स्रोत: Zimperium ब्लॉग
अब्राहम मसरी के PoC के बारे में
जहाँ तक मुझे पता है, यह securityd के साथ संचार में एक बफर ओवरफ्लो है।
यह एक XPC संदेश प्रदान करके किया जाता है, जो एक शब्दकोश-आधारित मान-कुंजी संदेश है, जिसमें अमान्य लंबाई होती है।
सेवा संदेश प्राप्त करती है और अंडरफ्लो होता है।
अब्राहम ने कई प्रोसेसर रजिस्टरों को नियंत्रित करने का एक तरीका खोज लिया है, जिससे सिस्टम के अंदर चल रहे ऐप्स के लिए सिस्टम अधिकारों के साथ कोड निष्पादन संभव हो जाता है।
अब्राहम का PoC दर्शाता है कि अब्राहम स्वयं इस कमजोरी के लिए एक एक्सप्लॉइट बनाने का प्रयास कर रहा है, क्योंकि बेस पते लीक करने के लिए कोड मौजूद है, जिसे ROP-चेन के निर्माण की शुरुआत के रूप में जाना जाता है।
यह अज्ञात है कि अब्राहम स्वयं इस एक्सप्लॉइट को लिखने की योजना बना रहा है या हमें सही दिशा में इंगित कर रहा है।
आवश्यकताएँ
- iOS 10 से 11.3.1 तक चलने वाला 64-बिट iOS डिवाइस
इस परियोजना के बारे में
- यह परियोजना जेलब्रेक नहीं है और न ही इसमें योगदान देगी क्योंकि यह केवल यूज़रलैंड में काम करेगी
- यह परियोजना रूट फाइलसिस्टम पर लिखने की क्षमता प्राप्त नहीं कर सकती और कभी नहीं करेगी क्योंकि यह केवल-पढ़ने के लिए माउंटेड है जैसा कि कर्नेल द्वारा लागू किया गया है।
- यह परियोजना आसानी से साइडिया सब्सट्रेट जैसी डायनामिक लाइब्रेरीज़ के रूप में मनमाना कोड निष्पादन की अनुमति नहीं देगी।
- परियोजना का मुख्य लक्ष्य एक सैंडबॉक्स्ड कंटेनर ऐप को सिस्टम अधिकारों तक बढ़ाना है।
- AMFI यह सुनिश्चित करता है कि सभी बाइनरी वैध रूप से हस्ताक्षरित हैं और यह परियोजना AMFI को पैच नहीं कर सकती।
- परियोजना का उद्देश्य यूज़रडेटा विभाजन (/var/root, /var/mobile) पर पढ़ने और लिखने की अनुमति प्राप्त करना है।
- परियोजना का उद्देश्य क्रेडेंशियल रिकवरी और फोरेंसिक उद्देश्यों के लिए संरक्षित की चेन स्टोरेज तक पहुंच प्राप्त करना है।
- परियोजना का उद्देश्य रूट के रूप में कोड चलाने और फ़ाइल स्थानांतरण के लिए सर्वर कार्यक्षमता प्रदान करना भी है।
- परियोजना का उद्देश्य डेवलपर्स और शोधकर्ताओं के लिए योगदान हेतु सहायता प्रदान करना था।
- यह परियोजना जेलब्रेक डेवलपर्स और सुरक्षा शोधकर्ताओं के लिए कर्नेल ड्राइवरों में बग खोजना आसान बना देगी जो केवल विशेषाधिकार संदर्भ के अंदर से सुलभ हैं, या फज़िंग तकनीकों का उपयोग करके यूज़रलैंड बग खोजना आसान करेगी।
- यह परियोजना जेलब्रेक ट्वीक डेवलपर्स के लिए नई iOS 11 सुविधाओं पर शोध करना और लाइव डिवाइस पर ट्वीक डेवलपमेंट को डीबग करना आसान बना देगी।
- यह परियोजना मुख्य रूप से iOS 10 से 11.2.5 तक काम करने पर केंद्रित है, लेकिन सिद्धांत रूप में 11.2.5 से 11.3 तक का समर्थन भी कर सकती है जब एक्सप्लॉइट विकसित किए जाएंगे।
स्क्रीनशॉट
ऐप का उपयोग कैसे करें
- यह ऐप परियोजना में कोई मूल्य नहीं जोड़ता है, लेकिन उन लोगों के लिए एक दृश्य के रूप में काम करता है जो इसके लिए पूछ रहे हैं (समुदाय के बहुत से उत्साहित लोगों ने इसके लिए पूछा था)
- यह ऐप लाइब्रेरीज़ और फ्रेमवर्क से जानकारी डंप करेगा जिसमें मेमोरी, mach-o जानकारी और इसके बेस पते शामिल हैं जो ROP-डेवलपमेंट के लिए उपयोगी है।
- ऐप में लॉजिक को पूरा होने में 15 मिनट तक लग सकते हैं क्योंकि बहुत अधिक पार्सिंग और प्रिंट हैं, यह अंतिम रिलीज़ में ऐसा नहीं होगा।
- यह ऐप आपके iPhone में कोई मूल्य नहीं जोड़ेगा या सॉफ्टवेयर के व्यवहार को नहीं बदलेगा, कुछ डेमन क्रैश हो सकते हैं लेकिन सिस्टम को कोई स्थायी क्षति नहीं होती है।
- शोधकर्ताओं के लिए अनुशंसित है कि वे इस परियोजना को Xcode में चलाएं
समस्या निवारण (आवश्यक नहीं, लेकिन बस मामले में)
- ऐप हटाएं
- ब्लूटूथ बंद करें
- रीबूट करें
- ब्लूटूथ चालू करें
- ब्लूटूथ बंद करें
विशेषताएँ
- FTP पहुंच (वर्तमान में सैंडबॉक्स्ड, भविष्य में अनसैंडबॉक्स्ड)
- विज़ुअल PoC
- zerodium द्वारा PoC (अंततः थोड़ा सुधार हुआ, system() फ़ंक्शन को कॉल कर सकता है)
- अब्राहम द्वारा PoC, जो रूट के रूप में मनमाना कोड चलाने में सक्षम होना चाहिए, ssh के लिए उपयुक्त।
- Sem Voigtlander द्वारा PoC (रीबूट डिवाइस फ़ंक्शन के लिए कर्नेल एड्रेस स्पेस आवंटन DoS)।
नियोजित
- पूर्ण एक्सप्लॉइट जिसमें अन्य डेमन्स के एड्रेस स्पेस पर पूर्ण नियंत्रण प्राप्त करना शामिल है।
- दूरस्थ SSH शेल पहुंच (dropbear या इसका व्युत्पन्न)।
भविष्य में विचार करने योग्य बातें
- SpringBoardd कोड इंजेक्शन (नमस्ते जेलब्रेक प्रेमियों)
launchd (संभव नहीं क्योंकि हम इसके लिए सत्र प्राप्त नहीं कर सकते)।
परिकल्पना (केवल अनुमान)
- launchd एंटाइटलमेंट वाला डेमन ढूंढें / एंटाइटलमेंट इंजेक्ट करें।
BaseBoard Framework लोड करने वाला कोड इंजेक्ट करें
- dyld_shared_cache में लाइब्रेरीज़ के पते लीक करें।
- dyld_shared_cache में किसी भी लाइब्रेरी में एक ropgadget ढूंढें।
- कॉलबैक और कॉलबैक अतिरिक्त डेटा सेट करके ropchain को कॉल करें।
- BaseBoard से रिवर्स इंजीनियर्ड लॉजिक का उपयोग करके launchd को तर्कों के साथ और ASLR अक्षम करके amfid चलाने के लिए बनाएं।
- amfid को पैच करें
- BaseBoard से रिवर्स इंजीनियर्ड लॉजिक का उपयोग करके afcd को / के लिए तर्कों के साथ और ASLR अक्षम करके चलाएं। (afc2 जैसा)।
- BaseBoard से रिवर्स इंजीनियर्ड लॉजिक का उपयोग करके unjaild चलाएं, एक डेमन जो launchd के चारों ओर रैपर के रूप में उपयोग किया जा सकता है और कार्य विशेषाधिकारों और कोड इंजेक्शन को संभालता है।
- BaseBoard लॉजिक का उपयोग करके ASLR अक्षम के साथ launchd पर एक टास्कपोर्ट प्राप्त करें
जांच करने के लिए
- AMFI पैच (आसान नहीं, हम amfi पर सत्र प्राप्त नहीं कर सकते, लेकिन हम शायद अन्य डेमन्स का उपयोग करके एस्केलेट कर सकते हैं)।
- एंटाइटलमेंट इंजेक्शन (बहुत आवश्यक नहीं, हमारे पास इतने सारे डेमन्स पर नियंत्रण है कि हमें इसकी आवश्यकता नहीं है)।
- निजी API का उपयोग करके और एस्केलेट करें (BaseBoard.framework सिस्टम अधिकारों के साथ ASLR अक्षम करके प्रक्रियाएँ लॉन्च कर सकता है)???
- revive and port liblorgnette to iOS (DONE)
ipa डाउनलोड करें
https://github.com/MTJailed/UnjailMe/releases/tag/0.1
श्रेय
- अब्राहम (@cheesecakeufo) उनके securityd ज़ीरो-डे के लिए
- कमजोरी और प्रारंभिक PoC: Rani Idan (Zimperium) <3
- PureFTPd
- liblorgnette परियोजना (मेरे अपने मामूली सुधारों के साथ)
- NEWUI द्वारा @ringarang
दान करें या योगदान करें
- सोर्सकोड ट्विटर पर DM (@MTJailed) के माध्यम से पूछे जाने पर दिया जा सकता है
- कृपया दान करें, मेरे पास ऐसी परियोजनाओं पर काम करने के लिए बहुत कम समय और साधन हैं! (http://paypal.me/devsupport)
- जल्द ही सोर्सकोड (ftp को छोड़कर) GitHub पर यहाँ उपलब्ध होगा।