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

自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引擎的测试中,收获颇丰,发现了不少漏洞,

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 Ansible Galaxy 安装角色

使用 Ansible Galaxy 安装角色 使用 Ansible Galaxy 和要求文件 /home/curtis/ansible/roles/requirements.yml 。从以下 URL 下载角色并安装到 /home/curtis/ansible/roles : http://rhgls.area12.example.com/materials/haproxy.tar 此角色的名称应当为 balancer …

【无监督】2、MAE | 自监督模型提取的图像特征也很能打!(CVPR2022 Oral)

文章目录 一、背景二、方法三、效果 论文:Masked Autoencoders Are Scalable Vision Learners 代码:https://github.com/facebookresearch/mae 出处:CVPR2022 Oral | 何凯明 | FAIR 一、背景 本文的标题突出了两个词: masked…

微信小程序前后端开发快速入门(完结篇)

这篇是微信小程序前后端快速入门完结篇了,今天利用之前学习过的所有知识做一个新的项目「群登记助手v1.0」小程序。 整体技术架构:小程序原生前端小程序云开发。 经历了前面教程的学习,大家有了一定的基础,所以本次分享重心主要是…

【C++】位图和布隆过滤器

位图和布隆过滤器 前言正式开始位图位图讲解模拟实现位图几道关于位图的题目 布隆过滤器概念实例布隆过滤器模拟实现误判率测试几道题 前言 本来本篇是和前面的两篇连着的,但是没写到一块,位图和布隆过滤器都是基于哈希的思想的,如果对于哈希…

2023年即将推出的CSS特性对你影响大不大?

Google开发者大会每年都会提出有关于 Web UI 和 CSS 方面的新特性,今年又上新了许多新功能,今天就从中找出了影响最大的几个功能给大家介绍一下 :has :has() 可以通过检查父元素是否包含特定子元素或这些子元素是否处于特定状态来改变样式,也…

【JavaEE进阶】MyBatis的创建及使用

文章目录 一. MyBatis简介二. MyBatis 使用1. 数据库和数据表的创建2. 创建Mybatis项目2.1 添加MyBatis框架支持2.2 设置MyBatis配置信息 3. MyBatis开发流程4. MyBatis查询数据库测试 三. MyBatis 流程1. MyBatis 查询数据库流程2. MyBatis 框架交互流程图 一. MyBatis简介 M…

Springboot 实践(8)springboot集成Oauth2.0授权包,对接spring security接口

此文之前,项目已经添加了数据库DAO服务接口、资源访问目录、以及数据访问的html页面,同时项目集成了spring security,并替换了登录授权页面;但是,系统用户存储代码之中,而且只注册了admin和user两个用户。在…

Tomcat 部署优化

Tomcat Tomcat 开放源代码web应用服务器,是由java代码开发的 tomcat就是处理动态请求和基于java代码的页面开发 可以在html当中写入java代码,tomcat可以解析html页面当中的iava,执行动态请求 动态页面机制有问题:不对tomcat进行优…

仿牛客论坛项目day7|Kafka

一、阻塞队列 创建了一个生产者线程和一个消费者线程。生产者线程向队列中放入元素,消费者线程从队列中取出元素。我们可以看到,当队列为空时,消费者线程会被阻塞,直到生产者线程向队列中放入新的元素。 二、Kafka入门 发布、订阅…

mysql数据库迁移

目录 背景迁移数据库 背景 公司有个项目,刚开始数据量不是大的时候,数据库和服务上的所有应用数据都放在一个旧小盘中,随着项目数据的增长,旧的磁盘被占满了,导致系统无法写入数据,我和同事排查了很长时间…

阿里云云主机_ECS云服务器_轻量_GPU_虚拟主机详解

阿里云云主机分为云虚拟主机、云服务器ECS、轻量应用服务器、GPU云服务器、弹性裸金属服务器、专有宿主机、FPGA云服务器、高性能计算E-HPC、无影云电脑等,阿里云百科来详细说下阿里云云主机详解: 目录 阿里云云主机 云服务器ECS 轻量应用服务器 云…

C++ 面向对象三大特性——多态

✅<1>主页&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;C 继承 ☂️<3>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<4>前言&#xff1a;面向对象三大特性的&#xff0c;封装&#xff0c;继承&#xff0c;多态&#xff…

红帽8.2版本CSA题库:第十一题查找文件

红帽8.2版本CSA题库&#xff1a;第十一题查找文件 touch /tmp/{gamelan,jacques,libWedgeit.so.1.2.3} chown jacques:jacques /tmp/{gamelan,jacques,libWedgeit.so.1.2.3}mkdir /root/findfiles #创建文件夹 find / -user jacques -exec cp -a {} /root/findfiles \; …

Centos7安装Docker及配置加速器地址

一、安装docker #1.yum 包更新到最新 yum update #2.安装需要的软件包&#xff0c;yum-util 提供yum-config-manager功能&#xff0c;另外两个是devicemapper驱动依赖的 yum install -y yum-utils device-mapper-persistent-data lvm2 #3.设置yum源 yum-config-manager --add…

Leetcode每日一题:1444. 切披萨的方案数(2023.8.17 C++)

目录 1444. 切披萨的方案数 题目描述&#xff1a; 实现代码与解析&#xff1a; 二维后缀和 动态规划 原理思路&#xff1a; 1444. 切披萨的方案数 题目描述&#xff1a; 给你一个 rows x cols 大小的矩形披萨和一个整数 k &#xff0c;矩形包含两种字符&#xff1a; A …

BC136 KiKi去重整数并排序

给定一个整数序列&#xff0c;KiKi想把其中的重复的整数去掉&#xff0c;并将去重后的序列从小到大排序输出。 输入描述 第一行&#xff0c;输入一个整数n&#xff0c;表示序列有n个整数。 第二行输入n个整数&#xff08;每个整数大于等于1&#xff0c;小于等于1000&#xf…

【日常积累】Linux之init系统学习

init系统简介: Linux 操作系统的启动首先从 BIOS 开始&#xff0c;接下来进入 boot loader&#xff0c;由 bootloader 载入内核&#xff0c;进行内核初始化。内核初始化的最后一步就是启动 pid 为 1 的 init 进程&#xff0c;这个进程是系统的第一个进程&#xff0c;它负责产生…

企望制造ERP系统 RCE漏洞复现

0x01 产品简介 企望制造纸箱业erp系统由深知纸箱行业特点和业务流程的多位IT专家打造&#xff0c;具有国际先进的管理方式&#xff0c;将现代化的管理方式融入erp软件中&#xff0c;让企业分分钟就拥有科学的管理经验。 erp的功能包括成本核算、报价定价、订单下达、生产下单、…

编程语言学习笔记-架构师和工程师的区别,PHP架构师之路

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责…

Unity游戏源码分享-中国象棋Unity5.6版本

Unity游戏源码分享-中国象棋Unity5.6版本 项目地址&#xff1a; https://download.csdn.net/download/Highning0007/88215699