作者:Stefan Nagy(hawkeye的同一作者),Anh Nguyen-Tuong,Jason D. Hiser,Jack W. Davidson,Matthew Hicks
出处:CCS‘21

背景

  相比于源码插桩,二进制层面插桩来获取代码覆盖率效率很低。一些研究提出coverage-guided tracing(CGT)概念,也就是只有新的代码被覆盖的时候才收集代码覆盖率。然而,作者调查了27个fuzzer发现CGT只支持基本块覆盖,但是大部分的fuzzers依赖更细粒度的代码覆盖率指标的。也就是说这个概念很好但是没有被用起来。所以这篇论文将CGT应用到edge和hit count层面的代码覆盖率获取,解决了其中遇到的挑战和难题。
  简单介绍一下CGT的原理,如下图所示,给定一个目标程序,CGT会在这个程序的每个基本块周围插桩,插入一个中断。也就是说一旦输入覆盖了这个基本块,程序就会中断,这时候CGT把已覆盖的这条路径上的中断去掉。那么如果一个输入没有覆盖新的基本块,它运行的时候就不会中断,不需要获取trace。CGT在runtime overhead方面仅0.3%,但是能够提升5-6倍的fuzzing throughput。

方法设计

  作者提出了两个策略来实现edge和hit count层面的CGT。对于edge提出一个coverage-jump mistargeting,对hit count提出unrolling。

coverage-jump mistargeting

  相比于基本块层面的代码覆盖率,edge会更细粒度。比如有三个基本块A,B,C。分支A->B表示从A跳转到B,B->C同理。从基本模块角度A->B、B->C表示基本块A,B,C都被覆盖了,这时候如果有A->C它便不会认为是新的程序状态。但是edge层面就可以感知这一变化。
  针对这一问题,LLVM的SanitizerCoverage这个工具他会为这样的分支创建一个假的基本块,比如A->C这种情况它就会生成一个D,然后A->C就会转化成A->D,D->C。这样就会适配基本块层面代码覆盖率获取。然而,这么做会带来很大的开销。
  作者通过实验发现89%的类似A->C的分支是conditional jump,这时候edge的目的地址是在指令的操作数里面的,可以对其进行静态地修改去转向其它的edge,作者把这个操作叫“mistarget”。具体来说,x86中跳转指令有三种:short, near和far。前两个是同一个段内的跳转,涉及到PC以及偏移。far是段间的跳转通过绝对地址。

具体做法

把jump的目的地址改成触发中断。这样做不需要引入新的基本块。

  1. Embedded interrupts:让jump指向嵌入的中断,比如[00 CC]。这种方法的一个关键挑战(和瓶颈)是扫描跳转的位移范围内的字节空间有没有能利用的中断。
  2. Zero-address interrupts:让jump跳转到0x00,这个有一个限制是jump要有32-bit的替换空间,但大多数x86-64的分支都符合这一条件。

unrolling

  对于hit count,AFL-style的工具会划分8个区间0-1,2,3,4-7,8-15,16-31,32-127,128+。深挖的话,loops类型的代码是容易有hit count的变化的,但事实上我们只需要知道loop了几次并不需要监控每个基本块被覆盖的次数。

具体做法

  如下图所示,根据hit count的区间,在每个loop头加一些条件判断,每个条件判断会转到一个中断。

方法实现

  工具名称叫做HEXCITE,由三部分组成:二进制生成模块、控制流映射模块、模糊测试模块。

  1. 二进制生成模块:HEXCITE会生成两个二进制程序,一个是在每个基本快上加了中断的Oracle,另一个是tracer用来获取代码覆盖率的。需要用到静态二进制重写技术,HEXCITE在ZAFL的基础上进行了一些修改,满足本论文中需要的CGT功能。
  2. 控制流映射模块:当中断发生后,用这个输入跑tracer获取他覆盖的基本块编号,按照这个编号把Oracle里面对应的中断给去掉。
  3. 模糊测试模块:在AFL的基础上做了修改,就是不对每一个输入trace,改为先跑Oracle如果中断了,就用tracer再跑一遍获取代码覆盖信息,然后加入到queue里面。

