परिचय
यह वह स्थान है जहाँ मैं सार्वजनिक एक्सप्लॉइट्स (Public Exploits), या अपने कुछ 1day एक्सप्लॉइट्स का विश्लेषण पोस्ट करूँगा।
[ सार्वजनिक एक्सप्लॉइट विश्लेषण ]
- व्यक्तिगत रूप से मुझे लगता है कि सार्वजनिक एक्सप्लॉइट सीखने का सबसे अच्छा तरीका इसे पंक्ति-दर-पंक्ति (line-by-line) समझना है, जब तक कि मैं एक्सप्लॉइट को पूरी तरह से न समझ लूँ। मैं इनमें से कुछ (अत्यधिक टिप्पणी-युक्त ;) ) एक्सप्लॉइट्स पोस्ट करूँगा, ताकि उम्मीद है कि अन्य लोग भी इससे सीख सकें, और समुदाय को कुछ वापस देने के प्रयास के रूप में। साथ ही दस्तावेज़ीकरण के उद्देश्य से, क्योंकि समय बीतने के साथ ये चीज़ें मेरे दिमाग से मिट जाती हैं।
CVE-2016-8655
CVE-2016-5342
mp3 संस्करण
- यह freener के android LPE एक्सप्लॉइट का टिप्पणी-युक्त संस्करण है
- arm32
- Heap overflow
- यह एक्सप्लॉइट सीधे किसी अन्य ऑब्जेक्ट के फंक्शन पॉइंटर (function pointer) को अधिलेखित (overwrite) कर देता है
tty संस्करण
- यह freener के android LPE एक्सप्लॉइट का टिप्पणी-युक्त संस्करण है
- arm32
- Heap overflow
- यह एक्सप्लॉइट किसी अन्य ऑब्जेक्ट में एक ऑब्जेक्ट पॉइंटर को अधिलेखित कर देता है। यह दूषित पॉइंटर को कर्नेल में एक पूर्वानुमानित निश्चित पते पर इंगित कराने के लिए ret2dir हमले का उपयोग करता है, जिसमें एक्सप्लॉइट पेलोड (exploit payload) होता है। यह एक्सप्लॉइट तकनीक PXN और PAN को बायपास करती है।
CVE-2016-2434
- यह Jianqiang Zhao के android LPE एक्सप्लॉइट का टिप्पणी-युक्त संस्करण है
- arm64
- किसी मनमाने पते पर 16 बाइट्स शून्य-आउट (zero-out) करना
- यह एक्सप्लॉइट एक उपयोगी ग्लोबल ऑब्जेक्ट के 16 बाइट्स मिटा देता है, जो कर्नेल में एक निश्चित पते पर स्थित होता है।
- ग्लोबल ऑब्जेक्ट के भीतर एक दूषित ऑब्जेक्ट पॉइंटर यूज़रलैंड (userland) से एक्सप्लॉइट पेलोड को संदर्भित करता है। इस प्रकार का हमला PAN (या PAN अनुकरण) वाले डिवाइसों/कर्नेल पर काम नहीं करेगा।
- extra_recipe जेलब्रेक को समझने का मेरा प्रयास
- मुझे विशेष रूप से kpp बायपास भाग में रुचि थी। हालाँकि इस विषय पर कुछ स्लाइड्स थीं जिनसे मैं बायपास की एक धुंधली तस्वीर प्राप्त कर सकता था, मैं वास्तव में बारीक विवरणों में उतरना चाहता था और देखना चाहता था कि कोड के अंदर वास्तव में क्या चल रहा है
- मैं जेलब्रेक के अंतिम घटकों (Cydia इंस्टॉल करना, आदि) को भी समझना चाहता था
yalu102 (ViewController.m)
- मैंने वास्तविक बग से संबंधित भाग और उसका शोषण कैसे किया गया, पर टिप्पणी की।
- मूल एक्सप्लॉइट के बजाय yalu102 को देखने का कारण यह है कि port-feng-shui तकनीक समझने में अधिक साफ और सीधी लगी।
- विश्लेषण kpp बायपास से ठीक पहले रुक जाता है
- मैं यहाँ इसलिए आया क्योंकि इसमें विभिन्न संख्यात्मक ऑफसेट्स के बारे में थोड़ी अधिक जानकारी थी।
- इसके अलावा, patchfinder.c बरकरार है, yalu102 के विपरीत जिसमें केवल एक ऑब्जेक्ट फ़ाइल है।
- Cydia वाला हिस्सा कुछ अधूरा है, इसलिए मैं kpp के बाद cydia ब्रांच पर चला जाता हूँ
- tfp0 और पोस्ट-एक्सप्लॉइटेशन (post-exploitation) के बाद जेलब्रेक के घटकों को समझने का प्रयास
empty_list (sploit.c)
- Ian Beer के empty_list कर्नेल एक्सप्लॉइट का विस्तृत विश्लेषण।
- यह वास्तव में कमज़ोर प्रिमिटिव्स (primitives) से शुरू करके, एक मज़बूत AAR बनाने, और अंततः एक पूर्ण विकसित टास्क पोर्ट (task port) बनाने के लिए अद्भुत तकनीकों का उपयोग करता है। एक्सप्लॉइट कोड के पीछे की पोर्ट मैजिक अविश्वसनीय है। यह सब 8 NULL बाइट हीप ओवरफ्लो के साथ। बिल्कुल दिमाग हिला देने वाला।
- मैंने विश्वसनीयता बेहतर करने के लिए कुछ सरल विचार लिखे हैं। उम्मीद है कि भविष्य में कोई इस एक्सप्लॉइट का अधिक विश्वसनीय संस्करण जारी करेगा। :)
- अद्भुत एक्सप्लॉइट के लिए Ian Beer को धन्यवाद!
CVE-2018-4233
- यह @niklas_b के iOS Webkit एक्सप्लॉइट का टिप्पणी-युक्त संस्करण है।
- बहुत स्पष्ट और संक्षिप्त, पूरी तरह से टिप्पणी-युक्त राइटअप के लिए kudima(@begger_dd) को बहुत-बहुत धन्यवाद! :)
- राइटअप JIT टाइप कन्फ्यूज़न बग, बॉक्सिंग/अनबॉक्सिंग रूपांतरणों की कुछ सीमाओं (जो अविश्वसनीयता ला सकती हैं), और शुरुआती/देर के AAR/AAW प्रिमिटिव्स कैसे निर्मित किए जाते हैं, इसका विस्तृत विवरण समझाता है। वह मिटिगेशन के हालिया दौर (इंडेक्स मास्किंग, ArrayBuffer बैकिंग स्टोर पॉइज़निंग, W^X JIT की प्रणाली में कुछ बदलाव, JSObject संरचना में बदलाव, आदि) के बाद एक्सप्लॉइटेशन तकनीकों में आए बदलावों की जानकारी भी देता है।
jsc_ConcatMemcpy_infoleak
- यह kudima के WebKit infoleak एक्सप्लॉइट का टिप्पणी-युक्त संस्करण है (2018.8.27 में ठीक किया गया)।
- यह lokihardt द्वारा रिपोर्ट किए गए एक बग के अधूरे फिक्स से उत्पन्न हुआ है। lokihardt की रिपोर्ट के पैच ने Double -> Object टाइप कन्फ्यूज़न प्रिमिटिव को ठीक किया, लेकिन इसे उल्टा ठीक नहीं किया; Object -> Double।
- यह वेबकिट हीप पर एकल ऑब्जेक्ट और एक मार्कर युक्त butterflies का स्प्रे करता है, और बाद में concat बग को ट्रिगर करके कई double arrays के एक बड़े हिस्से को अप्रारंभित हीप डेटा से भर देता है। यह अप्रारंभित, बगी concat द्वारा उत्पन्न double arrays में तब तक पुनरावृत्ति करता है जब तक कि उसे पहले स्प्रे किए गए ऑब्जेक्ट का पता नहीं मिल जाता, और उसे लीक कर देता है।
- अच्छे एक्सप्लॉइट और राइटअप के लिए एक बार फिर kudima(@begger_dd) को धन्यवाद! :)
[ 1Day ]
CVE-2017-2547
- एक दिन मैंने Zer0con 2018 में प्रस्तुत किए जाने के बाद singi के एक्सप्लॉइट को देखा, और इसे बेहतर बनाने का निर्णय लिया।
- यह एक्सप्लॉइट का स्टैंडअलोन (standalone) संस्करण है, इससे पहले कि मैंने इसे pwnjs में एकीकृत किया।
- सुधारों में शामिल हैं
- बढ़ी हुई विश्वसनीयता(दूषित मेमोरी के साथ व्यापक ब्राउज़िंग सत्रों के बाद भी त्रुटिहीन रूप से काम करता है)
- विभिन्न ब्राउज़र संस्करणों के साथ संगत बनाने के लिए सभी hardcoded offsets हटा दिए गए
- एक अलग एक्सप्लॉइटेशन तकनीक का उपयोग किया गया(मानक misalign तकनीक)
- अंततः एक webkit प्रोटोटाइप बनाकर इसे pwnjs फ्रेमवर्क में एकीकृत किया गया
- कोड को काफी अधिक पठनीय बनाया गया, और बहुत सारी टिप्पणियाँ जोड़ी गईं
- विशेष धन्यवाद
- अद्भुत phrack लेख और सार्वजनिक एक्सप्लॉइट्स के लिए qwertyoruiop और Samuel Grob
- शानदार pwnjs फ्रेमवर्क के लिए Brian Pak और Andrew Wesie!