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

news2025/4/4 19:34:17

拓展阅读

开源 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

JQF

JQF是Java的一种反馈导向的模糊测试平台(类似于AFL/LibFuzzer,但针对JVM字节码)。

JQF使用基于属性的测试的抽象,使得编写模糊驱动程序作为参数化JUnit测试方法变得很容易。

JQF建立在junit-quickcheck之上。

JQF通过使用Zest基于覆盖引导的模糊算法,使运行junit-quickcheck风格的参数化单元测试具有强大的能力。

[Zest][ISSTA’19 paper]是一种算法,通过偏向于生成语义有效的输入来引导覆盖引导的模糊测试;即,在最大化代码覆盖的同时满足结构和语义属性的输入。

Zest的目标是发现传统模糊测试工具无法发现的深层语义错误,这些工具主要只强调错误处理逻辑。

默认情况下,JQF通过简单的命令运行Zest:mvn jqf:fuzz

JQF是一个模块化的框架,支持以下可插拔的模糊测试前端,称为引导

  • 使用AFL进行二进制模糊测试 (教程)
  • 使用**Zest**进行语义模糊测试 [[ISSTA’19 paper]] (教程 1) (教程 2)
  • 使用**PerfFuzz**进行复杂性模糊测试 [[ISSTA’18 paper]]
  • 使用**RLCheck**进行强化学习(基于JQF的一个分支) [[ICSE’20 paper]]
  • 使用**Mu2**进行突变分析引导的模糊测试 [[ISSTA’23 paper]]

概述

什么是结构感知模糊测试

像AFL和libFuzzer这样的二进制模糊测试工具将输入视为字节序列。如果测试程序期望高度结构化的输入,例如XML文档或JavaScript程序,则对字节数组进行变异通常会导致语法无效的输入;测试程序的核心部分保持未经测试。

结构感知模糊测试工具利用对输入格式的领域特定知识,通过构造产生语法有效的输入。有一些关于使用libFuzzer进行C++和Rust程序结构感知模糊测试的很好的文章。

什么是基于生成器的模糊测试(QuickCheck)?

结构感知模糊测试工具需要一种理解输入结构的方法。其他一些工具使用输入格式的声明性规范,例如上下文无关文法或协议缓冲区。JQF使用QuickCheck的命令式方法来指定输入空间:任意的生成器程序,其任务是生成单个随机输入。

Generator<T>提供了生成类型为T的随机实例的方法。例如,对于类型为Calendar的生成器,它返回随机生成的Calendar对象。可以轻松编写更复杂类型的生成器,比如
XML文档,
JavaScript程序,
JVM类文件,SQL查询,HTTP请求等等等 - 这就是基于生成器的模糊测试。然而,仅仅对类型为T的随机输入进行采样通常不是很有效,因为生成器不知道它产生的输入是否有效。

什么是语义模糊测试(Zest)?

JQF支持**[Zest算法][ISSTA’19 paper],该算法使用代码覆盖和输入有效性反馈来偏向于生成结构化输入,从而揭示深层次的语义错误。

JQF使用字节码插装提取代码覆盖,使用JUnit的Assume API提取输入有效性。

如果没有违反假设,输入就是有效的。

示例

以下是用于检查Apache Commons Collections中PatriciaTrie类属性的JUnit-Quickcheck测试。该属性测试如果PatriciaTrie使用输入的JDK Map初始化,并且如果输入映射已经包含一个键,则新构建的PatriciaTrie中也应存在该键。

@RunWith(JQF.class)
public class PatriciaTrieTest {

    @Fuzz  /* 此方法的参数将由JQF自动生成 */
    public void testMap2Trie(Map<String, Integer> map, String key) {
        // 键应存在于映射中
        assumeTrue(map.containsKey(key));   // 如果这个谓词不为真,测试无效

        // 使用输入`map`创建新的trie
        Trie trie = new PatriciaTrie(map);

        // 该键也应存在于trie中
        assertTrue(trie.containsKey(key));  // 当map = {"x": 1, "x\0": 2}和key = "x"时失败
    }
}

