1 पॉइंट द्वारा GN⁺ 2024-10-07 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 के कुछ wget typos ठीक किए गए
  • 2021-11-25: Exercise 3 को कुछ fixes के साथ update किया गया

1 टिप्पणियां

 
GN⁺ 2024-10-07
Hacker News की राय
  • fuzzing से जुड़ा एक किस्सा: https://threadreaderapp.com/thread/1799457232607985698
    अगर आप लगभग 11 मिनट बर्बाद करना चाहते हैं, तो यह बढ़िया पढ़ने लायक है

    • Google पर 2007 का CNET लेख मिलता है; शायद eEye ने “हर तरफ press release फैला दिए” इसलिए: https://www.cnet.com/news/privacy/flaw-found-in-office-2007/
      दूसरी कंपनी के products में bug ढूँढने की होड़ के बाद, संयोग से Microsoft Publisher में एक bug मिल जाने पर इतराते हुए Microsoft को नीचा दिखाने की संस्कृति मुझे ठीक से समझ नहीं आती
      शायद हम सब भाग्यशाली होंगे अगर हमारी products को test करने के लिए पूरी हफ्ते रात-रात भर जागना जिस company में “standard process” हो, वह हमारे पास हो
    • लिखने का style सच में मज़ा बढ़ा देता है
      लेखक को देखा तो हो सकता है यह वही व्यक्ति हो जिसे मैं IRC से जानता था; “Mantis” और “infosec” बिल्कुल मेल खाते हैं
  • दिलचस्प बात यह है कि यह Go के approach से साफ़ तौर पर अलग है
    Go में test चलाने जितनी आसानी से fuzzing चला सकते हैं, इसलिए application या library के किसी खास हिस्से को target करना बहुत आसान है
    इसलिए इन techniques में से काफी कुछ गैर-ज़रूरी हो जाता है
    मुझे यह जानने में दिलचस्पी है कि fuzzing को बेहतर ढंग से guide करने की techniques क्या हैं, लेकिन अभी के लिए seed corpus देना और अच्छे नतीजे की उम्मीद करना ही सबसे अच्छा लगता है

    • libFuzzer जैसे कुछ fuzzing tools LLVM intermediate representation का उपयोग करके code coverage metrics बनाते हैं, और test coverage बढ़ाने के लिए इन्हें fuzzing algorithm में feedback के तौर पर देते हैं
    • coverage को guide करने के लिए reinforcement learning इस्तेमाल करने का idea मैंने PhD topic के रूप में कभी propose किया था, लेकिन असल में उस रास्ते पर नहीं गया और पता नहीं यह काम करेगा या नहीं
  • हैरानी है कि Heartbleed list में नहीं है। इसे reproduce करना बहुत आसान है

    • लगता है यह इसलिए छूट गया क्योंकि यहाँ के tutorials सभी local files या local data इस्तेमाल करते हैं और network-based fuzzing को cover नहीं करते