DARWIN Survival of the Fittest Fuzzing Mutators读论文笔记

news2024/11/24 17:53:45

DARWIN: Survival of the Fittest Fuzzing Mutators

作者背景

达姆施塔特工业大学:成立于1877年,是德国著名理工科大学

‡萨格勒布大学: 是克罗地亚最大的大学,也是该地区历史最悠久的大学

§拉德堡德大学:位于荷兰奈梅亨市,又称奈梅亨大学,欧洲顶尖的研究型学术院校

发表时间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wtjRTCBW-1683793219416)(null)]

研究支持

这项工作得到了德国联邦教育和研究部StartUpSecure资助项目 “Sanctuary”(16KIS1417)、德国联邦教育和研究部和黑森州高等教育、研究和艺术部在ATHENE内的支持,以及欧洲研究理事会(ERC)在欧盟地平线2020研究和创新计划(赠款协议号952697)的支持

相关链接

[论文链接](ndss2023_s159_paper.pdf (ndss-symposium.org))

[开源代码](TUDA-SSL/DARWIN: Code for the NDSS’23 paper “DARWIN: Survival of the Fittest Fuzzing Mutators” (github.com))

这篇论文虽然是2023年发表的,但研究是从2020年开始做,因此一些数据并没有及时更新,这里可以和另一篇发表在2022 IEEE/ACM 44th International Conference on Software Engineering (ICSE)上的论文One Fuzzing Strategy to Rule Them All进行对比,这篇论文相关内容可以参考以下链接:

论文链接

CSDN链接

微信公众号链接

这篇论文作为对比,记为HavocMAB


背景

优化种子调度策略存在瓶颈

基于变异的模糊测试中的交互非常复杂且模糊实例具有随机性常常导致不可预测的结果,改善这种脆弱交互的大多数努力都集中在优化种子调度上。然而,像 Google 的 FuzzBench 这样的实际结果突出表明,这些方法在实践中并没有始终如一地显示出改进

现有的优化变异调度表现较差,且参数配置较为复杂

现有的变异策略(论文以MOPT为例)

MOPT
  • 提出了一种改进的粒子群优化算法(PSO)来学习全局最优变异概率分布
  • MOPT 的粒子群算法同时具有局部和全局最优概率分布,使得寻找最优解和算法本身变得复杂,并且在模糊化过程中使用成本更高
  • MOPT 引入了各种用户可配置的参数,直接引导优化过程,因此用户需要解决另一个复杂的问题来避免非最优调度
  • MOPT在fuzzbench上并没有比AFL优秀

此处插入前不久发表的另一篇论文为例(在论文中作者并没有提及这篇论文):

Havoc
  • 现有的变异策略都需要用户对参数进行设置

  • 使用不同的编译器叠加次数(stacking size)和使用不同的变异方法(单元变异和块变异)对Havoc的影响,作者提出对于不同的程序,应该设置不同的stacking size

  • 作者提出了以stacking size 和变异方法为臂,建立一个多臂老虎机模型,记为HavocMAB

    image-20230511104706216

  • 作者只对比了Havoc的覆盖信息,评估结果表明,与采用三个并行线程增加计算资源的 QSYM 相比,HavocMAB 可以使所有测试项目的边覆盖率平均提高11.1% ,甚至略高于最先进的 QSYM。进一步使用三个并行线程执行 HavocMAB,在所有的基准项目上,QSYM 的平均边缘覆盖率提高了9%。

  • 但是作者在文中并没有提到发现任何crash

问题:寻找(近似)最优变异调度策略来改进模糊化算法

通过以上一些说明,可以发现现有的变异调度方法也未能令人信服,因为缺乏实际的改进或太多的用户控制参数,其配置需要关于目标程序的专家知识,这对用户的能力具有较高要求。

因此作者提出了一个不需要用户进行参数设置的寻找(近似)最优变异调度策略来改进模糊化算法的变异调度器,通过进化算法推断出下一个模糊迭代的最优选择是哪个变异算子,该算法在AFL的基础上进行构建,称为Darvin。

