模糊测试面面观 | 模糊测试工具知多少

自1988年威斯康星大学的Barton Miller首次提出模糊测试这一概念以来,模糊测试领域经历了持续长久发展。模糊测试作为一种软件测试方法,旨在通过向程序输入模糊、随机、异常的数据,探测和发现潜在的漏洞和错误。这种方法备受安全研究人员的青睐。随着时间的推移,这一领域呈现出了蓬勃发展的景象,出现了丰富多样的模糊测试工具。

根据测试的特定目标,模糊测试工具可以被划分为不同类别,包括文件格式类模糊测试工具、网络协议类模糊测试工具、操作系统类模糊测试工具、Web服务类模糊测试工具、专注于特定编程语言的模糊测试工具等等。这些不同类型的模糊测试工具为软件安全性的提升带来了创新性的贡献。它们有针对性地探索和发现软件中的漏洞和脆弱性,能够帮助安全人员更好地了解潜在的安全隐患。

模糊测试领域涌现出了众多可供选择的工具,下面将介绍一些知名的开源模糊测试工具,以便帮助读者选择最适合自己需求的工具。

文件格式类模糊测试工具

文件格式类模糊测试工具主要用于测试文件格式解析器的健壮性和安全性,它专门针对某些文件格式,例如PDF、JPEG、MP3等。通过生成不符合文件规范的随机输入数据去尝试触发目标程序中未处理的异常情况,包括缓冲区溢出、内存泄漏等错误。

01

AFL

AFL(American Fuzzy Lop)是由安全研究员Michał Zalewski(@lcamtuf)开发的一款基于覆盖引导(Coverage-guided)的模糊测试工具,它通过记录输入样本的代码覆盖率,从而调整输入样本以提高覆盖率,增加发现漏洞的概率。

02

WinAFL

WinAFL是AFL的Windows版本,是一款专为Windows平台设计的开源模糊测试工具。与传统的AFL不同,WinAFL使用DynamoRIO动态插桩技术来监视目标程序的执行,收集代码覆盖率信息,并依此反馈来调整输入样本。

03

libFuzzer

libFuzzer是一款由LLVM项目开发的开源模糊测试库,用于进行持续、进化的模糊测试。与AFL等其他工具不同,libFuzzer是一个针对库函数的模糊测试器,它直接与目标库函数链接,无需与外部程序进行交互。

网络协议类模糊测试工具

网络协议类模糊测试工具是一种专门用于测试网络协议实现的安全和健壮性的测试工具。通过向目标系统发送随机或半随机的、可能违反协议规范的数据包,试图去引发目标系统的异常行为,例如崩溃、内存错误、或者更严重的安全问题。

01

Peach Fuzzer

Peach之前是一个遵守MIT开源许可证的模糊测试框架,是第一款综合性的开源工具,其中创建模糊器由XML语言实现。Peach主要有3个版本,最初采用Python语言编写,发布于2004年;第二版于2007年发布;Peach 3发布于2013年初,使用C#重写了整个框架。Peach支持对文件格式、网络协议、API等进行模糊测试。Peach提供了丰富的扩展和定制功能,以适应各种不同的测试需求和场景。值得注意的是在2020年Peach被GitLab收购,不再开源。

02

Boofuzz

Boofuzz是一个开源的由Python编写的网络协议模糊测试框架,继承自Sulley。Boofuzz提供了对于网络协议进行模糊测试的规范和功能函数,以此作为基础,我们可以编写针对自己目标的Python脚本,从而可以针对特定目标量身定制模糊测试工具。

03

AFLNet

AFLNet 是一款灰盒协议模糊测试工具,采用了代码覆盖率反馈、种子变异以及状态反馈等技术。与传统的基于生成的协议模糊测试工具相比,它采用Server和 Client之间的通信消息数据作为种子,无需任何的协议规范。本质上是模拟一个Client来发送一系列消息到 Server,并保留可以触发新的代码执行路径或者响应状态的变异数据。AFLNet使用Server 端的响应码来识别消息序列触发的不同状态,根据这种反馈,AFLNet 可以尽可能向有效的状态区域靠近。

操作系统类模糊测试工具

操作系统类模糊测试工具是一种专门针对操作系统内核和相关组件进行模糊测试的工具,旨在自动发现和识别潜在的漏洞和缺陷。通过生成随机或半随机的输入,并将其送入操作系统的各个层次和接口,模糊测试工具试图触发非预期的行为。与常规的模糊测试工具不同,操作系统模糊测试工具需处理更复杂的环境和上下文,通常涉及对底层硬件、驱动、系统调用等进行模拟和测试。

01

kAFL

kAFL(Kernel AFL)是一款专注于Linux内核和其他复杂的内核组件模糊测试的工具。基于流行的AFL设计,kAFL通过自动化、持续地提供随机或半随机输入来触发潜在错误。与AFL不同,kAFL专门针对内核空间的代码进行测试,能够识别出一些用户空间模糊器难以发现的漏洞。kAFL具备虚拟化技术支持,能够在虚拟机中执行测试,从而确保测试过程的隔离和安全。它还采用了覆盖率导向的方法,自动调整输入以最大限度地探索内核代码的执行路径。

