论文阅读-Multiple Targets Directed Greybox Fuzzing (Hongliang Liang,2024)

标题: Multiple Targets Directed Greybox Fuzzing (Hongliang Liang,2024) 

作者: Hongliang Liang, Xinglin Yu, Xianglin Cheng, Jie Liu, Jin Li

期刊: IEEE Transactions on Dependable and Secure Computing

研究问题:

发现局限性:之前的定向灰盒测试在有多个目标的时候表现的不好

原因(problems):粗粒度的能量调度和静态阶段划分

AFLGO

1.problem1(能量):为了覆盖多个目标,为所有目标追求全局最优调度会忽略某些目标的局部最优调度 

2.two stages:(exploration and exploitation )首先从探索阶段开始,随机变异初始种子以生成许多新输入,以增加代码覆盖率。然后进入开发阶段,产生更多新的投入,越来越接近目标。 

3.problem2:(静态阶段划分):exploration和exploitation 的时间不好分配。

勘探越少,可供开发利用的覆盖信息就越少,导致在开发阶段难以产生高质量的定向种子。但过度探索会耗费大量资源,延​​误开发进度,失去方向性。 

Lolly 和 Berry  

1.problem1(能量):容易陷入局部最优调度 : 为单个目标寻求最优调度会导致其他目标难以实现 

2.problem2:(静态阶段划分):exploration和exploitation 的时间不好分配。 

研究假设:

1.提出自适应的搜索策略 

2.提出一种新的能量调度策略 

研究方法:

1.提出一种能量调度方法(MES)

    考虑种子序列和目标序列之间的三种关系进行能量调度,即s的序列覆盖率(seqCov)、ts'(序列的)优先级(priority)和全局最大值覆盖率(gM axCov)。具体来说,MES 为具有高 seqCov、高优先级、低 gM axCov 的种子分配更多能量 ->为全局最大覆盖率低的种子给予更多能量:

    可以避免像 AFLGo 这样忽略局部最优,也可以避免陷入像 Lolly 或 Berry 这样容易陷入局部最优。 

2.提出一种协调exploration和exploitation的方法(CEE)

根据覆盖种子和定向种子的产生情况来分配两阶段的时间(根据两个队列中种子的比例灵活协调探索和利用阶段 )。有两个队列来存储种子。使用一个队列来存储有助于到达目标的种子(简称定向种子),另一个队列来存储提高代码覆盖率的种子(简称覆盖种子)。 如果在探索时覆盖种子在总种子中的比例太高(例如,超过阈值率),我们的模糊器将切换到利用阶段(定向种子)。 如果在利用时代码覆盖率信息不足(例如,模糊器在很长一段时间内没有生成新的定向种子),我们的模糊器就会转向探索阶段。 此外,CEE通过记录每个开发阶段的持续时间和生成的定向种子的数量来动态调整阈值率,以自适应地协调探索和开发阶段。 

3.将上述两种策略应用于LeoFuzz 

研究动力

图一 是过程间控制流图 Inter-CFG,里面每一个节点是基本块BB,M和P是我们的目标错误target problem Select an Image

回顾:在AFLGO里面提到

「CG和CFG

Call Graph:是调用图,打开IDA就可以看到一个函数调用另一个函数,CG的单元是函数function。函数function是比基本块BB大的量,因为一个function里面有循环、分支跳转。

CFG:是控制流图,单元量是基本块BB。不同function的BB跳转构成的CFG叫做Inter-CFG,Intra-CFG就是一个function里面的BB跳转。AFLGO采用了Intra-CFG,因为这个更简单操作,在原先AFL的代码上改动不大,不会加上过多的overhead。」

Problem 1: unsuitable energy scheduling hinders covering multiple targets. 

  • 现存的DGF的两种能量调度策略:

1.AFLGo 采用 Dijkstra 算法来调度种子 ,执行跟踪三种种子,i.e., a-c-e-i-q-m, a-b-d-k-o and a-b-d-f-g-j-k-p, 这些路径中的每个节点到两个目标之间的harmonic distance (谐波距离,也叫调和平均值);

 Select an Image

2.Lolly 或 Berry 在能量调度中利用目标序列覆盖。 

如果通过目标 m 的路径比通过目标 p 的路径更难探索(例如,由于复杂的条件),则接近 m 的种子的目标序列覆盖率将比另一个种子的目标序列覆盖率增加得更慢种子接近p。因此,这两个工具都会生成大量探索图 1 右分支的种子,而只有少数种子覆盖图 1 左分支。即使达到目标,它们也会继续探索图 1 右分支p。因此,他们很难安排接近目标 m 的种子。 

Problem 2: improper exploration-exploitation division. 