Metaheuristics

  • 该方法协调局部改进和更高层次策略之间的交互,以创建一个能够逃避局部最优并在解决方案空间中执行鲁棒搜索的过程
  • 元启发式优化算法一般分为基于单个解的元启发式算法和基于种群的元启发式算法
  • 基于种群的元启发法对一组解进行处理(例如,进化算法(EA)和粒子群优化(PSO)等群算法
  • 元启发式优化算法需要平衡“多样化”与“集中化”两种性质;
    • 多样化是指算法能够探索搜索空间中的有希望区域并逃逸局部最优解。这有助于发现更广阔的搜索范围。
    • 集中化是指算法能够聚焦在当前最优解附近寻找更好的相邻解。这有助于充分利用有希望的搜索范围获得更优的结果。
    • 元启发式方法在应用于具体的优化问题时,多样化与集中化性质的交互作用决定了其效果的好坏。如果两者达到良好平衡,则有助于算法寻找到更优的全局解

方法

DARWIN利用进化策略,在一个类似于强化学习的设置中,为变异操作符选择近似理想的概率分布,以避免在次优变异体上浪费模糊迭代

生成的概率分布不是静态设置的,而是在模糊过程中学习的,并且动态地适应目标程序

具体方法之下:

执行过程

image-20230511154410024

如上图所示,Darvin的执行包括四个步骤:

  1. 在havoc阶段模糊测试器从队列中选择一个输入用例,并随机选择下一个要应用的变异方法。最初,变异选择的概率分布是均匀的
  2. 应用一次变异之后,模糊测试器决定是否应继续变异此输入用例,或者将其在插桩的目标应用程序上进行测试
  3. 生成报告,变异调度器通过DARWIN 进化策略学习报告并优化概率分布
  4. 在下一次迭代中应用优化后的概率分布

进化算法

ES在μ个父节点上执行,在每次迭代中通过随机扰动算子产生一系列不同的修正解,个数用 λ 表示。在评估每个子解决方案之后,将在下一次迭代中选择所有子解决方案和当前父解决方案中的最佳子解决方案作为父解决方案λ通常设置为4,μ作者通过测试将其设置为5,它的值主要影响覆盖速度,对覆盖影响较为轻微

伪代码如下图所示:

image-20230511154705553

解的编码和扰动

作者使用二进制向量的方式(0 1)来表示是否选择一个变异操作,扰动则通过一位的字节翻转来实现,如下图所示:

image-20230511155033453

目标函数

作者以发现的新的独特路径作为反馈信号来作为评估单个解决方案的主要标准

同时Darwin并不需要用户进行参数的选择和输入


实现效果

image-20230511155202866

如上图所示为各个模糊器在10个benchmark中的路径覆盖数,通过对比可以发现对于大部分的测试用例,Darvin都能到达最高的路径和边缘数量,同时在第一小时内都有最快速的增长。

对于cxxfilt,AFL的性能明显优于基于变异调度的MOPT和Darvin,且MOPT和Darvin表现效果相似,作者对cxxfilt的变异历史进行分析:如下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SSB8uMNr-1683793219390)(null)]

作者提出导致这一差异主要有两个原因:

  • 在40分钟后DARWIN和MOPT更重视mutator 8和10
  • cxxfilt更重视分解重载函数,变异调度器只能给严重依赖解析的模糊目标带来一点好处。然而,它们的性能影响降低了模糊器的原始执行速度,导致覆盖率较低
结论

通过以上实验,Darvin的平均边覆盖相比于Mopt提高了6.77%,相比于AFL提高了1.73%

fuzzbench 代码覆盖评分

image-20230511160228491

作者还将这一方法在Ecofuzz上进行集成,在fuzzbench上的覆盖评分如下:

image-20230511160412200

Crash

image-20230511160458622

作者对比了在21个crash中三个fuzzer发现的crash的数量和时间,如上图所示,可以发现:

  • 在总共发现的21个错误中,Darvin可以最快地找到其中的15个
  • MOPT 在4种情况下是最快的,但仅仅是因为在其中两种情况下,Darvin不能触发 bug (MOPT 平均需要两天以上才能找到 bug)。
  • AFL 只能找到12个缺陷

