test fuzz-05-模糊测试 kelinci AFL-based fuzzing for Java

拓展阅读

开源 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息)

开源 Junit performance rely on junit5 and jdk8+.(java 性能测试框架。性能测试。压测。测试报告生成。)

test fuzz-01-模糊测试(Fuzz Testing)

test fuzz-02-模糊测试 JQF + Zest Semantic Fuzzing for Java

test fuzz-03-模糊测试 Atheris A Coverage-Guided, Native Python Fuzzer

test fuzz-04-模糊测试 jazzer Coverage-guided, in-process fuzzing for the JVM

test fuzz-05-模糊测试 kelinci AFL-based fuzzing for Java

test fuzz-06-模糊测试 AFL american fuzzy lop - a security-oriented fuzzer

test fuzz-07-模糊测试 libfuzzer

kelinci

Kelinci 是一个在 Java 程序上运行 AFL(American Fuzzy Lop)的接口。

“Kelinci” 在印尼语中意为兔子(印尼语是爪哇岛上的语言)。

此 README 假设 AFL 已经被预先安装。关于如何安装和使用 AFL 的信息,请参阅 http://lcamtuf.coredump.cx/afl/。

Kelinci 已经成功测试过与 AFL 版本 2.44 及更高版本的兼容性。README 解释了如何使用这个工具。

有关技术背景,请参阅 ‘docs’ 目录中的 CCS’17 论文。

在 ‘examples’ 目录中提供了几个示例,每个示例都附有一个 README,详细说明了重复实验的确切步骤。

Kelinci 已经发现了与 OpenJDK(版本 6-9)和 Apache Commons Imaging 1.0 RC7 中 JPEG 解析相关的错误。这些是 bug 报告:

  • OpenJDK:http://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8188756
  • Apache Commons Imaging:https://issues.apache.org/jira/browse/IMAGING-203

安装

该应用有两个组件。首先,有一个充当 AFL 目标应用程序的 C 应用程序。

它的行为与使用 afl-gcc / afl-g++ 构建的应用程序相同;AFL 无法区分它们。这个 C 应用程序位于子目录 ‘fuzzerside’ 中。

它通过 TCP 连接将由 AFL 生成的输入文件发送到 JAVA 端。然后,它接收结果并以期望的格式将其转发给 AFL。要构建,请在 ‘fuzzerside’ 子目录中运行 make。

第二个组件位于 JAVA 端。它位于 ‘instrumentor’ 子目录中。

该组件使用 AFL 风格的管理工具,以及与 C 端通信的组件对目标应用程序进行插装。稍后执行插装程序时,它会设置一个 TCP 服务器,并为每个传入的请求在单独的线程中运行目标应用程序。它会发送回一个退出代码(成功、超时、崩溃或队列已满),以及收集到的路径信息。

任何从主函数中逃逸的异常都被视为崩溃。

要构建,请在 ‘instrumentor’ 子目录中运行 gradle build。

使用说明

以下是如何在目标应用程序上运行 Kelinci 的说明。这假设 AFL 和 Kelinci 的两个组件都已经构建。

  1. 可选:构建驱动程序 AFL/Kelinci 期望一个接受指定文件位置参数的程序。它会对该程序的文件进行随机变异以进行模糊测试。如果您的目标应用程序不是这样工作的,就需要构建一个驱动程序,该驱动程序解析输入文件并基于此模拟正常交互。在构建驱动程序时,请记住输入文件将被随机变异。程序在文件中期望的结构和凝聚性越少,模糊测试效果就越好。即使程序接受输入文件,也可能构建一个接受不同格式的驱动程序,以最大化有效和无效输入文件的比率。