现存的两阶段的协调方法有3种:

  • uses the seed selection strategy without considering the exploration-exploitation switchover, like Lolly (不考虑划分为两阶段,以Lolly  为典型代表):生成的覆盖种子或定向种子被放置在队列的末尾以进行顺序调度。这种方法很简单,但可能需要很长时间才能使队列尾部(或附近)的定向种子发生变异,从而减慢了目标的到达速度。 
  • gives each stage a fixed period. (两阶段的时间是固定的,以AFLGo 和RDFuzz为典型代表) 
  • 开发优先策略(以Berry 为典型代表):将种子队列分成三个优先级,且定向种子比覆盖率种子优先级高。缺点是当代码覆盖率信息不足时,策略不佳,生成种子质量低。

方法框架

框架名:LeoFuzz 

includes two phases:static analysis and dynamic analysis.(静态分析和动态分析)

Fig. 2. LeoFuzz’s architecture Select an Image

静态分析阶段:

 step1:从待测程序中使用图像抽取器抽取CG和CFG。注:Lolly and Berry,only use CFG 

step2:目标序列生成器映射目标中的语句到基本块。为每一个目标生成一个目标序列(包括了从entry function 通往目标的路径上必要的基本块BB)。

domcg:由P获得的CG转化成的支配树。(line2,3) domCG:由CFG转化成的支配树(line4,5) e target function name funN ame (lines 4-6).  Select an Image

使用案例来辅助理解算法1:main1-A1-entry-a-f-g是目标g的目标序列,其中main1和A1分别表示main和A函数的入口节点  Select an Image

step3:对 PUT 进行检测以收集运行时信息,例如代码覆盖率和执行跟踪,并将检测后的二进制文件发送到执行器。 

动态分析阶段:Fuzzer的input为Initial seed 和instrumented binary 

从执行步骤来划分:

step1:the stage coordinator judges the stage of the fuzzer (exploration stage or exploitation stage). 

初始是exploration阶段,生成的覆盖种子的比例达到一个阈值就会转为exploitaion阶段 。反之亦然,两个阶段相互转换。

step2:根据stage,种子选择器从对应的队列(覆盖种子队列(简称CQ)或定向种子队列(简称DQ)) 中获取一个种子

step3:编译器变异种子,送入执行器

step4:如果这个种子导致了PUT crash,存储在crash queue中

           进入 DQ(如果它增加了目标序列覆盖率) 

           存入CQ(如果它增加了代码覆盖率) 

否则丢弃

从组成部分来划分:

A. Fuzzer 

fuzzer的工作流程如图算法二所示 Select an Image

1) Exploration-exploitation Coordination: 

2) Seed Energy Scheduling for Multiple Targets: 

B. Concolic Executor 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/558672.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

webAssembly学习及使用rust

学习理解 webAssembly 概念知识,使用 API 进行 web 前端开发。 概念 是一种运行在现代网络浏览器中的新型代码,并且提供新的性能特性和效果。它有一种紧凑的二进制格式,使其能够以接近原生性能的速度运行。C/C、 C#、Rust等语言可以编译为 …

ruby 配置代理 ip(核心逻辑)

在 Ruby 中配置代理 IP,可以通过设置 Net::HTTP 类的 Proxy 属性来实现。以下是一个示例: require net/http// 获取代理Ip:https://www.kuaidaili.com/?refrg3jlsko0ymg proxy_address 代理IP:端口 uri URI(http://www.example.com)Net:…

【React】Sigma.js框架网络图-入门篇

一、介绍 Sigma.js是一个专门用于图形绘制的JavaScript库。 它使在Web页面上发布网络变得容易,并允许开发人员将网络探索集成到丰富的Web应用程序中。 Sigma.js提供了许多内置功能,例如Canvas和WebGL渲染器或鼠标和触摸支持,以使用户在网页上…

MATLAB R2024a:重塑商业数学软件的未来

在数字化浪潮席卷全球的今天,商业数学软件已经成为企业、研究机构乃至个人不可或缺的工具。而在这其中,MATLAB R2024a以其卓越的性能和广泛的应用领域,正逐步成为商业数学软件的新标杆。 MATLAB R2024a不仅继承了前代版本的优秀基因&#xf…

Golang 采集爬虫如何配置代理 IP

