当前位置: 首页 > news >正文

论文阅读-EMS: History-Driven Mutation for Coverage-based Fuzzing(2022)模糊测试

一、背景

        本文研究了基于覆盖率的模糊测试中的历史驱动变异技术。之前的研究主要采用自适应变异策略集成约束求解技术来探索触发独特路径和崩溃的测试用例,但它们缺乏对模糊测试历史的细粒度重用,即它们在不同的模糊测试试验之间很大程度上未能正确利用模糊测试历史。

        本文提出了一种轻量级且高效的 概 率 字 节 定 向 模 型(PBOM),以捕获来自试验历史的字节级变异策略,并因此有效地触发独特路径和崩溃。

        本文还提出了一种新的历史驱动变异框架EMS,用于加速基于覆盖率的模糊测试中的路径和漏洞发现。它将PBOM作为变异算子之一(包括 intra-PBOM和inter-PBOM),根据输入字节值概率性地提供所需的变异字节值。即EMS将PBOM作为附加变异操作符,根据输入字节值和长度概率性地提供所需变异字节值和类型。

PBOM是为了实现下面的目的:

从 内 部 和 内 部 历 史 中 捕 获 触 发 独 特 路 径 和 崩 溃 的 突 变 策 略 。 换 句 话 说 , 给 定 来 自 种 子 测 试 用 例 的 输 入 字 节 值 , 学 习 到 的 突 变 策 略 模 型 应 该 能 够 输 出 相 应 的 突 变 值 和 导 致 测 试 用 例 触 发 今天唯 一 路 径 或 崩 溃 的 突 变 类 型 。

实验结果表明,EMS在9个真实世界程序上比AFL、QSYM、MO PT、MO PT-dict、EcoFuzz和AFL++等最先进的模糊测试工具发现了多达4.91倍的独特漏洞,并在大多数程序上发现了更多的覆盖。

本文的创新动机在于:利用模糊测试历史来加速发现新的路径和崩溃。

二. INTRODUCTION

A. Mutation-based Fuzzing

变异测试的流程包括:1)准备初始种子集并构建队列;2)从队列中选择种子测试用例并随机变异;3)使用变异后的测试用例测试目标程序,并将触发新执行路径或异常行为的有趣测试用例添加到种子队列中;4)回到步骤2)继续模糊测试。

大多数变异测试工具使用简单的逻辑来变异测试用例,如AFL使用三个阶段的变异操作:

  • 确定性阶段:AFL利 用 位 或 字 节 级 突 变 操 作 符 , 例 如 位 翻 转 、 字 节 翻 转 和 字 节 插 入 , 来 改 变 种 子 测 试 用 例 的 每 个 位 或 字 节
  • 混沌阶段:AFL多 次 随 机 选 择 操 作 符 , 并 在 种 子 测 试 用 例 的 随 机 位 置 使 用 所 有 操 作 符 进 行 突 变
  • 拼接阶段:AFL首 先 将 两 个 种 子 测 试 用 例 的 部 分 剪 接 在 一 起 , 生 成 一 个 新 的 用 例 , 然 后 进 入 破 坏 阶 段 ,使 用 进 一 步 的 突 变 算 子

传 统 的 基 于 突 变 的 fuzzers没 有 分 析 如 何 解 决 路 径 约 束 ,而 是 利 用 随 机 突 变 的 测 试 用 例 来 测 试 程 序 , 盲 目 地 探 索 新 的 执 行 路 径 。 由 于 逻 辑 直 接 , 基 于 突 变 的 fuzzers的 执 行 速 度 很 快 , 导 致 了 有 效 的 漏 洞 探 索 。 但 是 , 直 接 的 逻 辑 无 法 解 决 复 杂 的 路 径 约 束 , 限 制 了 模 糊 的 效 率 。 因 此 , 大 量 的 工 作 集 中 在 提 高 路 径 覆 盖 上 , 并 在 基 于 突 变 的 模 糊 之 上 发 展 基 于 覆 盖 的 模 糊。

