One Fuzzing Strategy to Rule Them All

news2024/9/23 13:27:59

One Fuzzing Strategy to Rule Them All

image-20230217135135806

文章目录

  • One Fuzzing Strategy to Rule Them All
        • 相关链接
        • 概述
        • 背景
        • 实验测试
          • RQ1:
          • RQ2
        • 相关工作总结
        • 最后


相关链接

One Fuzzing Strategy to Rule Them All

参考链接

概述

在本文中作者提出了对变异策略havoc的研究,通过调查在不同模糊测试器上havoc的实际执行时间与边覆盖的关系、以及havoc在不同模糊测试器下执行相同时间后边覆盖的差异,作者提出只要给havoc足够的执行时间,就能带来更高的边覆盖,同时也会降低不同模糊器之间的边覆盖差异。同时作者测试了stack size ,以及不同的变异策略(单元变异和块变异)对havoc性能的影响,并基于此提出了一个多臂老虎机模型。


背景

​ 在进行漏洞挖掘中,模糊测试已经成为了一种主流的漏洞挖掘工具。而在此期间出现的很多fuzzer都使用了一种havoc的随机搜索机制,以提高代码的覆盖率。

​ 然而,作者发现,在这些使用了havoc的模糊器中,大部分采用的都是havoc的默认设置,基于此,带着havoc是否还能在fuzzer中表现出更大的潜能这一问题,作者进行了本文的实验研究。

​ 基于覆盖的模糊测试过程如下:

image-20230218133647550

​ 模糊测试器会从语料库中选定一个种子并传递给havov进行变异,havoc的变异由变异次数和编译器叠加次数决定。havoc会根据种子的实时信息决定种子的变异次数,即模糊器需要执行多少次havoc操作。确定havoc的变异次数后,在每次变异之前havoc还需要确定一个变异器叠加次数,并根据该次数从变异策略中随机选择变异方法进行叠加,havoc的变异策略如下所示:

image-20230218135135240

​ 其中红色字体部分为单元变异,表示编译单个字节或单词,而蓝色部分则表示块变异,变异非确定性数量的字节。havoc同时是随机选择变异策略叠加在一起最后生成一个新的种子。

​ 在将havoc集成到模糊器上时,不同的fuzzer之间也存在一定的差别,主要有两种集成方式,顺序执行和多线程并行的方式,其执行过程如下:

image-20230218135627425

​ 在顺序执行行为中,fuzzer的其他编译策略和havoc的变异策略交替执行,而在并行行为中,则存在多个线程,并存在单独的线程来实现havoc变异。

​ 为了压榨havoc的性能,同时也为了使得实验更加科学准确,作者在挑选模糊器时,优先选择了已经发表在顶会上且代码已经开源的fuzzer,包括AFL,AFL++,MOPT,FairFuzz,QSYM。同时,为了验证未使用havoc的fuzzer在集成了havoc后性能是否能有所提升,作者又挑选了两个未使用havoc策略但是能将havoc集成到模糊器上的fuzzer,包括Neuzz和MTFuzz。为了设置对照组,作者还增加了一个没有集成到模糊器上的havoc,记为Pure Havoc。

​ 在挑选测试样本时,作者优先挑选了以上七个fuzzer都覆盖的benchmark,同时,作者还考虑到了代码量的覆盖范围和程序的功能,挑选了以下几个benchmark。

image-20230218144433864

实验测试

在对havoc做测试前作者提到了以下两个问题:

  1. 使用 Havoc的默认设置机制在不同的模糊器上性能如何?
  2. 在修改了havoc的参数设置后havoc在不同模糊器上的表现会怎样呢?

​ 带着这两个问题,作者进行了以下实验,为了保证实验的可靠性,作者执行了五轮测试,每轮测试执行24小时,取平均值作为最后的测试结果。


RQ1:

​ 如下图所示,original表示在默认havoc设置下不同fuzzer的边覆盖效果,Major则是集成了havoc的模糊器在禁用了havoc功能后的表现,integration则是对于未使用havoc的模糊器集成了havoc以后的边覆盖表现效果。

image-20230218144952426

​ 禁用了havoc以后,MOPT和QSYM的的边覆盖影响最大,分别下降了79.4%和62.2%。而使用了havoc以后,Neuzz和MTFuzz的性能分别提高了19.3%和26.6%。基于此,作者得出了第一个结论:

  • 结论一

    使用默认设置的havoc就能在很大程度上提高边覆盖

