精华内容
下载资源
问答
  • 论文学习:面向Java程序的智能模糊测试关键技术研究
    千次阅读
    2021-11-02 15:47:34

    基于依赖性分析的测试类自动生成

    (1)依赖性分析:

          本文在方法调用图的基础上,定义了使用图和修改图来表示方法和字段之间的关系。

    (2)方法序列构建:

          基于分析结果,构建能够修改待测方法访问字段的方法序列。基于使用图获取待测方法访问的字段,基于修改图得到能够修改指定字段的方法集合。根据解析得到的访问字段集合,对其中的每一个字段都从修改方法集合中寻找合适的方法构造方法序列。选择方法时需要满足修改给定字段的要求,同时也要尽量简单,避免重复修改,还要考虑到选择出的方法能被实例化和赋值。

    (3)基于知识库构建类实例:

          基于启发式对待测方法分类:根据是否有file对象或进行文件操作的string对象来判断是否需要处理文件。

           文件型:找出文件名参数,设置为输入,若有其他参数,用随机数生成器生成随机参数。

           非文件型:首先读取文件,转换为字节数组,然后根据操作序列中的每一个项目所需的数据类型逐个从字节数组中截取数据,转换成所需要的数据。

    (4)总结

           不足:对于类实例的构建能力有待提高。本文通过收集待测程序的构造方法和工厂方法等为类提供实例化的方法,对于内建类,需要提供人工帮助,本文能够处理大多数类的实例构造问题,但仍然存在很多不能处理的场合。在知识库中没有建立对接口类的构造方法。 

           改进:改进实例生成能力;提高生成实例的质量(语义知识)。

    基于条件语句污点追踪的模糊测试

           使用污点追踪平台,执行种子输入,并收集分支的污点信息。选定一条分支做目标,根据污点信息,解析影响分支变量的集合,结合依赖性分析、知识库和修改策略,产生新的输入。若输入没有达到目标,则制定新的修改策略。

            变量级污点追踪:对目标中的每一个变量,插入一个字段保存污点信息。

            对于一个待测方法,定义污点源为该方法的参数和所属类、实例中的字段。对于方法中的分支,将变量从条件语句中分离出来。分别设置为污点槽。在获取所有的变量污点信息后,进行整合,得到该分支的污点信息。

            变异操作:数据变异、操作序列变异、重置操作序列。

            基于Java反射机制执行输入。

            总结:改进:提高测试输入生成的质量,提高测试输入的执行速率,提高污点追踪的能力。

    混合式待测方法调度算法

            本文采取非检查型异常作为测试准则,如果在测试过程中发现了非检查型异常,则认为程序产生问题。

            采用启发式筛选出肯定不会产生错误的方法,减少不必要的测试。

            用指令数目、被调用次数、调用其他方法次数、被其他方法调用次数、被测试的次数来描述优先级,结合方法调用图,定义方法的测试优先级。

            基于执行反馈动态待测方法调度:在测试开始前,进行初始化,计算出优先级的初始值,在测试过程中,根据路径覆盖情况,更新动态优先级,据此重新排序。

    更多相关内容
  • Javafuzz:适用于Java的覆盖率指导的模糊测试 Javafuzz是覆盖引导用于测试Java包。 模糊搜索诸如nodejs之类的安全语言是一种强大的策略,可用于查找未处理的异常,逻辑错误,由挂起和过多的内存使用引起的逻辑错误...
  • Kex是用于Java字节码的白盒子模糊测试工具。 依存关系 使用以下配置进行: < id>github-vorpal-research-kotlin-maven < username>USERNAME < password>TOKEN v4.8.6 您需要使用以下命令手动将具有Java绑定的...
  • java安卓辅助源码与模糊测试相关的最新论文 所有论文(按会议分类) 标准普尔 2020 年 SAVIOR:走向错误驱动的混合测试 标准普尔 2019 年 NEUZZ:使用神经程序平滑进行高效模糊测试 通过二维输入空间探索模糊文件...
  • java安卓辅助源码欢迎来到真棒模糊测试 用于学习模糊测试和漏洞利用开发的初始阶段(如根本原因分析)的精选模糊测试资源列表(书籍、免费和付费课程、视频、工具、教程和易受攻击的应用程序)。 目录 很棒的模糊...
  • 模糊测试-AFL学习笔记之Java

    千次阅读 2020-07-16 19:09:22
    AFL(American Fuzzy Lop)是由安全研究员Michał Zalewski(@lcamtuf)开发的一款基于覆盖引导(Coverage-guided)的模糊测试工具,它通过记录输入样本的代码覆盖率,从而调整输入样本以提高覆盖率,增加发现漏洞的...

    目录

    AFL简介

    kelinci

    下载

    目录结构

    原理

    编译

    使用举例 

    simple

    java-afl

    下载

    目录结构

    参考


    AFL简介

    AFL(American Fuzzy Lop)是由安全研究员Michał Zalewski(@lcamtuf)开发的一款基于覆盖引导(Coverage-guided)的模糊测试工具,它通过记录输入样本的代码覆盖率,从而调整输入样本以提高覆盖率,增加发现漏洞的概率。其工作流程大致如下:

    ①从源码编译程序时进行插桩,以记录代码覆盖率(Code Coverage);

    ②选择一些输入文件,作为初始测试集加入输入队列(queue);

    ③将队列中的文件按一定的策略进行“突变”

    ④如果经过变异文件更新了覆盖范围,则将其保留添加到队列中;

    ⑤上述过程会一直循环进行,期间触发了crash的文件会被记录下来。

    AFL原本是对C/C++程序进行插桩,文章模糊测试-AFL学习笔记之C/C++中有对AFL更详细的介绍。

    AFL在2017年11月5日后不再更新...

    kelinci

    更新于2018年2月7日。

    其中一位作者是来自Carnegie Mellon University Silicon Valley(卡内基梅隆大学硅谷),似乎是论文附带的研发工具,估计不会更新了。

    下载

    git clone https://github.com/isstac/kelinci.git

    目录结构

    项目结构
    •  docs 两个文档的目录
    • examples 三个例子的目录
    • fuzzerside c应用程序
    • instrumentor Java端组件

    Java组件通过AFL样式管理为目标应用程序提供工具,并提供与C端通信的组件。以后执行检测程序时,这将设置一个TCP服务器,并针对每个传入请求在单独的线程中运行目标应用程序。它发送回退出代码(成功,超时,崩溃或队列已满),以及收集的路径信息。任何异常转义为main都被视为崩溃。

    原理

    下图是他们的poster,docs里面的ccs2017-poster-small.pdf

    poster

     

    设计

    首先对于AFL来说,它并不知道自己在fuzz java程序,这是因为kelinci做了一个java程序的C版interface.c ,这个interface.c程序负责从AFL中接收变异数据,然后通过TCP传给java侧,java侧的程序叫做instrumentor,它负责把从interface传过来的变异数据真正的传递给java原始目标程序,然后再把java的运行结果反馈给interface.c,如此形成了一个fuzz的数据流闭环。

    • 在Java程序上运行AFL
    • 没有对AFL的修改
    • 易于并行化
    • 在JDK 6-9和Apache Commons Imaging中发现错误

    对于模糊器生成的给定输入文件,C和Java端之间的交互如下:
    1. interface.c接收来自AFL的派生请求。
    2.派生的interface.c进程之一加载提供的输入文件,另一个继续运行派生的服务器。
    3.前一个interface.c进程通过TCP连接将提供的输入文件发送到Kelinci服务器。
    4. Kelinci服务器接收传入的请求并将其入队。
    5. Kelinci服务器通过将输入的输入文件写入磁盘,启动一个新线程,在该线程中对提供的输入调用目标应用程序的主方法并对其进行监视,从而处理请求。如果线程抛出escapes main的异常,则将其视为错误。如果线程未在给定的超时时间内终止,则将其视为挂起。
    6. Kelinci服务器将结果传递回C端。共享内存位图通过TCP连接以及状态(确定,错误或超时)发送。
    7.在C端,将接收到的位图写入共享内存。
    根据接收到的状态,程序会正常退出,中止或循环运行,直到AFL超时。

    更多内容阅读ccs17-kersten.pdf,里面提到了另外两个模糊测试工具EvoSuite和Randoop

    编译

    进到 instrumentor目录

    gradle build
    编译插桩
    编译成功后多出的build目录

    进入fuzzerside目录

    make
    编译接口

    使用举例 

    simple

    编译

    mkdir bin
    javac src/*.java -d bin
    

    插桩

    java -cp ../../instrumentor/build/libs/kelinci.jar edu.cmu.sv.kelinci.instrumentor.Instrumentor -i bin -o bin-instrumented
    结果

    警告可以不管,但是错误不能不管,由于非法反射操作,导致错误,以后的版本将会对非法访问进行拒绝。

    issues

     issues中也有不少人对于这个问题进行了提问,部分问题作者没有给出解答,部分问题的解答是注释某些行。

    创建输入字典

    mkdir in_dir
    echo "hello" > in_dir/example

    测试字典

    java -cp bin-instrumented SimpleBuggy in_dir/example

     出错如下:

    ClassNotFoundException

    未找到类,.class文件存在,java -version, javac均没有问题,未解决,有明白的朋友请下方评论,谢谢。

    转战CentOS6,使用的是之前学大数据Hadoop的虚拟机,Java环境等都有安装,不做赘述。

     编译

    编译

    插桩

    插桩

    创建输入字典

    mkdir in_dir
    echo "hello" > in_dir/example

    测试字典

    Main done

     有Main done字样,没有问题了。

    开启kelinci服务器

    java -cp bin-instrumented edu.cmu.sv.kelinci.Kelinci SimpleBuggy @@
    开启服务器

    测试接口

    ../../fuzzerside/interface in_dir/example

     开始Fuzz

    afl-fuzz -i in_dir -o out_dir ../../fuzzerside/interface @@
    两个警告

     警告可能比较慢,需要优化。。。

    运行15分钟

     结果分析

    发现了两个crashes,我们就看一看是什么输入。

    查看crashes

    可以看到出错时输入是xello和nello。

    验证

     SimpleBuggy.java中的代码有四个大的分支,当首字母的ASCII码减去字符0的ASCII码后对10取余结果为2时报错。我们简单写个程序,发现小写字母中d n x是符合的,而我们的crashes中的两个结果正好是其中的两个,如果运行时间长,应该会发现更多。

    java-afl

    下载

    git clone https://github.com/Barro/java-afl.git
    克隆

    目录结构

    结构

     

    未完待续...

    参考

    Wikipedia(american fuzzy lop (fuzzer))

    AFL漏洞挖掘技术漫谈(一):用AFL开始你的第一次Fuzzing

    基于AFL的Java程序Fuzz工具:Kelinci

    更多内容查看:网络安全-自学笔记

    喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力

    展开全文
  • 模糊测试软件测试_模糊测试

    千次阅读 2020-07-03 16:06:57
    如果您程序进行了24小时的模糊测试并且仍然可以正常使用,那么同类的进一步攻击就不太可能损害它。 (并非不可能,请注意,可能性较小。)如果模糊测试确实揭示了程序中的错误,则应修复它们。 通过明智地使用...

    多年来,我震惊于可能导致Microsoft Word崩溃的损坏文件数量。 几个字节不合时宜,整个应用程序就大火了。 在较旧的,不受内存保护的操作系统上,整个计算机通常会随之崩溃。 为什么Word无法识别何时收到错误数据,而只是发出错误消息? 为什么仅仅因为一些东西被扭曲而破坏了自己的堆栈和堆? 当然,Word并不是面对畸形文件时唯一表现恶劣的程序。

    本文向您介绍了一种尝试避免此类灾难的技术。 在模糊测试中,您使用随机的不良数据(也称为fuzz )攻击程序,然后等待一下,看看有什么坏处。 模糊测试的诀窍在于,这是不合逻辑的:自动模糊测试不会试图猜测可能会导致崩溃的数据(就像人工测试人员可能会做的那样),而是会在程序上尽可能多地抛出乱码。 通过这种测试确定的故障模式通常会使程序员感到震惊,因为没有逻辑的人会想到它们。

    模糊测试是一种简单的技术,但是它仍然可以揭示程序中的重要错误。 它可以识别实际的故障模式,并指示在软件出厂前应插入的潜在攻击途径。

    模糊测试的工作原理

    模糊测试是一个非常简单的实现过程:

    1. 准备正确的文件以输入到您的程序。
    2. 用随机数据替换文件的某些部分。
    3. 使用程序打开文件。
    4. 看看有什么休息。

    您可以通过多种方式改变随机数据。 例如,您可以随机分配整个文件,而不是替换其中的一部分。 您可以将文件限制为ASCII文本或非零字节。 用任何方式对其进行切片,关键是在应用程序上抛出大量随机数据并查看失败的原因。

    虽然您可以手动进行初始测试,但实际上应该自动执行模糊测试以达到最佳效果。 在这种情况下,面对输入损坏时,首先需要为应用程序定义正确的错误行为。 (如果您发现程序没有费心去定义当输入数据损坏时会发生什么,那么,这是您的第一个错误。)然后,您只需将随机数据传递到程序中,直到找到一个不会触发适当数据的文件即可。错误对话框,消息,异常等。存储并记录该文件,以便以后可以重现该问题。 重复。

    尽管模糊测试通常需要一些手动编码,但是有些工具可以提供帮助。 例如,清单1显示了一个简单的Java™类,该类随机修改文件的特定长度。 我通常喜欢在前几个字节之后开始模糊测试,因为程序似乎比以后的错误更容易注意到早期的错误。 (您想查找程序不会检查的错误,而不是程序会检查的错误。)

    清单1.用随机数据替换文件的一部分的类
    import java.io.*;
    import java.security.SecureRandom;
    import java.util.Random;
    
    public class Fuzzer {
    
         private Random random = new SecureRandom();
         private int count = 1;
    
         public File fuzz(File in, int start, int length) throws IOException  
    {
    
             byte[] data = new byte[(int) in.length()];
             DataInputStream din = new DataInputStream(new FileInputStream(in));
             din.readFully(data);
             fuzz(data, start, length);
             String name = "fuzz_" + count + "_" + in.getName();
             File fout = new File(name);
             FileOutputStream  out = new FileOutputStream(fout);
             out.write(data);
             out.close();
             din.close();
             count++;
             return fout;
         }
    
    
         // Modifies byte array in place
         public void fuzz(byte[] in, int start, int length) {
    
             byte[] fuzz = new byte[length];
             random.nextBytes(fuzz);
             System.arraycopy(fuzz, 0, in, start, fuzz.length);
    
         }
    
    }

    模糊文件很容易。 将其传递给应用程序通常并不难。 脚本语言(如AppleScript或Perl)通常是编写模糊测试这一部分的最佳选择。 对于GUI程序,最困难的部分是识别应用程序是否指示正确的故障模式。 有时,最简单的做法是让人员坐在程序前,并将每个测试标记为通过或失败。 确保单独命名并保存所有生成的随机测试用例,以便您可以重现通过此过程检测到的所有故障。

    防御性编码

    可靠的代码遵循这一基本原则: 切勿在未经验证其一致性和完整性的情况下将外部数据接受到程序中。

    如果您从文件中读取一个数字并期望它是正数,请在使用该数字进行进一步处理之前检查该数字是否正确。 如果您期望一个字符串仅包含ASCII字母,请确保它包含。 如果您认为文件包含四个字节的整数倍,请检查该文件。 切勿假设外部提供的数据的任何特征都符合您的预期。

    最常见的错误是假定由于程序实例将数据写出,因此可以在不验证数据的情况下再次读回数据。 这很危险! 数据可能已被另一个程序覆盖在磁盘上。 磁盘故障或网络传输错误可能损坏了它。 它可能已经被另一个有错误的程序修改了。 甚至可以故意修改它,以破坏程序的安全性。 假设什么都不做。 验证一切。

    当然,错误处理和验证是丑陋的,令人讨厌的,不便的,并且被全世界的程序员彻底鄙视。 进入计算机时代已有60年了,我们仍然没有检查诸如打开文件是否成功或内存分配是否成功之类的基本信息。 要求程序员在读取文件时测试每个字节和每个不变式似乎是没有希望的-但是不这样做会使您的程序容易受到模糊的影响。 幸运的是,可以得到帮助。 正确使用的现代工具和技术可以大大减轻加强应用程序的痛苦。 特别是,三种技术脱颖而出:

    • 校验和
    • 基于语法的格式,例如XML
    • 经过验证的代码,例如Java

    带有校验和的模糊验证

    您可以采取的最简单的措施是将校验和添加到数据中。 例如,您可以对文件中的所有字节求和,然后除以256后的余数。将结果值存储在文件末尾的一个额外字节中。 然后,在信任输入数据之前,请验证校验和是否匹配。 这种非常简单的方案将未检测到的意外故障的风险降低到256分之一。

    诸如MD5和SHA之类的健壮的校验和算法除了将256除以余数外,还做很多事情。在Java语言中, java.security.DigestInputStreamjava.security.DigestOutputStream类提供了将校验和附加到数据的便捷方法。 使用这些校验和算法中的一种,可以将意外损坏的可能性降低到不到十亿分之一(尽管您会看到,仍然有可能进行故意的攻击)。

    XML存储和验证

    用XML存储数据是避免数据损坏问题的一种极好的方法。 XML原本是用于网页,书籍,诗歌,文章和类似文档的,但它在从财务数据到矢量图形再到序列化对象的几乎每个领域都取得了广泛的成功。

    这使得XML格式的模糊性的主要特点是,XML解析器承担任何关于输入。 这正是您想要的强大文件格式。 XML解析器的设计使所有输入(格式正确或无效,有效或无效)都以定义的方式进行处理。 XML解析器可以处理任何字节流。 如果您的数据首先通过XML解析器,则解析器可以为您提供的一切都需要准备。 例如,您不需要检查数据是否包含空字符,因为XML解析器永远不会为您传递空值。 如果XML解析器在其输入中看到一个空字符,它将引发异常并停止处理。 当然,您仍然需要处理此异常,但是编写catch块来处理检测到的错误比编写代码来检测所有可能的错误要简单得多。

    为了进一步提高安全性,您可以使用DTD和/或架构来验证文档。 这不仅检查XML的格式是否正确,而且检查它是否至少接近您的期望。 验证很少会告诉您有关文档需要了解的所有信息,但是它使编写许多简单的检查变得很容易。 使用XML,将接受的文档严格限制为您知道如何处理的格式非常简单。

    仍然会有一些您无法使用DTD或架构验证的代码。 例如,您无法测试发票中某个项目的价格是否与库存数据库中该项目的价格相同。 当从客户那里收到包含价格的订购文档时,无论是XML格式还是其他格式,您都应在提交价格之前始终检查以确保客户未修改价格。 但是,您可以使用自定义代码实施这些最后的检查。

    基于语法的格式

    使XML如此抗模糊的一个特征是,使用Backus-Naur Form(BNF)语法对格式进行了仔细而正式的定义。 许多解析器是使用解析器生成器工具(例如JavaCC或Bison)直接从此语法构建的。 这种工具的本质是读取任意输入流并确定其是否满足语法要求。

    如果XML不适合您的文件格式,您仍然可以获得基于解析器的解决方案的强大功能。 但是,您必须为文件格式编写自己的语法,然后开发自己的解析器以读取它。 滚动自己的工作比仅使用现成的XML解析器要耗费更多的工作。 但是,这是一个比将数据简单地加载到内存中而不对语法进行正式验证要强得多的解决方案。

    Java代码验证

    模糊测试导致的许多崩溃是内存分配错误和缓冲区溢出的直接结果。 使用在Java或托管C#等虚拟机中执行的安全的,垃圾收集的语言编写应用程序可以消除许多潜在的问题。 即使使用C或C ++编写代码,也应使用可靠的垃圾收集库。 在2006年,任何台式机或服务器程序员都不应管理自己的内存。

    Java运行时为其自身的代码增加了一层保护。 在将.class文件加载到虚拟机中之前,将通过字节码验证程序以及可选的SecurityManager对其进行验证。 Java不假定创建.class文件的编译器没有错误或行为不正确。 Java语言从一开始就被设计为允许在安全的沙箱中执行不受信任的,潜在的恶意代码。 它甚至不信任它本身已经编译的代码。 毕竟,有人可能已经使用十六进制编辑器手动更改了字节码,以尝试触发缓冲区溢出。 我们所有人都应该对程序输入有这种偏执感。

    像敌人一样思考

    每种先前的技术在防止意外损坏方面都大有帮助。 两者合计并正确实施,它们可以将未发现的意外损坏的机会降低到基本上为零。 (嗯,不是零,而是与宇宙射线导致CPU加1 + 1并得出3的机会相同的数量级。)但并非所有数据损坏都是无意的。 如果有人故意引入不良数据以期破坏程序的安全性怎么办? 像破解者一样思考是保护代码的下一步。

    回到攻击者的思维方式,让我们假设您要攻击的应用程序是用Java编程语言编写的,使用非本机代码,并且将所有外部数据存储为XML,在接受之前已对其进行了全面验证。 您还能成功攻击它吗? 是的你可以。 但是,随机更改文件中字节的幼稚方法不太可能成功。 您需要一种更高级的方法来解决程序的内置错误检测机制并围绕它们进行路由。

    当测试抗模糊应用程序时,不能进行纯黑盒测试,但是经过一些明显的修改,基本思想仍然适用。 例如,考虑校验和。 如果文件格式包含校验和,则只需将校验和修改为匹配随机数据,然后再将文件传递给应用程序。

    对于XML,请尝试模糊各个元素的内容和属性值,而不要在文档中随机选择要替换的字节部分。 请小心用合法的XML字符而不是随机字节替换数据,因为几乎可以肯定甚至是一百字节的随机数据格式也有误。 您也可以更改元素名称和属性名称,只要注意确保生成的文档仍然格式正确即可。 如果根据限制性很强的架构检查XML文档,则需要弄清楚该架构没有检查的内容,以确定可以在哪里进行有效的测试。

    真正严格的架构与剩余数据的代码级验证相结合,可能使您没有任何回旋余地。 作为开发人员,这是您应该争取的。 该应用程序应该能够有意义地处理您发送的任何字节流,因为它在法律上是无效的,因此不会被拒绝。

    结论

    模糊测试可以演示程序中是否存在错误。 并没有证明不存在此类错误。 尽管如此,通过模糊测试可以极大地提高您对应用程序的健壮性和安全性的信心,以防止意外输入。 如果您对程序进行了24小时的模糊测试并且仍然可以正常使用,那么同类的进一步攻击就不太可能损害它。 (并非不可能,请注意,可能性较小。)如果模糊测试确实揭示了程序中的错误,则应修复它们。 通过明智地使用校验和,XML,垃圾回收和/或基于语法的文件格式,从根本上强化文件格式可能会更有效率,而不是插入出现的随机错误。

    模糊测试是一种用于识别程序中实际错误的关键工具,并且是所有安全意识和面向健壮性的程序员都应在其工具箱中使用的工具。


    翻译自: https://www.ibm.com/developerworks/java/library/j-fuzztest/index.html

    展开全文
  • PwnFuzzer 是一个 java 工具,它发送 http 请求并尝试猜测用户列表的密码。 它易于使用和配置。 享受 ;)
  • wfuzz-4.2k stars,WFuzz 是一个用于 Python 的 Web 应用程序安全模糊器工具和库,可路径、文件、URL参数、POST请求等进行模糊测试。 WebScarab-该工具是一个具有模糊测试能力的Web应用审计套件 协议模糊测试器 ...


    内核 && 通用模糊测试器

    OSS-Fuzz-7.1k stars, 对开源软件进行持续模糊测试,支持多种语言开发的软件,能够构建自己的模糊测试平台,例如结合Jazzer,学习成本较高。

    clusterfuzz-4.7k stars,可扩展的模糊测试框架,OSS-Fuzz的后端。

    syzkaller - 3.9k stars, 分布式、无监督、基于覆盖度的 Linux 系统调用模糊测试工具

    AFL-2.5k stars,可使用QEMU,是一款比较经典的模糊测试器。

    AFL++-2.5k stars,是AFL的高级分支,速度更快,变异策略更多更好。

    honggfuzz-2.4k stars,支持安卓、windows、mac、linux等多种操作系统,可通过命令行或文件等输入模式,可使用QEMU,多进程、多线程,已发现多个CVE,OSS-Fuzz、go-fuzz等受到它的启发。

    Choronzon - 265 stars,基于遗传知识的 Fuzzer

    gramfuzz - 221 stars,可定义复杂语法来建模文档与二进制数据格式的基于语法的 Fuzzer

    KernelFuzzer - 424 stars, 跨平台内核 Fuzzer 框架

    QuickFuzz - 192 stars,Haskell 写的针对第三方软件使用常见文件格式进行测试的工具,利用现成的、知名的 Fuzzer

    Hodor Fuzzer - 124 stars, 曾经是另一个通用的 fuzzer

    radamsa - 通用的测试用例生成器

    文件格式模糊测试器

    对pdf、 mp3、 swf 等文件格式进行模糊测试

    Win AFL - 83 stars, Ivan Fratic 开发的针对 Windows 二进制程序 fuzzing 的 AFL 分支版本

    AFLGo - 344 stars, 基于 AFL 构建的导向性灰盒 Fuzzing,针对程序特定位置进行模糊测试

    Shellphish Fuzzer - 598 stars, 一个操纵 AFL 的 Python 接口,可以简单的写入测试用例与其他功能

    zzuf - 366 stars, 一个透明应用输入 fuzzer,可以拦截文件操作、改变程序输入的随机位

    binspector - 179 stars, 二进制格式分析与模糊测试工具

    grammarinator - 215 stars, 基于 ANTLR v4 语法的文件格式模糊测试工具(ANTLR 项目已有大量的语法)

    pe-afl-195 stars, 针对 PE 文件进行静态二进制插桩辅助、结合 WinAFL 的 Fuzzer

    MiniFuzz - Microsoft 出品的基础文件格式 fuzzing 工具

    BFF from CERT - 基础文件格式 fuzzing 框架

    AFL Fuzzer (Linux only) - Michal Zalewski aka lcamtuf 开发的 Fuzzer

    TriforceAFL - 一个 AFL 的修正版,支持应用源码无法获得情况下的 fuzzing

    Peach Fuzzer - 帮助创建传统 dumb 以及小型 fuzzer 的框架

    Failure Observation Engine (FOE) - 基于畸形文件的 Windows 程序 Fuzzing 工具

    rmadair - 基于畸形文件的 fuzzer,使用 PyDBG 来监视感兴趣的信号

    网络协议模糊测试器

    对 HTTP, SSH, SMTP 等网络协议进行模糊测试

    Sulley - 1.3k stars, Michael Sutton 开发,包含多个可扩展组件的 Fuzzer 开发与 Fuzzing 测试框架,不再维护,推荐下面的

    boofuzz - 1.5k stars, Sulley 框架的继任者

    Spike - 像 sulley 的 fuzzer 开发框架,是 sulley 的前身

    Metasploit Framework - 26.3k stars,通过 Auxiliary 模块使其具有了 fuzzing 能力的框架

    Nightmare - 362 stars, 一个带有 Web 管理界面的分布式 fuzzing 测试套件,支持对网络协议进行 fuzzing

    rage_fuzzer - 20 stars, 未知协议包 fuzzer

    Fuzzotron - 355 stars, 支持 TCP、UDP 的简单多进程网络 Fuzzer

    Mutiny - 474 stars, 通过重放畸变的 PCAP 数据包来对网络进行 Fuzzer

    Fuzzing For Worms - 103 stars, 用于网络服务的 Fuzzing 框架

    AFL (w/ networking patch) - 188 stars, 用于网络 Fuzzing 的非官方版 AFL

    AFLNet - 503 stars, 用于网络协议的灰盒 Fuzzer(AFL 的扩展)

    Jackalope-684 stars, 分布式的,可用于windows和macos的二进制模糊测试器。

    Peach Fuzzer - 帮助创建传统 dumb 以及小型 fuzzer 的框架,之前是Python编写的,Peach3使用C#重写了。

    浏览器模糊测试器

    BFuzz - 283 stars, 一款基于输入的模糊测试框架

    WEB模糊测试器

    ffuf-6k stars,go语言编写的快速web模糊测试器,可对get、post数据包进行模糊测试,可使用外部变异器,例如,radamsa,来对种子进行变异生成测试用例。

    wfuzz-4.2k stars,WFuzz 是一个用于 Python 的 Web 应用程序安全模糊器工具和库,可对路径、文件、URL参数、POST请求等进行模糊测试。

    restler-fuzzer-1.5k stars,RestApi模糊测试器

    SSRFmap-1.7k stars,自动的SSRF模糊测试器。

    WebScarab-该工具是一个具有模糊测试能力的Web应用审计套件

    云模糊测试器

    在云环境中进行模糊测试的模糊测试工具

    Cloudfuzzer - 18 stars,在云环境中自动、便易地进行云 Fuzzing 的框架

    Fuzzit - Fuzzit 是一个 Fuzzing 即服务的平台,被 systemd, radare2 等多个开源\闭源项目使用

    某语言的模糊测试器

    Java

    jazzer-489 stars,基于libFuzzer的覆盖率指导的JVM软件模糊测试器
    Tribble - 16 stars,易用、覆盖度指导的 JVM 模糊测试框架

    C/C++

    libFuzzer - 面向 C/C++ 程序、基于覆盖度的进化模糊测试工具
    ansvif - 用于在 C/C++ 程序中查找漏洞的高级跨平台模糊测试框架

    Go

    go-fuzz - 4.3k star,覆盖度指导的 go 包模糊测试

    DOM

    domato-1.4k stars,dom模糊测试器

    JS

    fuzzilli-1.4k stars, js引擎模糊测试器

    关于模糊测试器的思考

    模糊测试器的组成部分

    用例生成器

    基于变异:有种子文件,变异后生成测试用例
    基于生成:知道输入的格式,根据格式在范围内生成测试用例
    可使用radamsa

    监控器

    监控被测试程序,获取被测试程序占用的cpu、内存、是否崩溃等情况
    可利用插桩技术

    过滤器

    有些崩溃可能上网络波动等造成的,可以过滤
    可利用正则

    核心部分

    调用用例生成器生成测试用例,将测试用例通过发送或调用被测试程序的方式传输,接收监控器的结果,指导用例的生成,接收过滤器的结果,生成统计信息

    结果统计

    统计发送的用例数量、崩溃数量、运行耗时等

    提高

    代码覆盖率引导

    使用分支覆盖率等进行引导,使测试用例尽可能的覆盖更多代码
    可利用插桩技术,放在监控器的部分,返回给核心部分

    多进程、多线程

    模糊测试的一个大问题就是效率太低,通过多进程和多线程可以得到缓解

    分布式

    同样,分布式也可以提高效率,同时,分布在不同机器,省的占用某一台机器过多内存和cpu,而且可以满足高可用。

    可视化

    可通过web界面等进行可视化,实时显示统计信息,有多少生成器在运行等。

    更多内容查看:网络安全-自学笔记

    喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。

    展开全文
  • java8中通过stream流List类型进行一些操作的测试Demo类
  • 模糊单元 该项目提供了一种创建大量 JUnit 测试的机制,理论上,这些测试将覆盖测试用例的问题空间。 它旨在具有以下功能: ...模糊测试将(在某些情况下)使用遗传算法完成,以了解应将哪些模式用作测试用例参数。
  • 加快跨微服务和端到端工作流的自动化REST API测试的开发。 概述 Ride是与服务无关的,模块化的,可扩展...要开始构建测试范围,请在所选的IDE / Build Tool中创建一个标准的Java项目(此处显示的示例在使用 )。 配置
  • XMPP模糊器 XMPP-FUZZER 是 XMPP 的模糊测试工具。 它建立在 Smack 库之上。 可惜目前只支持中文。 它最初发布在 code.google.com/p/xmpp-fuzzer 上。 共同开发者:姜峰和( ) 2009年开发。
  • Smart Fuzzing智能模糊测试

    千次阅读 2022-04-04 22:41:41
    智能模糊测试在未来市场具有巨大潜能,掌握这套技术意味着我们更多的安全产生了威胁,正如棱角的一句话来讲:“网络本是安全的,自从又了安全研究员,就不安全了”。
  • Java递归模糊查询文件

    多人点赞 热门讨论 2021-11-10 14:22:59
    Java递归模糊查询文件 字符串模糊查询 /** * 模糊查询 * @param str 需要查询的字符串 * @param part 部分 * @return true 代表查到的 false 代表没查到 */ public boolean matchStringByIndexOf(String str...
  • 上周微软开源了一款叫OneFuzz的模糊测试平台,主要是由开发团队驱动的可持续模糊测试平台,通过开发与集成项目对应的Fuzzer工具,在CI构建中持续Fuzz,自动化分析跟踪崩溃,告警通...
  • 完成一个模糊测试框架,结合实际的练习,如果想编写自己的测试框架,可以参考本书。 (2018):本书将模糊测试的思想引入软件开发生命周期,事实上很多高效的 fuzzing 测试往往在开发阶段就已经考虑到,该书探讨了 ...
  • java实现模糊搜索算法

    千次阅读 2020-08-15 12:55:40
    java实现模糊搜索算法介绍代码 介绍 这里说的模糊查询不是sql中like的效果,是相当于lucene中的FuzzyQuery效果。 比如:搜索值是"hella",匹配的数据是"hello",则模糊度为1匹配上该数据。 代码 算法: public ...
  • 用于智能卡上运行的应用程序和使用基于APDU的接口的应用程序进行可配置的黑盒模糊测试的工具。 APDU代表ISO7816标准的“应用协议数据单元”,是具有标头(前5个字节)和可选的自定义数据(最大256个字节)的简单...
  • 绒毛血管 “这艘船。脱离危险了吗?” -android服务模糊测试框架。
  • java 查询路径中所有文件夹和文件的名称,支持文件名模糊查询有时候我们遇到需要查询服务器或者本机某个路径下有哪些文件?或者根据文件名称模糊搜索文件,那么就可以使用本方法:可以获取某个路径下所有文件夹名称...
  • 模糊测试-radamsa学习笔记

    千次阅读 热门讨论 2020-07-21 09:59:09
    Radamsa是用于健壮性测试(又称为模糊测试)的测试用例生成器。它通常用于测试程序格式错误和潜在恶意输入的承受能力。它通过读取有效数据的样本文件并从中生成令人感兴趣的不同输出来工作。radamsa的主要卖点是,...
  • pbtk-逆向工程Protobuf应用 是Google开发的一种序列化格式,已在越来越多的Android,Web,... 通过方便的图形界面来编辑,重放和模糊化发送到Protobuf网络端点的数据,该界面允许您实时编辑Protobuf消息的字段并查看
  • Java实现伪查询(全匹配+模糊匹配)

    千次阅读 2021-03-06 04:18:58
    Java实现伪查询(全匹配+模糊匹配)在项目中一直习惯了框架下[springboot+mybatis]的增删改查,然后领导突然给了一个需求,让我先弄一些假数据出来,用于页面的展示,业务啥的也没说,咱是啥也不知道,咱也不该问,...
  • Java实现图片对比功能

    2020-09-04 04:33:36
    个人从来没有研究过图像学,也没看过什么论文或者相关文档,写这个完全是靠google和百度,自己写了个实验了下,测试用例也少,估计有大BUG的存在,所以看的人权当学习交流,切勿生产使用。
  • java8 看不到源码 emv-card-simulator 用于支付终端功能和安全测试/模糊测试的 EMV 卡的 JavaCard 实现。 如果您需要支付终端模拟器进行测试,请尝试使用项目。 建造 克隆项目 git clone --recurse-submodules ...
  • &amp;nbsp;&...值得一提是,我是在win10 64位系统下面完成本次安装和运行(64位系统运行安装32位程序是可以的,反之却不行的哟),所以本教程任何系统都适用。 &amp;nbsp;&amp;...
  • 访问者模式java源码超级 Superion 是一个模糊器,它扩展了著名的 AFL() 以支持结构化输入,例如 JavaScript 和 XML。 论文《Superion: Grammar-Aware Greybox Fuzzing》被ICSE 2019()接收。 Superion主要是给AFL增加...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,611
精华内容 23,444
关键字:

对java的模糊测试

java 订阅