V-Fuzz: Vulnerability-Oriented Evolutionary Fuzzing论文分析

V-Fuzz: Vulnerability-Oriented Evolutionary Fuzzing论文分析

  • 针对二进制程序,也可以用于开源软件(需要将其编译成二进制程序)
  • 类似于定向fuzz–不是定向fuzz,而是找到目标辅助种子选择
  • V-Fuzz结合了漏洞预测和进化fuzz的优势,同时减小了劣势(由于漏洞预测模型不是精确的,所以对脆弱代码使用大权重,对其他代码使用较小的权重,以防止模型出现错误预测时导致误报)
  • 实质上使用漏洞预测模型的结果来优化seed file的选择

2、背景

2.2二进制程序漏洞预测

使用深度学习模型:

  • 因为使用静态分析工具的话,(1)只能针对开源软件,(2)会有较高的误报率和漏报率。

如何表示binary

  • 表示binary program–使用汇编语言,分析程序的CFG(控制流图,包含丰富的语义和结构信息);
  • 为了便于训练,需要表示成向量–使用Attributed Control Flow Graph (ACFG) [Scalable graph-based bug search for firmware images];

合适的分析粒度

  • 不能太粗(不够准确)也不能太细(很难提取),最终选择函数粒度进行分析;

合适的神经网络模型

  • graph embedding network图嵌入网络
  • 已经有paper将该网络应用于提取结构化数据的有效特征和检测binary代码相似性,因此选择该种网络模型,并进行适当修改,以适应本文的工作目标。

discovre: Efficient cross-architecture identification of bugs in binary code(2016NDSS)

3、V-FUZZ: SYSTEM OVERVIEW

V-Fuzz整体框架

V-Fuzz整体框架

漏洞预测模型
  • 输出一个binary中可能存在漏洞的函数,并给出这个函数存在漏洞的概率。
训练数据:
  • 标签分别设置为secure和vulnerable;
  • 可以将标签设置更加细致,以识别不同类型的漏洞。-----可以改进的地方
漏洞导向的进化fuzzer
  • 使用vulnerable概率表示有漏洞的概率。
  • 对于每个有vulnerable 概率的函数,V-Fuzz将会给函数中的每个基本块设置一个**SVS(Static Vulnerable Score)**来表示基本块的重要性。
  • V-Fuzz利用进化算法生成正确的测试用例。对每个执行的输入,给定一个fitness score,即执行路径上所有基本块的SVS之和。
  • 然后选取具有较高的fitness score或产生crash的输入作为新的种子输入
目前分析–问题
  • 相当于对binary程序分析一次,得到可能存在漏洞的函数,并为其中的基本块标注SVS;
  • 然后使用基本块的SVS和crash作为选取新种子的标准;
  • 变异策略?? – 类似AFL

4、漏洞预测

4.1问题定义
  • 预测模型为M
  • 程序中的函数集合为F = {f1,f2, …, fτ}
  • 函数集合F中的每个函数 fi 作为M的输入,对应的输出为 fi 的vulnerable probability – PVfi

P V f i = M ( f i ) PVfi = M(fi) PVfi=M(fi)

4.2数据预处理

---- 将binary program转换成数值向量<

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值