​ 接下来作者测试了havoc在每个fuzzer中的实际执行时间,如下图所示:

image-20230218150616788

​ 红色框部分表示Pure havoc在仅仅使用一个种子时的表现,带来的边覆盖比AFL高出177%,比AFL++高出257%,比Neuzz高出45%,可以达到和MTFuzz和QSYM差不多的性能。基于此,作者提出了以下结论

  • 结论二

    Havoc 是一个非常有效的工具,仅仅给havoc一个种子就能带来超过已有的一些fuzzer的边覆盖率

  • 结论三

    通过对比各个模糊器中havoc的实际执行时间和带来的边覆盖,可以发现,在一个模糊器中,给havoc足够的执行时间,将可以得到更好的边覆盖结果


RQ2

​ 为了了解havoc在不同的参数设置下在不同的fuzzer中的实际表现效果,作者引入了socket来控制havoc的实际执行时间,其中havoc每次迭代中执行1小时和使用havoc的默认设置情况对比如下图所示:

image-20230218153305562

  • 通过执行havoc足够时间后,可以看到不同fuzzer在每次迭代中执行1小时的havoc后边覆盖差距只有2470,基于此作者得出结论三:

    给havoc充足的执行时间将降低各个fuzzer之间性能的差异

​ 接下来作者测试了AFL在每次迭代中havoc分别执行1小时,2小时,4小时和12小时的情况:

image-20230218153655653

  • 结论五

    只要能给havoc足够的执行时间,在每次迭代中分配给havoc的时间对边覆盖的性能影响并不大

​ 接下来作者还测试了将havoc等几个模糊策略并行执行的方式,看是否能更大限度提高fuzzer的性能,其测试结果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
​ Sequential保证使用的是修改后的havoc,保证havoc的执行时间在一轮测试中能达到12小时,Hybrid-2和Hybrid-3中的havoc执行时间为24小时。

  • 结论六

    给予havoc更多的计算资源虽然能减少程序的执行时间,但性价比并不高

​ 通过以上测试作者已经得出结论,只要给havoc足够的执行时间,不同fuzzer之间的性能差异并不明显,那这个fuzzer的边覆盖相似度到底有多高呢,为了验证这个问题,作者引入了一个参数Jaccard Distance来计算不同fuzzer之间边覆盖的不相似度,其比较结果如下:

image-20230218155628210

​ 通过对以上结果进行分析可以发现四个fuzzer的不相似度极低,而另外的三个fuzzer不相似度高一点的原因作者分析认为是由于它们还采用了符号执行或神经网络的模糊测试方法导致的,因此作者得出以下结论:

  • 结论七

    使用havoc在不同的模糊测试器中依然会发现大量相似的边,而如果使用基于符号执行或神经网络指导的havoc则能更好的实现havoc

​ 但仅仅使用边覆盖这一维度来对havoc的性能进行测试并不全面,因此作者对fuzzer中havoc发现的unique crashes进行测试,测试结果如下:

image-20230218160215869

基于以上表格作者得出如下结论:

  • 结论八

    Havoc在发现潜在的程序漏洞中依然发挥着重要作用

接下来,作者还测试了使用不同的编译器叠加次数(stacking size)和使用不同的变异方法(单元变异和块变异)对Havoc的影响,实验直接在havoc上进行,stacking size的值为2的n次幂,最高位128(AFL支持的最大值)测试结果如下:

image-20230218160824517

​ 通过以上比较可以发现,Stacking size,单元变异或块变异在不同程序中的表现效果并不相同,而它们的实际性能取决于不同的程序,基于此,作者提出了以stacking size 和变异方法为臂,建立一个多臂老虎机模型,记为HavocMAB,其代码模型和设计框架如下所示:

image-20230218161409422

image-20230218161422198

​ 如上图所示,作者建立以一个两层的多臂老虎机,一层表示stack size,存在7个臂,值分别为2,4, 8,…128。Mutator Type则有两个臂,表示选择单元变异或块变异,作者使用了已经被广泛使用的UCB1-Tuned算法来解决多臂老虎机问题,算法如下:

image-20230218162351185

​ 对于给定的时间t,x-j 表示armj 到时间t获取的reward的平均值,n表示多臂老虎机的总执行数,nj 表示armj 执行的次数,o-j 表示样本的变化情况。使用多臂老虎机模型后多个程序的平均边覆盖性能如下所示:

image-20230218163705688

image-20230218163922544

​ 其中Havoc3MAB 表示使用3个线程并行执行的情况,以和同样使用了三个线程并行执行的QSYM对比,可以发现使用了多臂老虎机模型后Havoc的性能提高了11.1%,而和同样使用三个线程的QSYM相比,Havoc3MAB 性能提高了9%。

相关工作总结

在本文中作者的贡献如下:

  1. 研究了havoc在真实世界中的程序的实际性能
  2. 发现对于所有的fuzzer来说,只要给havoc足够的执行时间都可以提高边覆盖同时发现更多的crash
  3. 在技术层面上,作者提出了一个基于多臂老虎机的havoc模型

最后

​ 以上为阅读这篇论文的笔记,然而由于本人水平有限,若文中存在一些技术问题说明错误,欢迎评论区留言更正!

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

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

相关文章

linux异步IO编程实例分析

在Direct IO模式下,异步是非常有必要的(因为绕过了pagecache,直接和磁盘交互)。linux Native AIO正是基于这种场景设计的,具体的介绍见:KernelAsynchronousI/O (AIO)SupportforLinux。下面我们就来分析一下…

大数值金额大写转换(C语言)

关于大数值金额大写转换,在财务管理的应用方面没什么意义。一般来说,千亿级,万亿级的数值就够了。因为在国家级层面是以亿为单位的,也就表达为千万亿,万万亿。在企业层面数值金额转换设置到千亿、万亿就行了。大的集团…

RabbitMQ 入门到应用 ( 四 ) 与SpringBoot整合

5.与SpringBoot整合 5.1.SpringBoot项目中配置环境 5.1.1.pom.xml配置依赖 在 pom.xml 配置文件中声明依赖, 通过Maven导入 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> &l…

天津数据得出的权重

目标层&#xff1a;评价光污染准则层为四个大类&#xff1a;道路、商业、住宅、绿化方案层为25个小类指标但每个大类只和自己下面的几个小类指标相关&#xff0c;不是图示的下面两层全有关联或许考虑把25个小指标提取公共部分&#xff0c;比如路灯亮度、高度、和外墙的距离、光…

RocketMQ 2m-2s-async搭建

本文档是RocketMQ4.8两主两从异步复制的搭建过程&#xff08;也可单机部署&#xff0c;更简单一点&#xff09;,包括监控台界面. 写在前面&#xff1a;本文档适用于4.8版本&#xff0c;其它版本的坑没有踩过不清楚。我是用VMware启了两台虚拟机&#xff0c;环境&#xff1a;Ce…

10 OpenCV图像识别之人脸追踪

文章目录1 级联分类器2 人脸跟踪2.1 相关方法2.2 代码示例CV2中内置了人脸识别等常用的算法&#xff0c;这类算法是通过级联分类器实现的。 1 级联分类器 级联分类器的核心思想是使用多个分类器级联&#xff0c;每个分类器负责检测不同的特征&#xff0c;逐步排除不可能是目标…

Prometheus离线tar.gz包安装

Prometheus离线tar.gz包安装实验环境一、部署前操作二、Master2.1下载2.2解压2.3更改服务目录名称2.4创建系统服务启动文件2.5配置修改2.6启动并设置开机自启2.7访问2.8添加node节点2.8.1 添加方法2.8.2修改Prometheus配置&#xff08;Master&#xff09;实验环境节点ipcpu内存…

数据结构:归并排序和堆排序

归并排序 归并排序(merge sort)是利用“归并”操作的一种排序方法。从有序表的讨论中得知,将两个有序表“归并”为一个有序表,无论是顺序表还是链表,归并操作都可以在线性时间复杂度内实现。归并排序的基本操作是将两个位置相邻的有序记录子序列R[i…m]R[m1…n]归并为一个有序…

已解决zipfile.BadZipFile: File is not a zip file

已解决Python openpyxl 读取Excel文件&#xff0c;抛出异常zipfile.BadZipFile: File is not a zip file的正确解决&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录报错问题报错翻译报错原因解决方法联系博主免费帮忙解决报错报错问题 一个小伙伴遇到问题跑…

python基于django+vue微信小程序的校园二手闲置物品交易

