论文阅读-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࿰…...
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不显示主界面)...
本地化新闻查询为何总延迟超800ms?Perplexity边缘推理优化方案,实测响应压降至127ms,附Benchmark对比表
更多请点击: https://codechina.net 第一章:本地化新闻查询为何总延迟超800ms?Perplexity边缘推理优化方案,实测响应压降至127ms,附Benchmark对比表 本地化新闻查询高延迟的根本症结,在于传统云端大模型推…...
为什么你的无锁队列在压测中崩了——从 ABA 问题到 Hazard Pointer,追踪 lock-free 内存回收的生死时序
你的 lock-free queue 通过了所有单元测试,在 4 线程环境下稳定跑了整整一周,性能数据漂亮,直到你把压测线程数拉到 64,跑了 17 分钟后收到 SIGSEGV,打开 coredump 一看,崩溃地址指向的那块内存已经被 free 掉又被另一次 enqueue 重新 allocate 成了一个全新的节点,而 d…...
Java static 关键字从浅入深
文章目录前言一、static 的基本概念1.1 static 修饰什么1.2 static 的一句话理解二、static 变量2.1 类变量与实例变量2.2 使用场景三、static 方法3.1 静态方法的特点3.2 使用场景四、static 代码块4.1 static 代码块什么时候执行4.2 初始化顺序五、static 内部类5.1 静态内部…...
零代码脚本神器:熊猫精灵脚本助手V3.6.4 --Ai找图找色多窗口驱动点击键鼠录制适合游戏自动化办公操作
🛠️ 软件核心定位熊猫精灵脚本助手V3.6.4是一款零代码可视化的自动化工具,主打后台多窗口异步操作,无需编程基础就能实现复杂的自动化流程,覆盖办公、游戏、模拟器、手机投屏等多场景需求,兼容Win7及以上系统…...
企业级应用如何利用 TaoToken 构建高可用的大模型服务网关
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业级应用如何利用 TaoToken 构建高可用的大模型服务网关 应用场景类,探讨在中大型企业应用中,为内部多个…...
无参考视频质量评估:AI如何在没有标准答案时评判视频画质
1. 项目概述:当AI成为视频的“质检员”在视频内容爆炸式增长的今天,我们每天都会接触到海量的视频流——从手机随手拍的短视频,到专业制作的影视剧,再到监控摄像头24小时不间断的记录。你有没有想过,这些视频的“画质”…...
Tina Linux嵌入式系统开发实战:从SDK结构到应用部署全解析
1. 项目概述:从零开始理解 Tina Linux 系统开发如果你正在为一个嵌入式设备寻找一个稳定、开源且高度可定制的操作系统,那么 Tina Linux 很可能已经进入了你的视野。它不是一个凭空出现的全新系统,而是基于 OpenWrt 和 Linux 内核深度定制而来…...
7天掌握FontForge:免费开源字体编辑器的完整使用指南
7天掌握FontForge:免费开源字体编辑器的完整使用指南 【免费下载链接】fontforge Free (libre) font editor for Windows, Mac OS X and GNULinux 项目地址: https://gitcode.com/gh_mirrors/fo/fontforge 你是否曾梦想设计属于自己的字体?无论是…...
Claude Code 上下文管理机制深度拆解:超长 Agent 任务如何不崩盘
在一个真正复杂的企业级软件设计与编码任务里,Coding Agent 面对的从来不是一句简单的“帮我写个小游戏”。 它要理解用户的原始需求,要读取项目里的既有代码,要遵守架构约束、编码规范、接口协议,还要调用各种工具、加载不同的技能和规则,甚至记住用户十分钟前随口补充的…...
ARM P-Channel接口设计与低功耗SoC电源管理实践
1. ARM P-Channel接口深度解析在低功耗SoC设计中,电源管理接口的可靠性和时序一致性直接决定了系统的能效表现。ARM P-Channel作为专为电源管理设计的标准化接口协议,通过独特的四阶段握手机制,为设备与电源控制器之间建立了高效的状态协商通…...
