Abstract

This is a modern and edge-class, which is planned and organized to provide attendees with the most important concepts and techniques for finding vulnerability on programs. Therefore, the main core of this training aims to explain foundations and apply practical fuzzing techniques on Linux and Windows systems. No doubt, fuzzing is one of the most valuable resources for finding vulnerability to modern software as well as serving as a quite useful resource on the quality assurance process used for secure code development.

This training presents a solid foundation including necessary theory and intensive practical labs. At the start we will explain how to set up the necessary environment to attend the training, including details that are really time-consuming for students. The first part covers a few topics that bring important concepts about secure software like vulnerability classes, fuzzing types and fuzzer, including different techniques and approaches used for getting important results.

At the second part of the training, we will start the practical and detailed approach about how to perform fuzzing on Linux in white-box and block-box context using important fuzzers and strategies in several contexts, which includes explaining how to write simple harnesses. Afterwards, we offer a solid coverage on fuzzing on Windows using multiple fuzzers in many challenges scenarios also including how to write harnesses. Both Linux and Windows sections are really challenging and demand extra focus from attendees.

At the third part we focus on explaining details and nuances about snapshot fuzzing as well as understanding how to proceed to find a root cause of a vulnerability. As expected, the goal of the section is practical exercises.

This class will focus on Windows and Linux operating systems.

Attention: this is an intensive course.

Who Should Attend

This class was carefully planned and organized for professionals interested in learning about how to research for vulnerabilities in browsers as well as to learn involved concepts, foundations and required techniques over the process. Class attendees from different areas such as vulnerability research, reverse engineering, programming, exploit development, malware analysis, incident response, threat hunting, pen testing and cyber defense will enjoy and benefit from this training.

Key Learning Objectives

This class has the following goals:

  • Explain how to set up a fuzzing lab.
  • Master concepts about secure software and fuzzing.
  • Explain about different fuzzers types.
  • Explain most used fuzzing techniques and approaches.
  • Explain how to perform fuzzing Linux programs through white-box and black-box approaches.
  • Explain how to perform fuzzing against the Linux kernel.
  • Explain different techniques for instrumentation and code-coverage.
  • Explain how to perform fuzzing Windows programs through black-box approach.
  • Explain how to perform fuzzing using snapshots.

Prerequisite Knowledge

Class attendees should be able to:

  • Write, read and interpret short pieces of code in C/C+ for Windows and Linux.
  • Use debuggers and programs like IDA-Pro.
  • Programming skills may be especially useful for this course.
  • Reverse and analyze Windows binaries.

Lab Requirements

Students must prepare the following lab configuration:

  • Having VMware Workstation, Oracle VirtualBox or Microsoft Hyper-V installed on the system.
  • Two virtual machines running: Windows 11 x64 with 100 GB free filesystem and 4 GB RAM (minimum).
  • One virtual machine with Ubuntu 24.04.x with 100 GB free filesystem and 4 GB RAM (minimum).
  • One virtual machine with Ubuntu 22.04.x with 100 GB free filesystem and 4 GB RAM (minimum).
  • Visual Studio and SDK installed (with WinDbg) on both Windows machines.
  • Visual Studio Code on all virtual machines.
  • IDA Pro or IDA Free.

Additional lab instructions will be sent to students prior the class.

Summary of Training Topics

The list of sections presented in this class follows:

  • Introduction
  • Lab Setup
  • Fuzzing Configuration
  • Fuzzing and Related Concepts
  • Practical Fuzzing | Linux | part 01
  • Practical Fuzzing | Linux | part 02
  • Practical Fuzzing | Linux | part 03
  • Practical Fuzzing | Linux | part 04
  • Practical Fuzzing | Linux Kernel
  • Practical Fuzzing | Windows
  • Instrumentation and Code Coverage | Windows
  • Fuzzing Real Applications | Windows
  • Introduction to Snapshot Fuzzing | Windows

Note: Topics can be added, merged or removed without prior notice!