
GUSTAVE एम्बेडेड OS कर्नेल के लिए एक फ़ज़िंग प्लेटफ़ॉर्म है। यह QEMU और AFL (और इसके सभी forkserver सिबलिंग्स) पर आधारित है। यह OS कर्नेल को सरल एप्लिकेशन की तरह फ़ज़ करने की अनुमति देता है।
(c) Airbus 2021, sduverger
GUSTAVE एम्बेडेड OS कर्नेल के लिए एक फ़ज़िंग प्लेटफ़ॉर्म है। यह QEMU और AFL (और इसके सभी forkserver सहयोगियों) पर आधारित है। यह OS कर्नेल को सरल अनुप्रयोगों की तरह फ़ज़ करने की अनुमति देता है।
QEMU के कारण, यह मल्टी-प्लेटफ़ॉर्म है। GUSTAVE को QEMU के अंदर एक AFL forkserver कार्यान्वयन के रूप में देखा जा सकता है, जिसमें विस्तृत लक्ष्य निरीक्षण होता है।
GUSTAVE मुख्यतः एम्बेडेड OS कर्नेल को लक्षित करने के लिए डिज़ाइन किया गया है। यह विंडोज, लिनक्स या macOS में पाए जाने वाले बड़े और जटिल कर्नेल को फ़ज़ करने के लिए सबसे अच्छा उपकरण नहीं हो सकता है।
हालांकि, यदि आपके पास एक ऐसा लक्ष्य है जिसे बिना किसी उपयोगकर्ता इंटरैक्शन के बूट करने के लिए एक या दो अनुप्रयोगों के साथ तैयार किया जा सकता है, तो GUSTAVE को आज़माना दिलचस्प हो सकता है।
AFL परियोजना का afl-fuzz उपकरण, आपके लक्ष्य को स्वचालित रूप से फ़ज़ करने के लिए उपयोग किया जाता है। हालांकि, AFL सीधे OS कर्नेल को फ़ज़ नहीं कर सकता है और उम्मीद करता है कि इसका लक्ष्य उत्पन्न परीक्षण मामलों को सीधे पार्स करे।
संक्षेप में, afl-fuzz अपने लक्ष्य के रूप में GUSTAVE एकीकरण के साथ QEMU चलाएगा। बदले में, GUSTAVE निम्नलिखित को संभालेगा :
AFL++ परियोजना में पाए जाने वाले AFL/QEMU-user मोड की तरह, GUSTAVE कोड कवरेज के लिए QEMU TCG IR स्तर पर बाइनरी इंस्ट्रुमेंटेशन लागू करता है।
हालांकि, आप इसे अक्षम करने और अपने लक्ष्य कर्नेल कोड को केवल विशिष्ट भागों के साथ पुनर्निर्माण करने का विकल्प चुन सकते हैं जो कोड कवरेज विश्लेषण के अधीन हों। आपको ट्रेस बिटमैप को अपडेट करने के लिए बिल्ड समय पर AFL शिम इंजेक्ट करने होंगे। यह हमारा प्रारंभिक दृष्टिकोण था (देखें प्रकाशन)।
मौजूदा समाधानों में कम प्रचलित, GUSTAVE kernel panics की निगरानी की परवाह नहीं करता है। हम उन्हें प्रबंधित त्रुटियां मानते हैं, और उन अवैध व्यवहारों की खोज करना चाहते हैं जिन्होंने कोई अलार्म ट्रिगर नहीं किया।
इस उद्देश्य के लिए GUSTAVE कर्नेल से अवैध एक्सेस का पता लगाने के लिए O(1) बाइट उन्मुख मेमोरी फ़िल्टरिंग बिटमैप पर निर्भर करता है। कर्नेल के दृष्टिकोण से क्या अवैध माना जा सकता है, इस पर बड़ी बहस हो सकती है। लेकिन प्रतिबंधित एम्बेडेड, अत्यधिक निर्धारणीय वातावरण में आप अपने फर्मवेयर के लिए वैध मेमोरी क्षेत्रों को परिभाषित करने और सीमा से बाहर एक्सेस को ट्रैक करने में सहज पा सकते हैं।
ऐसे तुलनीय दृष्टिकोण मौजूद हैं, जैसे:
GUSTAVE के डिज़ाइन विकल्प निम्नलिखित अंतर दर्शाते हैं:
हालांकि, आपको अभी भी GUSTAVE को बताना होगा:
अभी के लिए केवल x86 होस्ट समर्थित है, क्योंकि कई कार्य वातावरण इस आर्किटेक्चर पर आधारित हैं, हम इसे एक प्रतिबंधात्मक सीमा नहीं मानते हैं।
प्रतिबंध उस तरीके से आता है जिसमें हमने शुरू में QEMU लोड/स्टोर फास्ट-पथ के लिए tcg-target स्तर पर मेमोरी फ़िल्टरिंग बैकएंड को लागू किया था। हाल ही में TCGPlugin मेमोरी कॉलबैक आर्किटेक्चर किसी भी होस्ट का समर्थन करने का एक वैकल्पिक दृष्टिकोण हो सकता है।
हमने Intel x86 और PowerPC समर्थन को लागू और परीक्षण किया है। GUSTAVE कार्यान्वयन आर्किटेक्चर स्वतंत्र है। यदि आप अपने लक्ष्य को QEMU के साथ चला सकते हैं, तो आप इसे GUSTAVE के साथ थोड़े प्रयास में फ़ज़ कर सकते हैं।
हम GUSTAVE एकीकरण के साथ उदाहरण Intel 440FX और PowerPC PREP बोर्ड प्रदान करते हैं। अपने स्वयं के बोर्ड का कार्यान्वयन वास्तव में आसान है, और इसमें किसी दिए गए आर्किटेक्चर के लिए MACHINE_INIT फ़ंक्शन को लपेटना शामिल है।
हमने x86 और PowerPC GUSTAVE इंस्ट्रुमेंटेशन शिम को afl-gcc में भी समर्थन जोड़ा है, यदि आप TCG बाइनरी इंस्ट्रुमेंटेशन के साथ आगे नहीं बढ़ना चाहते हैं।
हम POK माइक्रो-कर्नेल विशिष्ट विकास प्रदान करते हैं:
आपको निम्नलिखित की आवश्यकता होगी:
POK लक्ष्य के लिए मैनुअल पढ़ें।
GUSTAVE पर विभिन्न वार्ताओं की सामग्री https://airbus-seclab.github.io/ पर पाई जा सकती है।