在 Golang 中配置代理 IP,可以通过设置 http.Transport 的 Proxy 属性来实现: 下述代码中的 代理IP 和 端口 替换为实际的代理服务器地址和端口,然后运行该程序即可通过代理服务器访问对应网站。 package mainimport ("fmt""…

超详细的Maven安装与使用还有内容讲解

文章目录 作用简介模型仓库 安装配置IDEA配置Maven坐标概念主要组成 IDEA创建Maven项目基本使用常用命令生命周期使用坐标导入jar包 注意事项清理maven仓库更新索引依赖 作用 Maven是专门用于管理和构建Java项目的工具,它的主要功能有: 提供了一套标准化…

MATLAB实现禁忌搜索算法优化柔性车间调度fjsp

禁忌搜索算法的流程可以归纳为以下几个步骤: 初始化: 利用贪婪算法或其他局部搜索算法生成一个初始解。清空禁忌表。设置禁忌长度(即禁忌表中禁止操作的期限)。邻域搜索产生候选解: 通过特定的搜索算子(如…

AWS账号注册以及Claude 3 模型使用教程!

哈喽哈喽大家好呀,伙伴们!你听说了吗?最近AWS托管了大热模型:Claude 3 Opus!想要一探究竟吗?那就赶紧来注册AWS账号吧!别担心,现在注册还免费呢!而且在AWS上还有更多的大…

【北京迅为】《iTOP-3588开发板系统编程手册》-第10章 存储映射 I/O

RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

Spark-Scala语言实战(17)

我带着大家一起来到Linux集群环境下,学习我们的spark。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-Scala语言实战(16&#x…

基于Springboot的社区帮扶对象管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的社区帮扶对象管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系…

微信小程序日期增加时间完成订单失效倒计时(有效果图)

效果图 .wxml <view class"TimeSeond">{{second}}</view>.js Page({data: {tiem_one:,second:,//倒计时deadline:,},onLoad(){this.countdown();},countdown(){let timestamp Date.parse(new Date()) / 1000;//当前时间戳let time this.addtime(2024…

数据结构- 顺序表-单链表-双链表 --【求个关注!】

文章目录 一 顺序表代码&#xff1a; 二 链表单链表双向链表 一 顺序表 顺序表是线性表的一种 所谓线性表指一串数据的组织存储在逻辑上是线性的&#xff0c;而在物理上不一定是线性的 顺序表的底层实现是数组&#xff0c;其由一群数据类型相同的元素组成&#xff0c;其在逻辑…

JVM知识点总结二

参考文章&#xff1a;【Java面试题汇总】JVM篇&#xff08;2023版&#xff09;_jvm面试题2023-CSDN博客 1、说说你了解的JVM内存模型&#xff1a; JVM由三部分组成&#xff1a;类加载子系统、运行时数据区、执行引擎 JVM内存模型&#xff1a; 内存模型里的运行时数据区&#…

STM32实现硬件I2C通讯,读取MPU6050的ID号

今天学习了使用硬件I2C的方式成功读取MPU6050的ID号&#xff0c;特此记录一下过程&#xff1a; 首先需要学习的是MPU6050的初始化&#xff1a; 第一步&#xff1a;打开GPIOB的时钟&#xff08;因为I2C2的引脚10,11在GPIOB上&#xff09; 第二步&#xff1a;打开I2C2的时钟 …

LLAMA 3的测试之旅:在GPT-4的阴影下前行

Meta终于发布了他们长期期待的LLAMA 3模型&#xff0c;这是一个开源模型&#xff0c;实际上提供了一系列新的功能&#xff0c;使得模型在回答问题时表现得更好。这对AI社区来说是一个真正的里程碑事件。 Meta正在发布新版本的Meta AI&#xff0c;这是一种可以在他们的应用程序和…

用Python在PDF文档中插入单图像水印和平铺图像水印

PDF文档因其跨平台兼容性和内容保真度成为信息交换的标准载体&#xff0c;为应对版权侵犯、内容篡改以及未经授权的传播等风险&#xff0c;向PDF中插入图片水印成为一种强化文档安全性、彰显所有权及实施访问控制的有效手段。图片水印不仅能以直观的方式标示文档来源、强化版权…

Git学习笔记(三)Git分支

Git分支是Git中非常重要的一个概念&#xff0c;无论是个人开发还是多人协作中&#xff0c;分支都起着至关重要的作用。几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离 开来进行重大的Bug修改、开发新的功能&#xff0c;以免影响…

Discuz! X3.4 升级至 Discuz! X3.5 详细教程

第一步&#xff1a;从其他以前的 Discuz! X 版本升级Discuz! X3.4 请先升级到Discuz! X3.4&#xff0c;升级教程网上比较普遍&#xff0c;在此不再论述。 第二步&#xff1a;Discuz! X3.4 升级至 Discuz! X3.5 &#xff08;Discuz 从 X3.5 以后&#xff0c;不在发布GBK版本&…

K8S基础概念

一、MASTER Kubernetes里的Master指的是集群控制节点&#xff0c;在每个Kubernetes集群里都需要有一个Master来负责整个集 群的管理和控制&#xff0c;基本上 Kubernetes的所有控制命令都发给它&#xff0c;它负责具体的执行过程&#xff0c;我们后 面执行的所有命 令基本都…
最新文章