运行mvn jqf:fuzz将导致JQF重复调用testMap2Trie()方法,并自动生成mapkey的值。大约在平均5秒后(~5,000个输入),JQF将报告断言违规。它发现了在PatriciaTrie的实现中的一个bug,截至v4.4尚未解决。对mapkey值的随机抽样不太可能找到失败的测试用例,这是一个非常特殊的极端情况(请参阅上述代码中断言旁边的注释)。JQF使用名为[Zest][ISSTA’19 paper]的覆盖引导调用很容易找到此违规。要将此示例作为独立的Maven项目运行,请查看jqf-zest-example存储库。

在上面的示例中,MapString的生成器是由JUnitQuickCheck自动生成的。也可以手动为结构化输入指定生成器。

在这里插入图片描述

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

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

相关文章

软件概要设计(word)原件

1引言 1.1编写目的 1.2项目背景 1.3参考资料 2系统总体设计 2.1整体架构 2.2整体功能架构 2.3整体技术架构 2.4运行环境设计 2.5设计目标 3系统功能模块设计 3.1个人办公 4性能设计 4.1响应时间 4.2并发用户数 5接口设计 5.1接口设计原则 5.2接口实现方式 6运行设计 6.1运行模块…

Linux ls命令

目录 一. 配置项1.1 ls -l1.2 ls -a1.3 ls -lrt1.4 ls -ld .?* 二. 案例2.1 查看指定文件夹下文件的数量2.2 查看多个文件夹下文件信息 一. 配置项 1.1 ls -l ⏹ ls 列出当前文件夹下所有文件名称(不包含隐藏文件) jmw_num_00 jmw_num_02 jmw_num_04 jmw_num_06 jmw_n…

跨平台的文件传输协议@windows端服务器的配置@smb协议共享方案@ftp服务器设置

文章目录 abstractrefs ftp server下面是核心步骤FAQ smb server设置方法 共享文件夹的访问控制补充匿名访问问题协议相关信息参考android客户端推荐FAQ不同用户文件无法访问 比较和总结传输速率问题 abstract 文件传输协议是很常用的协议特别是跨平台的协议,往往更加受欢迎,应…

VS2022 | 调整适配虚幻5的设置

VS2022 | 调整适配虚幻5的设置

小米4A千兆版路由器刷入OpenWRT教程结合内网穿透远程访问

文章目录 前言1. 安装Python和需要的库2. 使用 OpenWRTInvasion 破解路由器3. 备份当前分区并刷入新的Breed4. 安装cpolar内网穿透4.1 注册账号4.2 下载cpolar客户端4.3 登录cpolar web ui管理界面4.4 创建公网地址 5. 固定公网地址访问 前言 OpenWRT是一个高度模块化、高度自…

数组中元素的插入和查找算法探究

数组的查找 线性查找 概念 线性查找也叫顺序查找&#xff0c;这是最基本的一种查找方法&#xff0c;从给定的值中进行搜索&#xff0c;从一端开始逐一检查每个元素&#xff0c;直到找到所需元素的过程。 元素序列的排列可以有序&#xff0c;也可以无序。 代码实现 public cl…

vulhub中的Apache HTTPD 换行解析漏洞(CVE-2017-15715)详解

Apache HTTPD 换行解析漏洞&#xff08;CVE-2017-15715&#xff09; 1.cd到CVE-2017-15715 cd vulhub/httpd/CVE-2017-15715 2.运行docker-compose build docker-compose build 3.运行docker-compose up -d 4.查看docker-compose ps 5.访问 出现这个表示安装成功 6.漏洞复现…

16-20.Python语言进阶

Python语言进阶 重要知识点 生成式&#xff08;推导式&#xff09;的用法 prices {AAPL: 191.88,GOOG: 1186.96,IBM: 149.24,ORCL: 48.44,ACN: 166.89,FB: 208.09,SYMC: 21.29 } # 用股票价格大于100元的股票构造一个新的字典 prices2 {key: value for key, value in prices…

Github 2024-01-09Python开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-01-09统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目10Jupyter Notebook项目1 Payloads All The Things - 有用的Web应用程序安全负载和绕过列表 创建…

Unity 编辑器篇|(二)GenericMenu自定义弹出式菜单

