
WuppieFuzz v1.7.1
LibAFL के ऊपर विकसित एक कवरेज-निर्देशित REST API फ़ज़र
WuppieFuzz v1.7.1
TNO ने WuppieFuzz विकसित किया है, जो LibAFL के ऊपर निर्मित एक कवरेज-निर्देशित REST API फज़र है, जो अंतिम-उपयोगकर्ताओं के व्यापक दर्शकों को लक्षित करता है, जिसमें उपयोग में आसानी, खोजी गई कमजोरियों की व्याख्या क्षमता और मॉड्यूलरिटी पर मजबूत ध्यान केंद्रित है। WuppieFuzz परीक्षण के सभी तीन सेटिंग्स (ब्लैक बॉक्स, ग्रे बॉक्स और व्हाइट बॉक्स) का समर्थन करता है।
[!NOTE]
त्वरित, अनुसरण-योग्य मार्गदर्शन के लिए कृपया ट्यूटोरियल का पालन करें!
मीडिया कवरेज
WuppieFuzz को इनमें प्रदर्शित किया गया है:
- The ONE Conference e-magazine 2024
- Test your APIs easily with TNO's new REST API fuzzer
- OpenAPI.tools listing: WuppieFuzz
- Automated REST API Vulnerability Detection with WuppieFuzz (Nordic APIs on YouTube)
- Thoughtworks Technology Radar: WuppieFuzz
वैज्ञानिक प्रकाशन
यदि आप शैक्षणिक कार्य में WuppieFuzz का उल्लेख करना चाहते हैं, तो कृपया CITATION.cff में सूचीबद्ध पसंदीदा प्रकाशन का उपयोग करें:
Rooijakkers, T., Nijsten, A., Daniele, C., Weitenberg, E., Groenewegen, R., & Melissen, A. (2026). WuppieFuzz: Coverage-Guided, Stateful REST API Fuzzing. In Proceedings of the 12th International Conference on Information Systems Security and Privacy (ICISSP), Volume 2, 221-231. SciTePress. https://doi.org/10.5220/0000217100004061
लाइसेंस
WuppieFuzz Apache-2.0 के तहत लाइसेंस प्राप्त है; LICENSE देखें।
तृतीय-पक्ष लाइसेंस सूचनाएं THIRD_PARTY_NOTICES में सूचीबद्ध हैं।
त्वरित स्थापना
लोकप्रिय ऑपरेटिंग सिस्टम (MacOS, Windows, Linux) के लिए WuppieFuzz की त्वरित स्थापना हेतु releases देखें या brew install wuppiefuzz का उपयोग करें।
संक्षिप्त उपयोग-विधि
विकास के लिए पूर्वापेक्षाएँ
प्रोजेक्ट बनाने के लिए आपको निम्नलिखित निर्भरताएँ और टूलिंग स्थापित करनी होंगी:
- build-essential
sudo apt install build-essential - pkg-config
sudo apt install pkg-config - Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
चलाएँ
WuppieFuzz चलाने से पहले, आपको अपना (इंस्ट्रूमेंटेड) लक्ष्य अनुप्रयोग शुरू करना होगा।
इसके अतिरिक्त, आपको WuppieFuzz को एक OpenAPI-विनिर्देश प्रदान करना होगा ताकि यह जान सके कि अपने अनुरोधों को कैसे उत्पन्न और उत्परिवर्तित करना है। कमांड लाइन तर्कों में सहायता के लिए, निम्नलिखित का उपयोग करें:
$ cargo run -- --help # आवश्यक पैरामीटर और फ्लैग के लिए सहायता दिखाता है
Usage: wuppiefuzz [OPTIONS] [OPENAPI_SPEC.YAML]
...
उदाहरण के लिए, JaCoCo एजेंट संलग्न के साथ Java लक्ष्य के विरुद्ध WuppieFuzz चलाने के लिए, आप उसका OpenAPI फ़ाइल निर्दिष्ट करते हैं (जिसमें API विनिर्देश में लक्ष्य चल रहा है उसका URL शामिल होता है)। इसके अतिरिक्त, आप निर्दिष्ट करते हैं कि कवरेज प्रारूप JaCoCo है, और क्लासेस निर्देशिका इस प्रकार दें:
cargo run -- fuzz openapi.yaml --coverage-format jacoco --jacoco-class-dir ../Targets/app/target/classes/
कॉन्फ़िगरेशन फ़ाइल
यदि आप कमांड लाइन तर्कों के बजाय/साथ में कॉन्फ़िगरेशन फ़ाइल का उपयोग करना चाहते हैं, तो आप --config <CONFIG_FILE> फ्लैग का उपयोग कर सकते हैं। यदि आप कॉन्फ़िगरेशन फ़ाइल के साथ कमांड लाइन तर्कों का उपयोग करते हैं, तो कमांड लाइन तर्क प्राथमिकता लेते हैं।
कॉन्फ़िगरेशन फ़ाइल एक yaml फ़ाइल होनी चाहिए और प्रत्येक कमांड लाइन तर्क के लिए एक पंक्ति शामिल करनी चाहिए जिसे आप निर्दिष्ट करना चाहते हैं, उदाहरण के लिए:
coverage_format: jacoco
output_format: human-readable
source_dir: "/swagger-petstore/src/main/java"
jacoco_class_dir: "/swagger-petstore/target"
timeout: 20
इस मामले में एक उदाहरण रन कमांड इस प्रकार हो सकता है:
$ cargo run -- fuzz --config=config.yaml --report --coverage-host=localhost:6300 --timeout=10 ./openapi.yaml
यह पंक्ति कमांड लाइन और कॉन्फ़िगरेशन फ़ाइल के तर्कों को संयोजित करेगी। चूंकि --timeout फ्लैग दोनों में निर्दिष्ट है, कमांड लाइन में निर्दिष्ट टाइमआउट (10 सेकंड) प्राथमिकता लेगा।
निर्देशिका example_configs/ में आपको Java कोड के लिए JaCoCo के साथ कवरेज रिपोर्ट उत्पन्न करने और Python कोड के लिए LCOV के साथ कवरेज रिपोर्ट उत्पन्न करने के लिए उपयोग करने हेतु दो उदाहरण कॉन्फ़िगरेशन फ़ाइलें मिलेंगी।
रिपोर्ट
जब आप --report फ्लैग के साथ WuppieFuzz चलाते हैं, तो reports/ के अंदर एक उपनिर्देशिका बनाई जाती है जिसका नाम टाइमस्टैम्प होता है। सभी समर्थित कवरेज रिपोर्ट इस उपनिर्देशिका में लिखी जाती हैं। कवरेज रिपोर्ट के दो प्रकार हैं:
- एंडपॉइंट कवरेज: यह हमेशा उत्पन्न किया जा सकता है क्योंकि इसे केवल OpenAPI-विनिर्देश की आवश्यकता होती है।
- कोड कवरेज: वर्तमान में केवल JaCoCo के लिए समर्थित है, लेकिन हम अधिक समर्थन करने का लक्ष्य रखते हैं। कठिन हिस्सा यह है कि इसके लिए कवरेज से स्रोत फ़ाइलों तक मैपिंग की आवश्यकता होती है, और मजबूत रिपोर्ट जनरेशन जो इसका उपयोग करता है।
इसके अलावा, एक डेटाबेस आपके फज़िंग अभियान से संबंधित सभी अनुरोध जानकारी से भरा जाता है। इस डेटाबेस को Grafana डैशबोर्ड के माध्यम से विज़ुअलाइज़ और अन्वेषण किया जा सकता है।
इस रिपॉजिटरी की संरचना
- assets: लोगो, चित्र, आदि।
- coverage_agents: विभिन्न लक्ष्यों पर लगाने के लिए कवरेज ट्रैकिंग हेतु कोड और निर्देश
- example_configs: WuppieFuzz को कॉन्फ़िगर करने के लिए उदाहरण कॉन्फ़िगरेशन फ़ाइलें
- src: WuppieFuzz का स्रोत कोड
- tutorial: एक विशिष्ट लक्ष्य को कैसे फज़ करें और फज़िंग परिणामों की व्याख्या कैसे करें, इस पर एक गहन और निम्न-स्तरीय ट्यूटोरियल
- dashboard: फज़िंग परिणामों और प्रदर्शन की जांच के लिए टूलिंग
इनमें से प्रत्येक के बारे में अधिक जानकारी के लिए, इन निर्देशिकाओं में README देखें।
विकास बिल्ड
डिफ़ॉल्ट रूप से, WuppieFuzz अपनी C निर्भरताओं (OpenSSL, SQLite, Z3) को वेंडर करता है ताकि एक नियमित cargo build बॉक्स से बाहर काम करे। विकास के दौरान तेज़ संकलन के लिए, आप सभी वेंडर की गई निर्भरताओं को अक्षम कर सकते हैं और सिस्टम-स्थापित लाइब्रेरीज़ के साथ लिंक कर सकते हैं।
[!NOTE]
z3क्रेट को Z3 4.15+ की आवश्यकता है, जो अधिकांश Linux वितरण पैकेज प्रबंधकों द्वारा भेजे गए संस्करण से नया है। संगत संस्करण प्राप्त करने के लिए Homebrew के माध्यम से Z3 स्थापित करें (brew install z3)।
सिस्टम निर्भरताएँ
अपने सिस्टम पर निम्नलिखित लाइब्रेरीज़ स्थापित करें:
Debian/Ubuntu:
sudo apt install libssl-dev libsqlite3-dev
brew install z3 # apt का libz3-dev बहुत पुराना है; इसके बजाय Homebrew का उपयोग करें
Linux पर, Homebrew एक गैर-मानक पथ पर स्थापित होता है। इसकी लाइब्रेरी निर्देशिका को अपने पर्यावरण में जोड़ें ताकि कंपाइलर और रनटाइम लिंकर Z3 ढूंढ सकें:
eval "$(brew shellenv)"
export LIBRARY_PATH="$(brew --prefix z3)/lib:$LIBRARY_PATH"
export LD_LIBRARY_PATH="$(brew --prefix z3)/lib:$LD_LIBRARY_PATH"
[!TIP] उपरोक्त पंक्तियों को स्थायी बनाने के लिए अपनी
~/.bashrcया~/.zshrcमें जोड़ें।
Fedora (42+):
sudo dnf install openssl-devel sqlite-devel z3-devel
macOS (Homebrew):
brew install openssl sqlite z3
Cargo उपनाम
रिपॉजिटरी में .cargo/config.toml में cargo उपनाम शामिल हैं जो --no-default-features के साथ बिल्ड करते हैं, सभी सिस्टम लाइब्रेरीज़ के साथ लिंक करते हैं:
cargo dev-build # वेंडर की गई निर्भरताओं के बिना बिल्ड करें
cargo dev-run -- <args> # वेंडर की गई निर्भरताओं के बिना चलाएँ
cargo dev-test # वेंडर की गई निर्भरताओं के बिना परीक्षण करें
दस्तावेज़ीकरण उत्पन्न करना
स्रोत कोड में टिप्पणियों से दस्तावेज़ीकरण उत्पन्न करने के लिए cargo doc --no-deps चलाएँ। दस्तावेज़ीकरण का मुख्य पृष्ठ target/doc/wuppiefuzz/index.html होगा।
