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

server/2024/10/18 18:22:57/

关于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" | radamsaaaaa

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

$ echo "aaa" | radamsa:aaa

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

$ echo "Fuzztron 2000" | radamsa --seed 4Fuzztron 4294967296

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

$ echo "1 + (2 + (3 + 4))" | radamsa --seed 12 -n 41 + (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/


http://www.ppmy.cn/server/96389.html

相关文章

科普文:微服务之全文检索ElasticSearch 集成IK分词器

一、IK分词器简介 IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始IKAnalyzer已经推出 了3个大版本。最初,它是以开源项目Lucene为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版…

并查集问题

import java.util.HashMap; import java.util.List; import java.util.Stack;public class test33 {//由若干样本a、b、c、d……假设类型为V//在并查集中开始认为每个样本都在单独的集合里//用户可以在任何时候调用如下方法://1.boolean isSameSet(V x ,V y):查询样本x和样本y是…

强软弱虚四大引用

强引用: 如果一个对象具有强引用,垃圾回收器不会回收该对象,当内存空间不足时,JVM 宁愿抛出 OutOfMemoryError异常。 // 强引用 User usernew User();//user就是强引用软引用: 如果一个对象只具有软引用&#xff0…

信息安全专业好吗?

22 届的 211 信安毕业生,目前在读研(虽然已经和安全没关系),整体来看大部分高校的信安都是作为计算机的附属专业存在的,除了极具特色的几个高校,例如山大的密码学,广州大学某院士加持的网络安全…

MongoDB 100问

基础问题 1. 什么是MongoDB? MongoDB是一种面向文档的NoSQL数据库,使用BSON(二进制JSON)格式存储数据。它支持动态模式设计,具有高性能、高可用性和易扩展性。 2. MongoDB和传统关系型数据库的区别是什么&#xff1f…

爬虫:xpath模块及昵图网实例

xpath模块 from lxml import etreestr1 """ <div><ul><li class"item-0"><a href"link1.html">first item</a></li><li class"item-1"><a href"link2.html">second…

室内定位:紧耦合的学习惯性里程 (TLIO)

a### TLIO论文解读:紧耦合的学习惯性测程 (TLIO) 在惯性测量单元 (IMU) 领域,如何在短时间内精确地估计位置和姿态一直是一个挑战。最近,论文《TLIO: Tight Learned Inertial Odometry》提出了一种创新的方法,通过将深度学习与扩展卡尔曼滤波器 (EKF) 紧密结合,来解决这一…

云计算场景下数据恢复的挑战

基于Keepit A/S委托IDG Communications, Inc. dba Foundry进行的一项调查以及Keepit进行的深入访谈研究。这些研究揭示了数据恢复&#xff08;DR&#xff09;策略中的关键差距&#xff0c;并突出了加强数据安全措施的紧迫性。 ### 调查背景 随着云应用和生成式AI技术的迅速普及…