2021 SoK: The Progress, Challenges, and Perspectives of Directed Greybox Fuzzing

本文深入研究了定向灰盒模糊测试(Directed Greybox Fuzzing, DGF),分析了28个先进fuzzer,探讨了定向模糊测试的挑战、解决方案及未来展望。DGF能有效定位特定目标,提高测试效率,尤其适用于补丁测试、bug复现和特殊bug查找。文章提出了DGF在二进制代码支持、目标自动识别、权重区分等方面的挑战,并给出了可能的解决方案。此外,还讨论了优化输入生成、种子优先级、能量分配和数据流分析等关键技术,以及DGF在多目标关系开发和技术集成上的潜在改进方向。" 51363482,4870035,Swift编程:深入理解filter函数,"['Swift编程', '数组操作', '字典处理', '过滤', '谓词']
摘要由CSDN通过智能技术生成

摘要

灰盒模糊已经成为最具可扩展性和实用性的软件测试方法。大多数灰盒模糊工具都是基于覆盖率的,因为代码覆盖率与bug覆盖率是紧密相关的。然而,由于大多数覆盖的代码可能不包含错误,盲目扩展代码覆盖的效率较低,特别是在角落的情况下。不像基于覆盖的fuzzer以一种无方向的方式扩展代码覆盖,有方向的fuzzer将大部分的时间预算花在到达特定的目标位置(例如,bug倾向区)而不会浪费资源去强调不相关的部分。因此,直接灰盒模糊特别适合于补丁测试、bug复制和特殊bug查找等场景。本文首次对定向灰盒模糊进行了深入的研究。我们调查了28个与DGF密切相关的最先进的fuzzer(82%是在2019年之后发布的),这些fuzzer有各种定向类型和优化技术。基于DGF的特征,我们提取了15个度量指标,对收集到的工具进行全面评估,并将该领域的知识系统化。最后,总结了该领域面临的挑战,并提出了该领域的展望,旨在促进和推动未来的研究。

介绍

我们调查了28个与DGF密切相关的最先进的fuzzer(82%是在2019年之后发布的),这些fuzzer有各种定向类型和优化技术。我们根据DGF的特征提取15个指标,对收集到的工具进行全面评估,并将该领域的知识系统化。-在评价已有研究成果的基础上,总结了DGF研究面临的六个挑战,包括二进制代码支持、目标自动识别、权重区分、全局最优偏差、缺少间接调用和勘探开发协调。我们揭示了这些挑战背后的深层原因,并提出了可能的解决方案。-我们对未来的发展方向进行展望,旨在促进和推动该领域的研究。

内容

CGF与DGF的区别:种子优先级,目标的参与,勘探-开发。

DGF的应用

  • 补丁测试,
  • bug复现,
  • 知识提升。DGF可以通过集成人类分析师的知识或辅助技术来促进程序测试。人在回路通常用于软件测试,这有助于根据以前的经验识别关键系统调用或安全敏感程序站点(例如,内存分配函数malloc()、字符串操作函数strcpy()),从而将模糊化引导到容易出错的部分[35]。辅助技术,如符号执行[44]和tait分析[46]可以用来克服测试中的障碍。静态分析[12]和基于机器学习的检测方法[32]的初步结果可作为DGF的潜在易受攻击目标。
  • 节能。
  • 特殊的bug查找。最后,DGF可以用于根据定制的指标寻找特殊的bug。例如,在内存使用[31]的指导下找到不受控制的内存消耗错误,在类型状态违背[28]的指导下找到useafter-free错误。使用DGF可以大大提高发现行为复杂bug的效率。

为了进行全面的评估,我们根据DGF的特征提取了15个指标。我们进一步将指标分为三类,包括基本信息、实现细节和优化方法。接下来,我们将集中讨论与DGF关键技术相关的特性,包括定向类型、输入优化、种子优先级排序、功率分配、变异调度和数据流分析。详细评估见表一。
在这里插入图片描述
定向类型
G定向灰盒模糊,H定向混合模糊
对于定向型DGF, DGF最初是由PUT中手动标记的目标位点引导的,如AFLGo[21]和Hawkeye[42]。然后,研究人员注意到目标之间的关系也有帮助。例如,为了触发释放后再使用的漏洞,必须按照特定的顺序执行一系列操作(例如分配内存、使用内存和释放内存)。UAFuzz[22]和UAFL[28]利用目标序列而不是目标站点来寻找免费后使用的漏洞。LOLLY[23]还使用目标语句序列来指导greybox模糊处理,以触发由多个语句的连续执行导致的错误。Berry[24]使用符号执行来增强LOLLY沿着复杂路径到达深层目标时的方向性。除了目标序列,研究人员还提出了多种机制来指导模糊过程。Memlock[31]由内存使用情况指导,以发现不受控制的内存消耗错误。v - fuzzy[32]由脆弱性概率指导,通过深度学习模型预测脆弱性概率,将模糊过程引导到可能存在脆弱性的代码区域。SemFuzz[25]和DrillerGo[26]利用从CVE描述和git日志中获取的语义信息来直接模糊并生成PoC漏洞。1DVUL[44]由补丁相关分支直接更改原始数据流或控制流来发现1天内的漏洞。SAVIOR[30]和ParmeSan[29]的指导信息来自于消毒剂。IJON[35]利用人工分析师的注释来指导fuzzer克服重大障碍。RVFUZZER[34]由控制不稳定性指导,以发现机器人车辆的输入验证错误。PFUZZER[27]显式地指向输入解析器,以很好地覆盖可能的输入空间。DGF已经从到达目标位置发展到捕捉复杂的深层行为bug。
输入优化
标记目标之后,DGF需要生成种子输入来调用模糊过程。良好的种子输入可以使模糊过程更接近目标位置,提高后续突变过程的性能。根据Zonget al.,平均超过91.7%的AFLGo输入无法到达有bug的代码[54]。因此,优化输入生成对于提高DGF的方向性有很大的空间。seeddedfuzz[46]致力于改进初始种子的生成和选择,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值