应用程序模糊测试侧重于被测系统的输入和输出。对于桌面应用程序,这包括测试各个方面,例如
- 用户界面(UI)元素,检查按钮序列和文本输入。
- 命令行选项,确保正确处理不同的输入参数。
- 导入和导出功能,特别是文件格式处理(见下文的文件格式模糊测试)。对于网络应用程序,攻击向量可扩展到 URL、表单、用户生成的内容和远程过程调用 (RPC) 请求。
另一方面,协议模糊涉及向被测应用发送篡改或伪造的数据包。在某些情况下,模糊器可能充当代理,在重放请求之前实时更改请求。
这种方法旨在发现网络协议及其实现中的漏洞。
最后,文件格式模糊法用于评估应用程序如何处理不同的文件格式。它生成多个畸形样本并依次打开。当应用程序崩溃时,调试信息会被保留下来,以供进一步分析。
这种文件格式模糊测试主要针对两层:
- 解析器层(容器层):这将评估文件格式约束、结构、约定、字段大小、标志以及与格式本身相关的其他方面。
- 编解码器/应用层:这将深入到较低层次的攻击,探测程序更深层次的内部结构。
这种模糊类型并不常见,但近来逐渐受到重视。这类工具和实例包括:
- 通用文件格式模糊器,如 Ilja van Sprundel 的 “mangle.c”,可修改头数据。
- Zzuf,可用作模糊文件生成器。
- Hachoir 等工具,可用作开发文件格式模糊器的通用解析器。
这些类型的模糊测试在识别漏洞和加强软件系统安全性方面发挥着至关重要的作用。
模糊测试工具有哪些?
一些免费的开源模糊测试工具,为识别和缓解软件应用程序中的漏洞提供了重要资源:
1.Google OSS-Fuzz
Google的OSS-Fuzz项目是一项开源计划,源于他们在开发Chrome OS和 Chrome浏览器时对模糊测试的广泛使用。
它利用各种模糊引擎,包括AFL++、libFuzzer和Honggfuzz。
兼容C、C++、Rust、Go、Python、Java/JVM等语言,还可能兼容其他语言。
支持x86-64和i386版本,拥有强大的社区支持。
2.FuzzDB
FuzzDB是一个广泛的攻击有效载荷和注入技术库,旨在暴露应用程序中的漏洞。
按平台类型、潜在问题、源暴露等进行分类。
非常适合与可编程模糊引擎一起使用,结合已知和未知的攻击模式。
3.Ffuf(Fuzz Faster U Fool)
Ffuf 是一个用Go编写的模糊引擎,是一个功能强大、基于命令行的工具。
它功能强大,基于命令行,适用于常见的模糊任务,如测试应用程序对未知 GET和POST请求的响应。
定期更新新功能;支持赞助模式,可立即获得更新。
4.Google ClusterFuzz
谷歌的ClusterFuzz用于发现Chrome浏览器中的漏洞,它与OSS-Fuzz项目集成,可以对任何程序或应用程序进行模糊测试。
值得注意的是它的扩展能力,甚至可以运行在10万台虚拟机上进行大规模测试。
5.go-fuzz
备受推崇的模糊平台,用于测试Go语言包,尤其是解析复杂输入的语言包。
对于加强解析来自潜在恶意源(如基于网络的应用程序)的输入的系统而言,该平台非常有价值。
6.Jazzer.js
Jazzer.js是Code Intelligence开发的一款专为Node.js平台定制的覆盖引导型进程内模糊器。
它以libFuzzer为基础,为JavaScript生态系统引入了仪器驱动的突变功能。
它是通过系统识别漏洞来增强Node.js应用程序安全性的理想工具。
模糊测试的优点和局限性
使用Fuzz测试有以下几个优点:
- 自动化:模糊测试可配置为自动运行测试,只需最少的人工干预,从而节省时间和资源。
- 系统化方法:模糊测试的随机输入消除了人为偏差,发现了人工测试人员可能遗漏的漏洞。
- 适用于封闭系统:在封闭系统中,由于内部工作原理模糊不清,模糊测试往往是唯一可行的选择。例如,在人工智能和深度学习等输入输出关系复杂且不明确的应用中,模糊测试是必不可少的。
但是,模糊测试也存在一些局限性:
- 遗漏某些攻击类型:模糊测试无法有效识别不会导致程序崩溃的安全威胁,如间谍软件、病毒、蠕虫、木马和键盘记录程序。
- 设置复杂:管理和监控模糊测试需要专业的编码知识和有效的错误处理。
- 范围有限:模糊测试仅提供错误检测,但不能对安全性、质量和有效性进行全面评估。在软件开发过程中,有必要采用功能测试和 beta 测试等其他测试方法。
结论
软件漏洞对网络安全构成了巨大威胁,CVE 报告和开放源代码漏洞呈指数级增长。网络犯罪的激增进一步加剧了采取强有力安全措施的紧迫性。
漏洞评估至关重要,但人工识别具有挑战性,尤其是在复杂的软件中。模糊测试作为一种自动化、高效的方法,提供了一种令人信服的解决方案。它善于发现隐藏的缺陷并增强安全性,包括各种类型,如应用程序、协议和文件格式模糊测试,从而增强软件的安全性。
虽然模糊测试可能会漏掉某些攻击类型,需要编码方面的专业知识来进行设置和监控,而且只能对软件安全性进行部分评估,但总体而言,模糊测试对于在当今不断变化的威胁环境中确保软件应用程序的安全和降低风险至关重要。它与其他测试方法相辅相成,形成了现代软件安全的整体方法。
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)**
[外链图片转存中…(img-XgvzgegM-1712791949754)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!