B. Coverage-based Fuzzing

为 了 解 决 上 述 基 于 突 变 的 模 糊 测 试 的 局 限 性 , 研 究 人 员 提 出 利用覆盖率信息作为反馈来指导模糊测试过程,以提高模糊测试的性能。


法一:一些工作采用自适应策略来改进基于覆盖率的模糊测试

        例如AFLFast和EcoFuzz,它们分别使用马尔可夫链模型和对抗多臂老虎机模型来评估每个测试用例触发唯一分支行为的潜力,然后分配更多时间来变异有潜力的测试用例。

        MOPT提 出 突 变 算 子 的 最 优 选 择 概 率 分 布 在 不 同 的 目 标 程 序上 是 不 同 的。提出了一种迭代调度策略,根据发现唯一路径和崩溃的效率自适应调整每个变异操作符的选择概率分布。

法二:将基于突变的模糊与约束求解技术(如 concolic execution)相结合  

为 了 解 决 路 径 约 束 , 这 些 技 术 应 该 首 先 利 用 强 大 的 仪 器 来 编 译程 序 来 跟 踪 和 收 集 路 径 约 束 。 然 后 , 约 束 求 解 技 术 需 要 执行 昂 贵 的 过 程 , 包 括 模 拟 路 径 约 束 , 跟 踪 影 响 目 标 约 束 的数 据 字 段 , 以 及 计 算 可 以 触 发 约 束 不 同 状 态 的 数 据 字 段 的数 值 区 间 。因 此 , 约 束 的 收 集 和 求 解 都 可 能 是 昂 贵 的 。 使 用 约 束 求 解 技 术 来 求 解 路 径 约 束 通 常 需 要 大 量 的 计 算 成 本 和 时 间 , 这 可 能 会 降 低 模 糊 的 性 能。为了克 服 这 些 挑 战 , 一 些 研 究 通 过 选 择 性 地 将 困 难 路 径 分 配 给concolic执 行 来 提 高 模 糊 性 能 

这一部分介绍了基于覆盖率的模糊测试的发展方向。一种方向是将变异模糊测试与约束求解技术相结合,以解决路径约束问题。另一种方向是利用机器学习技术发现种子测试用例中有价值的字节位置。然而,现有的模糊测试工具缺乏充分利用试验内部和试验间的历史信息来指导有效的模糊测试。因此,本文提出了一种利用历史信息指导模糊测试的方法。

三.DESIGN OF EMS

EMS框架和提出的概率字节方向模型(PBOM)的设计。PBOM旨在提高EMS的性能。


A. Why Intra- and Inter-Trial History Matters

为什么程序的内部历史(定义:当 前 模 糊 过 程 中 的 历 史 )很重要:现有的fuzzers包含了自适应策略。然而,它们主要集中在从历史内获得的高层次启发式来指导种子选择和生成过程,缺乏对所采用的突变策略的细粒度重用,从而有效地触发唯一路径或崩溃。并且程序的不同执行路径可能在路径约束中具有相同的特定值,同一程序的模糊测试历史可以指导解决已解决的路径约束。

为什么程序的外部历史 (定义;来 自 先 前 模 糊 过 程 的 历 史 , 可 以 来 自 相 同 或 不 同 的 程 序)很重要:首先,同一程序的审间模糊历史审内历史有类似的贡献。然后,它可以指导模糊解决已经解决的同一程序的路径约束,例如,具有更好的路径覆盖的初始种子集可以提高模糊性能。此外,来自不同程序的试验间模糊历史也可能有用。因为为了提高程序开发的质量和效率,许多软件平台提供了统一的开发框架和底层库,同样由于共享库的存在,在不同的程序中可能存在相同的路径约束。

B. Framework of EMS

EMS构建了内部和外部PBOM来学习和利用内部和外部测试历史。