02

syzkaller

syzkaller由Google的安全团队开发和维护,是一款高效的内核模糊测试工具。它主要使用Go编程语言实现,兼容Linux、Android、FreeBSD和Windows等多种操作系统,已成功发现上千个漏洞。syzkaller通过不断生成并执行一系列随机化的系统调用,尝试去触发内核的异常行为,如崩溃、死锁或内存泄露。

Web服务类模糊测试工具

Web服务类模糊测试工具是一种专门针对Web应用程序的安全测试工具,用于自动发现潜在的Web安全漏洞。通过生成一系列随机或半随机的HTTP请求,Web模糊器能够测试Web应用程序的各个组件,如URL、表单、参数、头部等。它可以快速识别常见的安全问题,如SQL注入、跨站脚本攻击(XSS)、文件包含等安全问题。

01

WFuzz

WFuzz是用Python实现的Web应用程序安全性模糊工具和库。它基于一个简单的理念:它将给定有效负载的值替换为对关键字的任一引用。它是一款出色的辅助模糊测试工具,可以在HTTP请求中插入各种输入值,用于对不同的Web应用程序组件进行多种复杂攻击,包括参数、认证、表单、头部等等。

02

WebScarab

WebScarab是一款开源的Web应用程序安全测试工具,由OWASP开发和维护。它是一款用Java编写的代理工具,主要用于分析和审查HTTP和HTTPS通信。它包含了一个基础的模糊测试器,能够将模糊测试值注入到应用参数中。

特定编程语言的模糊测试工具

特定编程语言的模糊测试工具是专门为某种编程语言设计的工具,用于自动检测代码中的漏洞和错误。特定编程语言的模糊测试工具有更深入的语言集成和理解,可以更精确地针对特定语言特性进行测试。与其他模糊测试工具相比,这些工具通常能提供更有效的测试,更容易集成到开发工作流程中,并能发现更深入、更特定的问题。

01

go-fuzz

go-fuzz是一款针对Go语言的模糊测试工具,使用覆盖率指导技术自动寻找能触发程序异常的输入。与Go的工具链紧密集成,它可以自动发现和最小化触发漏洞的输入,有效简化漏洞诊断和修复过程。作为Go开发人员和安全工程师的重要工具,go-fuzz在许多知名Go项目中成功地发现了漏洞。

02

Kelinci

Kelinci是一款配合AFL进行Java程序模糊测试的工具,通过插桩Java字节码来分析程序覆盖率。它通过创建一个C语言接口与AFL通信,接收AFL的变异数据,并通过TCP传递给Java端的Instrumentor。Instrumentor则负责将这些数据传递给Java的原始目标程序,并将运行结果反馈给C语言接口。Kelinci与AFL共同构建了一个闭环数据流,使AFL能够间接地对Java程序进行有效的模糊测试。

03

fuzzilli

fuzzilli是Google开源的一款JavaScript的模糊测试工具,使用swift语言开发。它整合了语法变异、模板生成、覆盖引导等多种技术,使用自定义中间语言用于语法变异,再将变异后的中间语言转换成JS代码。fuzzilli在3大主流JS引擎的测试中,收获颇丰,发现了不少漏洞,

这些开源工具为安全专业人员提供了更多选择,使他们能够更有效地发现安全漏洞,进而推动整个软件安全领域向前发展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/42043.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

助推打造全球研发中心城市 | 李彦团队:研发,带来了二次文艺复兴

2017年,长沙经联合国教科文组织评选,成为中国首座获评世界“媒体艺术之都”称号的城市。6年后,基于时代发展的新要求,长沙再次提出了“打造全球研发中心城市”的目标,并朝着新的方向迈进。 旧有的优势产业在新的研发浪…

信安通用基础知识

