本文是全世界第一篇关于自动化利用生成(Automatic Exploit Generation)的论文。实现了如下workflow:
从源代码出发,自动发现漏洞 → 判断是否可利用 → 自动生成可用的控制流劫持 exploit
创新点:
把漏洞利用建模成了形式化问题——漏洞+利用:
Π_bug:程序进入不安全状态(如越界写、格式化字符串)
Π_exploit:该不安全状态可被用来劫持控制流(如覆盖返回地址并跳转到 shellcode)
最大贡献:
Preconditioned Symbolic Execution
在符号执行前加入“可利用性相关的预条件”,只探索“可能 exploitable”的路径
极大减少状态空间,是 AEG 能跑真实程序的关键原因
路径搜索优先级:
- 有小bug的路径先考虑。
- 循环跑满
系统整体流程:
源码→ LLVM IR + 二进制(用来算布局等)→ 符号执行找到bug → 动态二进制分析(漏洞buffer地址,返回地址,栈内容)→ 自动构造约束(ret2stack/libc/format string)→ 约束求解 + 实际验证
缺点:
只能处理传统漏洞:栈溢出,格式化字符串利用,本地/远程exploit,自动选择shellcode,NOP sled, 栈修复。但不处理ASLR,DEP/NX,PIE / CFI等现代化防护。