
एक Binary Ninja प्लगइन जो ब्रूटफोर्स किए गए XFG हैश का उपयोग करके सटीक फ़ंक्शन प्रोटोटाइप प्राप्त करता है।
इस रिपॉज़िटरी में eXtended Flow Guard हैशों को जनरेट करने और खोजने के लिए स्क्रिप्ट्स शामिल हैं।
इसके काम करने के तरीके का एक विस्तृत लेख International Jouranl Of Proof Of Concept || GTFO के अंक 22 में उपलब्ध है।
इस PoC पर मेरा काम Quarkslab के लोगों द्वारा काफी सरल बना दिया गया था, जिन्होंने MS के कंपाइलर के प्रासंगिक हिस्सों का व्यापक रिवर्स इंजीनियरिंग किया है। XFG हैशों की गणना कैसे की जाती है, इस पर उनका गहन लेख यहाँ पढ़ा जा सकता है: https://blog.quarkslab.com/how-the-msvc-compiler-generates-xfg-function-prototype-hashes.html
नोट: यह किसी भी तरह से एक्सप्लॉइट मिटिगेशन के रूप में XFG को "तोड़ता" नहीं है, यह केवल बिना सिंबल वाले फ़ंक्शनों को उजागर करने के लिए इसके साइड इफेक्ट्स का दुरुपयोग करता है।
संक्षेप में, Windows पर लागू किया गया XFG, Control Flow Guard एक्सप्लॉइट मिटिगेशन का विस्तार करता है और उसे और कठोर बनाता है, अप्रत्यक्ष फ़ंक्शन कॉल के संभावित लक्ष्यों को केवल वैध फ़ंक्शन एंट्री पॉइंट्स तक ही सीमित नहीं करता, बल्कि मेल खाते सिग्नेचर वाले फ़ंक्शनों तक सीमित करता है। ऐसा करने के लिए, प्रत्येक फ़ंक्शन के लिए एक XFG हैश की गणना की जाती है और रनटाइम के दौरान इसके विरुद्ध जाँच की जाती है। हैश केवल फ़ंक्शन प्रोटोटाइप (अर्थात् कॉलिंग कन्वेंशन, तर्क और उनके प्रकार) पर आधारित होते हैं। इस प्रकार, हम उन्हें ज्ञात प्रकारों के लिए पहले से संगणित कर सकते हैं और बाद में अज्ञात बाइनरीज़ में फ़ंक्शनों के लिए उन्हें खोज सकते हैं।
यदि खोज सफल रहती है, तो हम सभी तर्कों की सटीक संख्या और प्रकारों के साथ-साथ फ़ंक्शन के रिटर्न वैल्यू के बारे में 100% निश्चित हो सकते हैं। यह उन बाइनरीज़ और फ़ंक्शनों के लिए अत्यंत उपयोगी हो सकता है जिनमें कोई सार्वजनिक सिंबल नहीं होते।
मैं आपको पास के मिरर से परोसे गए PoC||GTFO में पूरा लेख पढ़ने के लिए आमंत्रित करता हूँ।
स्क्रिप्ट्स हैं:
इन स्क्रिप्ट्स का उपयोग करने के लिए, आपको पहले gen_function_prototypes.py को संशोधित करना होगा ताकि आप उस लक्ष्य के लिए विशिष्ट "प्रिमिटिव टाइप्स", structs या enums जोड़ सकें जिसे आप देख रहे हैं। साथ ही, आप यह चुनना चाहेंगे कि आप कितने तर्कों तक ब्रूटफोर्स करना चाहते हैं। 3 तक एक मिनट लगता है, 4 तक एक दिन...
सभी संयोजनों के फ़ंक्शन प्रोटोटाइप जनरेट हो जाने के बाद, आप gen_hash_from_ast.py चलाना चाहेंगे, जो पहले जनरेट की गई फ़ाइल को पंक्ति दर पंक्ति पार्स करेगा और संबंधित XFG हैश उत्पन्न करेगा।
जब यह पूरा हो जाएगा, तो आपके पास उनके मेल खाते XFG हैशों के साथ फ़ंक्शन प्रोटोटाइप का एक SQLite डेटाबेस होगा। xfg_analyzer.py में एक बहुत ही सरल Binary Ninja प्लगइन शामिल है। जब इसे XFG-संरक्षित बाइनरी पर चलाया जाता है, तो यह सभी XFG हैशों को ढूंढेगा, उन्हें डेटाबेस में खोजेगा और, यदि कोई मेल मिल जाता है, तो नए फ़ंक्शन प्रोटोटाइप को परिभाषित फ़ंक्शन पर लागू करेगा।
जान लें कि यह केवल एक PoC है। वास्तव में उपयोगी होने के लिए, हैशों का एक विशाल डेटाबेस (संभवतः Windows की हेडर फ़ाइलों के सभी struct/enum नामों से सीड किया हुआ) जनरेट किया जाना चाहिए और ऑनलाइन लुकअप के लिए उपलब्ध कराया जाना चाहिए। इसके अतिरिक्त, इस विचार को C++ XFG हैशों तक विस्तारित करना एक बहुत मज़ेदार प्रोजेक्ट होगा।
इस रिपॉज़िटरी में कोड का उपयोग किसी भी तरह से करने के लिए स्वतंत्र महसूस करें। यदि आप इसे उपयोगी पाते हैं, तो मुझे आपसे सुनना अच्छा लगेगा।