EMS通过上图中的Inter-PBOM Initialization构建外部PBOM,通过PBOM Operator来变异测试用例,通过Operator Analysis和Data Collection来收集内部测试历史,并定期调用Intra-PBOM Update来更新内部PBOM。

C. Probabilistic Byte Orientation Model (概率字节方向模型PBOM)

这一部分描述了PBOM的数据结构和概率算法。为了防止fuzzer的执行速度下降,我们使用两个哈希映射构建了inter-PBOM和intra-PBOM。

(下图中第一排蓝色的)输入索引节点的定义:利用输入字节值的唯一哈希作为哈希映射的索引。

每一个蓝色的输入索引节点竖着看)作者为每个唯一输入索引节点构建一个链表:用于存储相应的输出变异策略T链表中每个变异节点存储了:一个唯一的变异操作符(包含输出字节值和变异类型)以及变异操作符(out,type)在该输入下的频率F和选择概率P。为了添加新的变异节点,EMS定位相应输入的索引节点,并将新的变异节点添加到该输入的链表的末尾。

为了构建inter-PBOM,EMS首先使用常规fuzzer(如AFL和MOPT)收集inter-trial历史。然后,EMS构建了如图4所示的数据结构,并更新了每个节点在输入的链表中的选择概率P。根据每个(out,type,F,P)∈T的频率F,以下公式计算了概率分布P,其中p是计算P的(out,type)的权重。


​​​​​​​

根 据 公 式 1,inter-PBOM赋 予 频 率 f较 少 的 (out, type)较 高的 选 择 概 率 P, 然 后 构 建 MO的 选 择 概 率 分 布 P,该 选 择 概率 分 布 更 频 繁 地 选 择 较 少 的 (out, type)来 覆 盖 、 删 除 或插入种子测试用例 。

Q :为什么赋 予 频 率 f较 少 的 (out, type)较 高的 选 择 概 率 P

因为:

        由 于 在 收 集 试 验 间 历 史 时 , 有 效 的 突 变 策 略 是 由 普 通fuzzers的 传 统 突 变 算 子 触 发 的 , 因 此 其 中 许 多 是 由 简 单 的算 子 生 成 的 , 例 如 翻 转 一 个 位 , 或 者 在 一 个 字 节 的 值 上 增加 1。 而 且 , 突 变 策 略 可 以 从 多 个 不 同 的 程 序 中 收 集 , 并且 可 以 长 时 间 收 集 。 综 上 所 述 , 收 集 到 的 突 变 策 略 数 量 可以 很 大 , 而 且 大 多 数 策 略 都 是 由 简 单 的 操 作 符 触 发 的 ,所以简单的突变操作符被大量使用。(即频率高)

        因 此 , (out, type)的 频 率 F越 高 , 基 于 突 变 的 fuzzers就越 容 易 在 试 验 间 历 史 中 使 用 传 统 的 突 变 算 子 从 in生 成 (out,type)。 相 反 , 低 频 (out, type)则 可 以 通 过 罕 见 的 突 变 算 子 来构 造 , 例 如 , 将 特 定 的 字 节 值 插 入 到 种 子 测 试 用 例 中 。 如果 inter-PBOM总 是 再 现 简 单 的 操 作 符 , 那 么 它 就 不 那 么 有用 了 。 因 此 , inter-PBOM将 更 多 的 选 择 概 率 P分 配 给 出 现频 率 较 低 的 (out, type)。

四.IMPLEMENTATION OF EMS

介绍了一种基于MO PT构建的测试用例生成工具EMS,它在确定性和混沌阶段中实现了PBOM算子以利用高效的变异策略。EMS使用InterPBOM初始化来构建Inter-PBOM并更新每个唯一输入的选择概率分布(利用上图中的公式1)。EMS在确定性阶段和混沌阶段中分别调用PBOM算子,以便在不同的方式中使用学习到的变异策略。EMS还记录使用的变异策略,并在触发新的唯一路径或崩溃时将其存储在训练集中以更新Intra-PBOM。

