
AFLplusplus v5.03c
फ़ज़र afl++ afl है जिसमें सामुदायिक पैच, qemu 5.1 अपग्रेड, collision-free कवरेज, बेहतर laf-intel और redqueen, AFLfast++ पावर शेड्यूल, MOpt म्यूटेटर, unicorn_mode, और बहुत कुछ शामिल है!
अमेरिकन फ़ज़ी लोप प्लस प्लस (AFL++)
रिलीज़ संस्करण: 5.03c
GitHub संस्करण: 5.03c
रिपॉज़िटरी: https://github.com/AFLplusplus/AFLplusplus
AFL++ का रखरखाव निम्नलिखित द्वारा किया जाता है:
- Marc "van Hauser" Heuse [email protected]
- Dominik Maier [email protected]
- Andrea Fioraldi [email protected]
- Heiko "hexcoder-" Eissfeldt [email protected]
- frida_mode का रखरखाव @Worksbutnottested द्वारा किया जाता है
मूल रूप से Michal "lcamtuf" Zalewski द्वारा विकसित।
AFL++ Google के AFL का एक बेहतर फ़ोर्क है - अधिक गति, अधिक और बेहतर म्यूटेशन, अधिक और बेहतर इंस्ट्रूमेंटेशन, कस्टम मॉड्यूल समर्थन, आदि।
AFL++ AGPL-3.0-or-later के अंतर्गत लाइसेंस प्राप्त है, और इसमें Apache-2.0 लाइसेंस के अंतर्गत फ़ाइलें भी शामिल हैं।
फ़ज़िंग हार्नेस में संकलित की गई हर चीज़ Apache 2.0 लाइसेंस के अंतर्गत रहेगी।
प्रत्येक फ़ाइल अपने SPDX-License-Identifier हेडर में अपना स्वयं का लाइसेंस बताती है — यही
वह लाइसेंस है जिसका पालन आपको उस फ़ाइल के लिए करना होगा।
उन संगठनों के लिए एक वैकल्पिक वाणिज्यिक लाइसेंस उपलब्ध है जो
AGPL का उपयोग नहीं कर सकते (एक अच्छे उद्देश्य के लिए दान करके प्राप्त किया जाता है — परियोजना और इसके
रखरखावकर्ताओं को कोई धन नहीं मिलता)।
सरल भाषा में अवलोकन के लिए LICENSING.md देखें और
विवरण के लिए नीचे लाइसेंस अनुभाग देखें।
आरंभ करना
आपको आरंभ करने के लिए यहां कुछ जानकारी दी गई है:
- AFL++ दस्तावेज़ीकरण के अवलोकन और एक बहुत ही उपयोगी ग्राफिकल गाइड के लिए, कृपया docs/README.md पर जाएं।
- ट्यूटोरियल के साथ आरंभ करने के लिए, docs/tutorials.md पर जाएं।
- रिलीज़ के लिए, रिलीज़ टैब और
ब्रांच देखें। उपयोग करने के लिए सबसे अच्छी ब्रांच, हालांकि,
stableयाdevहैं - आपकी जोखिम लेने की क्षमता पर निर्भर करता है। साथ ही AFL++ में महत्वपूर्ण परिवर्तनों की सूची और विशेषताओं की सूची पर एक नज़र डालें। - यदि आप अपने शैक्षणिक कार्य के लिए AFL++ का उपयोग करना चाहते हैं, तो वेबसाइट पर पेपर्स पेज देखें।
- हमारे कार्य को उद्धृत करने के लिए, Cite अनुभाग देखें।
- तुलना के लिए, fuzzbench
aflplusplusसेटअप का उपयोग करें, याAFL_LLVM_CMPLOG=1के साथafl-clang-fastका उपयोग करें। आप Google के fuzzbench परaflplusplusडिफ़ॉल्ट कॉन्फ़िगरेशन पा सकते हैं।
AFL++ का निर्माण और स्थापना
AFL++ को सब कुछ संकलित के साथ आसानी से उपलब्ध कराने के लिए, छवि को सीधे Docker Hub से खींचें (x86_64 और arm64 दोनों के लिए उपलब्ध):
docker pull aflplusplus/aflplusplus
docker run -ti -v /location/of/your/target:/src aflplusplus/aflplusplus
यह छवि स्वचालित रूप से प्रकाशित होती है जब stable ब्रांच पर पुश होता है
(ब्रांच देखें)। यदि आप उपरोक्त कमांड का उपयोग करते हैं, तो आपको अपना
लक्ष्य स्रोत कोड कंटेनर में /src में मिलेगा।
नोट: आप aflplusplus/aflplusplus:dev भी खींच सकते हैं जो AFL++ की सबसे वर्तमान
विकास स्थिति है।
AFL++ को स्वयं बनाने के लिए - जो हम अनुशंसा करते हैं - आगे बढ़ें docs/INSTALL.md पर।
त्वरित आरंभ: AFL++ के साथ फ़ज़िंग
नोट: शुरू करने से पहले, कृपया फ़ज़िंग के सामान्य ज्ञान जोखिमों के बारे में पढ़ें।
यह स्रोत कोड उपलब्ध लक्ष्यों की फ़ज़िंग के लिए एक त्वरित आरंभ है। प्रक्रिया के बारे में विस्तार से पढ़ने के लिए, docs/fuzzing_in_depth.md देखें।
अन्य लक्ष्यों की फ़ज़िंग के बारे में जानने के लिए, देखें:
- केवल-बाइनरी लक्ष्य: docs/fuzzing_binary-only_targets.md
- नेटवर्क सेवाएं: docs/best_practices.md#fuzzing-a-network-service
- GUI प्रोग्राम: docs/best_practices.md#fuzzing-a-gui-program
चरण-दर-चरण त्वरित आरंभ:
-
फ़ज़ किए जाने वाले प्रोग्राम या लाइब्रेरी को
afl-ccका उपयोग करके संकलित करें। ऐसा करने का एक सामान्य तरीका होगा:CC=/path/to/afl-cc CXX=/path/to/afl-c++ ./configure --disable-shared make clean all -
एक छोटी लेकिन मान्य इनपुट फ़ाइल प्राप्त करें जो प्रोग्राम के लिए सार्थक हो। जब वर्बोज़ सिंटैक्स (SQL, HTTP, आदि) की फ़ज़िंग कर रहे हों, तो dictionaries/README.md में वर्णित अनुसार एक डिक्शनरी भी बनाएं।
-
यदि प्रोग्राम stdin से पढ़ता है, तो
afl-fuzzको इस प्रकार चलाएं:./afl-fuzz -i seeds_dir -o output_dir -- \ /path/to/tested/program [...program's cmdline...]डिक्शनरी जोड़ने के लिए, afl-fuzz में
-x /path/to/dictionary.txtजोड़ें।यदि प्रोग्राम फ़ाइल से इनपुट लेता है, तो आप प्रोग्राम की कमांड लाइन में
@@डाल सकते हैं; AFL++ आपके लिए वहां एक स्वतः-जनित फ़ाइल नाम रख देगा। -
फ़ज़र UI में लाल रंग में दिखाई गई किसी भी चीज़ की तुरंत जांच करें docs/afl-fuzz_approach.md#understanding-the-status-screen से परामर्श करके।
-
आपको मिले क्रैश और हैंग
-o output_dirनिर्देशिका मेंcrashes/औरhangs/उपनिर्देशिकाओं में मिलेंगे। आप क्रैश को लक्ष्य पर फीड करके उन्हें फिर से चला सकते हैं, उदाहरण के लिए यदि आपका लक्ष्य stdin का उपयोग कर रहा है:cat output_dir/crashes/id:000000,* | /path/to/tested/program [...program's cmdline...]आप कोर जनरेट कर सकते हैं या क्रैश का अनुसरण करने के लिए सीधे gdb का उपयोग कर सकते हैं।
-
अपनी फ़ज़िंग के कवरेज विश्लेषण के लिए हम अपने साथी टूल cov-analysis (फ़ज़िंग कॉर्पस से स्रोत-आधारित कवरेज रिपोर्ट) और fuzz-reachability (स्थैतिक विश्लेषण कि एक हार्नेस किन फ़ंक्शन तक पहुंच सकता है, कार्रवाई योग्य कवरेज अंतराल को मृत कोड से अलग करने और इंस्ट्रूमेंटेशन अनुमतियाँ उत्पन्न करने के लिए) की अनुशंसा करते हैं।
-
हम इसे पर्याप्त रूप से जोर नहीं दे सकते - यदि आप प्रभावी ढंग से फ़ज़ करना चाहते हैं, तो docs/fuzzing_in_depth.md दस्तावेज़ पढ़ें!
संपर्क
प्रश्न? चिंताएं? बग रिपोर्ट?
- योगदानकर्ताओं तक पहुंचा जा सकता है (उदाहरण के लिए, एक issue बनाकर - लेकिन केवल AFL++ दोषों के लिए!): https://github.com/AFLplusplus/AFLplusplus.
- हमारे FAQ और सर्वोत्तम अभ्यास पर एक नज़र डालें।
- सर्वोत्तम: Fuzzing Zulip सर्वर से जुड़ें!
ब्रांच
निम्नलिखित ब्रांच मौजूद हैं:
- release: नवीनतम रिलीज़
- stable: AFL++ की स्थिर स्थिति - यह समय-समय पर dev से सिंक किया जाता है जब हम इसकी स्थिरता से संतुष्ट होते हैं। यह डिफ़ॉल्ट ब्रांच है।
- dev: AFL++ की विकास स्थिति
- ब्लीडिंग एज और आप एक चेकआउट पकड़ सकते हैं जो संकलित नहीं होता या जिसमें बग है। हम केवल 'dev' ब्रांच के लिए PR (पुल रिक्वेस्ट) स्वीकार करते हैं!
- (कोई अन्य): विशिष्ट सुविधाओं पर काम करने या नई कार्यक्षमता या परिवर्तनों के परीक्षण के लिए प्रयोगात्मक ब्रांच।
सहायता वांछित
"help wanted" टैग वाली हमारी issues सूची देखें। यह AFL++ को समर्थन और योगदान देने का आपका तरीका हो सकता है - इसे कुछ अच्छा करने के लिए विस्तारित करें। यदि आपके पास अन्य विचार हैं - बस एक issue बनाएं और इसे प्रस्तावित करें!
हर उस व्यक्ति के लिए जो योगदान देना चाहता है (और पुल रिक्वेस्ट भेजना चाहता है), कृपया जमा करने से पहले हमारे योगदान दिशानिर्देश पढ़ें।
विशेष धन्यवाद
मूल AFL और AFL++ के कई सुधार हमारे योगदानकर्ताओं के फीडबैक, बग रिपोर्ट या पैच के बिना संभव नहीं होते।
धन्यवाद! (पुल रिक्वेस्ट भेजने वाले लोगों के लिए - कृपया अपना नाम इस सूची में जोड़ें :-)
योगदानकर्ताओं की सूची
Jann Horn Hanno Boeck
Felix Groebert Jakub Wilk
Richard W. M. Jones Alexander Cherepanov
Tom Ritter Hovik Manucharyan
Sebastian Roschke Eberhard Mattes
Padraig Brady Ben Laurie
@dronesec Luca Barbato
Tobias Ospelt Thomas Jarosch
Martin Carpenter Mudge Zatko
Joe Zbiciak Ryan Govostes
Michael Rash William Robinet
Jonathan Gray Filipe Cabecinhas
Nico Weber Jodie Cunningham
Andrew Griffiths Parker Thompson
Jonathan Neuschaefer Tyler Nighswander
Ben Nagy Samir Aguiar
Aidan Thornton Aleksandar Nikolich
Sam Hakim Laszlo Szekeres
David A. Wheeler Turo Lamminen
Andreas Stieger Richard Godbee
Louis Dassy teor2345
Alex Moneger Dmitry Vyukov
Keegan McAllister Kostya Serebryany
Richo Healey Martijn Bogaard
rc0r Jonathan Foote
Christian Holler Dominique Pelle
Jacek Wielemborek Leo Barnes
Jeremy Barnes Jeff Trull
Guillaume Endignoux ilovezfs
Daniel Godas-Lopez Franjo Ivancic
Austin Seipp Daniel Komaromy
Daniel Binderman Jonathan Metzman
Vegard Nossum Jan Kneschke
Kurt Roeckx Marcel Boehme
Van-Thuan Pham Abhik Roychoudhury
Joshua J. Drake Toby Hutton
Rene Freingruber Sergey Davidoff
Sami Liedes Craig Young
Andrzej Jackowski Daniel Hodson
Nathan Voss Dominik Maier
Andrea Biondo Vincent Le Garrec
Khaled Yakdan Kuang-che Wu
Josephine Calliotte Konrad Welc
Thomas Rooijakkers David Carlier
Ruben ten Hove Joey Jiao
fuzzah @intrigus-lgtm
Yaakov Saxon Sergej Schumilo
Ziqiao Kong Ryan Berger
Sangjun Park Scott Guest
Fabian Keil @Jay-1409
Gergely Nagy
उद्धरण
यदि आप वैज्ञानिक कार्यों में AFL++ का उपयोग करते हैं, तो WOOT'20 में प्रस्तुत हमारे पेपर को उद्धृत करने पर विचार करें:
Andrea Fioraldi, Dominik Maier, Heiko Eißfeldt, and Marc Heuse. “AFL++: Combining incremental steps of fuzzing research”. In 14th USENIX Workshop on Offensive Technologies (WOOT 20). USENIX Association, Aug. 2020.
BibTeX
@inproceedings {AFLplusplus-Woot20,
author = {Andrea Fioraldi and Dominik Maier and Heiko Ei{\ss}feldt and Marc Heuse},
title = {{AFL++}: Combining Incremental Steps of Fuzzing Research},
booktitle = {14th {USENIX} Workshop on Offensive Technologies ({WOOT} 20)},
year = {2020},
publisher = {{USENIX} Association},
month = aug,
}
लाइसेंस
AFL++ GNU AGPL-3.0-or-later के अंतर्गत लाइसेंस प्राप्त है। संक्षेप में, आप AFL++ का उपयोग तीन तरीकों से कर सकते हैं:
-
मुफ्त, AGPL-3.0-or-later के अंतर्गत: डिफ़ॉल्ट। AFL++ का उपयोग, संशोधन और साझा करें; यदि आप एक संशोधित संस्करण को नेटवर्क सेवा के रूप में चलाते हैं, तो AGPL आपको अपने उपयोगकर्ताओं को संबंधित स्रोत प्रदान करने की आवश्यकता होती है। पूरा पाठ: LICENSE।
-
प्रति फ़ाइल, उसके हेडर में दिए गए लाइसेंस के अंतर्गत: परियोजना में
SPDX-License-Identifier: AGPL-3.0-or-laterऔरSPDX-License-Identifier: Apache-2.0दोनों के अंतर्गत फ़ाइलें शामिल हैं। हमेशा उस फ़ाइल का हेडर जांचें जिसका आप उपयोग करते हैं और वहां बताए गए लाइसेंस का पालन करें; Apache-2.0 चिह्नित फ़ाइलों का Apache-2.0 लाइसेंस के अंतर्गत व्यक्तिगत रूप से पुन: उपयोग किया जा सकता है। (कुछ बंडल की गई तृतीय-पक्ष फ़ाइलें अन्य लाइसेंस रखती हैं, उदाहरण के लिए GCC प्लगइन GPL-3.0-or-later के अंतर्गत और LLVM SanitizerCoverage पास Apache-2.0-WITH-LLVM-exception के अंतर्गत — प्रत्येक अपने स्वयं के SPDX पहचानकर्ता द्वारा चिह्नित)। ध्यान दें कि संयुक्तafl-fuzzबाइनरी में AGPL फ़ाइलें शामिल हैं, इसलिए प्रोग्राम समग्र रूप से AGPL है। -
वाणिज्यिक लाइसेंस: वैकल्पिक, उन संगठनों के लिए जो AGPL का पालन नहीं कर सकते या नहीं करना चाहते। परियोजना को कोई धन नहीं मिलता। इसके बजाय आप EUR 20,000 (€20,000) या तो EFF या CCC को दान करते हैं और [email protected] पर प्रमाण ईमेल करते हैं; आपका लाइसेंस तब दान की तारीख से एक वर्ष के लिए प्रभावी होता है (फिर से दान करके नवीकरणीय)। पूरी शर्तें: LICENSE.COMMERCIAL।
बंडल की गई तृतीय-पक्ष घटक (जैसे xxHash, t1ha, libFuzzer, सबमॉड्यूल) अपने स्वयं के लाइसेंस रखते हैं। पूर्ण सरल-भाषा अवलोकन के लिए, LICENSING.md देखें।