Fuzzing 101 की बुनियाद
(github.com/antonio-morales)- Fuzzing-101 एक ऐसा कोर्स है जिसे fuzzing पहली बार सीखने वाले लोगों के लिए बनाया गया है, ताकि वे वास्तविक software targets पर vulnerabilities खोजने की प्रक्रिया का अभ्यास कर सकें
- यह कोर्स 10 वास्तविक targets और 10 exercises से बना है, और Xpdf, libexif, TCPdump, LibTIFF, Libxml2, GIMP, VLC media player, Adobe Reader, 7-Zip, Google Chrome/V8 को कवर करता है
- हर exercise का लक्ष्य CVE को reproduce या discover करना है, और इसमें CVE-2019-13288, CVE-2016-2334, CVE-2019-5847 जैसी vulnerabilities के साथ AFL++, ASan, LCOV, WinAFL, Fuzzilli आदि का उपयोग होता है
- भाग लेने की शर्त इंटरनेट से जुड़ा Linux system है; basic Linux usage की क्षमता recommended है, और सभी exercises Ubuntu 20.04.2 LTS पर test की गई हैं
- Fuzzing एक automated testing technique है जिसमें random या mutated inputs को program में डालकर exceptions या crashes पर नज़र रखी जाती है; यह कोर्स coverage-guided evolutionary fuzzer के basic behavior को सीखने का विषय बनाता है
कोर्स का उद्देश्य और target audience
- Fuzzing-101 उन लोगों के लिए कोर्स है जो fuzzing को expert की तरह सीखना चाहते हैं, लेकिन नहीं जानते कि शुरुआत कहाँ से करें
- यह कोर्स 10 वास्तविक targets और 10 exercises से बना है
- target readers ये हैं
- fuzzing basics सीखना चाहने वाले लोग
- वास्तविक software projects में vulnerabilities खोजने का तरीका सीखना चाहने वाले लोग
exercises की संरचना
- हर exercise में एक specific software, खोजा जाने वाला CVE, estimated time और main topics साथ में दिए जाते हैं
| exercise | target | खोजा जाने वाला CVE | estimated time | main topics |
|---|---|---|---|---|
| Exercise 1 | Xpdf | CVE-2019-13288 | 120 मिनट | Afl-clang-fast, Afl-fuzz, GDB |
| Exercise 2 | libexif | CVE-2009-3895, CVE-2012-2836 | 6 घंटे | Afl-clang-lto, library fuzzing, Eclipse IDE |
| Exercise 3 | TCPdump | CVE-2017-13028 | 4 घंटे | ASan, Sanitizers |
| Exercise 4 | LibTIFF | CVE-2016-9297 | 3 घंटे | code coverage, LCOV |
| Exercise 5 | Libxml2 | CVE-2017-9048 | 3 घंटे | dictionary, basic parallelization, command-line argument fuzzing |
| Exercise 6 | GIMP | CVE-2016-4994, bonus bug | 7 घंटे | persistent fuzzing, interactive application fuzzing |
| Exercise 7 | VLC media player | CVE-2019-14776 | 6 घंटे | partial instrumentation, fuzzing harness |
| Exercise 8 | Adobe Reader | none | 8 घंटे | closed-source application fuzzing, QEMU instrumentation |
| Exercise 9 | 7-Zip | CVE-2016-2334 | 8 घंटे | WinAFL, Windows application fuzzing |
| Exercise 10 | Google Chrome / V8 | CVE-2019-5847 | 8 घंटे | Fuzzilli, JavaScript engine fuzzing |
runtime environment और tools
- ज़रूरत सिर्फ़ इंटरनेट connection वाले Linux system की है
- exercises में इस्तेमाल की जा सकने वाली VMware image उपलब्ध कराई गई है
- basic Linux usage skill की strongly recommendation है
- सभी exercises Ubuntu 20.04.2 LTS पर test की गई हैं
- कोर्स में AFL++ का उपयोग होता है
- AFL++ को Michał “lcamtuf” Zalewski के AFL से निकला एक नया और बेहतर fork बताया गया है
fuzzing की basic concepts
- fuzz testing या fuzzing एक automated software testing technique है, जिसमें program में random या mutated inputs डालकर exceptions या crashes को monitor किया जाता है
- real applications में सफल fuzzers के उदाहरण के तौर पर AFL, libFuzzer, HonggFuzz दिए गए हैं
- ये तीनों tools coverage-guided evolutionary fuzzer के examples हैं
coverage-guided evolutionary fuzzer
- evolutionary approach evolutionary algorithms से प्रेरित metaheuristic तरीका है
- initial input set यानी seeds को समय के साथ evolve और mutate किया जाता है
- selection criterion के उदाहरण के तौर पर coverage का उपयोग किया जाता है
- coverage-guided fuzzer नए crashes खोजने की संभावना बढ़ाने के लिए हर input के code coverage data को collect और compare करता है
- coverage collection आम तौर पर instrumentation के ज़रिए होती है
- ऐसे inputs चुने जाते हैं जो नए execution paths तक ले जाते हैं
changelog
- 2022-02-14: Exercise 5 के कुछ
wgettypos ठीक किए गए - 2021-11-25: Exercise 3 को कुछ fixes के साथ update किया गया
1 टिप्पणियां
Hacker News की राय
fuzzing से जुड़ा एक किस्सा: https://threadreaderapp.com/thread/1799457232607985698
अगर आप लगभग 11 मिनट बर्बाद करना चाहते हैं, तो यह बढ़िया पढ़ने लायक है
दूसरी कंपनी के products में bug ढूँढने की होड़ के बाद, संयोग से Microsoft Publisher में एक bug मिल जाने पर इतराते हुए Microsoft को नीचा दिखाने की संस्कृति मुझे ठीक से समझ नहीं आती
शायद हम सब भाग्यशाली होंगे अगर हमारी products को test करने के लिए पूरी हफ्ते रात-रात भर जागना जिस company में “standard process” हो, वह हमारे पास हो
लेखक को देखा तो हो सकता है यह वही व्यक्ति हो जिसे मैं IRC से जानता था; “Mantis” और “infosec” बिल्कुल मेल खाते हैं
दिलचस्प बात यह है कि यह Go के approach से साफ़ तौर पर अलग है
Go में test चलाने जितनी आसानी से fuzzing चला सकते हैं, इसलिए application या library के किसी खास हिस्से को target करना बहुत आसान है
इसलिए इन techniques में से काफी कुछ गैर-ज़रूरी हो जाता है
मुझे यह जानने में दिलचस्पी है कि fuzzing को बेहतर ढंग से guide करने की techniques क्या हैं, लेकिन अभी के लिए seed corpus देना और अच्छे नतीजे की उम्मीद करना ही सबसे अच्छा लगता है
हैरानी है कि Heartbleed list में नहीं है। इसे reproduce करना बहुत आसान है