Psyzkaller: Learning from Historical and On-the-Fly Execution Data for Smarter Seed Generation in OS kernel Fuzzing
Liu, Zhang, Cheng et al.
Fuzzing has become a cornerstone technique for uncovering vulnerabilities and enhancing the security of OS kernels. However, state-of-the-art kernel fuzzers, including the de facto standard Syzkaller, struggle to generate valid syscall sequences that respect implicit Syscall Dependency Relations (SDRs). Consequently, many generated seeds either fail kernel validation or cannot penetrate deep execution paths, resulting in significant inefficiency.
We hypothesize that SDRs can be effectively learned from both historic and present kernel execution data, and that incorporating these learned relations into fuzzing can substantially improve seed validity and diversity. To validate this, we propose an approach that utilizes the N-gram model to mine SDRs from the Dongting dataset-one of the largest Linux kernel execution datasets available-as well as from execution traces collected on the fly during fuzzing. The resulting model is used to continuously augment the Choice Table of Syzkaller to improve its seed generation and demonstrably increases the Shannon Entropy of the Choice Table throughout fuzzing, reflecting more empirically-grounded choices in expanding syscall sequences into valid and diverse seeds. In addition, we introduce a Random Walk strategy that instructs Syzkaller to construct seeds in a bidirectional manner to further diversify the generated seeds.
We implement our approach in a prototype, Psyzkaller, built on top of Syzkaller. Experiments on three representative Linux kernel versions show that Psyzkaller improves Syzkaller's code coverage by 4.6%-7.0% in 48-hour fuzzing, while triggering 110.4%-187.2% more crashes. Moreover, our investigation shows that Psyzkaller discovered eight previously unknown kernel vulnerabilities, compared to only one found by Syzkaller.
academic
Psyzkaller: OS कर्नल फ़ज़िंग में स्मार्ट सीड जनरेशन के लिए ऐतिहासिक और ऑन-द-फ्लाई एक्सीक्यूशन डेटा से सीखना
फ़ज़िंग ऑपरेटिंग सिस्टम कर्नल में कमजोरियों की खोज और सुरक्षा बढ़ाने के लिए एक मौलिक तकनीक बन गई है। हालांकि, Syzkaller सहित अत्याधुनिक कर्नल फ़ज़र्स निहित सिस्टम कॉल निर्भरताओं (SDRs) का सम्मान करने वाले प्रभावी सिस्टम कॉल अनुक्रमों को उत्पन्न करने में कठिनाई का सामना करते हैं। परिणामस्वरूप, कई उत्पन्न सीड्स या तो कर्नल सत्यापन में विफल होते हैं या गहरे निष्पादन पथों तक नहीं पहुंच सकते, जिससे महत्वपूर्ण अक्षमता होती है। यह पेपर मानता है कि SDRs को ऐतिहासिक और वर्तमान कर्नल निष्पादन डेटा से प्रभावी ढंग से सीखा जा सकता है, और इन सीखी गई संबंधों को फ़ज़िंग में शामिल करने से सीड वैधता और विविधता में उल्लेखनीय सुधार हो सकता है। इसे सत्यापित करने के लिए, लेखकों ने DongTing डेटासेट (Linux कर्नल निष्पादन डेटा के सबसे बड़े डेटासेट में से एक) और फ़ज़िंग प्रक्रिया के दौरान वास्तविक समय में एकत्र किए गए निष्पादन ट्रेस से SDRs को खनन करने के लिए N-gram मॉडल का उपयोग करने की एक विधि प्रस्तावित की है।
ऑपरेटिंग सिस्टम कर्नल आधुनिक कंप्यूटिंग प्लेटफॉर्म का एक महत्वपूर्ण घटक है, और कर्नल-स्तर की सुरक्षा समझौता हमलावरों को सिस्टम पर पूर्ण नियंत्रण प्राप्त करने की अनुमति देता है। वर्तमान कर्नल फ़ज़र्स का सामना करने वाली मुख्य समस्याएं हैं:
सिस्टम कॉल निर्भरता (SDRs) पहचान में कठिनाई: कई उत्पन्न सिस्टम कॉल अनुक्रम (SCSs) SDRs का उल्लंघन करने के कारण अमान्य हैं
सीड जनरेशन में कम दक्षता: अमान्य परीक्षण मामले जल्दी विफल हो जाते हैं, कोड अन्वेषण में बहुत कम योगदान देते हैं
गहरे निष्पादन पथों तक पहुंचना कठिन: सिस्टम कॉल के बीच शब्दार्थ बाधाओं की समझ की कमी
लेखकों ने कर्नल निष्पादन ट्रेस से सीधे SDRs सीखने का एक नया दृष्टिकोण प्रस्तावित किया है, जो ऐतिहासिक डेटा के व्यापक कवरेज और ऑनलाइन सीखने की अनुकूलनशीलता को जोड़ता है।
ऐतिहासिक और वास्तविक समय कर्नल निष्पादन डेटा से SDRs सीखने की एक नई रणनीति प्रस्तावित की, जो व्यापक कवरेज और कर्नल संस्करण अनुकूलनशीलता दोनों को जोड़ती है
Psyzkaller प्रोटोटाइप विकसित किया, जो Bigram-आधारित SDR सीखने और RandomWalk रणनीति को Syzkaller वर्कफ़्लो में एकीकृत करता है
सबसे बड़े ऐतिहासिक Linux कर्नल निष्पादन डेटासेट (DongTing) के साथ Bigram मॉडल को पूर्व-प्रशिक्षित किया
तीन प्रतिनिधि Linux कर्नल संस्करणों पर प्रभावशीलता को सत्यापित किया, शाखा कवरेज और कमजोरी पहचान में श्रेष्ठता प्रदर्शित की
इनपुट: ऐतिहासिक कर्नल निष्पादन डेटासेट C और वास्तविक समय फ़ज़िंग परिणाम
आउटपुट: अधिक प्रभावी सिस्टम कॉल अनुक्रम जनरेशन को निर्देशित करने के लिए बढ़ी हुई Choice Table
उद्देश्य: सीड वैधता, विविधता और कमजोरी खोज क्षमता में सुधार
RPM मैट्रिक्स का निर्माण किया जाता है, जहां RPM[i]j सिस्टम कॉल wi के तुरंत बाद wj को कॉल करने की संभावना को रिकॉर्ड करता है।
Algorithm 1: LearnSDR
इनपुट: C (सिस्टम कॉल अनुक्रम कॉर्पस), CallNum (कर्नल में सिस्टम कॉल की कुल संख्या)
आउटपुट: M (C से सीखा गया N-gram मॉडल)
1. मैट्रिक्स M और गणना सरणी Count को प्रारंभ करें
2. कॉर्पस C में प्रत्येक अनुक्रम sc पर पुनरावृत्ति करें:
- लगातार दिखाई देने वाले सिस्टम कॉल जोड़ी की गणना करें
- गणना सांख्यिकी को अपडेट करें
3. संक्रमण संभावना की गणना करें: M[i][j] = M[i][j] / Count[i]
समग्र मूल्यांकन: यह एक उच्च गुणवत्ता का सिस्टम सुरक्षा अनुसंधान पेपर है जो कर्नल फ़ज़िंग में मुख्य समस्याओं को हल करने के लिए एक नवीन डेटा-संचालित विधि प्रस्तावित करता है। प्रयोग डिजाइन कठोर है, परिणाम विश्वास्पद हैं, और इसका महत्वपूर्ण शैक्षणिक मूल्य और व्यावहारिक महत्व है।