当前位置: 首页 > 科技观察

寻找最奇怪的错误:十大Fuzzing工具_0

时间:2023-03-14 22:32:06 科技观察

在创建应用程序时,程序员会花费大量时间来预测用户将如何使用他们的软件以及这些操作会产生什么影响。优秀的程序员不仅具有简洁高效的编码品质,而且能够考虑到突发情况。但是没有人能够预知用户所有可能的操作,尤其是非常规操作(比如黑客攻击,安全人员对此尤为关注),这时就需要进行fuzzing。什么是模糊测试?模糊测试(以下简称模拟测试)是一个自动化过程,测试引擎试图向应用程序发送大量意外的、错误的或随机的输入,以观察程序的反应。然后根据情况编写合适的响应码,尽可能保证应用的稳定性和安全性。例如,如果电子商务网站用户订购了200亿件紧身夹克,会发生什么情况?网站会崩溃吗?会打折吗?还是将其视为正常订单?再举一个例子,如果用户输入了有效的优惠券代码,但输入错误的地方会怎样?回到网络安全,如果恶意用户输入命令行功能、加密内容、操作系统命令或原始代码,应用程序会发生什么?反应?一个好的建模引擎可以回答所有这些问题甚至更多。原型制作工具如何工作?由于建模的价值,有相当多的商业工具出售,以及GitHub等平台上数百名有才华的程序员共享的免费工具。有不同类别的分析工具,例如那些发送大量随机信息的工具,例如,通过非常规输入测试正在运行的程序,还有专门用于测试可编程接口(API)的工具。在大多数情况下,原型设计的目标是生成一些有效的意外数据,当然,至少是测试软件的解析器可以接受的数据。然后,提交应用程序对异常输入的响应结果,最典型的是程序崩溃。仿真工具可支持多种编程语言进行测试,如C、C++、Go、Rust、Python、Java、Kotlin、Scala和Swift。还有一些测试工具只使用一种语言进行应用程序测试。例如,针对Python程序员的特定工具。但不管是什么语言,合适的才是最好的。本文试图推荐一些顶级的原型设计工具。商业工具来自于OWASP官网的列表,免费工具是在GitHub上搜索“fuzz”,按照“starring”的流行度数排序,同时也考虑到另一个流行度指标,即项目被分叉(fork)。四种商业模式1.beSTORMBeyondSecurity的beSTORM是商业市场上最通用的模式之一。在不访问源代码的情况下执行测试,使用几乎任何应用程序、协议、语言甚至硬件,甚至测试为特定行业和专业应用程序设计的设备和程序。示例包括物联网、过程控制应用、兼容CAN总线的汽车应用、航空工具和低功耗蓝牙设备。多功能性是beSTORM最突出的价值。程序员只需要学会使用单一界面就可以对几乎无限数量的设备或应用程序进行模拟测试。beSTORM测试平台预置了250个测试模块,并且可以轻松添加新模块以涵盖替代或专有应用程序。此外,beSTORM还可以作为云服务访问。通过这种方式,大型机构可以购买该平台,然后向不同地点的多个用户提供对建模工具的访问。2.CIFuzz该工具内置于Ubuntu虚拟机中,可部署在本地或云端。将CIFuzz集成到您的CI/CD(持续集成和持续交付)管道中,以在每个“拉取请求”上自动运行它。由于它是CI/CD过程的一部分,因此可以防止程序在进行新更改时无意中添加漏洞或破坏程序。如果出现问题,也可以快速标记问题,从而很容易确定何时引入了编程错误。每当CIFuzz检测到错误时,它会立即开始发送该输入的不同组合,以尝试映射问题的范围。然后生成详细报告以消除误报,并使程序员能够在修复代码时手动重现这些错误。CIFuzz引擎需要直接访问被测程序或应用程序的源代码,因此它只支持某些语言和框架,主要是C、C++、Java和Go。但该工具正在致力于集成其他框架,如.NetCore和Python。3.Synopsys模拟测试套件(FTS)与大多数产品相比,Synopsys的模拟测试产品有不同的方法。FTS是一套测试工具,每个工具都针对特定的语言、协议或用例,而不是尽可能匹配应用的测试工具。这种方法的美妙之处在于,用户可以购买他们需要的建模工具,而无需购买他们??可能永远不需要的额外功能。每个工具都有一组标准的功能,例如一组高度相关的现成测试用例、结果和报告分析组件、用于配置工具的图形界面以及有关如何使用它的文档等。FTS包括各种有针对性的测试工具,从DNS服务器等通用组件到CAN总线或IKEv2等小众专用应用程序。购买该工具也可能附带一定程度的支持。4.这个来自MayhemforCodeForAllSecure的模拟具有大多数模拟引擎的优点,并且还具有额外的学习功能,因此它可以随着时间的推移变得更加高效。该平台可以在最少的人为干预下独立运行。在持续运行过程中,MayhemforCode可以学习环境,挖掘使用系统的深度信息。它甚至可以根据所学内容动态生成测试用例。简而言之,它使用的时间越长,它就会变得越高效和独立。该平台目前支持Java、Python、Ada、OCaml、Fortran、Jovial、C、C++、Go和Rust等语言,无需访问源代码。六大免费/开源模型测试1.PeachTechPeachTech的模型测试直到2020年一直是商业付费产品,直到2020年被GitLab收购并发布了PeachTech项目的免费版本,但不再支持和更新。PeachTech投入了大量精力,高度可配置,几乎可以在任何语言或任何操作系统上运行。但是,它的文档非常复杂,并且取消了产品支持。用户需要了解大量关于模拟测试的知识,以及所使用的语言或框架,才能获得该工具的好处。不适合非专业人士。2、GoogleOSS-FuzzGoogle在为Chrome操作系统或浏览器开发新组件时,模拟测试起到了很大的帮助作用,Google将其开源。OSS-Fuzz可用于x86-64和i386版本,并利用其他几个建模引擎,包括AFL++、libFuzzer和Hongfuzz,并支持多种语言,包括C、C++、Rust、Go、Python和Java/JVM代码。OSS-Fuzz是目前GitHub上评价最高的项目之一,拥有庞大的社区,在开源社区中有很多支持。3.FuzzDBFuzzDB本身并不是一个模拟引擎,而是一个复杂的攻击载荷和注入技术库(可能是世界上最大的库),用于破坏或入侵没有得到适当保护的程序和应用程序。这些攻击以多种方式分类,例如按平台类型、已知问题、潜在源暴露等。使用FuzzDB库的最佳方式是将其与可编程模拟引擎结合使用。将FuzzDB中的攻击模式加载到模拟引擎中,结合模拟的随机输入,可以覆盖面广,从已知的攻击和漏洞到未知的攻击和未发现的漏洞。4.Ffuf(FuzzFasterUFool)Ffuf是一个用Go语言编写的仿真引擎。作为一款免费工具,它的效果出奇地好。它可以执行最常见的探测功能,例如检查应用程序如何响应未知的GET和POST请求。Ffuf几乎没有用户界面,主要使用命令行功能。但是一旦你了解了这些功能,你就会明白它有多么强大。Ffuf在GitHub上有很多部署的例子,开发者会定期发布新的功能和特性。虽然它是免费的,但它是一种赞助模式,新功能将首先发布给付费赞助该工具进一步开发的人。30天后,其他人可以使用新功能。5.GoogleClusterFuzzGoogleClusterFuzz是一个用来检查Chrome漏洞的模拟引擎,也是上面提到的第二个免费工具OSS-Fuzz项目后端的一部分。但ClusterFuzz适用于任何程序或应用程序,而不仅仅是开源领域的程序或应用程序。在后端ClusterFuzz的配合下,OSS-Fuzz已经成功发现了谷歌产品的29000多个bug和开源项目的26000多个bug。ClusterFuzz还被设计为可以在任何环境中运行并且具有高度可扩展性。该项目的GitHub页面将ClusterFuzz列为一个使用100,000个虚拟机的项目,可扩展性可以说是任何人都可能需要的。6.go-fuzz这个平台是一个评分很高的模拟工具,专门测试go语言的包。它主要用于解析复杂文本和二进制输入的数据包。根据该项目作者的Github页面,go-fuzz对于加固系统特别有用,这些系统可以解析来自潜在恶意用户的输入,例如通过网页公开部署的任何内容。go-fuzz的文档很好地描述了如何使用它,并且它附带一个包含大量测试函数和许多初始输入设置示例的存储库。意见模糊测试不再只是一个异想天开的高级选项,它现在被ISO和其他知名机构的许多重要标准所推荐。可以预见,在不久的将来,它必将成为程序测试的标准之一。