论文阅读-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可以作为改进基于变异的模糊器的覆盖率和漏洞发现的新方向。

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

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

相关文章

【PyQt】在PyQt5的界面上集成matplotlib绘制的图像

文章目录 0 前期教程1 概述2 matplotlib2.1 库导入2.2 图片的各个部分解释2.3 代码风格2.4 后端 3 集成matplotlib图像到pyqt界面中3.1 使用到的模块3.2 理解Qt Designer中的“控件提升”3.3 界面与逻辑分离的思路3.4 扩展 0 前期教程 【PyQt】PyQt5进阶——串口上位机及实时数…

Android稳定性相关知识

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、相关方法论3.1 crash3.2 性能3.3 高…

一,STM32cubeMX配置FreeRTOS工程

从这篇文章开始,大家就进入到了FreeRTOS的学习之路。 那么,从这里开启学习的第一课如何使用cubeMX配置FreeRTOS工程 文章目录 前言一、使用 cubeMX 配置 FreeRTOS二、CMSIS 接口总结 前言 一、使用 cubeMX 配置 FreeRTOS 选择 stm32 芯片。 选择外部晶振…

【Linux】简单的网络计算器的实现(自定义协议,序列化,反序列化)

文章目录 前言一、 服务端1.ServerCal.cc(服务器主文件)2.ServerCal.hpp3.Sock.hpp(套接字封装)4.TcpServer.hpp(服务器)5.Protocol(自定义协议) 二、用户端1.ClientCal 三、Log.hpp(日志)四、makefile 前言…

洛谷 P8627 [蓝桥杯 2015 省 A] 饮料换购

参考代码and代码解读 #include <bits/stdc.h> using namespace std; int main() { int n; scanf("%d", &n); int dr;//drdrink; dr n;//把drink赋值于n; while (n > 2) {//剩余的总瓶盖数要大于二,才能换得下一瓶饮料; dr n…

C语言系列-带有副作用的宏参数#和##命名约定宏替换的规则

&#x1f308;个人主页: 会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” 目录 带有副作用的宏参数 宏替换的规则 宏函数的对比 #和## #运算符 ##运算符 命名约定 #undef 带有副作用的宏参数 当宏参数在宏的定义中出现超过一次的时候&#xff0c;如果…

树莓派登录方式

目录 1.串口登录树莓派 1.1 USB-TTL连接树莓派串口 1.2 修改系统配置&#xff0c;启用串口登录树莓派 1.3 启动树莓派 2.网络方式登录树莓派 2.1 使树莓派接入网络 2.2 网络SSH 方式登录树莓派 2.2.1 打开ssh功能&#xff0c; 输入命令&#xff1a; 1.串口登录树莓派 1…

MOS管故障排查(G极电阻篇)

我们经常看到&#xff0c;在电源电路中&#xff0c;功率MOS管的G极经常会串联一个小电阻&#xff0c;几欧姆到几十欧姆不等&#xff0c;那么这个电阻用什么作用呢&#xff1f; 如上图开关电源&#xff0c;G串联电阻R13这个电阻的作用有2个作用&#xff1a;限制G极电流&#x…

2024最新软件测试八股文(答案+文档)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、B/S架构和C/S架构区别 B/S 只需要有操作系统和浏览器就行&a…

SD-WAN稳定性如何?

随着网络技术的不断发展&#xff0c;软件定义广域网&#xff08;SDWAN&#xff09;作为一种新兴的网络架构&#xff0c;受到了越来越多企业的青睐。然而&#xff0c;对于许多人来说&#xff0c;关于SDWAN最关键的问题之一就是它的稳定性。本文将探讨SDWAN的稳定性表现&#xff…

OpenCV每日函数 结构分析和形状描述符(9) ApproxPolyDP函数 拟合曲线

一、Douglas -Peucker 算法 也称为Ramer-Douglas-Peucker 算法或迭代端点拟合算法,是一种通过减少点数来平滑折线(由线性线段组成的线)的算法。简化曲线应保留原始曲线的粗略形状,但仅包含定义原始曲线的点的子集。 粗化程度由单个参数 ε 控制,该参数定义原始点和简化曲线…

挑战杯 基于CNN实现谣言检测 - python 深度学习 机器学习

文章目录 1 前言1.1 背景 2 数据集3 实现过程4 CNN网络实现5 模型训练部分6 模型评估7 预测结果8 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于CNN实现谣言检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&am…

翻译,师爷师爷什么叫事务!

当我们学习 apple 时候&#xff0c;我们很容易记住 apple 是什么。 我们也不会对 apple 的概念产生模糊混淆。 为什么&#xff1f; 因为字典上明确说了&#xff0c;apple 苹果。 那苹果是什么&#xff1f; 苹果就是圆圆的红红的&#xff0c;吃起来甜甜的水果。 我们学习…

开工第一天的精神状态“昨晚失眠”开工第一天的你还好吗?

目录 不想上班 杂乱的内心独白 杂乱的内心独白与代码 结语 不想上班 一想到要返工就有点emo的你 并不是孤身一人 我这一生&#xff0c;如履薄冰&#xff0c;新的一天&#xff0c;从不想上班开始。 杂乱的内心独白 我杂乱的内心啊 杂乱的内心独白与代码 import tkinter…

OpenCV识别人脸案例实战

使用级联函数 基本流程 函数介绍 在OpenCV中&#xff0c;人脸检测使用的是cv2.CascadeClassifier.detectMultiScale()函数&#xff0c;它可以检测出图片中所有的人脸。该函数由分类器对象调用&#xff0c;其语法格式为&#xff1a; objects cv2.CascadeClassifier.detectMul…

php命令行运行 逻辑运算符 多维数组

php命令行运行 1. 命令行的使用2. 逻辑运算符3. 多维数组 1. 命令行的使用 查看php的版本 php -v执行php代码 ➜ ~ php /Users/fanzhen/Documents/phpStudy/hd.php bool(false)2. 逻辑运算符 3. 多维数组 三维数组 取第零个元素 第0个元素的第一个数组

通过字符设备驱动分步注册过程实现LED驱动的编写

通过字符设备驱动分步注册过程实现LED驱动的编写 mychrdev.c #include <linux/init.h> #include <linux/module.h> #include <linux/cdev.h> #include <linux/fs.h> #include <linux/io.h> #include <linux/slab.h> #include <linux/d…

相机图像质量研究(34)常见问题总结:图像处理对成像的影响--拖影

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

【鸿蒙手机】获取UDID,并添加签名认证

一、打开开发者模式 1、手机型号华为nova 10 pro , HarmonyOS版本 4.0&#xff0c;路径&#xff1a;设置-> 关于本机-> 多次连续点击”软件版本“ 这一行&#xff0c;一般是是5到7次&#xff08;我是点击了5次&#xff09;&#xff0c;第一次会弹出输入密码&#xff0c;验…

猪圈Pigsty-PG私有RDS集群搭建教程

博客 https://songxwn.com/Pigsty-PG-RDS/ 简介 Pigsty 是一个更好的本地自建且开源 RDS for PostgreSQL 替代&#xff0c;具有以下特点&#xff1a; 开箱即用的 PostgreSQL 发行版&#xff0c;深度整合地理、时序、分布式、图、向量、分词、AI等 150 余个扩展插件&#xff…