Radamsa:一款高性能通用模糊测试工具

关于Radamsa

Radamsa是一款高性能的通用模糊测试工具,广大研究人员可以将其当作一个应用程序稳定性测试的测试用例生成工具。

工具运行机制

该工具使用简单,支持自定义脚本开发,可以用于测试程序对格式错误和潜在恶意输入的承受能力。它的工作原理是读取有效数据的示例文件并从中生成有趣的不同输出。

Radamsa旨在成为适用于所有类型数据的通用模糊测试工具。其目标是无论程序处理哪种数据(无论是xml还是mp3),都能发现问题,反之,如果找不到错误,则意味着其他类似工具可能也找不到。这是通过各种启发式方法和更改模式来实现的,这些方法和模式在测试过程中会发生变化。

Radamsa是一种基于黑盒测试技术的模糊测试工具,因此它不需要任何有关目标应用程序或数据格式的相关信息。在测试期间,可以将其与覆盖率分析配对,以在连续测试运行期间提高样本集的质量。

工具要求

支持的操作系统

GNU/Linux

OpenBSD

FreeBSD

Mac OS X

Windows(使用Cygwin)

软件要求

gcc / clang

make

git

wget

工具安装

复制代码
$ git clone https://gitlab.com/akihe/radamsa.git

 $ cd radamsa

 $ make

 $ sudo make install # optional, you can also just grab bin/radamsa

 $ radamsa --help

Radamsa本身只是一个二进制文件,没有外部依赖项,我们可以将其移动到任意位置并删除其余部分。

工具使用

使用Radamsa对通过管道的数据执行模糊测试:

复制代码
$ echo "aaa" | radamsa

 aaaa

这里Radamsa决定在输入中添加一个"a",然后再试一次:

复制代码
$ echo "aaa" | radamsa

 :aaa

默认情况下,如果未指定特定的随机状态,Radamsa将从 /dev/urandom 中获取随机种子,并且每次启动时通常都会看到不同的结果,但对于较小的输入,可能会经常看到相同的结果或原始结果。可以使用 -s 参数指定要使用的随机状态,该参数后跟一个数字。需要注意的是,使用相同的随机状态将导致生成相同的数据:

复制代码
$ echo "Fuzztron 2000" | radamsa --seed 4

 Fuzztron 4294967296

我们还可以使用 -n 参数生成多个输出,如下所示:

复制代码
$ echo "1 + (2 + (3 + 4))" | radamsa --seed 12 -n 4

 1 + (2 + (2 + (3 + 4?)

 1 + (2 + (3 +?4))

 18446744073709551615 + 4)))

 1 + (2 + (3 + 170141183460469231731687303715884105727))

工具无法保证所有的输出都是唯一的,但相同的输出结果情况还是很罕见的。

现在,我们已经拿到了测试用例,接下来就可以将其输入到待测应用程序中了:

复制代码
$ echo "100 * (1 + (2 / 3))" | radamsa -n 10000 | bc

 [...]

 (standard_in) 1418: illegal character: ^_

 (standard_in) 1422: syntax error

 (standard_in) 1424: syntax error

 (standard_in) 1424: memory exhausted

 [hang]

或者测试用于编译Radamsa的编译器:

复制代码
$ echo '((lambda (x) (+ x 1)) #x124214214)' | radamsa -n 10000 | ol

 [...]

 > What is 'ó µ'?

 4901126677

 > $

或测试gzip:

复制代码
$ gzip -c /bin/bash | radamsa -n 1000 | gzip -d > /dev/null

我们还可以加入无限循环执行测试:

复制代码
$ gzip -c /bin/bash > sample.gz

 $ while true; do radamsa sample.gz | gzip -d > /dev/null; done

输出选项

|---------|---------------------------|------------------------------------------------------|
| -o参数 | 意义 | 示例 |
| :port | 充当给定端口的 TCP 服务器 | # radamsa -o :80 -n inf samples/*.http-resp |
| ip:port | 作为 TCP 客户端连接到 ip 端口 | radamsa -o 127.0.0.1:80 -n inf samples/\*.http-req | | - | 写入stdout | radamsa -o - samples/*.vt100 |
| path | 写入文件,%n 是测试用例 #,%s 是第一个后缀 | $ radamsa -o test-%n.%s -n 100 samples/*.foo |

许可证协议

本项目的开发与发布遵循MIT开源许可协议。

项目地址

Radamsa :【GitHub传送门

参考资料

http://www.gnu.org/software/gdb/

Valgrind Home

http://code.google.com/p/address-sanitizer/wiki/AddressSanitizer

strace download | SourceForge.net

tcpflow -- TCP Flow Recorder

http://lcamtuf.coredump.cx/afl/

zzuf -- Caca Labs

http://code.google.com/p/bunny-the-fuzzer/

Security Compliance | GitLab

http://code.google.com/p/sulley/

相关推荐
程序员三藏1 小时前
软件测试之环境搭建及测试流程
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
wxxka1 小时前
git使用
开发语言·git
舒一笑2 小时前
用数据照亮成长之路:PandaCoder Git 统计工具窗口
git·后端·intellij idea
xiecoding.cn6 小时前
Selenium IDE下载和安装教程(附安装包)
selenium·测试工具·selenium安装·selenium ide·selenium ide下载·selenium下载
.又是新的一天.7 小时前
04-Fiddler详解+抓包定位问题
前端·测试工具·fiddler
有谁看见我的剑了?7 小时前
web站点基准测试工具ab命令学习
测试工具·ab测试
金玉满堂@bj8 小时前
我是程序员吗?
测试工具·可用性测试
测试修炼手册13 小时前
[测试工具] 如何把离线的项目加入成为git项目的新分支
git
递归不收敛1 天前
专属虚拟环境:Hugging Face数据集批量下载(无登录+国内加速)完整指南
人工智能·笔记·git·python·学习·pycharm
安冬的码畜日常1 天前
【JUnit实战3_20】第十一章:用 Gradle 运行 JUnit 测试实战
测试工具·junit·单元测试·gradle·软件构建·groovy·junit5