
यह पूर्ण फ़ाइल सिस्टम फ़ज़िंग ढाँचा है जिसे मैंने अप्रैल में हैक इन द बॉक्स 2020 लॉकडाउन संस्करण सम्मेलन में प्रस्तुत किया था।
यह पूर्ण फ़ाइल सिस्टम फ़ज़िंग फ्रेमवर्क है जिसे मैंने अप्रैल में Hack in the Box 2020 Lockdown Edition सम्मेलन में प्रस्तुत किया था।

इस फ्रेमवर्क का उद्देश्य UNIX सिस्टमों पर कर्नेल सुरक्षा बग्स को उजागर करना है, जिसमें BSD सिस्टमों पर विशेष ध्यान दिया गया है। इसे FreeBSD, OpenBSD और NetBSD के विरुद्ध विकसित और भारी परीक्षण किया गया है, लेकिन Linux-आधारित होस्ट के लिए भी कुछ छोटा समर्थन पहले से मौजूद है। हम UFS और EXT आधारित फ़ाइल सिस्टमों के लिए 100 से अधिक अद्वितीय कर्नेल बग्स को सफलतापूर्वक उजागर करने में सक्षम हुए, साथ ही ZFS के हालिया जोड़ के बारे में भी बहुत अंतर्दृष्टि प्राप्त की।
makeFS2.py का उपयोग विभिन्न मान्य फ़ाइल सिस्टम उत्पन्न करने के लिए एक स्वतंत्र उपयोगिता के रूप में किया जा सकता है।
उपयोग को सम्मेलन सामग्री रिपॉजिटरी में विस्तार से समझाया गया है
फ्रेमवर्क का परीक्षण केवल Ubuntu 18.04 पर किया गया है।
यह KVM, QEMU और libvirt पर निर्भर है।
Requirements.sh सभी आवश्यक निर्भरताओं को स्थापित करता है।
फ्रेमवर्क नवीनतम Ubuntu 20.04 रिलीज़ पर पूरी तरह कार्यात्मक हो सकता है।
अन्य गैर-apt आधारित होस्ट सिस्टम को आसानी से समर्थित किया जा सकता है और केवल Requirements.sh में मामूली बदलाव की आवश्यकता है।
एक बार आवश्यकताओं को पूरा करने के बाद आप सेटअप चरणों के साथ जारी रख सकते हैं!
कृपया SETUP.md देखें। यदि कुछ कदम अस्पष्ट हों तो कृपया संपर्क करें!
फ़ज़र शुरू करने के लिए केवल निष्पादित करें: python3 run.py।
आपके सेटअप के आधार पर आपको sudo विशेषाधिकारों की आवश्यकता हो सकती है।
जब सब कुछ सफलतापूर्वक शुरू हो जाए, तो आप tmux फ़ज़िंग सत्र से जुड़ सकते हैं:
(sudo) tmux attach-session -t fsfuzzer
फ्रेमवर्क को स्क्रिप्ट src/config/fuzzing_config.py से कॉन्फ़िगर किया जा सकता है:
# [fuzzing task specs]
# प्रत्येक फ़ज़िंग इंस्टेंस को निर्दिष्ट करने वाले शब्दकोशों की सूची
fuzzer = [
{
"name": "fuzz1", # आंतरिक लेखांकन के लिए कुछ नाम
"fs_creator_vm": "genBox", # libvirt में फ़ाइल सिस्टम निर्माण को संभालने वाले VM के लिए नाम, सभी इंस्टेंस में समान हो सकता है
"fuzzing_vm": "fuzzBox_0", # libvirt में फ़ाइल सिस्टम निर्माण को संभालने वाले VM के लिए नाम
"mutation_engine": "radamsa, 0", # उपयोग करने के लिए म्यूटेशन इंजन, और म्यूटेशन का आकार (radamsa कोई आकार तर्क नहीं लेता)
"target_fs": "ufs2", # लक्ष्य फ़ाइल सिस्टम
"target_size": 15, # मेगाबाइट में अधिकतम फ़ाइल सिस्टम आकार
"populate_with_files": 10, # उत्पन्न होने वाली फ़ाइलों की संख्या
"max_file_size": 1024, # प्रत्येक उत्पन्न फ़ाइल के लिए बाइट्स में अधिकतम फ़ाइल आकार
"enable_dyn_scaling": False, # डायनामिक स्केलिंग समय-समय पर फ़ाइल सिस्टम आकार को बढ़ाएगा
},
]
# [credentials]
# VM के रूट उपयोगकर्ता के लिए क्रेडेंशियल्स
# यह अपेक्षित है कि ये सभी इंस्टेंस में समान हों, लेकिन आवश्यक नहीं कि रूट ही हो
user = "root"
pw = "root"
उपलब्ध म्यूटेशन इंजन हैं:
डायनामिक स्केलिंग शुरू में यह परीक्षण करने के लिए लागू किया गया था कि क्या फ़ाइल सिस्टम का आकार संभावित क्रैश को प्रभावित करता है। मैं फ़ाइल सिस्टम आकार के लिए कोई ट्रिगर मान पहचानने में सक्षम नहीं था जहाँ क्रैश बदलते हैं, इसलिए यह फ्लैग अक्षम रह सकता है। यह लंबे रन पर प्रदर्शन ड्रॉप से बचने में भी मदद करता है क्योंकि बड़े फ़ाइल सिस्टम को म्यूटेट करने में अधिक समय लगता है।
शेष कॉन्फ़िग पैरामीटर स्वयं-व्याख्यात्मक होने चाहिए।
नीचे दिया गया वीडियो एक त्वरित डेमो दिखाता है जहाँ दो फ़ज़िंग इंस्टेंस दोनों FreeBSD को radamsa-म्यूटेटेड UFS2 और एक यादृच्छिक बाइट फ़्लिप किए गए EXT फ़ाइल सिस्टम के साथ लक्षित करते हैं। म्यूटेटेड UFS फ़ाइल सिस्टम सीधे एक क्रैश की ओर ले जाता है जो दर्शाता है कि आप कितनी जल्दी एक कर्नेल को क्रैश कर सकते हैं।

इस सेटअप के साथ मैं FreeBSD, NetBSD और OpenBSD में UFS और EXT आधारित फ़ाइल सिस्टमों के लिए > 100 अद्वितीय कर्नेल बग्स खोजने में सक्षम था। इन क्रैशों में मेरे पास कई बहुत रोचक क्रैश थे:
6 अद्वितीय कोर डंप के साथ गैर-नियतात्मक कर्नेल बग
अधिकांश क्रैश कर्नेल DoS थे। इसके अलावा, सामने आए अधिकांश क्रैश आज भी (मई 2020) ठीक नहीं हुए हैं। तो फ़ाइल सिस्टम कार्यान्वयन में कर्नेल बग्स खोजने का प्रयास करें :)
यह पूरी चीज़ 'ट्रस्ट ड्रिवेन डेवलपमेंट' के साथ बनाई गई थी, जिसका अर्थ है कि यह एक अकेले PoC विचार से बहुत तेज़ी से बहुत बड़ी हो गई। इसलिए, कोई परीक्षण भी नहीं हैं और सबसे अधिक संभावना है कुछ बग्स। यदि आप ऐसे क्रैश में भागते हैं (जो कर्नेल पैनिक से संबंधित नहीं हैं) तो मुझे खेद है, लेकिन बेझिझक PR बनाएँ या मुझसे संपर्क करें और मैं ASAP चीज़ें ठीक कर दूँगा!
ट्विटर: @0xricksanchez