G.O.S.S.I.P 阅读推荐 2023-06-19 SELECTFUZZ

渗透技巧 11个月前 admin
295 0 0

今天要为大家推荐的论文是来自IEEE S&P 2023的SELECTFUZZ: Efficient Directed Fuzzing with Selective Path Exploration,由香港中文大学SecLab完成并投稿。

G.O.S.S.I.P 阅读推荐 2023-06-19 SELECTFUZZ

定向模糊测试(directed fuzzing)是一种流行的漏洞检测技术。与传统的模糊测试(fuzzing)致力于提高代码覆盖率不同,定向模糊测试专注于检测特定代码块(在本文中称为”fuzzing targets”)的安全问题。分析人员通常将可疑的漏洞代码标记为fuzzing targets。具体而言,通过选择fuzzing targets,定向模糊测试可以用于以下方面的应用:验证安全补丁的完整性,验证静态工具检测的漏洞,以及复现1-day漏洞等。

作者提出SelectFuzz来提高定向模糊测试的效率。为了帮助读者更好地理解,作者将通过一个例子进行说明。图一展示了一个被测试软件的控制流图(CFG)。假设代码块5是fuzzing target。现在有一个seed,它的执行路径是1 -> 3 -> diverging (即在代码块3处偏离5),该seed通过mutation后可能生成三类inputs。第一类1 -> 3 -> 4 -> diverging;第二类1 ->  -> 3 -> diverging;第三类只发现了unreachable code。对于这三类inputs,用红色字体表示新发现的代码块。即第一类发现了代码块4;第二类发现了代码块1到3的新的代码块(比如在if loop里的代码块,这个if的true和false都流向代码块3);而第三类发现了不能到达代码块5的代码。

G.O.S.S.I.P 阅读推荐 2023-06-19 SELECTFUZZ

作者将使用上述例子来说明以往的工作,并展示SelectFuzz相对于这些工作的优势。第一类工作在AFL的基础上引入了距离指标(distance metric)来衡量输入的优劣。AFLGo (CCS’ 17)是典型采用这种方法的模糊测试工具。具体而言,AFLGo更倾向于执行路径更接近fuzzing targets的输入。就以上例子来说,第一类输入的执行路径离代码块5更近,因此将会被赋予更多的能量。然而,这类方法的局限性在于不会排除任何类型的inputs,即会测试所有的代码。具体来说,即使每个第一类输入被赋予了更多能量,但如果fuzzer只能生成少量的第一类输入,那么它仍然会将大部分能量分配给第二类和第三类输入,因为他们占据了原始的input queue。第二类方法在Beacon(SP’22)中首次提出。Beacon通过识别不可达代码(unreachable code)并在执行到不可达代码时提前终止,从而只模糊测试可以到达目标代码的部分代码。反应到例子,Beacon的好处是排除了所有的第三类输入。然而,Beacon的局限性在于无法区分第一类和第二类输入。这意味着,即使模糊测试工具生成了一个输入,使得该输入的执行路径到达了代码块4,Beacon仍然会将大量的能量分配给那些在代码块3处早期偏离目标代码的输入,因为这些输入可以持续地发现从代码块1到代码块3的新代码块。

作者发现并不是所有可到达的代码都对定向模糊测试重要。具体而言,作者集中于模糊测试relavant code,即目标代码在控制和数据上依赖的代码。为了将无关代码排除在模糊测试范围之外,作者不对其进行终止执行,因为它可能存在于可到达的路径中。相反,作者选择性地只对相关代码进行插桩。用这个例子的话,观察控制流图(CFG),尽管SelectFuzz执行了所有代码块,但是许多代码块没有提供任何反馈。实际上,SelectFuzz对代码块1、3、4、5进行插桩以实现目标代码的快速到达。通过仅对相关代码进行插桩,SelectFuzz只从相关代码中获取反馈,尽管它可能还会执行许多无关的代码块,但它不会选择仅发现无关代码的inputs,因为这些代码对SelectFuzz来说是不可见的。因此,SelectFuzz能够将绝大部分能量分配给发现relavant code的inputs。与Beacon相比,这使得SelectFuzz能够持续取得进展,以实现目标代码的到达,而不是重复测试代码块3和之前的大量的reachable code。除了选择性插桩外,SelectFuzz还采用了其他技术提高效率,比如基于reaching probability的distance。感兴趣的读者可以阅读文章。

为了评估SelectFuzz的有效性,作者在相同的设置下与其他定向模糊测试工具进行了比较实验。与基准工具AFLGo相比,SelectFuzz实现了最多46.31倍的速度提升。与state-of-the-art tool Beacon相比,SelectFuzz和Beacon都能提高定向模糊测试的效率,但改进程度在不同案例中存在差异。实验进一步表明,SelectFuzz和Beacon的方法相互补充。作者分析了导致SelectFuzz显著改进的因素。首先,由于SelectFuzz仅对代码的一小部分进行插桩,因此插桩开销非常低。此外,SelectFuzz仅测试relevant code,该部分仅占总代码块的约2%。相比之下,Beacon对所有reacable code进行模糊测试,占总代码块的约12%。这种测试范围的差异使得SelectFuzz能够将更多的能量和资源分配到关键部分的代码中。作者提供了一些案例进一步说明,比如在CVE-2019-10873中,SelectFuzz仅测试软件0.5%左右的代码块,并在4个小时内触发了指定的crash,而AFLGo则需要超过40个小时才能触发相同的crash。最后,在检测新漏洞方面,作者把已有CVEs的root causes作为fuzzing targets来测试一些常用软件,SelectFuzz在三天内成功地检测出了14个由于补丁不完整而引起的新漏洞。


       

论文下载:https://seclab.cse.cuhk.edu.hk/papers/sp23_selectfuzz.pdf

作者已开源artifacts、代码和Docker镜像:https://github.com/cuhk-seclab/SelectFuzz


原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2023-06-19 SELECTFUZZ

版权声明:admin 发表于 2023年6月19日 下午9:35。
转载请注明:G.O.S.S.I.P 阅读推荐 2023-06-19 SELECTFUZZ | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...