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.rhkb.cn/news/234885.html

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

相关文章

YOLOv8-Seg改进:轻量化改进 | 华为Ghostnetv2,端侧小模型性能新SOTA | NeurIPS22 Spotlight

🚀🚀🚀本文改进:GhostNetV2 是 GhostNet 的增强版本,GhostBottleneckV2与YOLOV8建立轻量C2f_GhostBottleneckV2 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教你如何训练YOLOv8-seg…

微信小程序使用mqtt开发可以,真机不行

以下可以解决我的问题&#xff0c;请一步一步跟着做&#xff0c;有可能版本不一样就失败了 一、下载mqtt.js 前往蓝奏云 https://wwue.lanzouo.com/iQPdc1k50hpe 下载好后将.txt改为.js 然后放入项目里 二、连接mqtt const mqtt require(../../utils/mqtt.min); let cli…

Windows BAT脚本 | 定时关机程序

使用说明&#xff1a;输入数字&#xff0c;实现一定时间后自动关机。 单位小时&#xff0c;用后缀 h 或 H。示例 1h 单位分钟&#xff0c;用后缀 m 或 M 或 min。示例 30min 单位秒。用后缀 s 或不用后缀。示例 100s 源码 及 配置方法 桌面新建文本文件&#xff0c;输入下面…

WPF自定义漂亮顶部工具栏 WPF自定义精致最大化关闭工具栏 wpf导航栏自定义 WPF快速开发工具栏

在WPF应用程序开发中&#xff0c;自定义一个漂亮的顶部工具栏具有多重关键作用&#xff0c;它不仅增强了用户体验&#xff0c;还提升了整体应用的专业性和易用性。以下是对这一功能的详细介绍&#xff1a; 首先&#xff0c;自定义顶部工具栏是用户界面设计的重要组成部分&…

excel中解决多行文本自动调整行高后打印预览还是显示不全情况

注意&#xff1a;此方法对于多行合并后单元格行高调整不适用&#xff0c;需要手动调整&#xff0c;如大家有简便方法&#xff0c;欢迎评论。 一、调整表格为自动调整行高 1&#xff09;点击此处全选表格 2&#xff09;在第一行序号单元格的下端&#xff0c;鼠标成黑十字时&am…

图片纹理贴图

/* * 当需要给图形赋予真实颜色的时候&#xff0c;不太可能为没一个顶点指定一个颜色&#xff0c;通常会采用纹理贴图 * 每个顶点关联一个纹理坐标 (Texture Coordinate) 其它片段上进行片段插值 * */#include <iostream> #define STBI_NO_SIMD #define STB_IMAGE_IMPLE…

【Week-P4】CNN猴痘病识别

文章目录 一、环境配置二、准备数据三、搭建网络结构四、开始训练五、查看训练结果六、总结2.3 ⭐torch.utils.data.DataLoader()参数详解6.1 print()常用的三种输出格式6.2 修改网络结构&#xff0c;观察训练结果6.2.1 增加pool2、conv6、bn6&#xff0c;test_accuracy82.5%6.…

航天航空线束工艺3D虚拟展馆支持多人异地参观漫游

为了满足汽车线束企业员工工作需要&#xff0c;让新老员工了解到更先进、规范的线束工艺设计技术&#xff0c;华锐视点基于VR虚拟仿真、web3d开发和图形图像技术制作了一款汽车线束工艺设计VR虚拟仿真模拟展示系统。 汽车线束工艺设计VR虚拟仿真模拟展示系统共分为pc电脑端和VR…

时序分解 | Matlab实现CPO-VMD基于冠豪猪优化算法(CPO)优化VMD变分模态分解时间序列信号分解

时序分解 | Matlab实现CPO-VMD基于冠豪猪优化算法(CPO)优化VMD变分模态分解时间序列信号分解 目录 时序分解 | Matlab实现CPO-VMD基于冠豪猪优化算法(CPO)优化VMD变分模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 【原创】CPO-VMD【24年新算法…

Element+vue3.0 tabel合并单元格span-method