在构建驱动程序时还需要考虑的一件事是,目标程序将在主方法中被不断调用的虚拟机中运行。所有运行必须是独立和确定性的。例如,如果程序从输入中存储信息到数据库或静态内存位置,请确保重置它,使其不能影响未来的运行。

  1. 插装 我们将假设目标应用程序和驱动程序已经构建,输出目录为 ‘bin’。我们的下一步是为在 Kelinci 中使用而插装这些类。该工具提供了 edu.cmu.sv.kelinci.instrumentor.Instrumentor 类用于此目的。它在 -i 标志之后(这里是 ‘bin’)和 -o 标志之后(这里是 ‘bin-instrumented’)需要一个输入目录。我们需要确保 kelinci JAR 在类路径上,以及目标应用程序的所有依赖项。假设目标应用程序依赖的 JAR 文件在 /path/to/libs/ 中,插装的命令如下:
java -cp /path/to/kelinci/instrumentor/build/libs/kelinci.jar:/path/to/libs/* edu.cmu.sv.kelinci.instrumentor.Instrumentor -i bin -o bin-instrumented

请注意,如果项目依赖于与 Kelinci Instrumentor 也依赖于的库的不同版本,可能会出现问题。目前,这些版本是 args4j 版本 2.32、ASM 5.2 和 Apache Commons IO 2.4。在大多数情况下,可以通过将 Kelinci 构建的 ‘classes’ 目录放在类路径上而不是 Fat JAR,然后在类路径上添加与 Kelinci 和目标都可以使用的库 JAR 版本。

  1. 创建示例输入 我们想要测试插装后的 Java 应用程序是否正常工作。为此,请创建一个用于示例输入文件的目录:mkdir in_dir

AFL 稍后将使用此目录来获取它将进行变异的输入文件。因此,有在其中具有代表性的输入文件非常重要。将代表性文件复制到其中,或者创建它们。

  1. 可选:测试 Java 应用程序 查看插装后的 Java 应用程序是否与提供的/创建的输入文件一起正常工作:
java -cp bin-instrumented:/path/to/libs/* <driver-classname> in_dir/<filename>
  1. 启动 Kelinci 服务器 现在我们可以启动 Kelinci 服务器了。我们将简单地编辑上一条命令,该命令运行了 Java 应用程序。Kelinci 期望目标应用程序的主类作为第一个参数,因此我们现在只需在其前面添加 Kelinci 主类。我们还需要将具体文件名替换为 @@,Kelinci 将用实际路径替换它。其他参数是可以的,并将在运行过程中被固定。
java -cp bin-instrumented:/path/to/libs/* edu.cmu.sv.kelinci.Kelinci <driver-classname> @@

可选地,我们可以指定一个端口号(默认为 7007):

java -cp bin-instrumented:/path/to/libs/* edu.cmu.sv.kelinci.Kelinci -port 6666 <driver-classname> @@
  1. 可选:测试接口 在我们开始模糊测试之前,让我们确保与 Java 端的连接是否按预期工作。interface.c 程序有一个在 AFL 之外运行的模式,因此我们可以通过以下方式测试它:
/path/to/kelinci/fuzzerside/interface in_dir/<filename>

如果我们在步骤 6 中创建了服务器列表,可以按如下方式将其添加:

/path/to/kelinci/fuzzerside/interface -s servers.txt in_dir/<filename>

可选地,我们可以使用 -s 标志指定服务器(例如 -s 192.168.1.1 或 “sv.cmu.edu”,默认为 “localhost”),并使用 -p 标志指定端口号(默认为 7007)。

  1. 开始模糊测试! 如果一切正常,我们现在可以启动 AFL 了!与 Kelinci 服务器端类似,AFL 期望一个二进制文件,该文件接受一个输入文件作为参数,由 @@ 指定。在我们的情况下,这始终是 interface 二进制文件。它还期望一个包含要开始模糊测试的输入文件的目录,以及一个输出目录。
/path/to/afl/afl-fuzz -i in_dir -o out_dir /path/to/kelinci/fuzzerside/interface [-s servers.txt] @@

如果一切正常,AFL 接口将在短时间内启动,并且您会注意到新路径的发现。对于额外的监控,请查看输出目录。‘queue’ 子目录中的输入文件触发了不同的程序行为。还有 ‘crashes’ 和 ’

关于并行化的注意事项

Java 端自然是可以并行化的。只需为要在其上执行 Java 运行的每个核心启动一个实例。

这可以在同一台机器上进行(但端口不同!)或在多台机器上进行。

有关如何并行运行 AFL 的详细信息,请参阅随附的 parallel_fuzzing.txt 文档。您将希望运行与 Java 端 Kelinci 组件数量相同的 afl-fuzz 进程,其中每个 afl-fuzz 进程连接到不同的 Kelinci 服务器。

要连接的 Kelinci 服务器可以使用 interface.c 的 -s <server>-p <port> 标志指定。

在这里插入图片描述

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

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

相关文章

javacc知识点

javacc的语法描述性文件以.jj结尾&#xff0c;一般情况下采用 1、option{JavaCC的选项} options部分&#xff0c;用于放置 JavaCC 的选项&#xff0c;常见option包括&#xff1a; STATIC&#xff1a;用于决定JavaCC生成的所有成员及方法是否被定义为static(注意&#xff1a;定义…

如何在Android Glide中结合使用CenterCrop和自定义圆角变换(图片部分圆角矩形)

如何在Android Glide中结合使用CenterCrop和自定义圆角变换&#xff08;图片部分圆角矩形&#xff09; 在Android开发中&#xff0c;使用Glide加载图片时&#xff0c;我们经常需要对图片进行特定的处理&#xff0c;比如裁剪和圆角变换&#xff0c;特别是一些设计稿&#xff0c;…

FS【1】:SSP

文章目录 前言1. Abstract2. Introduction2.1. Motivation2.1.1. Few-shot Segmentation (FSS) Task2.1.2. Few-shot Segmentation (FSS) Problem 2.2. Contribution 3. Methods3.1. Motivation3.2. Overview of the architecture4.3. Self-support Prototype4.4. Adaptive Sel…

代理IP连接不上?网速过慢?自检与应对方法来了

当您使用代理时&#xff0c;您可能会遇到不同的代理错误代码显示代理IP连不通、访问失败、网速过慢等种种问题。 在本文中中&#xff0c;我们将讨论您在使用代理IP时可能遇到的常见错误、发生这些错误的原因以及解决方法。 一、常见代理服务器错误 当您尝试访问网站时&#…

用户管理第一节课,阿里生成代码包

鱼皮教程生成所用到的 一、网址 网址&#xff1a; Cloud Native App Initializer (aliyun.com) 二、仿照生成 2.1 Maven Project & Java 2.2 Spring Boot版本 2.3 高级选项 2.3.1 项目名称可根据需求改 注意&#xff1a;不要有空格 2.4 应用架构 选择&#xff1a;单…

彻底关闭win10的自动更新Update

停止更新服务 任务管理器中search windows update&#xff0c;停止服务&#xff0c;以及禁止恢复里面的action 停止任务计划 computer 右键 电脑管理&#xff0c;停止全部工作计划。

慕课热搜01

uniapp过滤器使用 创建一个过滤器&#xff1a; 在入口函数注册过滤器 // 注册过滤器 import * as filters from "./filters/index.js"Object.keys(filters).forEach(key>{Vue.filter(key,filters[key]) })使用过滤器&#xff1a; onPageScroll , uniapp监听滚动…

Web APIs知识点讲解

学习目标: 能获取DOM元素并修改元素属性具备利用定时器间歇函数制作焦点图切换的能力 一.Web API 基本认知 1.作用和分类 作用: 就是使用 JS 去操作 html 和浏览器分类&#xff1a;DOM (文档对象模型)、BOM&#xff08;浏览器对象模型&#xff09; 2.DOM DOM(Document Ob…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第六天-Linux信号(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

GBASE南大通用 GBase 8a 产品构建数仓系统架构

l GBASE南大通用 GBase 8a 产品构建数仓应用的系统架构&#xff1a; 架构 技术实现特点 适用场景 独立数据仓库&#xff08;集市&#xff09;系统架构 一套GBase 8a物理集群 适用于数据规模较小的业务场景 适用于各业务之间数据互访较频繁的业务场景 适用于单一独立的业务…

k8s源码阅读环境配置

源码阅读环境配置 k8s代码的阅读可以让我们更加深刻的理解k8s各组件的工作原理&#xff0c;同时提升我们Go编程能力。 IDE使用Goland&#xff0c;代码阅读环境需要进行如下配置&#xff1a; 从github上下载代码&#xff1a;https://github.com/kubernetes/kubernetes在GOPATH目…

Python之文件的相关操作

文件和文件夹的移动、复制、删除、重命名 一、概述 Python中对文件和文件夹进行移动、复制、删除、重命名&#xff0c;主要依赖os模块和shutil模块&#xff0c;以下用实例集中演示文件的移动、复制、删除、重命名&#xff0c;用到的时候直接查询即可。 二、实例 1 #!/usr/bi…

C++11教程:C++11新特性大汇总(第六部分)

C11是2011年发布的C标准&#xff0c;是C的一次重大升级。 第十二部分&#xff1a;C多文件编程 十一、C11列表初始化&#xff08;统一了初始化方式&#xff09; 我们知道&#xff0c;在 C98/03 中的对象初始化方法有很多种&#xff0c;请看下面的代码&#xff1a; //初始化列…

C#编程-实现在文本文件中的读和写

实现在文本文件中的读和写 Stream类用于从文本文件读取数据和向文本文件写入数据。它是一个抽象类,支持向流读写字节。如果文件的数据仅是文本,那么您可以使用StreamReader类和StreamWriter类来完成相应的读和写任务。 StreamReader类 StreamReader类继承自从抽象类TextRea…

大家都在问的牛仔外套来啦

经典永不过时的牛仔外套&#xff0c; 绝对是衣橱里必不可少的时尚单品之一 重工水洗破洞乞丐风&#xff0c;个性潮流感十足 时尚帅气&#xff0c;男宝女宝都能穿还有妈妈款哦 经典宽松版型&#xff0c;不挑身材不挑人穿对身材包容性很强 怎么穿都好看&#xff0c;简单搭配…

手轮脉冲平滑处理笔记

这是一个求手脉倍率((Hw_Control.mult_ratio)与手脉脉冲计数延迟次数即累计过去n次的平均值(Hw_Control.lag_num)之间关系算法的计算过程笔记文档 1、已知 mult_ratio=1时 lag_num=10; mult_ratio=10时 lag_num=20; .mult_ratio==100时 lag_num=30; 以此类推 2、设lag_num…

如何实现两台Linux虚拟机ssh免密登录

实验开始前 1.准备好两台虚拟机&#xff08;下载好镜像文件的&#xff09; 2.实验步骤 公钥验证&#xff1a;&#xff08;免密登陆验证方式&#xff09; &#xff08;1&#xff09;生成非对称秘钥 [rootclient ~]# ssh-keygen -t rsa Generating public/private rsa key pai…

无线与局域网技术期末划题自制答案

简答题 1.描述5G的三大应用场景&#xff1f; 5G的三大应用场景包括增强型移动宽带&#xff08;eMBB&#xff09;、超可靠低延迟通信&#xff08;URLLC&#xff09;和大规模机器类型通信&#xff08;mMTC&#xff09;。增强型移动宽带&#xff08;eMBB&#xff09;主要用于支持…

数字化转型究竟是什么意思?

在这个飞速发展的数字时代&#xff0c;数字化转型已成为各个行业不可回避的趋势。从企业到组织&#xff0c;都在努力借助先进的数字技术&#xff0c;以迎合时代潮流&#xff0c;提升效率、创造价值。数字化转型不仅仅是技术的升级&#xff0c;更是一场全方位的变革&#xff0c;…

3d模型为什么只显示线是什么原因怎么解决---模大狮模型网

在3D建模中&#xff0c;有时我们会遇到模型只显示线框&#xff0c;而没有填充色或纹理的情况。这种问题可能会导致场景的不协调和视觉效果的不理想&#xff0c;影响到我们的设计效率和效果。本文将探讨一些可能导致该问题的原因&#xff0c;并提供解决方法&#xff0c;以帮助您…