american fuzzy lop(AFL)

American Fuzzy Lop (AFL) 是一款安全性导向的模糊测试工具,它采用新颖的编译时插桩技术和遗传算法来自动发现针对目标二进制文件的新颖且有趣的测试案例。该工具能够显著提升被测试代码的功能覆盖范围,并生成紧凑的测试用例集合以供后续更复杂的测试使用。
摘要由CSDN通过智能技术生成

american fuzzy lop

American fuzzy lop is a security-oriented fuzzer that employs a novel type of compile-time instrumentation and genetic algorithms to automatically discover clean, interesting test cases that trigger new internal states in the targeted binary. This substantially improves the functional coverage for the fuzzed code. The compact synthesized corpora produced by the tool are also useful for seeding other, more labor- or resource-intensive testing regimes down the road.

 

Compared to other instrumented fuzzers, afl-fuzz is designed to be practical: it has modest performance overhead, uses a variety of highly effective fuzzing strategies and effort minimization tricks, requires essentially no configuration, and seamlessly handles complex, real-world use cases - say, common image parsing or file compression libraries.

The "sales pitch"

In a hurry? There are several fairly decent reasons to give afl-fuzz a try:

  • It is pretty sophisticated. It's an instrumentation-guided genetic fuzzer capable of synthesizing complex file semantics in a wide range of non-trivial targets, lessening the need for purpose-built, syntax-aware tools. It also comes with a unique crash explorer, a test case minimizer, a fault-triggering allocator, and a syntax analyzer - making it dead simple to evaluate the impact of crashing bugs.

  • It has street smarts. It is built around a range of carefully researched, high-gain test case preprocessing and fuzzing strategies rarely employed with comparable rigor in other fuzzing frameworks. As a result, it finds real bugs.

  • It is fast. Thanks to its low-level compile-time or binary-only instrumentation and other optimizations, the tool offers near-native or better-than-native fuzzing speeds against common real-world targets. The newly-added persistent mode allows for exceptionally fast fuzzing of many programs with the help of minimal code modifications, too.

  • It's rock solid. Compared to other instrumentation- or solver-based fuzzers, it has remarkably few gotchas and failure modes. It also comes with robust, user-friendly problem detection that guides you through any potential hiccups.

  • No tinkering required. In contrast to most other fuzzers, the tool requires essentially no guesswork or fine-tuning. Even if you wanted to, you will find virtually no knobs to fiddle with and no "fuzzing ratios" to dial in.

  • It's chainable to other tools. The fuzzer generates superior, compact test corpora that can serve as a seed for more specialized, slower, or labor-intensive processes and testing frameworks. It is also capable on on-the-fly corpus synchronization with any other software.

  • It sports a hip, retro-style UI. Just scroll back to the top of the page. Enough said.

     

Want to try it out? Check out the documentation or grab the source code right away; there is also a single-page quick start guide. Still unconvinced? Have a look at the technical whitepaper to see what makes AFL tick.

The bug-o-rama trophy case

Yeah, it finds bugs. I am focusing chiefly on development and have not been running the fuzzer at a scale, but here are some of the notable vulnerabilities and other uniquely interesting bugs that are attributable to AFL (in large part thanks to the work done by other users):

 

 