Elementvue3.0 tabel合并单元格 span-method :span-method"objectSpanMethod"详解&#xff1a; 在 objectSpanMethod 方法中&#xff0c;rowspan 和 colspan 的值通常用来定义单元格的行跨度和列跨度。 一般来说&#xff0c;rowspan 和 colspan 的值应该是大于等于…

zabbix监控windows主机

下载安装zabbix agent安装包 Zabbix官网下载地址: https://www.zabbix.com/cn/download_agents?version5.0LTS&release5.0.40&osWindows&os_versionAny&hardwareamd64&encryptionOpenSSL&packagingMSI&show_legacy0 这里使用zabbix agent2 安装 …

qml实现动态轮播图

一、效果展示 二、源码分享 DynamicCarousel.qmlimport QtQuick import QtQuick.Controls import QtQuick.Layouts import QtQuick.ShapesItem {id:selfsignal clearError(string numberStr)PathView{id:pathViewanchors.fill: parentfocus: trueclip: truemodel:listModeldele…

[Docker] Mac M1系列芯片上完美运行Docker

docker pull qinchz/dm8-arm64 container_name: dm8ports:- "5236:5236"mem_limit: 1gmemswap_limit: 1gvolumes:- /data/dm8:/home/dmdba/data 数据库实例参数已修改&#xff0c;接近oracle使用习惯 #字符集 utf-8 CHARSET1 #VARCHAR 类型对象的长度以字符为单位 …

软件测试|Windows系统配置pytest+allure环境教程

前言 allure可以输出非常精美的测试报告&#xff0c;也可以和pytest进行完美结合&#xff0c;不仅可以渲染页面&#xff0c;还可以控制用例的执行。本文我们将介绍Windows系统中如何配置allure环境。 第一步&#xff1a;配置Java环境 因为allure的运行依赖于Java环境&#x…

WEB 3D技术 three.js 光照与阴影

本文 我们来说 灯光与阴影 之前 我们有接触到光照类的知识 但是阴影应该都是第一次接触 那么 我们先来看光 首先是 AmbientLight 环境光 你在官网中搜索 AmbientLight 官方是就写明了 环境光是不会产生阴影的 因为 它没有反向 然后是 DirectionalLight 平行光 它是可以投射阴…

OpenAI ChatGPT-4开发笔记2024-04:Chat之Tool之2:multiple functions

从程序员到ai Expert 1 定义参数和函数2 第一轮chatgpt3 第一轮结果和function定义全部加入prompt再喂给chatgpt4 大结局7 参考资料 上一篇解决了调用一个函数的问题。这一篇扩展为调用3个。n个自行脑补。 1 定义参数和函数 #1.设定目标 import json import openai#1.定义para…

Python 快速合并PDF表格转换输出CSV文件

单位的刷脸考勤机后台系统做得比较差&#xff0c;只能导出每个部门的出勤统计表pdf&#xff0c;格式如下&#xff1a; 近期领导要看所有部门的考勤数据&#xff0c;于是动手快速写了个合并pdf并输出csv文件的脚本。 安装模块 pypdf2&#xff0c;pdfplumber&#xff0c;前者用…

docker打包介绍

最近在做一个开源项目&#xff0c;遇到开发者问各种问题&#xff0c;发现都是系统和软件版本的差异引起的。于是了解了一下docker的使用&#xff0c;发现docker真是个好东东&#xff0c;基本解决了各种版本差异的问题&#xff0c;真正做到了一键部署使用。 先熟悉一下docker里…

使用Django框架自带的Form表单完成简单的用户登录注册

如果不知道怎么配置Django环境以及如何连接数据库请点击我的上一篇博客&#xff1a; 使用pycharm初始化Django框架并连接Sql Server 文章目录 1.Django默认生成的数据表2.用户登录2.1创建登录页面2.2视图处理登录请求2.3配置访问路径 3.用户注册3.1创建用户表单3.2创建注册模版…

Java中的网络编程

文章目录 网络基础知识IP 地址端口协议 Java 中网络编程InetAddress&#xff08;静态类&#xff09;UDP 通信原理UDP 发送数据步骤UDP 接收数据步骤UDP 发送接收案例 TCP 通信原理TCP 发送数据步骤TCP 接收数据步骤TCP 发送接收案例 网络基础知识 概述&#xff1a;在网络通信协…