定向Fuzz技术概述

admin 2025年1月2日10:34:54评论5 views字数 3367阅读11分13秒阅读模式
定向Fuzz技术概述
逆向与漏洞挖掘实验室,点击蓝字关注
定向Fuzz技术概述

定向Fuzz技术概述

定向Fuzz技术概述

    定向Fuzz的概念出现在2017年[1],其设计理念与传统Fuzz截然不同:我们假设一个应用场景,我们只想知道某一个函数(或某一个代码段)是否存在漏洞,并且可能测试时间有限的情况下,那么以AFL[2]为代表的传统Fuzz工具能否适应这样的场景?

    显然答案是否定的,AFL没有办法将自己引导到目标点的代码段。定向Fuzz技术应运而生:定向Fuzz需要事先给定target(代码段的位置),认为只要输入能够到达target,就算完成任务,并不优先关注除了target以外的其他代码段可能存在的漏洞。定向Fuzz主要应用在补丁测试、漏洞PoC、静态分析验证等场景。尤其当测试时间有限,或者目标代码量很大的情况下,定向Fuzz更能体现出其优势,相比于以往的Fuzz技术,可以大幅度的减少测试的开销。

    目前,学界关于定向Fuzz的主要研究方向分为以下两类:(1)如何确定目标点?一种是通过预先给定目标点,如AFLGo和Hawkeye。另一种是通过深度学习的方法,通过学习大量的漏洞代码样本建立模型,预测程序中可能存在漏洞的函数(或基本块)并以此为目标点,如V-Fuzz[5]和Suzzer[6]。(2)基于什么指标引导Fuzzer到达目标点?AFLGo[3]和Hawkeye[4]通过在静态分析时提取CFG与CG,计算每一个基本块到达目标点的Dijkstra距离,基于此距离为每一个种子分配不同的能量,使得Fuzzer趋向于距离目标点更近的种子。另一种是基于深度学习模型预测分数引导,对每一个基本块(或函数)打分,分数越高意味着越有可能存在漏洞,Fuzzer更倾向于执行经过更高分数的基本块(或函数)的种子。

    在下文中,我们将介绍具有代表性的AFLGo:Directed Greybox Fuzzing(17' CCS)和Hawkeye:Towards a Desired Directed Grey-box Fuzzer(18' CCS)两篇文章,以展示定向Fuzz的具体逻辑。

AFLGo

AFLGo是第一款灰盒定向Fuzz工具,通过在插桩时计算Dijkstra距离,使得每一个种子运行到程序任何位置时,Fuzzer都可以发现该种子与target之间的距离,为每一个种子分配不同的能量。其能量分配基于模拟退火算法,当运行时间越长,距离越近的种子获得的能量越高,变异的次数越多。

定向Fuzz技术概述

图1 AFLGo整体流程示意图

如图所示,首先提取目标程序的CFG与CG,然后通过AFLGo的Distance Calculator计算Dijkstra距离,将距离作为桩代码的一部分。插桩后的程序送入Fuzzer,AFLGo同样将边覆盖率提升的种子加入队列,并根据其距离等因素为每一个种子分配不同的score,以增加或减少其havoc次数。

      定向Fuzz技术概述

图2 AFLGo采用的模拟退火算法

如图2所示,刚开始运行时,AFLGo会平等对待每一个种子;当运行时间越长,距离越远的种子分配的能量就越少,那么会存在一个问题即长路径可能会被“饿死”,但是长路径并不意味着不能触发crash[7];同时,AFLGo仅采用havoc变异策略,havoc的确可以探索更多的程序分支,但是当距离目标点很近时,havoc大概率会破坏掉现有的种子结构,缺乏一种适应性的变异策略。

    即使AFLGo存在部分缺陷,但其思想开创了定向Fuzz的先河,具有很高的借鉴意义。接下来这篇文章是发表在2018年CCS会议上的Hawkeye,对AFLGo存在的问题进行了完善。

定向Fuzz技术概述
Hawkeye