因此,在发现crash上AFL明显优于其他两个fuzzer,作者接下来还测试了在24小时连续10次运行中发现的bug数量,"max "指的是在一次运行中遇到的最大错误。"uniq "指的是在所有10次运行中的独特崩溃的数量,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-guyVAJbq-1683793219406)(null)]

DARWIN 还在 objeccopy 中发现了一个全新的错误(一直到24年前引入的 binutils 2.39) ,这个错误导致了内存泄漏。Objeccopy.c 中的 copy _ relocation _ in _ section 并不是在所有可能的情况下都释放缓冲区(relpp)。这个 bug 很难触发,因为函数只在高堆栈深度调用。导致 bug 的测试用例是通过基于相对较早的测试用例和来自实验中期的测试用例的拼接发现的。我们负责任地向各自的开发人员披露了分类错误,他们承认并修复了这个错误


工作总结

  • 提出了一种新的变异调度方法 DAR-WIN,这是第一种利用进化策略的变异来优化变异算子的概率分布的变异调度方法
  • 利用变异调度算法对 AFL 进行扩展,实现了一个 DARWIN 原型系统,并将其在EcoFuzz上也进行了扩展,并且,这一工具并没有引入任何新的参数来避免用户的应用障碍
    露了分类错误,他们承认并修复了这个错误


工作总结

  • 提出了一种新的变异调度方法 DAR-WIN,这是第一种利用进化策略的变异来优化变异算子的概率分布的变异调度方法
  • 利用变异调度算法对 AFL 进行扩展,实现了一个 DARWIN 原型系统,并将其在EcoFuzz上也进行了扩展,并且,这一工具并没有引入任何新的参数来避免用户的应用障碍
  • 评估了Darvin和MOPT,AFL的覆盖效果,在代码覆盖方面,Darvin明显优于AFL和MOPT,尤其是在binutils上。此外,在 MAGMA 上对 DARWIN 进行评估,结果显示 DARWIN 最快的触发了21个错误中的15个。最后,DARWIN 发现了20个独特的 bug (包括一个之前未报告的 bug) ,比 AFL 多出66% ,

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

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

相关文章

Redis与SpringBoot的集成:自定义RedisTemplate类,创建一个工具类:可以帮助我们更好的使用redis中的API

这里使用的环境是在windows环境下,也可以放在服务器中,只要知道端口号和ip即可,如果有不知道怎么部署环境的可以看这篇文章去在Windows环境下去部署redis环境redis之jedis:通过redis的API与Java的集成_不想睡醒的梦的博客-CSDN博客…

css的clip-path学习

文章目录 clip-path的几个值polygon多边形circle圆形ellipse椭圆形inset 矩形round后面是四个角的度数 一个简单的应用,比如画一段曲线 参考博文 clip-path的几个值 自己学习后,先把clip-path理解为在原图上绘制轮廓,显示的内容是轮廓内的内…

2023苹果商务管理模式分发app完全指南

随着苹果对企业级开发证书的管控越来越严格,越来越多的企业级证书到期后,苹果不再予以续约,但是很多app都有企业内部分发需求,不希望自己的应用被公开上架。这时候,我们可以参考苹果官方的建议,使用商务管理…

繁华三千如梦散,红尘俗世要释怀

岁月的折痕在眼角盛开,一深,一浅,交错着旧时光的梦。 梦里是累积的回忆,厚厚的凌乱一地。 那些,都是悄悄溜走的充满烟火气的日子。 生活像是流水账一般,就这样过了,一天又一天,一年…

ConcurrentHashMap进阶面试题

ConcurrentHashMap 1.8的优化 存储的时候的优化写数据的时候加锁的优化扩容时的优化,有一个协助扩容的概念计数器的优化,在记录元素个数时,使用的类似与longAdder的形式,不会过度消耗CPU资源 为什么多线程情况下longAdder会比ato…

人体工学椅真的很舒服

前言 人体工学椅是现代办公室中必不可少的家具之一。作为一款专门设计为舒适、健康和高效的椅子,它为人们提供了更好的工作和学习体验。 人体工学椅的设计理念是以人体工程学为基础,根据人体骨骼生理学、生物力学和心理学等多个角度进行科学的设计。它…

公路工程公路bim数据与GIS数据融合应用