IJG jpeg 1libjpeg-turbo 1 2libpng 1
libtiff 1 2 3 4 5mozjpeg 1PHP 1 2 3 4 5 6 7 8
Mozilla Firefox 1 2 3 4Internet Explorer 1 2 3 4Apple Safari 1
Adobe Flash / PCRE 1 2 3 4 5 6 7sqlite 1 2 3 4...OpenSSL 1 2 3 4 5 6 7
LibreOffice 1 2 3 4poppler 1 2...freetype 1 2
GnuTLS 1GnuPG 1 2 3 4OpenSSH 1 2 3 4 5
PuTTY 1 2ntpd 1 2nginx 1 2 3
bash (post-Shellshock) 1 2tcpdump 1 2 3 4 5 6 7 8 9JavaScriptCore 1 2 3 4
pdfium 1 2ffmpeg 1 2 3 4 5libmatroska 1
libarchive 1 2 3 4 5 6 ...wireshark 1 2 3ImageMagick 1 2 3 4 5 6 7 8 9 ...
BIND 1 2 3 ...QEMU 1 2lcms 1
Oracle BerkeleyDB 1 2Android / libstagefright 1 2iOS / ImageIO 1
FLAC audio library 1 2libsndfile 1 2 3 4less / lesspipe 1 2 3
strings (+ related tools) 1 2 3 4 5 6 7file 1 2 3 4dpkg 1 2
rcs 1systemd-resolved 1 2libyaml 1
Info-Zip unzip 1 2libtasn1 1 2 ...OpenBSD pfctl 1
NetBSD bpf 1man & mandoc 1 2 3 4 5 ...IDA Pro [reported by authors]
clamav 1 2 3 4 5 6libxml2 1 2 4 5 6 7 8 9 ...glibc 1
clang / llvm 1 2 3 4 5 6 7 8 ...nasm 1 2ctags 1
mutt 1procmail 1fontconfig 1
pdksh 1 2Qt 1 2...wavpack 1 2 3 4
redis / lua-cmsgpack 1taglib 1 2 3privoxy 1 2 3
perl 1 2 3 4 5 6 7...libxmpradare2 1 2
SleuthKit 1fwknop [reported by author]X.Org 1 2
exifprobe 1jhead [?]capnproto 1
Xerces-C 1 2 3metacam 1djvulibre 1
exiv 1 2Linux btrfs 1 2 3 4 6 7 8Knot DNS 1
curl 1 2 3wpa_supplicant 1libde265 [reported by author]
dnsmasq 1libbpg (1)lame 1 2 3 4 5 6
libwmf 1uudecode 1MuPDF 1 2 3 4
imlib2 1 2 3 4libraw 1libbson 1
libsass 1yara 1 2 3 4W3C tidy-html5 1
VLC 1 2FreeBSD syscons 1 2 3John the Ripper 1 2
screen 1 2 3tmux 1 2mosh 1
UPX 1indent 1openjpeg 1 2
MMIX 1OpenMPT 1 2rxvt 1 2
dhcpcd 1Mozilla NSS 1Nettle 1
mbed TLS 1Linux netlink 1Linux ext4 1
Linux xfs 1botan 1expat 1 2
Adobe Reader 1libav 1libical 1
OpenBSD kernel 1collectd 1libidn 1 2
MatrixSSL 1jasper 1 2 3 4 5 6 7 ...MaraDNS 1
w3m 1 2 3 4Xen 1OpenH232 1...
irssi 1 2 3cmark 1OpenCV 1
Malheur 1gstreamer 1...Tor 1
gdk-pixbuf 1audiofile 1 2 3 4 5 6 ...zstd 1
lz4 1stb 1cJSON 1
libpcre 1 2 3MySQL 1gnulib 1
openexr 1libmad 1 2ettercap 1
lrzip 1 2 3freetds 1...Asterisk 1
ytnef 1 2 3 4 ...raptor 1mpg123 1
Apache httpd 1exempi 1 2libgmime 1 2 3
pev 1 2 3 4Linux mem mgmt 1sleuthkit 1
Mongoose OS 1iOS kernel 1 

On top of this, the fuzzer helped make countless non-security improvements to core tools (v8sedawkmakem4yaccPHPImageMagickfreedesktop.orgpatchlibtasn1libvorbiszshluaninjarubybusyboxgcryptvimTorpopplerlibopusBSD shgccqemuw3mzshdropbearlibtorrentgitrustgravitye2fsprogs, etc); found security issues in all sorts of less-widespread software (e.g., parrotlodepngjson-glibcabextractlibmspackqprintgpsbabeldmg2imgantiwordarjunrarunacezoorziplrziplibiso*libttaduktapesplintzpaqassimpcppcheckfasmcatdocpngcrushcmarkp7ziplibjbig2aaphotot1utilsapngoptsqlparsermdplibtinyxmlfreexlbgpparsertestdiskphotorecbtcdgumbochaiscriptteseqcolcrtpttbbscapstonedex2oatpillowelftoolchainaribasuniversal-ctagsuriparserjqlhaxdeltagnuplotlibwpdteseqcimglibibertypolicycoreutilslibsemanagerenoisemetapixelopenclonemp3spltpodofoglslangUEFIToollibcborlldpdpngquantmuparserxmochilopyhoconsysdigOverpass-APIfish-shellgumbo-parsermapbox-gl-nativerapidjsonlibjsonFLIFMultiMarkdownastylepax-utilszziplibPyPDFspiffingapkpgpdumpicoutilsmsitoolsdosfstoolsschocoMojoShader, and so on); and is likely responsible for quite a few other things that weren't publicly attributed to the tool.

Download & other useful links

Here's a collection of useful links related to afl-fuzz:

You can follow the author on Twitter to stay in the loop on major improvements to AFL and related news.

The tool is confirmed to work on x86 Linux, OpenBSD, FreeBSD, and NetBSD, both 32- and 64-bit. It should also work on MacOS X and Solaris, although with some constraints. It supports programs written in C, C++, or Objective C, compiled with either gcc or clang. On Linux, the optional QEMU mode allows black-box binaries to be fuzzed, too.

There are variants and derivatives of AFL that allow you to fuzz PythonGoRustOCaml, GCJ Java, kernel syscalls, or even entire VMs. There is also a closely inspired in-process fuzzer baked into LLVM and a a fork that runs on Windows. Finally, AFL is one of the fuzzing engines behind OSS-Fuzz.

Oh - if you have gnuplot installed, you can use afl-plot to get pretty progress graphs.

Contact and mailing list

To send bug reports, feature requests, or chocolate, simply drop a mail to lcamtuf@coredump.cx.

If you'd like to compare notes with other users or get notified about major new features, you may also want to subscribe to our mailing list. To join, simply send an empty mail to afl-users+subscribe@googlegroups.com.

Your lucky number is: 20197180

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值