EMS的具体实现包括三个步骤:

(1)计算哈希映射的索引

(2)搜索匹配的节点并添加新节点、更新选择概率

(3)继续模糊测试。

五.EVALUATION

EMS设计中,模糊测试历史主要用于提取有效的变异策略来变异种子测试用例。同时,变异位置也可以由模糊测试历史来指导。作者利用历史信息来概率性地选择记录的位置,以产生有趣的测试用例。根据过去的模糊测试结果,可以分析变异位置对某些特定分支行为的影响,从而得出更细粒度的变异位置信息。

六.CONCLUSION

本文发现了内部和跨试验模糊历史都包含了关键变异策略的丰富知识,这些变异策略隐含着部分路径约束解决方案,可以用于加速发现具有相似部分路径约束的新路径或崩溃。基于这一洞见,提出了轻量级高效的PBOM模型,用于捕捉从内部和跨试验历史中触发独特路径和崩溃的变异策略。提出了一种新的基于历史的变异框架EMS,其中PBOM是变异操作符之一,根据输入的字节值和变异类型以概率方式提供所需的变异字节值和变异类型。在9个真实世界程序上评估EMS与AFL、QSYM、MO PT、MO PT-dict、EcoFuzz和AFL++的性能。结果表明,EMS在大多数程序上发现了更多的独特漏洞,并具有更高的行覆盖率。EMS在标准化基准FuzzBench上也实现了优越的覆盖性能,并在发现不同类型的漏洞时具有不同的初始种子集。此外,进行了进一步的分析,证明了EMS的有效性和低开销。EMS在不同的跨PBOMs上的性能表现,展示了跨同一供应商的不同程序对跨试验模糊历史的贡献。总体而言,EMS可以作为改进基于变异的模糊器的覆盖率和漏洞发现的新方向。

相关文章:

论文阅读-EMS: History-Driven Mutation for Coverage-based Fuzzing(2022)模糊测试

一、背景 本文研究了基于覆盖率的模糊测试中的历史驱动变异技术。之前的研究主要采用自适应变异策略或集成约束求解技术来探索触发独特路径和崩溃的测试用例,但它们缺乏对模糊测试历史的细粒度重用,即它们在不同的模糊测试试验之间很大程度上未能正确利用…...

【 Java 编程中的常用方法和技巧】

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…...

2024年重点关注的5大DevOps趋势

DevOps趋势代表了运维、开发领域在未来一段时间内的发展方向。 如果你是一名技术管理者,了解趋势意味着能够及时引入新技术,优化技术架构,解决实际问题,持续保持技术在行业的前沿。 如果你是一名工程师,那么了解趋势…...

RMAN备份与恢复

文章目录 一、RMAN介绍二、全量备份三、增量备份0级备份1级增量备份累积性差量备份总结 四、压缩备份压缩备份介绍压缩备份操作压缩备份优缺点 五、异常恢复1、恢复前的准备2、恢复数据库 六、RMAN相关参数 一、RMAN介绍 RMAN(Recovery Manager)是Oracl…...

速评谷歌开源大模型Gemma 7B

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

线阵相机参数介绍---变频参数控制

变频器介绍 变频器功能的目的在于对外部输入信号进行运算处理,以达到理想的行频值。该功能主要是为了解决信号超行频,图像拉伸压缩等问题。 输入信号处理过程: 输入信号:允许出发相机信号的频率f与所要求输入信号的频率F不同 …...

挑战杯 基于人工智能的图像分类算法研究与实现 - 深度学习卷积神经网络图像分类

文章目录 0 简介1 常用的分类网络介绍1.1 CNN1.2 VGG1.3 GoogleNet 2 图像分类部分代码实现2.1 环境依赖2.2 需要导入的包2.3 参数设置(路径,图像尺寸,数据集分割比例)2.4 从preprocessedFolder读取图片并返回numpy格式(便于在神经网络中训练)2.5 数据预…...

