论文阅读-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.mzph.cn/pingmian/901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“中医显示器”是人体健康监测器

随着科技的进步,现代医学设备已经深入到了人们的日常生活中。然而,在这个过程中,我们不应忘记我们的医学根源,中医。我们将中医的望、闻、问、切四诊与现代科技相结合,通过一系列的传感器和算法将人体的生理状态以数字…

部署Hyperledger Fabric测试区块链网络

一. 快速启动区块链测试网络 启动Fabric虚拟机 将 fabric-samples.zip 拷贝进虚拟机 ubzip fabric-samples.zip 解压并重命名为fabric-samples mv fabric-samples-main fabric-samples 拷贝bin和config目录 cd fabric-samples cp ~/fabric/bin bin -r cp ~/fabric/config …

圣地亚哥 Toler 小学利用School AI帮助每个学生都有自己的聊天机器人,提高学习兴趣和效率

圣地亚哥 Toler 小学利用 AI 程序 SchoolAI 平台为学生创建个性化的聊天机器人,帮助他们更好地学习和提问。这个 AI 程序让学生可以在几秒钟内得到问题的答案,激发了他们提出更多问题的好奇心。 管理、调节和指导学生如何通过任务控制使用人工智能。 当…

Linux程序的地址空间,进程终止

个人主页:点我进入主页 专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂 一.程序的地址空间 1.1程序的地址空间的引入 我们知道frok可以创建…

【SpringBoot实战篇】获取用户详细信息

1 明确需求 1需要获取用户详细信息 2 接口文档 1基本信息 2请求参数 无 3 响应数据 响应数据类型:application/json 响应参数说明: 响应数据样例 3 思路分析 1用户名在请求头里获取 4 开发 4.1 控制器usercontroller GetMapping("/userInfo")p…

实用软件与高效工具汇总(持续更新...)

名人说:莫愁千里路,自有到来风。 ——钱珝 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、软件1、文件搜索类2、截图贴图类3、软件卸载类4、录屏gif类5、护眼调光类6、流程绘图类7、图片…

怎么压缩图片200k以下?压缩图片到指定大小

在工作中,会遇到在某些系统要上传照片,但是对于上传的照片大小有限制,比如限制大小不能超过200KB等,而外业拍摄的照片往往会超过限制的大小,那么这时就需要对照片进行压缩。尤其是我们在面对大量图片需要处理的时候&am…

面试经典150题——跳跃游戏 II

面试经典150题 day10 题目来源我的题解方法一 动态规划方法二 贪心 题目来源 力扣每日一题;题序:45 我的题解 方法一 动态规划 动态规划,当j位置可达i位置时:dp[i]Math.min(dp[i],dp[j]1); 时间复杂度:O( n 2 n^2 n…

【Linux开发 第五篇】vi和vim

vi和vim Linux系统会内置Vi编辑器 Vim具有程序编辑的能力,可以看作是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计 三种模式 正常模式:vim打开一个文档就直接进入一般模式,可以进行复制&#x…

mysql按季度统计数据

最近遇到按表里得交付时间换成季度取统计,如下: select sp.Id,sp.title,QUARTER(sp.expected_delivery_time) dateStr,CONCAT(DATE(MIN(sp.expected_delivery_time)),至,DATE(MAX(sp.expected_delivery_time))) dateStr2,sp.DemandType,sp.IndustryGrou…

缓存和数据库的区别,缓存之缓存之缓存的使用场景

在Java中,缓存和数据库是常见的数据存储和访问方式,它们之间有着明显的区别和各自适用的场景。 缓存与数据库的区别 存储位置: 缓存:通常存储在内存中,以提供快速的数据访问。数据库:通常存储在磁盘上&…

centos7安装mysql5.7笔记

1 配置yum仓库 1.1更新密钥 #更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 1.2 下载使用wget命令下载MySQL的repo文件 #下载使用wget命令下载MySQL的repo文件 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 2 使用…

java面向对象的封装Rectangle

&#xff08;1&#xff09;定义矩形类Rectangle&#xff0c; * - 声明实例变量长和宽&#xff0c;全部私有化private&#xff0c; * - 提供相应的get/set方法&#xff0c;如果set方法的参数值<0&#xff0c;则提示矩形的长和宽必须是正数 * - 声明public double area()&…

yarn的安装与配置

要安装和配置 Yarn&#xff0c;请按照以下步骤进行操作&#xff1a; 下载安装包&#xff1a;首先&#xff0c;你需要下载适用于你的操作系统的 Yarn 安装包。你可以在 Yarn 的官方网站&#xff08;https://yarnpkg.com&#xff09;上找到适用于不同操作系统的安装包。 安装 Ya…

鸿蒙系列--第一个程序HelloWorld

一、下载安装 下载DevEco Studio&#xff08;https://developer.huawei.com/consumer/cn/deveco-studio/&#xff09;并安装 二、创建第一个鸿蒙应用 Next Compile SDK&#xff1a;鸿蒙SDK版本 Mode&#xff1a;ArkTS的声明式开发范式与类Web 开发范式&#xff0c;官方主推S…

二维码如何调整样式?美化二维码生成器的用法

美化二维码功能是一个很常用的二维码编辑功能&#xff0c;一般用来修改二维码颜色、添加logo、更高码点、设置容错率等设置&#xff0c;可以通过简单的步骤将普通的黑白二维码调整成其他的样式。那么美化二维码生成器的使用方法是什么样的呢&#xff1f;下面就让小编来给大家讲…

背包问题 python

一、01背包问题&#xff08;经典&#xff09; 问题描述&#xff1a; 有N件物品和⼀个最多能被重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能⽤⼀次&#xff0c;求解将哪些物品装⼊背包⾥物品价值总和最⼤。 输入描述&#xff1a…

哈希和布隆过滤器

哈希 布隆过滤器 一致性哈希

Linux-进程间通信:System V消息队列

目录 System V IPC概述标识符与IPC Key System V消息队列创建或打开一个消息队列发送消息接收消息控制消息队列1、IPC_STAT2、IPC_SET3、IPC_RMID 查看系统当前的消息队列代码示例 System V IPC&#xff08;Inter-Process Communication&#xff09;是一组用于在 Unix-like 操作…

数据分析(3)

数据分析&#xff08;3&#xff09; 索引和数据筛选 在我们导入数据将其存储在data变量中后&#xff0c;接下来就要开始对其进行操作了&#xff0c;要对指定的数据进行操作&#xff0c;首先要在一堆数据中确定它&#xff0c;因此需要索引 import pandas as pd data pd.read…