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> 标志指定。

在这里插入图片描述

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

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

相关文章

Gin CORS 跨域请求资源共享与中间件

Gin CORS 跨域请求资源共享与中间件 文章目录 Gin CORS 跨域请求资源共享与中间件一、同源策略1.1 什么是浏览器的同源策略&#xff1f;1.2 同源策略判依据1.3 跨域问题三种解决方案 二、CORS:跨域资源共享简介(后端技术)三 CORS基本流程1.CORS请求分类2.基本流程 四、CORS两种…

Java项目:02 基于ssm超市订单管理系统

项目介绍 基于ssm超市订单管理系统 环境&#xff1a;jdk1.8&#xff0c;mysql5.7&#xff0c;tomcat8.5&#xff0c;maven3.6 软件&#xff1a;IDEA 功能&#xff1a;超市后台管理系统&#xff0c;有订单管理&#xff0c;供应商管理&#xff0c;用户管理&#xff0c;密码修改&…

阿赵UE学习笔记——9、材质和材质实例

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎&#xff0c;这次来了解一下UE里面关于材质的一些概念性的东西。 一、材质 材质这个概念&#xff0c;在所有三维软件里面都会有&#xff0c;比如3Dsmax里面的材质球&#xff0c;或者Unity里面的Material…

解决docker run报错:Error response from daemon: No command specified.

将docker镜像export/import之后&#xff0c;对新的镜像执行docker run时报错&#xff1a; docker: Error response from daemon: No command specified. 解决方法&#xff1a; 方案1&#xff1a; 查看容器的command&#xff1a; docker ps --no-trunc 在docker run命令上增加…

【Python】AttributeError: module ‘torch.nn‘ has no attribute ‘HardSigmoid‘

AttributeError: module ‘torch.nn’ has no attribute ‘HardSigmoid’ 这个错误是因为PyTorch的torch.nn模块中并没有HardSigmoid这个函数。是拼写的大小写问题&#xff0c;换成nn.Hardsigmoid()即可。 如下述代码出错。 import torch import torch.nn as nn hard_sigmoid…

自动化的力量可实现更好的供应商风险管理

长期以来&#xff0c;公司一直依赖制造商、服务提供商、供应商或顾问等丰富的外部各方网络来促进整体运营并从外部专业知识或产品中获益。虽然这些合作伙伴关系通常是互惠互利的&#xff0c;但公司也需要意识到第三方甚至第四方供应商带来的潜在风险&#xff0c;并考虑整个供应…

VSCode使用MinGW编译器,配置C/C++环境

目录 一、安装VSCode 二、安装MinGW编译器 1、配置环境变量 2、测试配置是否成功 三、配置VSCode 1、安装所需扩展 2、新建代码存放文件夹 3、添加配置文件 4、配置文件内容 &#xff08;1&#xff09;c_cpp_properties.json &#xff08;2&#xff09;launch.json …

基于Java SSM框架实现线上教学平台系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现线上教学平台演示 摘要 在社会快速发展的影响下&#xff0c;使线上教学平台的管理和运营比过去十年更加理性化。依照这一现实为基础&#xff0c;设计一个快捷而又方便的网上线上教学平台系统是一项十分重要并且有价值的事情。对于传统的线上教学平台控制…

走进shell

Linux系统启动时&#xff0c;会自动创建多个虚拟控制台。虚拟控制台是运行在Linux系统内存中的终端会话。 打开Linux控制台Terminal使用tty命令查看当前使用的虚拟控制台。 注&#xff1a;tty 表示电传打字机(teletypewriter) $ tty /dev/pts/0表示当前使用的是/dev/pts/0 虚拟…

(1)(1.13) SiK无线电高级配置(五)

文章目录 前言 10 可用频率范围 11 DUTY_CYCLE 设置 12 低延迟模式 13 先听后说 (LBT) 14 升级无线电固件 15 MAVLink协议说明 前言 本文提供 SiK 遥测无线电(SiK Telemetry Radio)的高级配置信息。它面向"高级用户"和希望更好地了解无线电如何运行的用户。 1…

C#基础:通过QQ邮件发送验证码到指定邮箱

一、控制台程序 using System; using System.Net; using System.Net.Mail;public class EmailSender {public void SendEmail(string toAddress, string subject, string body){// 设置发件人邮箱地址以及授权码string fromAddress "xxxxxqq.com";string password …

频率阈图像滤波

介绍 频率阈图像滤波是一种在频域中进行图像处理的方法&#xff0c;它基于图像的频率分布来实现滤波效果。具体步骤如下&#xff1a; 将原始图像转换到频域&#xff1a;使用快速傅里叶变换&#xff08;FFT&#xff09;将图像从空间域转换到频域。对频域图像应用频率阈滤波器&a…

CSS3背景样式详解(图像大小,图像位置等)

背景样式 在CSS3中&#xff0c;新增了3个背景属性 属性说明background-size背景大小background-origin背景位置background-clip背景剪切 background-size属性 概念&#xff1a;在CSS3之前&#xff0c;我们是不能用CSS来控制背景图片大小的&#xff0c;背景图片的大小都是由…

深入理解 Flink(三)Flink 内核基础设施源码级原理详解

Hadoop 生态各大常见组件的 RPC 技术实现 Flink RPC 网络通信框架 Akka 详解 1、ActorSystem 是管理 Actor 生命周期的组件&#xff0c;Actor 是负责进行通信的组件。 2、每个 Actor 都有一个 MailBox&#xff0c;别的 Actor 发送给它的消息都首先储存在 MailBox 中&#xff0c…

Tomcat-快速使用

关于Tomcat的概念及来由在Tomcat基本知识中进行了介绍&#xff0c;下面我们直接上手快速使用起来。 一、快速使用 &#xff08;1&#xff09;tomcat下载 &#xff08;2&#xff09;解压缩 &#xff08;3&#xff09;启动程序 &#xff08;4&#xff09;访问tomcat&#xff1a…

Serverless 开拓无服务器时代:云计算的新趋势(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

精华整理几十个Python数据科学、机器学习、深度学习、神经网络、人工智能方面的核心库以及详细使用实战案例,轻松几行代码训练自己的专有人工智能模型

精华整理几十个Python数据科学、机器学习、深度学习、神经网络、人工智能方面的核心库以及详细使用实战案例,轻松几行代码训练自己的专有人工智能模型。 机器学习 人工智能的核心,是使计算机具有智能的根本途径。机器学习专注于算法,允许机器学习而不需要编程,并在暴露于新…

OpenHarmony之编译构建使用指导

目录结构 /build # 编译构建主目录├── __pycache__ ├── build_scripts/ # 编译相关的python脚本 ├── common/ ├── config/ # 编译相关的配置项 ├─…

FlinkAPI开发之窗口(Window)

案例用到的测试数据请参考文章&#xff1a; Flink自定义Source模拟数据流 原文链接&#xff1a;https://blog.csdn.net/m0_52606060/article/details/135436048 窗口的概念 Flink是一种流式计算引擎&#xff0c;主要是来处理无界数据流的&#xff0c;数据源源不断、无穷无尽。…

10个提高 Python Web 开发效率的VS Code插件

VS Code具有灵活、便捷和丰富的可用插件库&#xff0c;是Web开发人员中非常受欢迎的代码编辑器。 本文介绍10个VS Code插件&#xff0c;它们可以提高你作为Web开发人员的工作效率。 1. Live Preview Live Preview插件支持在VS Code的小型浏览器中查看网站。因此&#xff0c;无…