25 Years of Program Analysis
25 Years of Program Analysis
Summary
### The Core Disciplines of Program Analysis At 04:37, Yan Shoshitaishvili introduces the three foundational disciplines of program analysis: static analysis, dynamic analysis, and symbolic/abstract execution. Tracing software flaws back to Charles Babbage's 1830s Analytical Engine (at 06:10) and early computing history, he notes that automated vulnerability detection has evolved into an essential discipline to counter escalating software complexity and vulnerability density.
### The Fundamental Hurdles: Reachability, Specification, and State Space At 09:11 and 10:41, Shoshitaishvili outlines the persistent theoretical and practical bottlenecks of program analysis. He breaks down the reachability problem—where an analyst must determine if concrete inputs can navigate through complex logic to reach a vulnerable state—and the specification problem, which challenges tools to define what constitutes erroneous behavior without formal ground-truth specifications. While static analysis covers broad codebases rapidly, it suffers from high false-positive alert rates (discussed around 12:11).
### Symbolic Execution and SMT Solving Mechanics At 19:44 and 22:48, Shoshitaishvili details the inner workings of symbolic execution engines, including angr. Rather than passing concrete integers or strings into a program, inputs are treated as symbolic variables that accumulate mathematical constraints across conditional branches. At 25:49, he demonstrates constraint accumulation along diverging paths (`username == "service"` vs. `username != "service"`), which are solved using SMT engines like Z3. However, at 27:19, he illustrates how loops, path explosions, and environmental dependencies often limit pure symbolic execution on real-world software.
### The Evolution of Fuzzing and Dynamic Analysis At 31:54, Shoshitaishvili charts dynamic analysis from Barton Miller's 1990s random fuzz testing to modern coverage-guided fuzzers like AFL. While fuzzing excels at executing millions of concrete test cases per second, it frequently stalls when encountering strict magic values, cryptographic hashes, or complex multi-byte checks (explained around 34:59).
### Empirical Insights from the DARPA Cyber Grand Challenge At 41:10 and 42:40, Shoshitaishvili presents benchmark data from the DARPA Cyber Grand Challenge (CGC), the world's first fully autonomous cyber hacking competition. Across the CGC dataset, pure symbolic execution found only 9 vulnerabilities, whereas coverage fuzzers discovered 106. However, hybrid concolic systems—such as Shellphish's "Driller," which leverages AFL for broad state exploration and angr's symbolic solver to bypass narrow conditional checks—demonstrated superior overall bug-finding capabilities. At 47:13, he illustrates how hybrid systems revive stalled fuzzer coverage curves, shaping the modern paradigm of automated binary analysis.
(AI summary — Gemini 3.8 Flash)
Related talks
Main Stage·35 min
Ji'an Zhou · Lishuo Song
Discloses multiple memory corruption and deserialization vulnerabilities in PyTorch's TorchScript JIT engine that allow arbitrary remote code execution via malicious AI models.
AppSec Village·43 min
YanYan Wang
Automate Pen Testing in Dockerized CI CD Environment
AppSec Village·30 min
Rafael Santos
huskyCI Finding Flaws in CI Before Deploying Them


