标签(空格分隔): Paper
将数千个错误注入八个程序中
注入的错误为了便于利用需要具备以下几个特点:
- 快且多
- 现实的
- 可证的
- 少数触发
已有的工作都不太友好,最广泛的努力来自 NIST
整体流程:
- 寻找 DUA 位置
- 查找潜在的攻击点
- 向程序添加代码
DUA 为 0,即对控制流无影响,低 TCN、低 liveness 的好漏洞
两种注入例子:
- 读溢出
- 除零错误
编译目标版本,包含污点分析 -> 运行插桩后程序,收集污点分析信息 -> 发现 DUA 与攻击点 -> 源码重编译并注入错误
依赖于 PANDA 平台,LAVA 利用的只是 PANDA 的 fast、robust 动态污点分析插件
PANDA 是基于 QEMU 的全系统模拟器,有三处重要的改进:
- 引入了确定性记录和重放,可用于不能经常在线执行的迭代和昂贵的分析(比如污点分析)
- 拥有简单强大的插件架构,可以建立强大的分析插件,甚至可以在一个插件的基础上构建另一个
- 集成 S2E,将 QEMU 中间语言给 LLVM 进行分析
该 LLVM 包含 QEMU 支持的模拟版本中的每条 x86 指令
文章还简单讲了 PANDA 的处理过程,详细可以看 PANDA 的论文
如何运行程序? 我们加载程序作为一个虚拟 CD 到 PANDA 虚拟机中,并通过虚拟串行端口发送命令到 QEMU 以执行程序
可引用源码级信息
在两百万行代码中注入了 4000 个 Bug
两种类型的溢出且为 4 字节 DUA:
- 2 字节是否溢出,2 字节溢出多少
- 范围内溢出
形成了 LAVA-M 数据集,包含 base64、md5sum、uniq、who 四个程序
SES 不能找到相同攻击点的多个 Bug,Fuzzer 和 SES 发现的 Bug 几乎没有重叠
当前只基于 C 语言注入了溢出错误,可能很多 Bug 无法通过污点分析来注入,过程中也发现引入了非预期的问题
很快会提供注入逻辑漏洞的能力