如何评估模糊测试工具-unibench的使用

news2024/9/24 0:21:55

unibench是一个用来评估模糊测试工具的benchmark。这个benchmark集成了20多个常用的测试程序,以及许多模糊测试工具。

这篇文章(https://zhuanlan.zhihu.com/p/421124258)对unibench进行了简单的介绍,本文就不再赘诉,而是侧重于介绍unibench具体是如何用来评估模糊测试工具。

关于unibench更详细的介绍,可以去看2021年发表在Usenix Security上的论文:[https://nesa.zju.edu.cn/download/UNIFUZZ A Holistic and Pragmatic Metrics-Driven Platform for Evaluating Fuzzers.pdf](https://nesa.zju.edu.cn/download/UNIFUZZ A Holistic and Pragmatic Metrics-Driven Platform for Evaluating Fuzzers.pdf)

unibench可以在这里找到:https://github.com/unifuzz

下面将介绍以使用unibench来评估AFL这一经典的模糊测试工具为例来介绍过一下unibench的流程。

1. 构建AFL和测试程序的镜像

运行下面命令,构建AFL和unibench的20个程序的镜像。下面命令需要较长的时间才能完成。

git clone https://github.com/unifuzz/unibench_build.git
cd unibench/afl
docker build -t .

除了上面的方法,unifuzz的作者也在dockerhub上传了build好的镜像可以直接使用。具体可以查看该链接:https://hub.docker.com/r/unifuzz/unibench

docker pull unifuzz/unibench:afl

然后运行下面命令验证是否装好

 docker run -it --rm unifuzz/unibench:afl strings /d/p/justafl/exiv2 |grep afl|head

若出现下面的提示信息,则说明已装好

__afl_global_area_ptr
__afl_maybe_log
__afl_area_ptr
__afl_setup
__afl_store
__afl_prev_loc
__afl_return
__afl_setup_failure
__afl_setup_first
__afl_setup_abort

2. 运行模糊测试实验

2.1 系统配置

运行实验前,先进行基础的系统配置

echo "" | sudo tee /proc/sys/kernel/core_pattern # disable generating of core dump file
echo 0 | sudo tee /proc/sys/kernel/core_uses_pid
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
echo 1 | sudo tee /proc/sys/kernel/sched_child_runs_first # tfuzz require this
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space # vuzzer require this

如果出现No such file or directory的错误信息也没关系,可以无视。

2.2 运行实验

前面搭建好的镜像中已经使用afl-clang插过桩了,所以只需要使用docker run命令来跑afl-fuzz,就可以运行模糊测试的实验了。

mkdir work # 在宿主机创建一个文件夹保留AFL跑实验的结果
cd work 
git clone https://github.com/unifuzz/seeds.git # 获取测试程序所需的种子
docker run -it --cpus=1 -w /work -v `pwd`:/work --privileged unifuzz/unibench:afl \
afl-fuzz -i /work/seeds/general_evaluation/mp3 -o output -m none -t 500+ \
--/d/p/justafl/mp3gain @@

下面介绍下docker run各个选项的意思:

  • -it:指定交互式终端,并分配伪终端
  • —cpus=1:只分配一个CPU核
  • -w /work:指定容器内工作目录为/work
  • -v pwd:/work :挂载当前目录(宿主机)为容器的/work目录,使容器内部对/work的访问实际上是对宿主机当前目录的访问
  • —privileged:赋予容器运行时的特权

然后第二行开始的就是afl-fuzz的选项:

  • -i /work/seeds/general_evaluation/mp3:指定种子目录为/work/seeds/general_evaluation/mp3
  • -o output:指定输出目录为 output
  • -m none:不限制内存
  • -t 500+:处理种子样例所需的时间

第三行可以理解为AFL会不断fork进程运行第三行的命令,@@则是模糊测试生成的测试样例的占位符。

unibench也给出了其他程序的命令行参数。

data = [
    #id, prog, commandline, seed_folder
    [1, "exiv2", "@@", "jpg"],
    [2,"tiffsplit","@@","tiff"],
    [3,"mp3gain","@@","mp3"],
    [4,"wav2swf","-o /dev/null @@","wav"],
    [5,"pdftotext","@@ /dev/null","pdf"],
    [6,"infotocap","-o /dev/null @@","text"],
    [7,"mp42aac","@@ /dev/null","mp4"],
    [8,"flvmeta","@@","flv"],
    [9,"objdump","-S @@","obj"],
    [14, "tcpdump", "-e -vv -nr @@", "tcpdump100"],
    [15, "ffmpeg", "-y -i @@ -c:v mpeg4 -c:a copy -f mp4 /dev/null", "ffmpeg100"],
    [16, "gdk-pixbuf-pixdata", "@@ /dev/null", "pixbuf"],
    [17, "cflow", "@@", "cflow"],
    [18, "nm-new", "-A -a -l -S -s --special-syms --synthetic --with-symbol-versions -D @@", "nm"],
    [19, "sqlite3", " < @@", "sql"],
    [20, "lame3.99.5", "@@ /dev/null", "lame3.99.5"],
    [21, "jhead", "@@", "jhead"],
    [22, "imginfo", "-f @@", "imginfo"],
    [23, "jq", ". @@", "json"],
    [24, "mujs", "@@", "mujs"],
    # below is the LAVA-M settings
    [10,"uniq","@@","uniq"],
    [11,"base64","-d @@","base64"],
    [12,"md5sum","-c @@","md5sum"],
    [13,"who","@@","who"],
]

运行完上面命令,就会显示AFL的界面。
在这里插入图片描述

如果想后台运行实验,docker run的时候加上-d选项即可

docker run -itd --cpus=1 -w /work -v `pwd`:/work --privileged unifuzz/unibench:afl \
afl-fuzz -i /work/seeds/general_evaluation/mp3 -o output -m none -t 500+ \
--/d/p/justafl/mp3gain @@

3. 分析实验结果

unifuzz提供了一些分析实验结果的脚本。尝试了在宿主机下运行,疯狂报错,看起来需要在docker容器内部运行。

https://github.com/unifuzz/metrics

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

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

相关文章

设计模式-第6章(工厂模式)

工厂模式简单工厂实现工厂模式实现简单工厂 VS 工厂方法商场收银程序再再升级&#xff08;简单工厂策略装饰工厂方法&#xff09;工厂方法模式总结简单工厂实现 在简单工厂类中&#xff0c;通过不同的运算符&#xff0c;创建具体的运算类。 public class OperationFactory {pu…

CMMI流程规范—实现与测试

一、概述实现与测试&#xff08;Implementation and Test, IT&#xff09;的目的是依据系统设计文档&#xff0c;编写并测试整个系统的代码。在本规范中&#xff0c;实现与测试是“编程、代码审查、单元测试、集成测试、缺陷管理与改错”的综合表述。实现与测试过程域是SPP模型…

从 AI 绘画到 ChatGPT,聊聊生成式 AI

我们小时候经常有幻想&#xff0c;未来不用再去上班了&#xff0c;在工厂工作的都是机器人。在家也不用打扫卫生&#xff0c;机器人可以包揽一切。不知不觉间&#xff0c;我们小时候的幻想已经慢慢变成现实&#xff0c;工厂里有了多种型号的机械臂&#xff0c;代替了部分流水线…

Vue3中watch的value问题

目录前言一&#xff0c;ref和reactive的简单复习1.ref函数1.2 reactive函数1.3 用ref定义对象类型数据不用reactive二&#xff0c;watch的value问题2.1 ref2.1.1 普通类型数据2.1.2 对象类型数据2.1.3 另一种方式2.2 reactive三&#xff0c;总结后记前言 在Vue3中&#xff0c;…

论文投稿指南——中文核心期刊推荐(中国文学作品)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

微信小程序通过 node 连接 mysql——方法,简要原理,及一些常见问题

前言 博主自己在22年夏天根据课程要求做了一个小程序连接阿里云服务器的案例&#xff0c;在最近又碰到了相应的需求。 原参考文章&#xff1a;微信小程序 Node连接本地MYSQL_微信小程序nodejs连接数据库_JJJenny0607的博客-CSDN博客 ,还请多多支持原作者&#xff01; 第二次…

vue2 @hook 的解析与妙用

目录前言几种用法用法一 将放在多个生命周期的逻辑&#xff0c;统一到一个生命周期中用法二 监听子组件生命周期运行的情况运用场景场景一 许多时候&#xff0c;我们不得不在不同的生命周期中执行某些逻辑&#xff0c;并且这些逻辑会用到一些通用的变量&#xff0c;这些通用变量…

nginx日志服务之敏感信息脱敏

1. 创建实验资源 开始实验之前&#xff0c;您需要先创建实验相关资源。 日志服务之敏感信息脱敏与审计 2. 创建原始数据 本步骤将指导您如何创建NGINX模拟数据。 双击打开虚拟桌面的Firefox ESR浏览器。 在RAM用户登录框中单击下一步&#xff0c;并复制粘贴页面左上角的子…

使用groovy代码方式解开gradle配置文件神秘面纱

来到这里的是不是都有以下疑问&#xff1a; 1.build.gradle配置文件结构好复杂啊&#xff0c;怎么记&#xff1f; 2.内部是怎么进行分析和执行的&#xff1f; 3.为什么可以在配置文件里面写groovy代码&#xff0c;怎么识别的&#xff1f; 4.怎么才能很方便的记住和快速上手…

空口协议Eapol、802.11 Action、802.11 BAR 和 802.11BA、802.11 Encrypted Data讲解

如下报文 可以看到,除了有之前开放认证的报文之外,还多了 EAPOL 次握手的报文。另外,还有其他几种类型的报文:802.11 Action、802.11 BAR 和 802.11BA、802.11 Encrypted Data ​ 密匙认证协议EAPOL: EAP是Extensible Authentication Protocol的缩写,EAPOL就是(EAP…

Python搭建一个steam钓鱼网站,只要免费领游戏,一钓一个准

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 我们日常上网的时候&#xff0c;总是会碰到一些盗号的网站&#xff0c;或者是别人发一些链接给你&#xff0c; 里面的内容是一些可以免费购物网站的优惠券、游戏官网上可以免费领取皮肤、打折的游戏。 这些盗号网站统一的目…

go版本分布式锁redsync使用教程

redsync使用教程前言redsync结构Pool结构Mutex结构acquire加锁操作release解锁操作redsync包的使用前言 在编程语言中锁可以理解为一个变量&#xff0c;该变量在同一时刻只能有一个线程拥有&#xff0c;以便保护共享数据在同一时刻只有一个线程去操作。对于高可用的分布式锁应…

6招优化WordPress打开速度-让你的网站飞起来

为什么我们的WordPress网站比你的快&#xff1f; 我们的官网是使用WordPress框架搭建的&#xff0c;有没有发现我们的网站非常快&#xff0c;而你的WordPress网站比较慢呢&#xff1f;那是因为我们的网站经过了优化。 WordPress 很慢&#xff1f; 为什么很多人都会觉得 Word…

【C语言进阶:指针的进阶】函数指针

本章重点内容&#xff1a; 字符指针指针数组数组指针数组传参和指针传参函数指针函数指针数组指向函数指针数组的指针回调函数指针和数组面试题的解析⚡函数指针 函数指针&#xff1a;指向函数的指针。 通过之前的学习我们知道数组指针中存放的是数组的地址&#xff0c;那么函…

如何在网络安全中使用人工智能并避免受困于此

人工智能在网络安全中的应用正在迅速增长&#xff0c;并对威胁检测、事件响应、欺诈检测和漏洞管理产生了重大影响。根据Juniper Research的一份报告&#xff0c;预计到2023年&#xff0c;使用人工智能进行欺诈检测和预防将为企业每年节省110亿美元。但是&#xff0c;如何将人工…

Sqoop 使用详解

Sqoop 概述Sqoop 是Apache 旗下的一款开源工具&#xff0c;用于Hadoop与关系型数据库之间传送数据&#xff0c;其核心功能有两个&#xff1a;导入数据和导出数据。导入数据是指将MySQL、Oracle等关系型数据库导入Hadoop的HDFS、Hive、HBase等数据存储系统&#xff1b;导出数据是…

web学习-Node.js入门学习

web学习-Node.js入门学习1.回顾与思考2. 初识Node.js2.1 Node.js的简介2.2Node.js的环境安装2.3. fs文件系统模块2.3.1 fs.readFile()2.3.2 fs.writeFile()2.3.3 练习-整理考试成绩2.3.4 fs模块-路径动态拼接的问题2.4 path路径模块2.5 http模块2.5.1 服务器相关的概念2.5.2 创…

移动app安全测试工具好物分享

移动互联网时代&#xff0c;我们的生活和工作深受移动app的影响。随着移动app的广泛应用&#xff0c;安全问题成为人们最关注的话题之一。移动app安全除了和软件开发密不可分之外&#xff0c;软件测试的作用也是不容忽视的。移动app安全测试是指测试人员利用各种测试手段验证Ap…

Java之注解

注解1.1 注解的概念1.2 内置注解1.3 元注解1.4 自定义注解1.1 注解的概念 Annotation 是从JDK5.0 开始引入的新技术 Annotation的作用&#xff1a; 不是程序本身&#xff0c;可以对程序做出解释&#xff08;这一点和注释comment没什么区别&#xff09;可以被其他程序&#xff…

解读场景化视频制作工具的实现过程

内容视频化正当其时&#xff0c;企业级智创工具创造新价值。全领域的内容视频化已是显性之势&#xff0c;其不仅覆盖传媒行业&#xff0c;更多泛行业正在以视频化内容的多元姿态创造新的商业价值。于是&#xff0c;不仅新闻传媒行业在超前体验智能化视频创造的效能红利&#xf…