用户友好的模糊测试:Sienna Locomotive
模糊测试是发现软件漏洞的有效方法,但许多开发者并未使用。我们希望通过发布Sienna Locomotive改变这一现状,这是一款面向Windows的新开源模糊测试工具,强调可用性。Sienna Locomotive旨在让安全专业知识有限的开发者也能轻松进行模糊测试。其以用户为中心的特性使其易于配置、运行和解释结果。
模糊测试未被充分利用
在Trail of Bits,我们每天使用最先进的程序分析工具,但即使这些工具也无法取代随机模糊测试发现漏洞的潜力。
显式测试软件漏洞非常重要。许多开源开发者曾相信“众目睽睽”假说——开源项目不易受安全问题影响,因为任何人都可以搜索代码中的漏洞。过去几年表明,这仅适用于高价值目标,且能力有限。例如,2014年OpenSSL运行在至少三分之二的Web服务器上,但研究人员仍花了两年多才发现Heartbleed漏洞。开源软件构成了互联网的绝大部分,我们不能再次依赖这种运气。正如谷歌在宣布OSS-Fuzz时尖锐指出的:“开源基础必须稳定、安全、可靠,因为裂缝和弱点会影响所有基于它构建的人。”
我们自问:为什么开发者不模糊测试自己的软件?我们能做些什么来改变这一点?
进入门槛
模糊测试工具未被使用的一个可能原因是它们相对难以使用,尤其是在Windows上。特别是WinAFL(事实上的标准)对其可目标函数有相当严格的要求。如果您的代码不符合这些约束,WinAFL将无法正常工作。尽管Windows拥有75%以上的市场份额,大多数模糊测试工具是为Unix平台设计的,这无助于解决问题。很容易理解为什么开发者通常不愿设置模糊测试工具来测试其Windows软件。
解决方案
我们相信安全工具只有被实际使用才能成功。提高代码覆盖率或每秒执行次数的模糊测试技术几乎是每次安全会议的新研究主题,但如果代码在架子上积灰,这些改进就毫无意义。我们将此视为改善安全状况的机会:不是构建更智能或更快的模糊测试工具,而是构建一个进入门槛更低的模糊测试工具。
介绍Sienna Locomotive
为了解决这些问题,我们设计了Sienna Locomotive,具备三个特性,使模糊测试尽可能无痛。
简单配置
我们希望Sienna Locomotive可用于测试各种软件,因此我们让开发者轻松定制模糊测试工具以适应其特定应用。新目标只需配置可执行文件路径和命令行字符串即可。除了为不自行退出的应用程序设置超时外,用户需要配置的设置非常少。
演示视频中配置Fuzzgoat应用程序的示例。
强大的函数目标定位
开发者不必挑剔可以目标哪些函数,也不必修改二进制文件以目标函数进行模糊测试。Sienna Locomotive运行目标应用程序一次,扫描接受用户输入的函数(如ReadFile或fread),并允许开发者选择单个函数调用来目标。这在模糊测试进行增量读取的程序时特别有用,因为它允许用户仅模糊测试文件的特定部分。
内置Windows实用程序的示例函数目标窗口。
有用的崩溃分类
模糊测试工具产生大量严重程度不同的崩溃。您希望首先调试最关键的崩溃,但如何知道从哪里开始?Breakpad和!exploitable等工具分析崩溃程序以估计崩溃的严重程度,帮助开发者决定首先调试哪些崩溃。9月,我们开源了Winchecksec,这是Sienna Locomotive的一个组件,为我们的分类系统提供支持。Sienna Locomotive结合了Breakpad和!exploitable使用的启发式方法的重新实现,并增强了来自Winchecksec的信息和自定义污点跟踪器,以估计每个崩溃的严重程度。这帮助开发者优先调试和修复哪些崩溃。
包含分类崩溃信息的导出目录。
Sienna Locomotive适合您吗?
如果您自认为更像是Windows开发者而非安全专家,Sienna Locomotive可能是适合您的工具。以相对最小的努力,它可以帮助您测试代码对抗比您编写单元测试所能覆盖的更大空间的变异输入。根据您程序的结构,您还可以通过仅模糊测试新实现的功能来提高开发期间的测试效率。
Sienna Locomotive为了可用性做出了一些性能权衡。如果您更感兴趣的是测试用例吞吐量而非可用性,或者您在Chrome中寻找漏洞并需要每秒执行数千次迭代,Sienna Locomotive不适合您。
尝试一下!
如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News