Program Analysis for Vulnerability Discovery
Sophia d’Antoine & Jordan Wiens

Dates

6th-9th of May 2024

Capacity

20

Price

4,250€

Schedule

This four-day course trains students to do sophisticated program analysis using Binary Ninja and the Binary Ninja Python API for the purpose of vulnerability research with the goal of improving auditing processes, improving their ability to identify interesting code paths, and encoding bug primitives.

In the class, students will learn Binary Ninja inside and out by leveraging the Binary Ninja plugin architecture to identify vulnerabilities in a machine architecture-independent way. After taking this course students will have experience working with Binary Ninja to create powerful program analysis tools which can be used across architectures.

Topics Covered

  • Using the UI, Reverse Engineering, Design Philosophy, Core Architecture (BN core arch/design)
  • BV plugin development, Architecture plugin
  • Normalization, IL Survey, BNIL ILs
  • Undecidability, Program Correctness, Correctness with pointers, Formal Methods, Useful Binja Features, Jump Tables, SSA
  • PHI nodes, Dominance Frontiers, and Data Sensitive Analysis
  • Type Analysis, Constraint Solving, and Records, Lattice Theory, Sign Analysis, and Abstract Interpretation
  • Constant Propagation, Fixed-Point Algorithms, Abusing Optimizations, and Flow-Sensitive Type Analysis
  • Pointer Analysis, Abstract Interpretation, Interprocedural Analysis, Batch processing with Binja
  • Pointers and Heap analysis
  • Have a thorough grasp on the binary ninja python API
  • Familiarity with many program analysis concepts and common challenges
  • The ability to write sophisticated program analysis plugins unassisted
  • An understanding of vulnerability primitives and methods of discovery
  • A virtual machine running Ubuntu 20.04 or a OS which can run Binary Ninja  (Supported Platforms)
  • Python 3.8+
  • Familiarity with basic vulnerability classes such as stack-based buffer overflows, type confusion, sign extension vulnerabilities, etc.
  • Basic to intermediate Python experience highly recommended.
  • Temporary Personal Binary Ninja licenses will be provided but if you are purchasing one we recommend the Commercial license as it provides the headless API

Learning Objectives

  • Have a thorough grasp on the binary ninja python API
  • Familiarity with many program analysis concepts and common challenges
  • The ability to write sophisticated program analysis plugins unassisted
  • An understanding of vulnerability primitives and methods of discovery
  • A virtual machine running Ubuntu 20.04 or a OS which can run Binary Ninja  (Supported Platforms)
  • Python 3.8+
  • Familiarity with basic vulnerability classes such as stack-based buffer overflows, type confusion, sign extension vulnerabilities, etc.
  • Basic to intermediate Python experience highly recommended.
  • Temporary Personal Binary Ninja licenses will be provided but if you are purchasing one we recommend the Commercial license as it provides the headless API

Required Materials

  • A virtual machine running Ubuntu 20.04 or a OS which can run Binary Ninja  (Supported Platforms)
  • Python 3.8+
  • Familiarity with basic vulnerability classes such as stack-based buffer overflows, type confusion, sign extension vulnerabilities, etc.
  • Basic to intermediate Python experience highly recommended.
  • Temporary Personal Binary Ninja licenses will be provided but if you are purchasing one we recommend the Commercial license as it provides the headless API

Schedule

Each day will run from 9AM to 6PM . There are two lectures each day, each lecture will be applied to two main lab exercises, an easy and hard exercise, with homework that will be reviewed the following day. 

Course agenda

  • Day 1
    • Time for 1:1 questions and introductions
    • Using the UI, Reverse Engineering, Design Philosophy, Core Architecture (BN core arch/design)
    • Finish Core Architecture (BN core arch/design), BV plugin development, Architecture plugin
    • Time for 1:1 questions and assistance on labs and homework
  • Day 2
    • Time for 1:1 questions and assistance on labs and homework
    • Normalization, IL Survey, BNIL ILs, Undecidability, Program Correctness
    • Undecidability, Program Correctness, Correctness with pointers, Formal Methods, Useful Binja Features,
    • Jump Tables, SSA
    • Time for 1:1 questions and assistance on labs and homework
  • Day 3
    • Time for 1:1 questions and assistance on labs and homework
    • PHI nodes, Dominance Frontiers, and Data Sensitive Analysis Exercises
    • Type Analysis, Constraint Solving, and Records, Lattice Theory, Sign Analysis, and Abstract Interpretation
    • Time for 1:1 questions and assistance on labs and homework
  • Day 4
    • Time for 1:1 questions and assistance on labs and homework
    • Constant Propagation, Fixed-Point Algorithms, Abusing Optimizations, and Flow-Sensitive Type Analysis
    • Pointer Analysis, Abstract Interpretation, Interprocedural Analysis, Batch processing with Binary Ninja
    • Time for 1:1 questions and assistance on labs and homework
  • Bonus Lectures
    • TBD Lecture Heap Analysis, Large Exercise, Pointers, VirtualBox
    • TBD Lecture Final Topics, Class Chosen Topic, Completing Final Exercises

Bio

Sophia d’Antoine is the founder of Margin Research, focusing on vulnerability research and program analysis. She has spoken at more than thirteen global security conferences worldwide including RECon Montreal, Blackhat, and CanSecWest on topics from automated exploitation, program analysis, machine learning, and hardware hacking. Her keynotes have included topics such as exploiting hardware CPU optimizations. Currently, She sits on the program committee for Usenix WiSec and have been on multiple peer review panels in the past. In the past, she has worked extensively on embedded devices and other unique architectures. Additionally, Sophia is the "Hacker in Residence" at NYU and enjoy assisting in hosting CTFs and other hacking competitions.

Her publications on automated exploitation, programmatic vulnerability discovery, and security focused compiler development are listed below. The basis for this is effort has been through static analysis, LLVM, and binary lifters, such as Binary Ninja.

Jordan Wiens used to play a lot of CTF, even winning some like DEF CON a handful of times but then they got hard and now he mostly likes to talk about them and make challenges. Professionally, he's been a network security engineer, vulnerability researcher, engineering manager, and for the last five years small business founder with two co-founders of Vector 35, makers of Binary Ninja.

He's given trainings over two decades across the academic, government, and commercial sectors on reverse engineering and vulnerability research and has presented at conferences like DEF CON, BlueHat, ShmooCon, Insomni'hack, SAS, and many others.

Limited Seats - Remember to reserve your ticket!

register now