在大学校园里,存在着很多的二手商品,但是由于信息资源的不流通以及传统二手商品信息交流方式的笨拙,导致了很多仍然具有一定价值或者具有非常价值的二手商品的囤积,乃至被当作废弃物处理。现在通过微信小程序的校园二手交易平台,可以方便快捷的发布和交流任何二手商品的信息,并…

【CS224W】(task2)传统图机器学习和特征工程

note 和CS224W课程对应&#xff0c;将图的基本表示写在task1笔记中了&#xff1b;传统图特征工程&#xff1a;将节点、边、图转为d维emb&#xff0c;将emb送入ML模型训练Traditional ML Pipeline Hand-crafted feature ML model Hand-crafted features for graph data Node-l…

被滥用的Slack服务:APT29针对意大利的攻击活动分析

背景 APT29&#xff0c;又名CozyBear, Nobelium, TheDukes&#xff0c;奇安信内部编号APT-Q-77&#xff0c;被认为是与东欧某国政府有关的APT组织。该组织攻击活动可追溯至2008年&#xff0c;主要攻击目标包括西方政府组织机构、智囊团。APT29曾多次实施大规模鱼叉攻击&#x…

linux高级命令之进程的注意点

进程的注意点学习目标能够说出进程的注意点1. 进程的注意点介绍进程之间不共享全局变量主进程会等待所有的子进程执行结束再结束2. 进程之间不共享全局变量import multiprocessing import time# 定义全局变量 g_list list()# 添加数据的任务defadd_data():for i in range(5):g…

snakeyaml自定义pojo写入yml文件时属性字段排序问题

snakeyaml采用LinkedHashMap保存对象&#xff0c;最后写入yml文件的时候&#xff0c;可以按照存入的顺序写入yml&#xff0c;如果采用自定义pojo&#xff0c;虽然可以写入yml&#xff0c;但是属性默认是按照字母顺序进行写入的。 如下所示&#xff0c;定义一个User实体&#xf…

kafka生产者事务踩坑记录

1. 背景 公司需要迁移一个老 spark 项目&#xff0c;之前是消费阿里 LogStore 中的实时数据&#xff0c;处理之后将结果落库。使用的是 spark streaming&#xff0c;batch 时间为 2 分钟。迁移后&#xff0c;需要将 LogStore 切换为 kafka&#xff0c;涉及到了对代码的改动。公…

常见的数据结构

栈&#xff08;stack&#xff09; 栈&#xff08; stack&#xff09;是限制插入和删除只能在一个位置上进行的表&#xff0c;该位置是表的末端&#xff0c;叫做栈顶&#xff08;top&#xff09;。它是后进先出&#xff08;LIFO&#xff09;的。对栈的基本操作只有 push&#x…

linux高级命令之线程

线程学习目标能够知道线程的作用1. 线程的介绍在Python中&#xff0c;想要实现多任务除了使用进程&#xff0c;还可以使用线程来完成&#xff0c;线程是实现多任务的另外一种方式。2. 线程的概念线程是进程中执行代码的一个分支&#xff0c;每个执行分支&#xff08;线程&#…

macos 下载 macOS 系统安装程序及安装U盘制作方法

01 下载 macOS 系统安装程序的方法 本文来自: https://discussionschinese.apple.com/docs/DOC-250004259 简介 Mac 用户时不时会需要下载 macOS 的安装程序&#xff0c;目的不同&#xff0c;或者升级或者降级&#xff0c;或者研究或者收藏。为了方便不同用户&#xff0c;除…

设计模式之委派模式与模板模式详解和应用

目录1 委派模式1.1 目标1.2 内容定位1.3 定义1.4 委派模式的应用场景1.5 委派模式在业务场景中的应用1.6 委派模式在源码中的体现1.6.1 双亲委派模型1.6.2 常用代理执行方法 invoke1.6.3 Spring loC中 在调用 doRegisterBeanDefinitions()1.6.4 SpringMVC 的DispatcherServlet1…

python基于vue微信小程序的校园闲置二手跳蚤商城的设计与实现

在当今社会的高速发展过程中,产生的劳动力越来越大,提高人们的生活水平和质量,尤其计算机科技的进步,数据和信息以人兴化为本的目的,给人们提供优质的服务,其中网上购买二手商品尤其突出,使我们的购物方式发生巨大的改变。而线上购物,不仅需要在硬件上为人们提供服务网上购物,而…