目录 1. 前言2. Scene视图添加自定义菜单3. Hierarchy视图添加自定义菜单4. Project视图添加自定义菜单5. Game视图添加自定义菜单 1. 前言 GenericMenu 是 Unity 中的一个强大的类&#xff0c;用于创建和管理自定义上下文菜单&#xff08;也称为弹出菜单&#xff09;。可以使…

Django配置日志系统的最佳实践

概要 日志是跟踪应用行为、监控错误、性能分析和安全审计的重要工具。在Django框架中&#xff0c;合理配置日志系统可以帮助开发者有效管理项目运行过程中的关键信息。本文将详细介绍Django日志系统的最佳实践。 日志系统概述 Django使用Python的 logging 模块来实现日志系统…

苹果快捷指令在哪?详细使用教程送给大家!

快捷指令是苹果公司推出的一个实用功能&#xff0c;然而&#xff0c;可能还有很多新手用户不知道苹果快捷指令在哪。其实&#xff0c;快捷指令中心是iOS系统自带的应用&#xff0c;它一般就位于手机的主屏幕中。今天&#xff0c;小编将针对此问题来给大家分享一下有关苹果快捷指…

虚拟机Linux硬盘扩容

扩容前(20G)&#xff1a; 扩容后(60G)&#xff1a; 步骤&#xff1a; 1. 点击 虚拟机 -> 设置 -> 硬件 -> 硬盘(SCSI) -> 扩展(E)... -> 输入想要扩容大大小 -> 扩展(E) 2. 运行虚拟机&#xff0c;查看根目录属于那个文件系统&#xff0c;我的是 /dev/sda1…

前端八股文(网络篇)一

目录 1.Get和Post的请求的区别 2.常见的HTTP请求头和响应头 3.常见的HTTP请求方法 4.HTTP与HTTPS协议的区别 5.对keep-alive的理解 6.页面有多张图片&#xff0c;HTTP是怎样的加载表现&#xff1f; 7.HTTP请求报文是什么样的&#xff1f; 8.HTTP响应报文是什么样&#x…

【数据结构】数据结构中应用题大全(完结)

自己在学习过程中总结了DS中几乎所有的应用题&#xff0c;可以用于速通期末考/考研/各种考试。很多方法来源于B站大佬&#xff0c;底层原理本文不做过多介绍&#xff0c;建议自己研究。例题大部分选自紫皮严书。pdf版在主页资源 一、递归时间/空间分析 1.时间复杂度的分析 设…

与AI合作 -- 写一个modern c++单例工厂

目录 前言 提问 bard给出的答案 AI答案的问题 要求bard改进 人类智能 AI VS 人类 前言 通过本文读者可以学到modern C单例模式工厂模式的混合体&#xff0c;同时也能看到&#xff1a;如今AI发展到了怎样的智能程度&#xff1f;怎样让AI帮助我们快速完成实现头脑中的想法&…

如何下载和处理Sentinel-2数据

Sentinel-2是欧洲空间局&#xff08;ESA&#xff09;Copernicus计划中的一组地球观测卫星&#xff0c;主要用于提供高分辨率的光学遥感数据。Sentinel-2卫星组成了一个多光谱成像系统&#xff0c;可用于监测地球表面的陆地变化、植被覆盖、水域和自然灾害等。它具有以下特性&am…

2019年认证杯SPSSPRO杯数学建模A题(第一阶段)好风凭借力,送我上青云全过程文档及程序

2019年认证杯SPSSPRO杯数学建模 纸飞机在飞行状态下的运动模型 A题 好风凭借力&#xff0c;送我上青云 原题再现&#xff1a; 纸飞机有许多种折法。世界上有若干具有一定影响力的纸飞机比赛&#xff0c;通常的参赛规定是使用一张特定规格的纸&#xff0c;例如 A4 大小的纸张…

java 体育明星管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web 体育明星管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysq…

JQuery异步加载表格选择记录

JQuery异步加载表格选择记录 JQuery操作表格 首先在页面中定义一个表格对象 <table id"insts" class"table"><thead><tr><th>列1</th><th>列2</th><th>例3</th><th></th></tr>…