Hawkeye定义了定向Fuzz的4个特征:

    P1.DGF必须有个鲁棒性很好的路径机制,能引导Fuzzer走所有到达目标点的路径,而不是偏向特定路径。

    P2.DGF的静态分析应该平衡开销和实用性,搜集必要信息。

    P3.DGF应该优先调度种子以快速到达目标点,根据距离合理分配能量。

    P4.DGF应该根据种子覆盖的不同程序状态,采取适应性的变异策略。

    而在上述特征中,AFLGo存在一些问题:

    P1:AFLGo采用短路径优先且权重默认为1,路径越短则认为越快到达target。但是短路径不一定能够触发漏洞,且在AFLGo中,长路径随着Fuzz时间增加,被分配的能量越来越少。

    P2:AFLGo仅考虑显示函数调用,即忽略了函数指针调用。那么很有可能导致某些函数没有前序调用,导致CG不完整,路径距离无意义。

    P3:虽然AFLGo应用了模拟退火策略来使短距离种子具有更多的时间被Fuzz,但是在种子队列的排序中,短距离种子并没有优先级。

    P4:AFLGo放弃了确定性变异策略,只采用havoc/splice两种策略。但是当种子离target距离很近时,AFLGo会大概率破坏种子。缺少一种适应性的策略。

    因此,Hawkeye在设计中进行了一些完善:细化了函数距离,如对于不同次数的函数调用分配不同的距离、不考虑循环语句次数、不考虑分支难易等;引入指针分析,采用了上下文不敏感流不敏感的指针分析;在距离计算中加入了覆盖期望集,考虑覆盖函数的相似度,相似度越高能量越高;设计了三层种子队列,将种子的优先级分为重要、次要、一般三个等级;引入了适应性的变异策略,在程序早期采用havoc等粗粒度变异,进入目标函数后转为细粒度变异策略防止破坏种子结构。

定向Fuzz技术概述

图3 Hawkeye总体流程图

定向Fuzz技术概述

总结

  在本文中,我们简单介绍了定向Fuzz的研究意义与研究方向,以及两篇在定向Fuzz领域有代表性的文章,简单分析了两篇文章的优点与不足。定向Fuzz是当前研究热点,仍存在一些问题:定向Fuzz的引导机制并不完善以及在较难触发的target的命中次数上表现仍有不足Hawkeye这种三层种子队列的设计是否能够完全实现种子优先级有待商榷基于深度学习的定向Fuzz在实际应用中的效果并不理想等。这些都是未来工作中将要解决的问题,欢迎有兴趣的读者与我们互相交流,互相学习。

定向Fuzz技术概述

参考文献

[1] Chen Chen, Baojiang Cui, Jinxin Ma, Runpu Wu, Jianchao Guo, and WenqianLiu. 2018. A systematic review of fuzzing techniques. Computers & Security 75 (2018), 118–137.

[2] American Fuzzy Lop (AFL) Fuzzer. http://lcamtuf.coredump.cx/afl/technical_detais.txt. (2017). Accessed: 2017-05-13.

[3]Marcel Böhme, Van-Thuan Pham, Manh-Dung Nguyen, and Abhik Roychoudhury.2017. Directed Greybox Fuzzing (CCS ’17). ACM Press, New York, NY, USA, 2329–2344.

[4] Chen H , Xue Y , Li Y , et al. Hawkeye: Towards a Desired Directed Grey-box Fuzzer[C]// the 2018 ACM SIGSAC Conference. ACM, 2018.

[5]Li Y , Ji S , Lv C , et al. V-Fuzz: Vulnerability-Oriented Evolutionary Fuzzing[J]. 2019.

[6Zhao Y , Li Y , Yang T,et al. Suzzer: A Vulnerability-Guided Fuzzer Based on Deep Learning[C]// International Conference on Information Security and Cryptology. Springer, Cham, 2019.

[7] LLVM. 2015. libFuzzer. https://llvm.org/docs/LibFuzzer.html

定向Fuzz技术概述
定向Fuzz技术概述
扫码关注我们
每天有最新消息
逆向与漏洞挖掘实验室,关注软件动静态分析与漏洞挖掘相关研究。

微信:

FuzzWiki

原文始发于微信公众号(FuzzWiki):定向Fuzz技术概述

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月2日10:34:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   定向Fuzz技术概述https://cn-sec.com/archives/597399.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息