Instructors:Richard Johnson
Dates: May 30- June 2 2022
Location: Hilton Double Tree
Capacity: 24 Seats
The Advanced Fuzzing and Crash Analysis training class is designed to introduce students to the best tools and technology available for automating vulnerability discovery and crash triage with a focus on delivering a practical approach to applying this technology in real deployments.
Through an applied understanding of introductory program analysis and binary translation, techniques for finding various bug classes and methods for improved crash debugging will be discussed. We will take a deep dive into fuzzing, covering all aspects of this practical approach to finding bugs. As the most approachable and versatile of the available tools, the student will apply various fuzzing techniques to several real-world pieces of software. Students will learn strategies for analyzing attack surface, writing grammars, and generating effective corpus. We will explore in detail the latest innovations such as harnessing code coverage for guided evolutionary fuzzing and symbolic reasoning for concolic fuzzing.
We approach crash analysis through the lens of scriptable debuggers and program analysis. We will apply tools like reverse debugging and memory debuggers to assist in interactively diagnosing root cause of crashes. Then we will leverage the power of dynamic taint tracking and graph slicing to help isolate the path of user controlled input in the program and identify the exact input bytes influencing a crash. Lastly, we will look at possible ways to determine the impact of a vulnerability.
This class will focus on x86/x64 architecture and target file parsers, network parsers and browsers on both Windows and Linux environments.
This class is meant for professional developers or security researchers looking to add an automation component to their software security analysis. Students wanting to learn a programmatic and tool driven approach to analyzing software vulnerabilities and crash triage will benefit from this course.
Learn an effective strategy for using the latest tools & technology to discover vulnerabilities
Master the latest fuzzing techniques for file, network, browser fuzzing
Learn grammar fuzzing, evolutionary fuzzing, inmemory fuzzing, and symbolic fuzzing
Best practices for corpus generation, fuzzer deployment, and targeting
Leverage dynamic binary translation for efficient tracing and deep program inspection
Learn how to leverage time travel debugging for crash triage on Linux and Windows
Introduction to intermediate languages for program analysis
Apply powerful techniques like taint analysis and graph slicing towards crash analysis
Analysis of generational and mutational fuzzing
- Attack surface analysis
- Effective mutation engines
- Effective corpus generation
- Protocol and file format grammars
- Crash detection
Fuzzing file and network parsers with coverage guided fuzzing
- Fuzz any Ubuntu/Debian package with AFL
- Modifying targets and writing harnesses with LibFuzzer
- Fuzzing closed source parsers with QEMU and Dyninst
Best practices for high performance fuzzing
- System configuration
- Corpus generation techniques
- Cross-fuzzing difficult parsers
Dynamic Binary Translation for Fuzzing and Triage
- Effectively instrument Linux and Windows with binary translation
- Introduction to Valgrind, Dr. Memory, and Address Sanitizer
- Introduction to PIN, DynamoRIO, and Dyninst internals
- Identifying hook locations with Debuggers and DBI
- Fuzzing kernels and other architectures with QEMU
Fuzzing parsers with WinAFL
- Optimizing harnesses for exported APIs
- Hooking closed source command line applications
- Deep hooks into private library functions with global state
- Fuzzing internal data streams in complex OLE objects
Fuzzing browsers with evolutionary grammar fuzzing
- Understanding grammars and object models
- Fuzzing object models with dynamic grammar fuzzing
- Improving grammar fuzzers with feedback metrics
Time Travel Debugging
- Introduction to time travel debugging
- Crash analysis with reverse debugging on Linux
- Crash analysis with reverse debugging on Windows
Taint assisted root cause analysis
- Introduction to dynamic taint analysis
- Taint slicing for root cause analysis
Symbolic and Concolic Execution
- Introduction to constraint solving
- Concolic execution for test case generation
- Hybrid fuzzing with concolic execution
PEREQUISITES KNOWLEDGE
Students should be prepared to tackle challenging and diverse subject matter and be comfortable writing functions in C/C++ and python to complete exercises involving completing plugins for the discussed platforms. Attendees should have basic experience with debugging native x86/x64 memory corruption vulnerabilities on Linux or Windows.
MINIMUM SOFTWARE TO INSTALL
Students should have the latest VMware Player, Workstation, or Fusion working on their machine
Richard Johnson is a computer security specialist with a focus on software vulnerability analysis. Currently the Director of Security Research for Oracle Cloud Infrastructure and owner of Fuzzing IO, a research and development company offering professional training services. Prior to Oracle, he lead the security research efforts for the Talos Security Intelligence and Research Group at Cisco Systems, Inc., Richard offers over 15 years of professional expertise and leadership in the information security industry. Current responsibilities include defining and executing on a proactive offensive security research strategy for a world leading cloud infrastructure and development team at Oracle. This work encompasses all parts of the cloud stack including hardware validation on third party components; zeroday research on hypervisors, kernels, and thirdparty code; and deep dives on the proprietary services offered to end users. Previous endeavors focused on the research and development of advanced fuzzing and crash analysis technologies facilitating the automation of the vulnerability triage and discovery process. Richard has delivered training and presented annually at toptier industry conferences worldwide for over a decade and is an invited speaker and trainer at several leading events. Richard was also cofounder of the Uninformed Journal and is on the committee for the USENIX Workshop on Offensive Technologies.
Click here to register.