Spring6学习技术|IoC|手写IoC

学习材料 尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解) 有关反射的知识回顾 IoC是基于反射机制实现的。 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法&…...

基于Java在线宠物店商城系统设计与实现(源码+部署文档)

博主介绍: ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到 Java项目精品实…...

http和https的区别(简述)

HTTP(HyperText Transfer Protocol)和HTTPS(HTTP Secure)都是用于在客户端和服务器之间传输数据的协议,但它们在安全性方面有重要的区别。 1.HTTP: 概述: HTTP是一种用于传输超文本的协议(超文…...

2024年【T电梯修理】找解析及T电梯修理复审考试

题库来源:安全生产模拟考试一点通公众号小程序 T电梯修理找解析是安全生产模拟考试一点通总题库中生成的一套T电梯修理复审考试,安全生产模拟考试一点通上T电梯修理作业手机同步练习。2024年【T电梯修理】找解析及T电梯修理复审考试 1、【多选题】操纵箱…...

【计算机网络】socket 网络套接字

网络套接字 一、端口号1. 认识端口号2. socket 二、认识TCP协议和UDP协议1. TCP协议2. UDP协议 三、网络字节序四、socket 编程1. socket 常见API2. sockaddr 结构3. 编写 UDP 服务器(1)socket()(2)bind()(3&#xff0…...

Eclipse的Java Project的入口main函数

在使用Eclipse创建java project项目的时候,一个项目里面通常只有一个main,那么一个项目里面是否可以有多个main函数呢?其实可以的,但是运行java application的时候要选择执行哪个main函数。 下面举个例子: 1、创建一个…...

JVM内存分析工具-Arthas 教程[详细]

一、概述 Arthas(阿尔萨斯)是阿里巴巴开源的一款Java诊断工具,用于实时检测、诊断Java应用程序的性能问题。它是一个命令行工具,提供了丰富的功能,包括查看类加载信息、方法执行耗时、线程堆栈、内存分析等。Arthas 的…...

Google发布开放的模型Gemma

今天,Google 发布了一系列最新的开放式大型语言模型 —— Gemma!Google 正在加强其对开源人工智能的支持,我们也非常有幸能够帮助全力支持这次发布,并与 Hugging Face 生态完美集成。 Gemma 提供两种规模的模型: 7B …...

谷歌掀桌子!开源Gemma:可商用,性能超过Llama 2!

2月22日,谷歌在官网宣布,开源大语言模型Gemma。 Gemma与谷歌最新发布的Gemini 使用了同一架构,有20亿、70亿两种参数,每种参数都有预训练和指令调优两个版本。 根据谷歌公布的测试显示,在MMLU、BBH、GSM8K等主流测试…...

http缓存?强制缓存和协商缓存?

HTTP缓存是一种优化网络资源加载速度的技术,通过减少从服务器获取相同资源的次数来实现。HTTP缓存机制包括强制缓存和协商缓存(对比缓存)两种类型。 强制缓存 强制缓存是指浏览器在接收到服务器返回的响应后,会将响应内容和相关…...

技术心得--如何成为优秀的架构师

关注我,持续分享逻辑思维&管理思维; 可提供大厂面试辅导、及定制化求职/在职/管理/技术辅导; 有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自…...

【Unity】【VR开发】Unity云同步功能使用心得

【背景】 有时出差,旅行等等也带着电脑,晚上想要继续编辑项目,就需要用到云同步功能。目前实践下来,发现有些内容可以同步,有些内容则是不可以同步的,总结如下。 【如何云同步一个本地项目】 UnityHub的项目面板中有两个选项卡:项目和云端项目。 鼠标挪动到想要云同步…...

vscode侧边框关掉了怎么打开

View - Appearance - Secondary Side Bar 就可以显示出来了,例如 :(CodeGeeX不显示主界面)...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

微信小程序之bind和catch

这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...