PACSEC 2021 DOJO

Fuzzing Source-Code and Binary-only Targets like a Pro

 

Instructor: Marc “van Hauser” Heuse

Course Synopsis

This authoritative course from one of the maintainers of one of the performance leading fuzzing tools, AFL++, will walk you through the maze of options, toolsets, and tradeoffs in building good, time efficient, fuzzing campaigns. For modern fault location it can take a blend of tools, fuzzers, and techniques to hit the best utilization of your fuzzing hardware resources - and Marc, who has been testing and trying them all for years, can save many a misstep by showing you what not to worry about, as well as what’s important.

Marc will walk you though the whole fuzzing campaign process, relating his experience and saving you tremendous amounts of time and research needed to optimally set up targets, instrumenting, and choosing the right tools to utilize - so that you can most efficiently and thoroughly analyze your targets, and optimize the numbers of results you get from your fuzzing tool mix, as well as the quality of results. His course is a complete and thorough walk through the large array of tools in the fuzzer space - a mix that constantly changes. Marc can keep you at the leading edge of that constantly moving target of fuzzing state of the art.

He starts out from the beginning, by covering choices available in instrumenting your target, and then walks you though the kinds of attributes and choices you can make to set up your fuzzing tool mix depending on your target code/system properties/attributes. His course will show you the strengths and weaknesses of the whole spectrum of fuzzing tools - and teach you where each one is most efficiently applied, as well as where they are weakest.

He covers how to operationally maximize code coverage during fuzzing for many different kinds of code, and also saves you a tremendous amount of learning curve, in selecting, then setting up the individual utilities, parameters, configurations and interfaces by shooting straight to the configuration options that matter most and documenting best practices from his extensive experience - as well as saving you setup time by providing pre-constructed tool containers for the most popular and powerful tools for the lab exercises and later use - saving you weeks of dependency frustration, build hassles, and trial and error. This lets you rapidly get to your actual objective - fuzzing your target and identifying crashes, and more importantly, exploitable crashes. Marc’s course takes you through the whole fuzzing process completely end to end with practical exercises as well as explanations all the way to actionable, exploitable, vulnerabilities..

The hands on labs let you bring in your own fuzzing target which you can test and optimize in the labs with the benefit of counseling and coaching from Marc’s many years of encyclopedic fuzzing technology knowledge, to make sure you get immediate value from this training for your current research objective..

This course is valuable use of time, and the small class size provides plenty of opportunity for one-on-one consulting and coaching from an industry luminary. It is an essential course for any infosec professional currently using, or looking to use fuzzers, and It’s the fastest way to power up your fuzzer capabilities to world class level.

Marc “van Hauser” Heuse

Marc “van Hauser” Heuse started with his security research in 1993 even before finishing school. He is well known for being the founder of the security research group The Hacker’s Choice (www.thc.org) and for his security tools like hydra, thc-ipv6, THC-SCAN, SuSEfirewall and many others. In his career he was team leader and manager at KPMG and n.runs and for over 10 years he is now working as an independent security researcher now, focusing on automotive penetration testing and other embedded platforms. Currently he is working using binary instrumentation and fuzzing for his automotive security projects and research and is the co-author of the blackbox feedback fuzzing tool afl-dyninst and the afl follow-up project afl++.

 

Course Schedule

The next scheduling of this dojo has yet to be decided.

 

Course Abstract

This training teaches who to effectively fuzz source-code and binary-only targets on Linux with afl++, libfuzzer and honggfuzz in effective fuzzing campaigns.

 

Course Pre-requisites

Students must have a good experience with Linux and be comfortable coding in C/C++, basic debugging and know how to use docker.

 

Course Learning Objectives

The goal of this class it to teach performing software security fuzzing (black box, grey box, white box) for finding security vulnerabilities through fuzzing.


The focus platform is on Linux x86_x64 - however Linux ARM/ ARM64/ Mips/..Mac OS, *BSD, and Windows will be handled as well.

We will cover - supported with many exercises):

  • Learn to fuzz with the best fuzzers: afl++, libfuzzer, honggfuzz

  • My source code does not compile with clang/llvm - now what?

  • Instrumenting source code targets for fuzzing

  • How to create effective fuzzing harnesses

  • What is the fuzzer covering, what is uncovered - and what is impossible to reach for the fuzzer? Plus solutions.

  • How to fuzz binary-only targets by dynamic instrumentation, emulation and rewriting

  • How to fuzz structured inputs with libprotobuf

  • How to fuzz targets that process inputs that have a grammar

  • How to write a custom mutators

  • When to write your own fuzzer

  • How to effective set up an effective fuzzing campaign - single and multi machine with 16-256 cores, incl system configuration and use of sanitizers

  • Which effective support fuzzers to combine in the fuzzing campaign like symcc, aflsmart, etc. and how to integrate them

  • How to monitor and manage a fuzzing campaign

  • Triaging crashes - deduplication, minimization and bruteforcing interesting crashes

  • How to integrate fuzzing in a CI

  • How to fuzz complex targets by partial instrumentation, mocking and disabling features, etc.

    Students are highly encouraged to bring their own fuzzing projects to the class - being it your own fuzzer or a complex fuzzing target that you are struggling with.

 

Course Agenda

  • Day 1 - Introduction to Fuzzing, fuzzing with afl++, triaging crashes

  • Day 2 - Fuzzing with libfuzzer and honggfuzz, creating fuzzing harnesses

  • Day 3 - Strategies for fuzzing binary-only targets, Emulating and Rewriting binaries

  • Day 4 - Fuzzing grammar and structures, CI integration, Running successful fuzzing campaigns ... plus any open questions

 

Hardware Requirements

IT is highly recommended to have and 16GB RAM and 50GB disk space free.

 

Software Requirements

Students must have access to a Linux installation (VM or native, root
privileges, Kali Linux, Debian or Ubuntu highly recommended) with docker
installed.

Previous
Previous

Hunting the Adversary - Developing and Using Cyber Threat Intelligence

Next
Next

Windows Kernel Exploitation Foundation