Skip to content

Latest commit

 

History

History
81 lines (46 loc) · 2.26 KB

LAVA_ Large-scale Automated Vulnerability Addition.md

File metadata and controls

81 lines (46 loc) · 2.26 KB

LAVA: Large-scale Automated Vulnerability Addition

标签(空格分隔): Paper


工作简介

将数千个错误注入八个程序中

工作背景

注入的错误为了便于利用需要具备以下几个特点:

  • 快且多
  • 现实的
  • 可证的
  • 少数触发

已有的工作都不太友好,最广泛的努力来自 NIST

工作设计

执行架构 image_1c2hbe86o11nf18nka359hq16jn9.png-21.4kB

整体流程:

  1. 寻找 DUA 位置
  2. 查找潜在的攻击点
  3. 向程序添加代码

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 无法通过污点分析来注入,过程中也发现引入了非预期的问题

很快会提供注入逻辑漏洞的能力