摘要: BIM技术因其自身的协同性、可模拟性以及可视化优势,能够补足传统项目管理存在的短板,成为新一代项目管理模式。本文将运用BIM技术打造一体化管理平台,达到项目管理的智能化管理水平,实现更易维、更安全、更节能…

谈一谈数据库设计原则

到开发的时候才发现,原来后端不是最难的,最难得是数据库的设计,往往有时候开发新模块的时候才发现,之前数据库设计的一些问题,今天就来简单谈谈数据库设计方面的一些原则。 数据库范式 ​ 通过将数据结构分解成小的部…

第五十四章 Unity 移动平台输入(下)

本章节我们介绍一个模拟器插件。这种插件比较多,比如EasyTouch,Lean Touch,Joystick Pack等等。EasyTouch是一个使用非常广泛的插件,支持点击,拖拽,遥感等很多常用功能。不过遗憾的是,该插件已经…

[JAVA]直接插入排序

插入排序就像玩扑克牌一样,把元素按照大小插入到一个已经排好序的序列中,直到全部元素排好。 假设我们拿到了一个数组,请问我们该从哪一个元素开始着手于直接插入排序呢? 答案是:第二个元素 我们可以假设,第…

微服务测试如何测试?

本文将讨论微服务测试的重要性、挑战和最佳实践。 微服务架构是一种越来越流行的构建复杂分布式系统的方法。在此体系结构中,大型应用程序被分成较小的、独立的服务,这些服务通过网络相互通信。微服务测试是确保这些服务无缝协同工作的关键步骤。本文将…

《微服务实战》 第五章 Spring Cloud Netflix 之 Ribbon

前言 Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具,其主要功能是提供客户端的负载均衡算法和服务调用。 1、负载均衡 负载均衡(Load Balance) ,简单点说就是将用户的请求平摊分配到多个…

【论文阅读19】GloVe: Global Vectors for Word Representation

论文十问十答: Q1论文试图解决什么问题? Q2这是否是一个新的问题? Q3这篇文章要验证一个什么科学假设? Q4有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员? Q5论文中提到的解决方…

Packet Tracer - 使用 CLI 配置并验证站点间 IPsec VPN

Packet Tracer - 使用 CLI 配置并验证站点间 IPsec VPN 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 交换机端口 R1 G0/0 192.168.1.1 255.255.255.0 不适用 S1 F0/1 S0/0/0 (DCE) 10.1.1.2 255.255.255.252 不适用 不适用 R2 G0/0 192.168.2.1 255.…

Oracle数据库安装教程,并实现公网远程连接

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle,是甲骨文公司的一款关系…

黑客的真实生活是怎样的?他们真的能挣很多钱么?

作者:l浪费的时间 黑客这一群体,在普通人眼中就是神一般的存在。 黑客差钱吗?他们不差钱。当然是靠装逼活着,很多黑客只想钻研技术攻破个大公司玩玩,搞得轰轰烈烈,就能吹一辈子牛了。 一、黑客靠什么赚钱…

Nginx静态资源防盗链

1.什么是资源盗链 简单地说,就是将别人的资源用到自己的页面展示给用户。 2.效果演示 1)准备图片 这两张图片直接在浏览器中访问都是可以打开的。 github图片地址:https://github.githubassets.com/images/modules/site/home-campaign/her…

linux命令sort, uniq ,tr, cut,split,paste,eval

sort 以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序。比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。 语法格式: 格式1 sort [选项] 参数 格式2 cat file | sort 选顶选项含义-n按照数字进行排序…

MySQL8.0安装教程(很详细)

1.进入mysql官网 2.点击DOWNLOADS去下载页面,页面往下滚动,点击MySQL Community (GPL) Downloads 下载社区版 3.点击MySQL Installer for Windows–>选择window安装版 4.选择下面这一项,点击Download 5.点击No thanks, just start my down…

kali 装pwngdb报错版本不兼容

小白垃圾笔记而已,不建议阅读。 报错是这个: 安装pwndbg的时候报的错。 这个具体不知道啥原因,但是还好有师傅,其实这样装好后是可以用的,只是不兼容,可能有些功能会受限制。 师傅这样说: pwn…