文章目录 密码学经典误区PGP优良保密协议信安经典其它安全手段XSS与CSRF cross site request forgeryCSRF的利用逻辑CSRF示例CSRF防范检查Referer字段添加校验token XSS cross site scripting common weakness enumeration常见密码api误用(摘自毕设参考文献&#xf…

“深入探究JVM内部机制:如何实现Java程序的运行环境?“

标题:深入探究JVM内部机制:如何实现Java程序的运行环境? 摘要:本文将深入探究Java虚拟机(JVM)的内部机制,重点讨论JVM如何实现Java程序的运行环境。我们将从JVM的结构、类加载、内存管理、垃圾…

01 Python 网络爬虫:爬虫技术的核心原理

不夸张地说,现在哪怕是初中生,只要花点儿时间、精力稍微按「网络爬虫」的开发步骤学习了解一下,也能把它玩得贼溜。 听起来感觉是很高大上的东西,但实际上并不复杂,也就是使用了某种编程语言按照一定步骤、规则主动通…

用Java实现原神抽卡算法

哈喽~大家好,好久没有更新了,也确实遇到了很多事,这篇开始恢复更新,喜欢的话,可以给个的三连,什么?你要白嫖?那可以给个免费的赞麻。 🥇个人主页:个人主页​​…

七月 NFT 行业解读:游戏和音乐 NFT 引领增长,Opepen 掀起热潮

作者:lesleyfootprint.network 2023 年 7 月,NFT 市场的波动性持续存在,交易量呈下降趋势。然而,游戏和音乐 NFT 等领域的增长引人注目。参与这些细分领域的独立用户数量不断增加,反映了这些领域的复苏。 本综合报告…

lvs负载均衡群集

lvs组成 1、lvs基于内核态的netfilter框架实现的IPVS功能,工作在内核态用户配置VIP等相关信息并且传递到IPVS 就需要用到IPVSadm工具。 2、ipvsadm:IPVSadm是lvs用户态的配套的工具,可以实现VIP和RS 增删改查。 IPVSadm就是类似于iptables…

侯捷 八部曲 C++面向对象高级开发(上)+(下)【C++学习笔记】 超详细 万字笔记总结 笔记合集

文章目录 Ⅰ C part1 面向对象编程1 头文件与类的声明1.1 c vs cpp关于数据和函数1.2 头文件与类1.2.1 头文件1.2.2 class的声明1.2.3 模板初识 2 构造函数2.1 inline 函数2.2 访问级别2.3 ctor 构造函数2.3.1 ctor 的写法2.3.2 ctor/函数 重载2.3.3 ctor 放在 private 区 2.4 …

记vite打包vue项目内存溢出问题解决

出现问题 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory解决方法一: 1.根据网上的资料是通过全局下载npm包increase-memory-limit: npm install -g increase-memory-limit2.在项目目录执…

学习Vue:路由参数与查询参数传递

在Vue.js中,路由与导航不仅涉及到页面之间的切换,还包括了向页面传递参数以及获取查询参数的功能。本文将详细介绍如何在Vue Router中传递路由参数和查询参数,帮助您更好地理解和使用这些功能。 路由参数的传递 路由参数是指在URL中的动态片…

K8s内部的网路模式实现理解

overlay 网络模式 在 Kubernetes 中,overlay 网络模式被用于实现容器之间的网络通信。 K8s 使用了一种称为容器网络接口(Container Network Interface,简称CNI)的规范,该规范定义了容器如何进行网络连接。实际上&…

SDP 与Rtcp-fb

1、sdp介绍 SDP(Session Description Protocol)是一种用于描述多媒体会话的协议,它在会话层起着重要的作用。SDP的主要功能是提供会话的元数据和配置信息,以便参与者能够协商和建立一致的会话。 以下是SDP在会话层的作用&#x…

生活随笔,记录我的日常点点滴滴.

前言 😘个人主页:曲终酣兴晚^R的小书屋🥱 😕作者介绍:一个莽莽撞撞的🐻 💖专栏介绍:日常生活&往事回忆 😶‍🌫️每日金句:被人暖一下就高热&…

catboost推理开GPU加速

核心设置 model.predict(feature, task_type‘GPU’) 代码参考 # 训练配置 params {"catboost": {"n_estimators": 7000,"learning_rate": 0.03,"eval_metric": "AUC","loss_function": "RMSE",&qu…

【sgDragSize】自定义拖拽修改DIV尺寸组件,适用于窗体大小调整

核心原理就是在四条边、四个顶点加上透明的div,给不同方向提供按下移动鼠标监听 ,对应计算宽度高度、坐标变化 特性: 支持设置拖拽的最小宽度、最小高度、最大宽度、最大高度可以双击某一条边,最大化对应方向的尺寸;再…

一次Linux中的木马病毒解决经历(6379端口---newinit.sh)

病毒入侵解决方案 情景 最近几天一直CPU100%,也没有注意看到了以为正常的服务调用,直到腾讯给发了邮件警告说我的服务器正在入侵其他服务器的6379端口,我就是正常的使用不可能去入侵别人的系统的,这是违法的. 排查 既然入侵6379端口,就怀疑是通过我的Redis服务进入的我的系统…

Vue基础-1.知识导航

知识导航(就问全不全) 当学习 Vue.js 时,除了基本的 HTML、CSS 和 JavaScript 知识外,还有一些其他的技术和语法需要了解,例如 ES6 和 TypeScript。以下是您可能需要学习的一些基础知识和对应的学习资源,我…

css中变量和使用变量和运算

变量: 语法:--css变量名:值; --view-theme: #1a99fb; css使用变量: 语法:属性名:var( --css变量名 ); color: var(--view-theme); css运算: 语法:属性名…

vue3 rouer params传参的问题

route.params在页面刷新的时候数据会丢失,所以vue3 弃用了params方式! 但是,vue3又更新了一个替代params的方式:history API import { useRouter } from "vue-router" const router userRouter; // 跳转路由&#xff…

JDBC封装与设计模式

什么是 DAO ? Data Access Object(数据存取对象) 位于业务逻辑和持久化数据之间实现对持久化数据的访问 DAO起着转换器的作用,将数据在实体类和数据库记录之间进行转换。 ----------------------------------------------------- DAO模式的组成部分 …