परिचय
यह वह जगह है जहाँ मैं सार्वजनिक एक्सप्लॉइट्स या अपने कुछ 1day एक्सप्लॉइट्स का विश्लेषण पोस्ट करूँगा।
[ सार्वजनिक एक्सप्लॉइट विश्लेषण ]
- व्यक्तिगत रूप से मुझे लगता है कि किसी सार्वजनिक एक्सप्लॉइट को सीखने का सबसे अच्छा तरीका उसे लाइन-दर-लाइन समझना है, जब तक कि मैं उसे पूरी तरह से न समझ लूँ। मैं इनमें से कुछ (अत्यधिक टिप्पणी-युक्त ;) ) एक्सप्लॉइट्स पोस्ट करूँगा ताकि उम्मीद है कि दूसरे भी उनसे सीख सकें, और समुदाय को कुछ वापस देने के प्रयास के रूप में। साथ ही दस्तावेज़ीकरण के उद्देश्य से, क्योंकि ये चीज़ें समय बीतने के साथ मेरे दिमाग से मिट जाती हैं।
CVE-2016-8655
CVE-2016-5342
mp3 संस्करण
tty संस्करण
- यह freener के एंड्रॉइड LPE एक्सप्लॉइट का टिप्पणी-युक्त संस्करण है।
- arm32
- हीप ओवरफ़्लो
- यह एक्सप्लॉइट किसी अन्य ऑब्जेक्ट में ऑब्जेक्ट पॉइंटर को ओवरराइट करता है। यह क्षतिग्रस्त पॉइंटर को कर्नेल में एक अनुमानित निश्चित पते पर इंगित करने के लिए ret2dir हमले का उपयोग करता है, जिसमें एक्सप्लॉइट पेलोड होता है। यह एक्सप्लॉइट तकनीक PXN और PAN को बायपास करती है।
CVE-2016-2434
- यह Jianqiang Zhao के एंड्रॉइड LPE एक्सप्लॉइट का टिप्पणी-युक्त संस्करण है।
- arm64
- किसी भी पते पर 16 बाइट्स शून्य करना
- यह एक्सप्लॉइट कर्नेल में एक निश्चित पते पर स्थित एक उपयोगी ग्लोबल ऑब्जेक्ट के 16 बाइट्स मिटा देता है।
- ग्लोबल ऑब्जेक्ट के भीतर एक क्षतिग्रस्त ऑब्जेक्ट पॉइंटर यूज़रलैंड से एक्सप्लॉइट पेलोड को संदर्भित करता है। इस तरह का हमला PAN (या PAN इम्यूलेशन) वाले डिवाइस/कर्नेल पर काम नहीं करेगा।
- extra_recipe जेलब्रेक को समझने का मेरा प्रयास
- मुझे विशेष रूप से kpp बायपास भाग में दिलचस्पी थी। हालाँकि इस विषय पर कुछ स्लाइड्स थीं जिनसे मैं बायपास की एक अस्पष्ट तस्वीर प्राप्त कर सकता था, मैं वास्तव में बारीक विवरणों में जाना चाहता था और देखना चाहता था कि कोड के अंदर वास्तव में क्या चल रहा है
- मैं जेलब्रेक के अंतिम घटकों को भी समझना चाहता था (Cydia इंस्टॉल करना, आदि)
yalu102 (ViewController.m)
- मैंने वास्तविक बग से संबंधित हिस्से पर टिप्पणी की, और कैसे इसका शोषण किया गया।
- मैंने मूल एक्सप्लॉइट के बजाय yalu102 में देखने का कारण यह है कि port-feng-shui तकनीक अधिक साफ और समझने में सीधी लग रही थी।
- विश्लेषण kpp बायपास से ठीक पहले रुक जाता है
- मैं यहाँ आया क्योंकि इसमें विभिन्न संख्यात्मक ऑफ़सेट्स पर थोड़ी अधिक जानकारी थी।
- साथ ही, patchfinder.c बरकरार है, जबकि yalu102 में केवल एक ऑब्जेक्ट फ़ाइल है।
- cydia भाग कुछ अधूरा है इसलिए मैं kpp के बाद cydia ब्रांच पर चला जाता हूँ
- tfp0 और पोस्ट-एक्सप्लॉइटेशन के बाद जेलब्रेक के लिए आवश्यक घटकों को समझने की कोशिश
empty_list (sploit.c)
- Ian Beer के empty_list कर्नेल एक्सप्लॉइट का विस्तृत विवरण।
- यह वास्तव में कमज़ोर प्रिमिटिव्स से शुरू करके, एक मजबूत AAR बनाने और अंततः एक पूर्ण task port बनाने के लिए अद्भुत तकनीकों का उपयोग करता है। एक्सप्लॉइट कोड के पीछे का पोर्ट जादू अविश्वसनीय है। यह सब एक 8 NULL बाइट हीप ओवरफ़्लो के साथ। बिल्कुल दिमाग हिला देने वाला।
- मैंने विश्वसनीयता सुधारने के लिए कुछ सीधे-से विचार लिखे हैं। उम्मीद है कि भविष्य में कोई एक्सप्लॉइट का अधिक विश्वसनीय संस्करण जारी करेगा। :)
- अद्भुत एक्सप्लॉइट के लिए Ian Beer का धन्यवाद!
CVE-2018-4233
- यह @niklas_b के iOS Webkit एक्सप्लॉइट का टिप्पणी-युक्त संस्करण है।
- kudima(@begger_dd) को बहुत स्पष्ट, संक्षिप्त और गहन टिप्पणीयुक्त राइटअप के लिए बहुत-बहुत धन्यवाद! :)
- राइटअप JIT टाइप कन्फ्यूज़न बग, बॉक्सिंग/अनबॉक्सिंग के रूपांतरणों की कुछ सीमाओं (जो अविश्वसनीयता ला सकती हैं), और शुरुआती/देर से AAR/AAW प्रिमिटिव्स कैसे निर्मित किए जाते हैं, इसका विस्तृत विवरण देता है। वह हाल के मिटिगेशन दौर के बाद शोषण तकनीकों में बदलावों पर भी अंतर्दृष्टि प्रदान करता है (index masking, ArrayBuffer backing store poisoning, W^X JIT तंत्र में कुछ बदलाव, JSObject संरचना में बदलाव, आदि)
jsc_ConcatMemcpy_infoleak
- यह kudima के WebKit infoleak एक्सप्लॉइट का टिप्पणी-युक्त संस्करण है (2018.8.27 में ठीक किया गया)।
- यह lokihardt द्वारा रिपोर्ट किए गए एक बग के अधूरे फिक्स से उत्पन्न होता है। lokihardt की रिपोर्ट के पैच ने Double -> Object टाइप कन्फ्यूज़न प्रिमिटिव को ठीक किया, लेकिन इसे दूसरी दिशा में ठीक नहीं किया; Object -> Double।
- यह webkit हीप पर एकल ऑब्जेक्ट और एक मार्कर वाले butterflies स्प्रे करता है, और बाद में concat बग को ट्रिगर करता है और कई double arrays के एक बड़े हिस्से को अप्रारंभिक हीप डेटा से भर देता है। यह अप्रारंभिक, बगी concat द्वारा उत्पन्न double arrays को तब तक पार करता है जब तक उसे पहले स्प्रे किए गए ऑब्जेक्ट का पता नहीं मिल जाता, और उसे लीक कर देता है।
- अच्छे एक्सप्लॉइट और राइटअप के लिए फिर से kudima(@begger_dd) का धन्यवाद! :)
jsc_prop_enum_uaf
- यह kudima से एक और योगदान है। यह kudima के WebKit रिमोट कोड एक्ज़ीक्यूशन एक्सप्लॉइट का टिप्पणी-युक्त संस्करण है (इस कमिट में ठीक किया गया)। यह iOS 12.1 में ठीक किया गया है, और iOS 12.0.1 तक काम करता है।
- समस्या यह है कि baseline-jitted forin लूप्स में कोड निष्पादित करते समय, आप ऐसा कोड पेश कर सकते हैं जो JSOBject को समर्थन देने वाले StructureID ऑब्जेक्ट को मुक्त करता है और गार्बेज कलेक्टर को ट्रिगर करता है, लेकिन गार्बेज कलेक्टर "JSPropertyNameEnumerator->m_cachedStructureID" सदस्य को चिह्नित नहीं करता है, और जिस StructureID ऑब्जेक्ट की ओर "JSPropertyNameEnumerator->m_cachedStructureID" इंगित करता है वह sweep चरण के दौरान मुक्त हो जाता है, जिसके परिणामस्वरूप एक डैंगलिंग पॉइंटर बनता है।
- GC के साथ StructureID ऑब्जेक्ट मुक्त होने के बाद, आप ऐसा कोड पेश कर सकते हैं जो एक नया StructureID ऑब्जेक्ट बनाता है, जो पहले मुक्त किए गए "StructureID object" स्लॉट को ले लेता है।
- ऑब्जेक्ट A के StructureID को मुक्त करके, और फिर ऑब्जेक्ट B को एक नया StructureID बनाने के लिए प्रेरित करके जो उसकी जगह लेता है, टाइप कन्फ्यूज़न की स्थिति बनाना संभव है, क्योंकि "JSPropertyNameEnumerator->m_cachedInlineCapacity" को ऑब्जेक्ट A के इनलाइन प्रॉपर्टी आकार पर सेट किया जाता है, जबकि "JSPropertyNameEnumerator->m_cachedStructureID" नए Structure ID ऑब्जेक्ट की ओर इंगित करता है जो ऑब्जेक्ट B का प्रतिनिधित्व करता है। यह 'op_get_direct_pname' में एक जाँच को पास कराता है और ऑब्जेक्ट B को उसकी सीमाओं से बाहर इनलाइन प्रॉपर्टीज़ तक पहुँचने देता है।
- इसका दुरुपयोग AAR/AAW जैसे मजबूत प्रिमिटिव्स बनाने के लिए किया जा सकता है, और आगे उसका उपयोग मनमाना कोड निष्पादित करने के लिए किया जा सकता है।
- बढ़िया एक्सप्लॉइट और बहुत विस्तृत राइटअप के लिए kudima(@begger_dd) का धन्यवाद! :)
[ 1Day ]
CVE-2017-2547
- एक दिन मैंने singi के एक्सप्लॉइट को देखा, जब इसे Zer0con 2018 में प्रस्तुत किया गया था, और इसे बेहतर बनाने का फैसला किया।
- यह एक्सप्लॉइट का एक स्टैंडअलोन संस्करण है, जब मैंने इसे pwnjs में एकीकृत किया था।
- सुधारों में शामिल हैं
- बढ़ी हुई विश्वसनीयता(दूषित मेमोरी के साथ व्यापक ब्राउज़िंग सत्रों के बाद भी निर्दोष रूप से काम करता है)
- विभिन्न ब्राउज़र संस्करणों के साथ संगत बनाने के लिए सभी हार्डकोडेड ऑफ़सेट्स हटाए गए
- एक अलग शोषण तकनीक का उपयोग किया गया(मानक misalign तकनीक)
- अंततः एक webkit प्रोटोटाइप बनाकर इसे pwnjs फ्रेमवर्क में एकीकृत किया
- कोड को और अधिक पठनीय बनाया, और बहुत सारी टिप्पणियाँ जोड़ीं
- विशेष धन्यवाद
- अद्भुत phrack लेख और सार्वजनिक एक्सप्लॉइट्स के लिए qwertyoruiop & Samuel Grob
- शानदार pwnjs फ्रेमवर्क के लिए Brian Pak & Andrew Wesie!