论文阅读_Same Coverage, Less Bloat: Accelerating Binary-only Fuzzing with Coverage-preserving Coverage-g相关推荐

  1. 【论文阅读004】:V-Fuzz: Vulnerability Prediction-Assisted Evolutionary Fuzzing for Binary Programs

    论文基本情况: 论文名: V-Fuzz: Vulnerability Prediction-Assisted Evolutionary Fuzzing for Binary Programs 作者:Y ...

  2. 论文阅读Batch Normalization: Accelerating Deep Network Training byReducing Internal Covariate Shift

    论文阅读Batch Normalization: Accelerating Deep Network Training byReducing Internal Covariate Shift 全文翻译 ...

  3. 论文阅读报告 Traffic-Based Dynamic Beam Coverage Adjustment in Satellite Mobile Communication

    引用:Qian C, Zhang S, Zhou W. Traffic-based dynamic beam coverage adjustment in satellite mobile commu ...

  4. [论文阅读] (18)英文论文Model Design和Overview如何撰写及精句摘抄——以系统AI安全顶会为例

    <娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...

  5. 【论文阅读NO.00001】Fuzzing: A Survey for Roadmap

    [论文阅读NO.00001]Fuzzing: A Survey for Roadmap 0x00.一切开始之前 Abstract 0x01. INTRODUCTION 0x02. OVERVIEW O ...

  6. 【论文阅读】Learning Traffic as Images: A Deep Convolutional ... [将交通作为图像学习: 用于大规模交通网络速度预测的深度卷积神经网络](1)

    [论文阅读]Learning Traffic as Images: A Deep Convolutional Neural Network for Large-Scale Transportation ...

  7. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](7)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](7) Into the Weeds Other types of grap ...

  8. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](6)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](6) GNN playground Some empirical GNN ...

  9. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](5)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](5) Graph Neural Networks 图神经网络 Now th ...

最新文章

  1. python实现文件下载-python实现上传下载文件功能
  2. Spring OXM-XStream快速入门
  3. python模拟通讯录的删除功能_python+uiautomator2 实现需求:从通讯录添加手机号码,若存在旧的 SOS号码,先删除再添加,若通讯录中没有号码,需先新建。...
  4. ubuntu修改mysql的绑定端口
  5. 装饰器模式 decorator
  6. 视觉推理新杀器!英特尔新一代VPU性能翻10倍,反超英伟达
  7. delphi 监控文件变化_监控Linux文件变化,防止系统被黑
  8. [转载] java中对象作为参数传递给一个方法,到底是值传递,还是引用传递
  9. 微信 的微服务器配置,spring-boot wm-accesstoken
  10. 【ACL2021】分享三篇值得推荐的情感分析文章 -- 风格分析、幽默计算、情感类别...
  11. mysql与php的连接_PHP与Mysql的连接
  12. linux配置环境变量宏,在linux中配置环境变量(示例代码)
  13. cf两边黑屏怎么解决win10_红警49期:win10玩红警2黑屏但有声音怎么办
  14. .Net面试经验总结
  15. Windows XP 批處理中For命令用法
  16. C语言:习题11-1 输出月份英文名.2021-07-25
  17. 电容倍增器作为电源滤波器
  18. java根据jpg格式图片或视频文件生成gif动图
  19. 【时间转换】将秒转换成“时分秒”格式
  20. 数据库和数据库软件的安装

热门文章

  1. linux中从内存解析xml格式的库,Linux下使用libxml库解析xml文件
  2. 漫谈数据安全-老板担心敏感数据泄露,该如何建设数据的安全体系?
  3. subversion的配置与使用
  4. 正则表达式(详细解析)
  5. 树莓派对继电器的实验及其编译
  6. css小鸡破壳,小鸡出壳是小鸡自己破壳,还是鸡妈妈帮助破壳?
  7. 阿里的“传奇程序员”
  8. apprtcH5+iOS+android音视频通信
  9. 2019-01-25T01:30:00.000+0000 格式转换
  10. 一则能领略到人生苦涩和忧伤的故事