未知的未知:九大模糊测试工具
模糊测试是一个很重要的流程,有助于发现影响当今复杂应用程序的未知关键错误,有时候甚至能暴露出一些让人“脑洞大开”或者“七窍生烟”的奇葩问题。优秀的模糊测试工具常能够在程序面向公众发布或部署前,就发现那些难以察觉的漏洞“大坑”。
作者:安全牛|2020-03-12 11:17
收藏
分享
别被“模糊”这词儿给迷惑了。模糊测试是一个很重要的流程,有助于发现影响当今复杂应用程序的未知关键错误,有时候甚至能暴露出一些让人“脑洞大开”或者“七窍生烟”的奇葩问题。优秀的模糊测试工具常能够在程序面向公众发布或部署前,就发现那些难以察觉的漏洞“大坑”。
模糊测试的工作机制是什么?
模糊测试是针对完整代码的自动化测试过程。从要求程序完全编译这一点来看,模糊测试看起来类似于动态应用程序安全测试(DAST)工具。但是,DAST工具和模糊测试工具查找的是完全不同的东西。DAST能够扫描漏洞,比如可被黑客执行远程过程调用的漏洞,或者围绕暴露HTTP和HTML接口的弱防护。模糊测试工具则与之相反,通过向应用提供非预期输入,找出这么做将导致的怪异或非故意结果。
理解模糊测试的工作原理,我们不妨以网络银行或者电子商务应用为例,在银行业务中,假设用户转账时无意间在金额输入框里输入了一个负数,程序怎么处理?是把钱转入还是转出?而在电子商务应用程序中,如果用户试图往购物车中添加数百万甚至数十亿件商品,会发生什么状况?购物网站会不会整个崩溃?或者直接给他们数十亿的免费商品?
只要程序员考虑周密、代码严谨,大多数此类商业逻辑漏洞都会被事先预测到。但没人能够预想到所有的情况。用户面对输入框犯傻的时候总会出现一些“奇葩”的非预期行为。此外,如果攻击者向应用、加密内容、操作系统指令或原始代码注入命令行函数,又会出现什么情况?
模糊测试工具能够测试、发现并报告这些假设情况。有些模糊测试工具使用随机字符和输入字符串,有些则聚焦最有可能出现的问题领域。例如,就整数字段而言,最有可能触发非预期程序行为的罪魁祸首,就是零值、大数和负值。在检测目标程序时,还有其他一些模糊测试工具会尝试提供上下文相关但非预期的输入。
无论哪种情况,最好的模糊测试工具产生的数据,必然不会偏离预期输入太远,不会马上就被软件的解析器当成无效输入而拒绝。相反,它们提供的数据有很大概率被程序接受,但又是程序员没预料到的。然后,这些工具就会报告被测试应用中非预期输入触发了哪些行为。
开发人员经常会使用很多开源模糊测试工具,少量商业应用工具,以及各种模糊测试框架。
下面我们列出九款最好的模糊测试工具。
九大优秀模糊测试工具
1. 效率之王:American Fuzzy LOP
American Fuzzy LOP程序可以轻松部署,配置简单。该程序建立在对最佳模糊测试器运行机制和最有用结果的大量研究基础之上,旨在最小化编译查询返回结果的耗时,尽量降低对系统的影响。
事实上,American Fuzzy LOP的开发者对免干预运行的能力非常自信,以至于几乎没设置什么控制按钮。用户可以看到一个怀旧风的漂亮界面,显示模糊测试器当前执行的动作,以及所发现的结果。
但即便开发者对于American Fuzzy LOP找出被测程序漏洞的能力非常自信,该工具也兼容其他模糊测试器,能够生成可被其他更专业的“半自动”模糊测试工具使用的测试数据。这么做可以提升这些工具的效率,并且减少其运行时间。
2. 慢工出细活:Radamsa
Radamsa是一线模糊测试器,向程序发送样本查询,触发非预期结果。
Radamsa最大的卖点就是其准确性。GitLab上的开发者页面列出了这款模糊测试器在流行软件中发现的现实漏洞。尽管用户可能需要多花点时间精力来生成有效输入,但如果这一过程能够产生更多切实的可修复漏洞,那这个时间还是花得很值。
3. 战果累累:Honggfuzz
面向安全的Honggfuzz模糊测试器是多线程的,而且经过了优化,可以利用各种系统资源。很多模糊测试工具必须运行多个实例才能达到这种效果,但Honggfuzz自动使用所有可用CPU核心加速模糊测试过程。
Honggfuzz不仅仅适用于Windows,也可以测试在Linux、Mac,甚至Android环境中运行的应用程序。由于其多平台适用的特性,Honggfuzz有一系列例子和测试用例可供开发人员使用,或一字不改直接套用,或根据自身需求加以修改,或者仅做简单参考以便设计自己的模糊测试规则。
可能是由于能在多平台执行模糊测试的能力,Honggfuzz用来展示开发人员捕获漏洞的战果页面相当庞大。开发者介绍,找出引发全球安全补丁的OpenSSL关键漏洞的模糊测试工具仅此一款。
4. 精益求精:Libfuzzer
Libfuzzer工具尚在开发过程中,新版本不时发布。因此,使用者应在开始模糊测试会话前,检查自己使用的是否是最新版本。
Libfuzzer旨在成为所谓的演进式模糊测试工具。该工具将模糊输入馈送至目标程序的特定进入点或输入域,然后根据被测试应用程序对这些查询的反应,跟踪该代码还触及了哪些其他部分。获得这些新信息后,Libfuzzer修改其查询,查看自身是否能进一步渗透。
这款模糊测试工具的目标,是产生比传统模糊测试工具更相关的结果。开发人员表示,该工具已经取得了诸多成果,并将继续精炼调整,获得更高的准确性。
5. 开源医生:OSS-Fuzz
OSS-Fuzz工具面向开源软件。开发者想要支持开源社区,所以OSS-Fuzz面向此类应用和程序做了优化。
OSS-Fuzz支持以C、C++、Rust和Go语言编写的开源程序,不过开发者说也可以支持其他语言。
很明显,用OSS-Fuzz帮助开源社区创建更安全应用程序的目标已经相当成功了。OSS-Fuzz已经在200个开源程序中找到了14,000多个漏洞。
6. 瘦死的骆驼:Sulley模糊测试框架
得名于《怪兽公司》电影中浑身长满蓝毛的小怪兽,Sulley模糊测试框架既是模糊测试引擎又是测试框架。与其他大多数模糊测试引擎不同,Sulley旨在一次性无缝运行数日,持续检查应用程序对模糊输入的怪异响应,然后记录下这些结果。该工具适用于想要激活模糊测试引擎后去做别的事儿的用户。当他们数小时或数天后返回查看时,Sulley已经将所有发现都呈现在报告里了。
Sulley有很多高级功能,比如依托硬件平台的并行执行能力。该工具还能在无需用户编程的情况下,自动确定测试案例的哪种特定顺序会触发错误。
Sulley框架在开源模糊测试社区广为人知,但已经有很长一段时间没有更新了。即便如此,GitHub上免费可用的最新版本仍活跃在模糊测试领域,且运行良好。
7. 青出于蓝胜于蓝:boofuzz
boofuzz工具基于Sulley的模糊测试框架。其名称同样源于《怪兽公司》,取自其中的小姑娘Boo。boofuzz项目是Sulley“停更”的后继产物。该工具使用Sulley核心代码,但致力于不断改良。boofuzz是作为Python库安装的。
boofuzz项目发布以后,开发人员增加了在线文档、对更多通信媒介的支持、可扩展故障检测和一个易于使用的界面。该工具还将串行模糊测试、以太网和UDP广播添加到了默认功能里。boofuzz还可将测试结果以CSV文件格式导出,以便在修复检出故障时可以先研究所有被触发问题的完整列表。
Sulley中的很多已知漏洞已被boofuzz摒除,该工具目前在GitHub保持活跃更新。
8. 希望之星:BFuzz
当红模糊测试工具之一,BFuzz基本上还处于beta测试版阶段。免费可用,用户可报告使用过程中遇到的任何问题,以便开发人员能够修复。话虽如此,BFuzz目前的战绩不容小视,发现了逼出Epiphany Web补丁的漏洞和可致Mozilla Firefox触发缓冲区溢出的漏洞。
BFuzz是基于输入的模糊测试器,以URL和浏览器作为其输入方式。这个意义上讲,该工具很像DAST工具,适合重度依赖这些东西的公司企业,因为BFuzz使用类似的测试方法,但找寻不同类型的错误。
BFuzz开发人员明显为之投入了巨大精力,该模糊测试器必成大器。YouTube上甚至都有视频展示BFuzz工具的使用。
9. 智能化之选:PeachTech Peach Fuzzer
PeachTech Peach Fuzzer是PeachTech公司出品的商业模糊测试工具,很多繁琐的事情都不需要测试人员亲力亲为了。测试人员只需要用该公司所谓的Peach Pit加载并配置该模糊测试引擎即可。
Peach Pit是预先编写好的测试定义,覆盖一系列不同平台。PeachTech表示,每个Pit包含适用特定目标的规范,比如目标摄入的数据结构,数据流入和流出被测设备或应用程序的方式等。这样测试人员就可以几乎不用设置,便能将精力集中在他们的模糊测试上了。用户使用PeachTech创建自己的Pit也很简单,令Peach Fuzzer还可用于专用系统。
由于Peach Fuzzer引擎可以Peach Pit编程的原因,几乎没有任何系统不在该工具的测试范围之内。Mac、Windows、Linux都可以测。也可以用于模糊测试网络协议、嵌入式系统、驱动、物联网设备,只要是能接受命令而易受模糊输入困扰的东西,就能用Peach Fuzzer测试。
除了Peach Fuzzer之外,安全牛还建议留意以下四大AI模糊测试工具,没准能帮你找出价值连城的零日漏洞:
1. 微软Security Risk Detection
2. 谷歌 ClusterFuzz
3. Synopsys Defensics Fuzz Testing
4. Fuzzbuzz