精华内容
下载资源
问答
  • 关于模糊测试
    千次阅读
    2022-02-12 09:09:59


    内核 && 通用模糊测试器

    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(小于),您的支持是我不断更新的动力。

    更多相关内容
  • 什么是模糊测试

    千次阅读 2022-01-07 16:12:40
    什么是模糊测试模糊测试(Fuzz Testing)是一种自动化的软件测试技术,最初是由威斯康辛大学的巴顿·米勒于1989年开发的,通常用于识别程序中的潜在漏洞。模糊测试的核心是自动或半自动的生成随机数据输入到应用...

    什么是模糊测试?
    模糊测试(Fuzz Testing)是一种自动化的软件测试技术,最初是由威斯康辛大学的巴顿·米勒于1989年开发的,通常用于识别程序中的潜在漏洞。模糊测试的核心是自动或半自动的生成随机数据输入到应用程序中,同时监控程序的异常情况,如崩溃、代码断言失败,以此发现可能的程序错误,如内存泄漏。模糊化是指自动生成和执行测试,模糊测试中输入的随机数据被称为“Fuzz”,随机数据的类型包括:超长字符串;随机数如负数,浮点数,超大数、特殊字符如~!@#$%等包含特殊含义的字符,作为输入可能会引发报错;unicode编码,因为有些程序是不支持unicode的。
    模糊测试包括几个基本的测试步骤:确定被测系统->确定输入->生成模糊数据->使用模糊数据执行测试->监控分析系统的行为->输出日志。
    在这里插入图片描述

    目前有三种主要的模糊测试技术:

    黑盒随机模糊,对正确格式的输入数据进行随机变异,然后用这些变异的输入运行程序,看是否能够触发异常。这是一种简单的hack,如果一个应用从未进行过模糊测试,可以用这种技术有效地发现应用中的漏洞。
    基于语法的模糊,是模糊复杂格式输入的替代方法,需要指定输入格式的输入语法,还指定哪些输入部分要进行模糊化以及如何模糊化。基于语法的模糊生成器会生成许多新的输入,每个输入满足语法编码的约束。基于语法的fuzzing通过模糊生成器的用户的创造力和专业知识来指导fuzzing。
    白盒模糊处理,由微软研究院于2008年首创,这种方法包括:动态地执行测试下的程序,并从执行过程中遇到的条件分支收集输入约束。然后,系统地逐个否定所有这些约束,并使用约束求解器求解,其解被映射到执行不同程序执行路径的新输入。使用系统搜索技术重复这个过程,试图扫描程序的所有可行的执行路径。与黑盒随机模糊相比,白盒模糊通常更精确,可以运行更多的代码,从而发现更多的bug。
    模糊测试属于动态测试,是一种自动发现软件安全漏洞的经济有效的测试技术,常常会在软件安全开发生命周期中发现非常严重的安全故障或缺陷,例如:崩溃、内存泄漏,未处理的异常等。如果一个软件产品需要处理不可信的输入或者具有大型、复杂的数据解析功能,模糊测试是非常有效的。一旦一个模糊生成器启动并运行,它就可以开始自己寻找缺陷,不需要手动/人工干预。另外,模糊测试有助于发现传统测试方法或手动审计无法检测到的缺陷。
    当然,模糊测试无法提供对于一个软件应用在安全威胁或漏洞方面的整体评估,在处理不会导致应用崩溃的安全威胁时效果较差,例如某些病毒、蠕虫、木马等,因此需要结合其它的安全测试手段来保障软件系统的安全。

    模糊测试工具
    模糊测试的核心在于一个有效的模糊生成器(Fuzzer),就像巴顿·米勒教授当初给学生布置的作业:

    The goal of this project is to evaluate the robustness of various UNIX utility programs, given an unpredictable input stream. […] First, you will build a fuzz generator. This is a program that will output a random character stream. Second, you will take the fuzz generator and use it to attack as many UNIX utilities as possible, with the goal of trying to break them.
    该项目的目标是在给定不可预测的输入流的情况下评估各种UNIX实用程序的健壮性。[…]首先,您将构建一个模糊发生器。这是一个将输出随机字符流的程序。其次,您将使用模糊发生器,并使用它来攻击尽可能多的UNIX实用程序,以试图破坏它们。

    随机生成的输入大多数在语法上是不成立的,很快就会被被测试应用拒绝。为了能让模糊测试有效的进行下去,需要增加获得有效输入的几率。一个好的模糊生成器产生的数据,不会偏离预期输入太远,它们提供的数据被应用接受的概率很高,但又是非预期的,会触发应用的异常行为。目前有很多开源的模糊测试工具可以选择:
    American Fuzzy Lop(AFL)

    Radamsa
    Honggfuzz
    libufuzzer
    OSS-Fuzz
    boofuzz

    Bfuzz
    PeachTech Peach Fuzzer
    Microsoft Security Risk Detection
    ClusterFuzz
    Synopsys Defensics Fuzz Testing
    Fuzzbuzz

    1. American Fuzzy Lop(AFL)
      在这里插入图片描述

    AFL是一款开源的模糊测试工具,是当今使用最广泛的Fuzzer,这个工具在程序执行前对程序源码进行插桩(instrumentation),以便在程序执行过程中实时获取程序的执行情况。AFL采用遗传算法对程序的输入进行变异能够在程序运行的时候注入自己的代码, 然后自动产生测试用例进行模糊测试。代码覆盖率是模糊测试工具用来增加找到导致错误的代码路径的可能性的主要指标。在执行过程中,AFL向被测程序中输入input,然后获取程序的覆盖率,将覆盖率大的input保留下来进行变异,然后在下一轮测试中向被测程序中输出这些变异后的input,一直到程序的覆盖率在较长的一段时间不能继续增大为止。AFL的优点是可以轻松部署,配置简单,而最大的优点在于测试效率。这个工具建立在对最佳模糊测试器运行机制和最有用结果的大量研究基础之上,旨在最小化编译查询返回结果的耗时,尽量降低对系统的影响。AFL目前已衍生出很多分支。官网地址:https://lcamtuf.coredump.cx/afl/
    WinAFL:Windows版本的AFL,使用DynamoRIO去插桩闭源程序以获取代码覆盖率信息,同时支持硬件PT获取覆盖率信息,但PT获取覆盖率其实并没有插桩获取得全,但速度可能会快一些。
    地址:https://github.com/googleprojectzero/winafl

    AFLFast:加速版的AFL,Fuzzing速度确实会比原版快一些。
    地址:https://github.com/mboehme/aflfast

    1. Radamsa
      Radamsa是一个开源的模糊测试工具,通常用于测试程序对格式错误和潜在恶意输入的承受能力。Radamsa最大的卖点就是其准确性。GitLab上的开发者页面列出了这款模糊测试器在流行软件中发现的真实漏洞。它易于编写脚本,并且易于启动和运行。地址:https://github.com/Hwangtaewon/radamsa
    2. Honggfuzz
      Honggfuzz是由谷歌开发的,和AFL类似,采用遗传算法进行编译,是一个多进程和多线程的模糊生成器,所以用Honggfuzz进行fuzzing的速度非常快,在安全漏洞发现中的表现十分突出。根据该工具开发者的说法,它是唯一找到OpenSSL中导致发布全球安全补丁的关键漏洞的模糊测试工具。
      Honggfuzz不仅仅适用于Windows。它可以测试在Linux、Mac甚至Android环境下运行的应用程序。由于它能够在多个平台下工作,Honggfuzz提供了一个完整的示例和测试用例目录,开发人员可以使用这些示例和测试用例,也可以根据自己的需要进行修改。
      地址:https://github.com/google/honggfuzz
    3. LibfuzzerLibFuzzer与被测试的库链接,并通过特定的模糊入口点(也称为“目标函数”)向被测试的库提供模糊输入。随后,模糊生成器跟踪触及的代码区域,并在输入数据的语料库中生成变异,以此来扩大代码覆盖率。地址:https://llvm.org/docs/LibFuzzer.html
    4. OSS-Fuzz
      在这里插入图片描述

    OSS-Fuzz 能够针对开源软件进行持续的模糊测试,它的目的是利用更新的模糊测试技术与可拓展的分布式执行相结合,提高一般软件基础架构的安全性与稳定性。OSS-Fuzz 结合了多种模糊测试技术/漏洞捕捉技术(即原来的libfuzzer)与清洗技术(即原来的 AddressSanitizer),并且通过 ClusterFuzz 为大规模可分布式执行提供了测试环境。
    帮助开源社区使用创建更安全的应用,OSS-Fuzz在实现这一目标方面做得相当成功。OSS-Fuzz在200个开源程序中发现了超过14000个漏洞。地址:https://github.com/google/oss-fuzz
    6. boofuzz
    boofuzz模糊测试框架是基于已经不再维护的Sulley开发的。该工具使用Sulley核心代码,但致力于不断改良。boofuzz是作为Python库安装的。开发人员增加了在线文档、对更多通信媒介的支持、可扩展故障检测和一个易于使用的界面。该工具还将串行模糊测试、以太网和UDP广播添加到了默认功能里。boofuzz还可将测试结果以CSV文件格式导出,以便在修复检出故障时可以先研究所有被触发问题的完整列表。
    地址:https://github.com/jtpereyda/boofuzz
    7. Bfuzz当红模糊测试工具之一,发现了逼出Epiphany Web补丁的漏洞和可致Mozilla Firefox触发缓冲区溢出的漏洞。
    BFuzz是基于输入的模糊测试器,以URL和浏览器作为其输入方式。这个意义上讲,该工具很像DAST工具,适合重度依赖这些东西的公司企业,因为BFuzz使用类似的测试方法,但找寻不同类型的错误。
    地址:https://github.com/RootUp/BFuzz

    1. PeachTech Peach Fuzzer

    PeachTech Peach Fuzzer是PeachTech公司出品的商业模糊测试工具,很多繁琐的事情都不需要测试人员亲力亲为了。测试人员只需要用该公司所谓的Peach Pit加载并配置该模糊测试引擎即可。
    Peach Pit是预先编写好的测试定义,覆盖一系列不同平台。PeachTech表示,每个Pit包含适用特定目标的规范,比如目标摄入的数据结构,数据流入和流出被测设备或应用程序的方式等。这样测试人员就可以几乎不用设置,便能将精力集中在他们的模糊测试上了。用户使用PeachTech创建自己的Pit也很简单,令Peach Fuzzer还可用于专用系统。
    由于Peach Fuzzer引擎可以Peach Pit编程的原因,几乎所有系统都在该工具的测试范围之内:Mac、Windows、Linux,也可以用于模糊测试网络协议、嵌入式系统、驱动、物联网设备,只要是能接受命令而易受模糊输入困扰的系统,就能用Peach Fuzzer进行测试。
    地址:http://www.peach.tech/products/peach-fuzzer/

    AI模糊测试采用机器学习及类似技术查找应用或系统中的漏洞。智能约束算法和遗传算法是两种主流的智能模糊测试算法,上面提到的AFL就是采用遗传算法。此外,还有一些AI模糊测试工具:

    1. 微软开发的Security Risk Detection (MSRD)MSRD是一个人工智能驱动的动态应用安全测试服务,可以优化web应用开发周期,以便在bug和安全风险被引入代码库时识别和纠正它们。
      地址:https://www.microsoft.com/en-us/security-risk-detection/

    2. ClusterFuzz
      American Fuzzy Lop (AFL)使用遗传算法。该工具集是基于云的新工具Fuzzbuzz的核心,也是谷歌ClusterFuzz项目的一部分。ClusterFuzz是一个高度可伸缩的模糊测试基础设施,Google使用ClusterFuzz对所有Google产品进行模糊化,并将其作为OSS-fuzz的后端。
      地址:https://security.googleblog.com/2019/02/open-sourcing-clusterfuzz.html

    3. Synopsys Defensics Fuzz Testing
      Synopsys提供的Defensics是一个全面、通用、自动化的模糊测试框架,能够帮助企业高效、有效地发现和修复软件中的安全弱点。这种基于格式生成的模糊器采用有针对性的智能方法进行负面测试;高级文件和协议模板模糊器使用户能够构建自己的测试用例。SDK 支持专业用户使用 Defensics Framework开发自己的测试用例。
      地址:https://www.synopsys.com/software-integrity/security-testing/fuzz-testing.html

    4. Fuzzbuzz
      Fuzzbuzz是一个模糊测试平台,通过自动化的复杂的基础设施管理和设置以及与工具的连接,将模糊化集成到DevOps工作流中。该平台在发现缺陷时发出警报,消除重复数据,并对其进行分类,以消除噪音和误报。
      地址:https://www.fuzzbuzz.io/

    模糊测试的目的是发现软件安全漏洞,已经成为软件安全测试的主流测试技术,迄今为止,这项技术已经帮助人们在各种软件中发现了数千个安全漏洞。而且,随着“软件定义一切”和万物互联时代的到来,软件安全必将日益重要。因此,作为软件测试人员,有必要掌握模糊测试的技术和工具。想了解更多模糊测试技术,可以点击“阅读原文”,参考微软研究员于2020年4月发表的文章“Fuzzing: Hack, Art, and Science”


    软件测试自学资料

    软件测试入门到项目实战,7小时从小白到白领的软件测试快速入门课程

    软件测试实战教程 《学车不》APP实战软件测试

    首次公开丨黑马头条软件测试实战项目 完整版

    软件测试基础手把手带你Excel实现管理接口用例

    软件测试基础-手把手教你搞懂测试环境项目部署

    软件测试教程Charles抓包工具测试实战

    软件测试工程师必备MySQL数据库,mysql系统精讲+课后练习

    软件测试进阶教程微信小程序测试实战—全网首发

    展开全文
  • 模糊测试之实例讲解

    2021-03-23 11:24:46
    模糊测试(Fuzzing),是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。测试的基本思想就是通过向程序中输入大量的随机数据,然后观察输入这些数据之 什么是模糊测试 ...
  • 将随机数据加载到SQL表中以进行测试。 该工具可以获取SQL表的布局,并用随机数据填充它。 SQLfuzz将随机数据加载到SQL表中以进行测试。 该工具可以获取SQL表的布局,并用随机数据填充它。 用法转到安装github....
  • 所有代码的图片都是看的清楚的!...“模糊测试”方法使用随机数据作为被测程序的输入,然后系统性地找出这些输入数据导致的应用故障。本书是第一本,也是到目前为止唯一的一本劝募覆盖模糊测试的著作。
  • Fuzzing(模糊测试)是一种用于识别软件bug以及漏洞的方法。就目前的发展趋势来说Fuzzing正向着云端迈进,相较于传统Fuzzing方式,云端Fuzzing使得模糊测试速度加快也更加灵活。在本教程中,我们将与你一同走完云端...
  • 模糊测试被广泛应用于各种软件和系统的漏洞挖掘中.而模糊测试的效果与其采用的变异策略以及初始种子文件的代码覆盖率有直接的关系.本文提出了一种基于深度学习的种子文件生成方法,分析并学习初始种子文件和其在目标...
  • 模糊测试在工控协议的漏洞挖掘中有很好的适用性,但传统的模糊测试存在着用例的生成工作量大、失效率高等弊端。为了解决这些问题,设计了一个结合遗传算法与模糊测试的工控协议模糊测试器GA-Fuzzer,并引入基于维度...
  • 本发明公开了一种基于变异树的黑盒模糊 测试方法及系统,包括:S1,构建变异树,...成新的模糊测试用例组,转到S3,直至遍历完整 棵变异树,完成目标程序的模糊测试。本发明解 决了漏洞被遗漏的问题,实现充分测试。
  • 一种基于模糊测试的车载ECU漏洞挖掘方法,李涛,徐国爱,随着车联网的飞速发展和一种基于模糊测试的车载ECU漏洞挖掘方法汽车智能化的不断提高,通过CAN总线连接的车载ECU作为车辆核心控制节
  • java安卓辅助源码与模糊测试相关的最新论文 所有论文(按会议分类) 标准普尔 2020 年 SAVIOR:走向错误驱动的混合测试 标准普尔 2019 年 NEUZZ:使用神经程序平滑进行高效模糊测试 通过二维输入空间探索模糊文件...
  • 针对现有的并行模糊测试在测试效率、资源利用率以及异常处理上的局限性,围绕测试资源的生成、使用及容错三个方面提出了一种动态资源感知的系统化解决方案。针对测试环境在大规模和多场景两个维度快速搭建的需求,...
  • 2019.11-使用peach进行模糊测试从入门到放弃1
  • 网络协议的自动化模糊测试漏洞挖掘方法,网络协议的自动化模糊测试漏洞挖掘方法
  • 模糊测试技术综述.docx
  • 板球赛是一个充当分布式模糊测试工具的项目,可管理整个网络中的模糊测试工具。 当前支持AFL( )。 AFL包含在Fuzzer特性中,因此实现该特性的任何其他Fuzzer都将兼容,从而允许不同类型的Fuzzer进行交互并共享其...
  • 分布式模糊测试 这个项目是一个快速而又非常肮脏的尝试(在几个晚上完成),将我无法控制的许多机器的计算能力与强大的工具“ afl”结合在一起。 它由提供项目以进行模糊测试的服务器和运行在下载1个或多个项目(取...
  • 本发明公开了一种基于变异树的黑盒模糊 测试方法及系统,包括:S1,构建变异树,生成...成新的模糊测试用例组,转到S3,直至遍历完整 棵变异树,完成目标程序的模糊测试。本发明解 决了漏洞被遗漏的问题,实现充分测试
  • 模糊单元 该项目提供了一种创建大量 JUnit 测试的机制,理论上,这些测试将覆盖测试用例的问题空间。 它旨在具有以下功能: ...模糊测试将(在某些情况下)使用遗传算法完成,以了解应将哪些模式用作测试用例参数。
  • 模糊测试 强制性安全漏洞发掘:本书主要内容包括:模糊测试的工作原理,模糊测试相比其他安全性测试方法的关键优势,模糊测试在查找网络协议,文件格式及Web应用安全漏洞中的技术现状等。演示了自动模糊工具的用法,...
  • 本演讲将介绍系统性模糊测试和挖掘OSX内核漏洞的方法,及如何利用Python提升模糊测试和漏洞挖掘分析效率,并最终分析我们发现的数个OSX内核中的0day。我们将介绍如何利用Python实现自动化提取驱动攻击面和生成测试...
  • 疯狂字典 在模糊测试中使用的字典列表。
  • 模糊测试技术简单整理(一)

    千次阅读 2022-04-10 16:53:35
    title: 模糊测试技术 seo_title: 模糊测试技术 author: sizaif toc: true mathjax: true tag: fuzzing 论文 sidebar: blogger toc categories: Master 论文 abbrlink: d619a3ee date: 2022-04-07 14:49:59 ...

    模糊测试技术

    2022-01-09-


    模糊测试基本流程: 预处理(preprocessing)、输入数据构造(input building)、输入选择(input selection)、评估(evalution)、结果分析(post-fuzzing)

    2013年AFL诞生,基于覆盖率引导的模糊测试成为主流方向

    AFL 是覆盖率为导向的模糊测试工具,通过插桩的方法,采集输入数据对应的边覆盖率,作为模糊测试种子选取的衡量指标.通过使用进化算法以及精心构造的突变策略

    预处理

    工作: 搜集目标相关信息并制定模糊测试的策略, 为监控目标在测试中的运行状态做必要的准备.通常依赖于插桩、符号执行以及污点分析这类程序分析技术

    搜集目标相关信息,比如目标的输入数据格式、目标的内部结构,并为监控测试中目标的状态变化做必要的准备.该环节面临的挑战是:使用什么程序分析技术,以及模糊测试究竟需要对目标内部信息有多详细的了解

    根据模糊测试对程序内部信息分析的程度,现代的模糊测试方法可以划分为3类:黑盒模糊测试 (blackGboxfuzzing)、灰盒模糊测试(greyGboxfuzzing) 和白盒模糊测试(whiteGboxfuzzing)

    1. 插桩:

    插桩技术通过向目标的代码中合适的位置添加预设好的代码,获得程序的静态或动态执行信息.比如程序的抽象语法树,覆盖率以及函数内变量取值等

    动态插桩

    动态插桩则是在运行的过程中对运行过的代码 进行插桩.比如利用 QEMU等模拟技术,进行动态插桩,可以获得程序运行时的信息,缺点是资源的开销大

    静态插桩

    通过 GCC编译器在汇编语言上插 桩,LLVM在生成的中间语言LLVMIR(low level virtual machine intermediate representation)上插桩.优点是节省时间、速度快,缺点是依赖于程序源码.

    插桩技术的缺点是会带来资源的开销

    2. 符号执行

    将程序行为的推理归结为逻辑领域的推理,通过构建一个表示程序执行的逻辑公式,可以同时推断一个程序在不同输入上的行为.

    该方法可以使模糊测试获得较好的覆盖率,并可以深入到程序深处,探寻可能存在漏洞的区域

    静态符号执行

    静态符号执行通常会因为程序中循环和递归的存在,陷入到路径爆炸中,还会因为路径约束中包含诸如取Hash值等操作,导致约束求解失败.由于存在这2种问题,使用较多的是动态符号执行

    动态符号执行

    动态符号执行通过对程序进行实际执行与符号化执行,维护程序的实际状态和符号化状态,通过将难以求解的约束替换为实际值,缓解了静态符号执行的问题,并按照深度优先的搜索策略对目标程序进行了探索.

    存在的问题:

    ①由于程序分支的存在,路径爆炸的问题仍然存在,程序越复杂, 路径爆炸的问题就越严重.解决的一种办法是通过启发式的方法,选择比较重要的路径进行探索.

    ②虽然动态符号执行使用实际值替换的方法,解决了一 部分静态符号执行无法绕过的约束,但是也会丢失 一些路径,造成探索结果的不完整.

    ③所有的符号执行技术都受限于约束求解方法的能力,比如如何处理类似取余操作这样的非线性约束,仍然是符号执行面临的挑战

    为了能够将符号执行更好地应用到模糊测试中,近年来诞生了一些工作,

    比如Pangolin 通过 [22] 允许符号执行重用之前的计算结果,

    Intriguer通 [23]过利用字段级的信息,都实现了对符号执行过程的加速.

    ILF[24] 通过使用神经网络,对由符号执行专家生成的大量高质量输入数据进行学习,得到了合适 的模糊测试策略
    [22] Huang Heqing,Yao Peisen,Wu Rongxin,et al.Pangolin incremental hybrid fuzzing with polyhedral path abstraction [C]∕∕ Procofthe2020IEEE Sympon Security and Privacy (SP).Piscataway,NJ:IEEE,2020:16131627
    [23] Cho M,Kim S,Kwon T.Intriguer field-level constraint solving for hybrid fuzzing [C]∕∕ procofthe2019 ACM SIGSAC Conf on Computer and Communications Security. New York: ACM,2019:515530
    [24] He Jingxuan,Balunovi M,AmbroladzeN,et al.Learning to fuzz from symbolic execution with application to smart contracts[C]∕∕Procofthe2019 ACM SIGSAC Conf on Computer and Communications Security.New York:A CM, 2019:531548

    3. 污点分析

    该技术会观测程序中,哪些程序数据受到了预先准备好的污染源(比如输入)的污染,目的是跟踪污染源和汇聚点(比如有敏感信息的程序数据)之间的信息流

    静态污点分析

    静态污点分析不需要程序实际运行,通过对程序静态分析,获得程序控制流图、抽象语法树等信息, 依据数据流以及依赖关系进行污点分析;

    动态污点分析

    动态污点分析则是在程序实际执行的过程中,利用程序的动态执行信息进行污点分析

    动态污点分析检测的可信度更高,但是检测结果是否全面, 取决于动态污点分析对程序的覆盖情况,而且动态污点分析会消耗更多的资源; 静态污点分析又会和符号执行一样,可能会陷入到路径爆炸中,而简化后的静态污点分析又存在着严重的过度污染问题

    将污点分析技术应用到模糊测试中,并降低其资源消耗是近年来的重要研究方向.比如GREYONE [25]尝试通过减少污点分析跟踪的对象、降低污点分析的开销、提升模糊测试的检测效率.

    [25] GanShuitao,ZhangChao,ChenPeng,etal.GREYONE dataflowsensitivefuzzing[C]∕∕Procofthe29thUSENIX SecuritySymposium.Berkeley,CA:USENIXAssociation, 2020:25772594

    基于AFL的模糊测试方法

    image-20220109150026279

    image-20220109150051850

    image-20220109150137214

    输入构造

    种子获取、种子筛选、种子突变
    

    具体的挑战是如何在尽量满足语法语义检查的情况下,短时间内生成 大量的输入,用以对目标做全面而深入分析.

    首先得到一个数据 S S S ,然后数据 S S S 按照一 定的策略进行一定次数的变异,获得大量新数据 I I I , 最后将 I I I输入到被测试对象中进行测试.其中数据 S S S 被称为种子(seed), I I I 是测试实际使用的输入数据

    评估

    现阶段的研究都会聚焦于模糊测试器在2个指标上的表现:覆盖率和暴露漏洞平均时间

    覆盖率是软件测试中的一个衡量指标,指的是在测试过程中,对象被覆盖到的数目占总数的比例. 通常而言,高覆盖率更可能发现更多的隐藏漏洞,众多研究因此集中在覆盖率提升上

    AFL 使用上下文无关的边覆盖率作为评估指标. [13]

    Angora 使用上下文敏感的分支覆盖率.[42]

    VUzzer 使用了块覆盖率替代边覆盖率作为覆盖率评估的对象.[41]

    暴露漏洞平均时间:

    暴露 漏 洞 平 均 时 间 被 Böhme46] AFLGo 选 做 评 估 指 标.在 与 基 准 模 糊 工 具 [46] AFL 的对比实验中,AFLGo 复现单个漏洞的 [13] [46] 时间远比AFL少,这证明了该评估指标的有效性. 此后Hawakeye[47] 同样使用了这一指标来证明其性 能.Parmesan 在通过sanitizer来发现潜在漏洞的 [63] 研究工作中,也是用暴露漏洞平均时间作为评估指 标同Angora [42] 等定向灰盒模糊工具进行比较

    结果分析

    结果分析发生在模糊测试结束以后,主要目的是对于模糊测试的输出信息进行分析和处理

    具体应用场景下的模糊测试

    物联网中的模糊测试

    主要面临两个问题:

    1. 将模糊测试应用到物联网领域问题就是特定物联网设备上运行的程序通常对于其实际硬件的配置有着高度的依赖性.

    ​ 简单的从固件中提取一个用户级别的程序,然后使用模糊测试进行检测,通常是行不通的

    Iot-Fuzzer[30] 认为大多数物联网设备通过其官方移动应用程序进行控制,并且此类应用程序通常包含有与设备进行通信所使用协议的丰富信息,因此通过识别和重用特定于程序的逻辑(比如加密)来改变测试用例(尤其是消息字段),就能够有效地对物联网目标进行模糊测试,而无需依赖于有关其协议规范的任何知识.

    1. 物联网设备远远无法满足模糊测试需要的吞吐率

      多项研究成果表明物联网设备采用全仿真的系统,可以获得最高的吞吐量,这是因为真实的物联网设备相比于桌面工作站或者服务器要慢得多

    内核安全中的模糊测试

    内核模糊测试通常利用暴露出来的系统调用接口和外围接口,从用户空间进入到内核组件中进行模糊测试,以检测内核中可能存在的漏洞

    主要面临的问题:

    1. Windows内核程序以及很多相关组件的源代码并 不开源,将导致传统的反馈机制不再适用.
    2. 内核中的代码由于存在中断、多线程操作等机制,使得模糊测试变的很复杂.
    3. 内核模糊测试一旦检测到程序的崩溃,将会导致整个操作系统重新启动,极大地影响了模糊测试的效率.

    为了克服这些问题,产生了一些专门针对内核安全进行模糊测试的研究,

    比如syzkaller [70] 是由Google开发的一种以获得高覆盖率为导向的内核 模糊测试工具,目前实际使用比较多,并经常被用于对比实验中.

    Razzer[71] 是基于syzkaller [70] 通过使用LLVM和修改后的SVF技术针对内核中存在的数据争用问题进行的模糊测试

    TriforceAFL[36] AFL [13]的QEMU模式,在系统模拟器的帮助下,通过跟踪分支信息,对Linux的内核进行模糊测试.

    kAFL[37] 通过利用Intel提供的进程追踪技术,获取代码运行时的控制流信息,并通过使用Intel的硬件 虚拟特征(VTGx)提升效率并使得kAFL[37] 独立于特定的操作系统

    传统的模糊测试应用到内核模糊测试上将面临着众多的问题,包 括内核态代码的复杂执行环境,以及内核崩溃的处 理问题.另外内核安全面临的威胁来源是不确定的, 可以是外部固件,也可以是第三方开发的驱动程序, 还可以是内核程序自身设计的问题.模糊测试在内 核安全领域的应用还有待进一步的研究.

    静态分析或模糊检测技术通常对内存溢出等漏洞有效,而无法挖掘协议实现库的逻辑漏洞.

    通过提取安全协议实现的状态机,能够实现对协议实现的形式化建模.

    展开全文
  • 现有的有状态网络协议模糊测试技术在测试时,辅助类型报文重复交互,测试效率低,且为确保测试用例有效性,仅向协议实体输入报文类型与被测状态相对应的测试用例,导致无法发现由报文异常输入顺序所引出的协议缺陷。...
  • 模糊测试:强制发掘安全漏洞的利器》是一本系统性描述模糊测试的专著,介绍了主要操作系统和主流应用类型的模糊测试方法,系统地描述了方法和工具,并使用实际案例帮助读者建立直观的认识。随着软件安全性问题变得...
  • 我们的调查是关于模糊测试和相关文献的。 由于“模糊”是一个很大的术语,因此我们调查的主要目标是精确定义什么是模糊并表征各种模糊器。 为此,我们将模糊测试的过程分为几个步骤,并使用它们根据模糊测试器的...
  • [初稿]基于符号执行和模糊测试的混合模糊测试技术综述1
  • Smart Fuzzing智能模糊测试

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

    BSidesLison2016-Keynote-The Smart Fuzzer Revolution by Dan Guido
    演讲者:Dan Guido 解读:CSDN@IT鹅
    在这里插入图片描述
    智能模糊测试在未来市场具有巨大潜能,掌握这套技术意味着我们对更多的安全产生了威胁,正如棱角的一句话来讲:
    “网络本是安全的,自从又了安全研究员,就不安全了”。

    1988年,华盛顿大学的一个教操作系统课程的教授要求学生编写一个程序,该程序通过其他
    UNIX命令进行随机输入,我们就像丢垃圾一样像程序里丢数据,我们希望能得到不同的结果。
    出人意料,这是一个有效的策略。

    Random:“cat /dev/urandom | program”
    -Class assignment in "Advanced Operating Systems"at University of Wisconsion(1988)
    Generation:Write a BNF spec->introduce anomalies
    -PROTOS from OUSPG(2002)&Block-based Fuzzing from Dave Aitel(2002)

    在21世纪初期,人们想设计一种特殊的数据结构来对程序测试,有很多小组在参与研究,
    奥卢大学与夏威夷大学创建了protos,Dave发表了关于他基于块的模糊测试的创新性论文。
    这篇论文成为shell编码器手册中重要的章节。他的论文是Fuzzing的开端。
    同时我们还研究了基于突变的模糊测试,这是一种资源密集型的测试,此时的模糊测试出现了
    语料集(generate data)
    我们通过自己搜集的数据,进行翻转、变异、改变形式的方式生成你的语料集
    所有的共同点:
    Apply random mutations to well-formed inputs and observe the results.
    之后Fuzzing研究者改变这个策略。
    目前已经创建了测量代码覆盖率并创建最小的输入集
    Measure coverage and create a minimized input set
    我们就能够判断哪些数据对程序造成影响,就排除了冗杂输入数据,而不是随机运行。
    一旦我们发现了crash,一个有效的崩溃输入,我们就能解释程序的状态,通过模糊测试探索它
    周围的代码,崩溃输入一般是聚集在一起的。
    Initial attempts at combining SMT solvers and Symbolic Execution for test
    generation(EXE[2006],DART[2005])
    在2005-2006年,fuzzing将具体的执行与符号相结合。
    Microsoft的研究团队在2008年带来了智能模糊测试(Smart Fuzzing)的策略。
    Scalable,Automated, Guided Execution(SAGE)in “Automated Whitebox Fuzz Testing”
    成效:
    Combine fuzzing and symbolic execution to dynamically generate new tests,
    while managing"state explosion"problems
    1.Record execution and symbolically evaluate trace to gather new constrains
    2.Use constraint solver to produce new inputs that execise new control paths
    3.Measure code coverage to rank new inputs that attain maximal testing path

    解读:
    1.记录输入并且象征性地跟踪新的约束求解器
    2.使用约束求解器生成执行新控制路径的新输入
    3.测量代码覆盖率以对达到最大测试路径的新输入进行排名
    Sage被微软广泛应用在windows7中

    成效:
    Pre-SAGE statements like if(x+y=z)or simple checksums would stymie a fuzzer,
    Now they solved easily and help find new inputs.
    Sage优点:
    Works on binary, no source code requierd.
    Handles real,very large applications.
    Does not require a cache of starting inputs,or grammers.
    No fales positive.It finds real bugs and generates input that trigger them

    sage并且可以让它找到BUG,它不需要开发人员测试一大堆数据。
    sage可以在没有源码的情况下直接对二进制文件进行Fuzzing,比如你可以在Microsoft Office上与性能
    sage在Microsoft AFL开源之外,AFL并不是那么”聪明“。
    它不能像sage一样使用symboolic execution符号执行,但是AFL更容易安装使用,并且开源。
    Fuzzer可以找到sequel light和Java score等漏洞。并且打开OpenSSL与openssh
    Sage很聪明,但是没有微软的支持,我们无法使用,虽然AFL很笨,但是我们能轻松使用。
    哪一个更好呢?
    大约在2012年-2013年
    DARPA已经确定这是一个问题,他们想攻击,他们认为自动发现的错误的工具能整合他们的研究,
    所以这是成立Cyber Grand Challenge的计划。
    在这里插入图片描述

    Cyber Grand Challenge(CGC)

    最早的蓝队防守:
    团队需要构建一个Cyber Reasoning Systems(CRS)
    CRS需要给出“CBs” pwnables
    CRS需要找到“Proof of Vulnerability”(POV)
    获得一些寄存器控制的输入,防守方需要去修复,并且保持服务器正常运行。以便其他竞争对手可以继续
    搜集Flag,
    CRS’s are ranked by a complex scoring algorithm(就如CTF有一套复杂的记分方式)
    Every published strategy has been the same combinaation of ingredients:
    -Fuzzing模糊测试
    -Symbolic Execution符号执行框架
    -Other program analyses(alias analysis,reachability,input dependence)
    -其他程序分析(别名分析、可达性、输入依赖)
    -Prioritization scheme for which problems to solve 解决问题的优先级方案
    -State pruning scheme状态修剪方案
    -Resource control and allocaton资源控制和分配

    CRS中解决的问题:“Analysis Boosting

    我们不可能支付巨额的工资进行研究,所以我们需要“开源”,需要得到大多数人的支持,因为这样整体技术
    才能得到进步。我们搜集了各种测试错误的工具,搜集了这些所有输入生成将它们放入知识库(KnowledgeBase)
    我们称Minset:Minimum Set of Maximal,即为这些输入的最大代码覆盖率的最小集。我们通过最大代码覆盖率的最小集
    评估最好的Fuzzing数据,接着会把这些数据共享给其他工具,如果一个模糊器卡住了,它会到Symbolic Execution框架,
    该框架的程序会克服chesksum校验并且创建一个新的输入,获得更多的代码覆盖率(code coverage),接着获得更多的Minimum
    Set of Maximal,接着Minimum set会将它重新Fuzzing。现在一个模糊器可以绕过测试中卡住的代码。
    然而学术界上对Fuzzing并不是很认同,他们主要是在程序语言等方面研究,正如我们所见在第一次安全性初次尝试之后,模糊测试就停止了,研究者们从来没有想到如此实用,他们不了解某些论文的价值,直到他们在CTF竞赛中使用,然而大部分人都不清楚如何构建这套系统,大规模工作以发现错误的分布式系统。
    一些程序可能遇到的问题
    .One or more exploitable or crashing vulnerabilites.一个或多个崩溃漏洞。
    .One or more proof of vulnerability triggers一个或多个漏洞触发证据
    buffer overflow缓冲区溢出漏洞 stack overflow栈溢出漏洞 heap overflow堆漏洞
    type confusion类型混淆漏洞等,我们都可以用Fuzzing方式去寻找,我们通过一个工具Fuzzing找到
    类型混淆漏洞,我们又通过另外一个工具找到Buffer Overflow,然后我们将两者结合起来,我们就能得带
    更高的覆盖率。
    关于CGC竞赛:
    大多数团队构建的系统都需要专家操作,CGC评分或规则未解决可用性问题。他们为 DARPA 的研究操作系统专门构建了系统:DECREE,只有6个系统调用,没有文件、线程或信号。
    CGC竞赛有很多分散漏洞的因素:自动修补、网络设备、资源限制等。4
    CGC为自动化分析领域提供了急需的推动力,而且恰逢其时。现在很明显,自动错误发现是可能的,而且非常有效。
    目前有几个原型系统,其中一部分已经开源。为CGC带来的挑战为比较自动错误发现工具提供了标准基准。 错误查找工具终于具有可比性。

    Going Mainstream走向主流:

    自动化错误发现与和智能模糊测试是从机器学习Machine Learning开始,10年前没有一个可靠的技术指标来比较技术
    与其他系统,例如SE Comp系统的出现,让机器学习的不同策略之间能够持续的竞争
    微软有个一Springfield项目,你可以通过注册访问他。
    https://www.microsoft.com/en-us/springfield/
    Google有一个在Cloud中运行的Fuzzing工具oss-fuzz
    https://github.com/google/oss-fuzz
    苹果公司在IOS10中使用了LLVM技术,可以分析App Store中应用程序的字节码或者位码,可以通过LLVM轻松的分析这些
    应用程序,从而找到最基础的安全漏洞。例如API滥用和隐私泄漏等。
    大部分主流的公司在开发实践中使用了它,可能会向公众开放一些技术。
    自动分析所有应用程序的错误、后门和 API 滥用,苹果可以在一定程度上将他们的应用程序推销为可证明是安全的。 或者让你重新提交你的应用程序,直到它通过,每个竞争对手都必须匹配这些功能。
    ALF让我们需要从前专家操作的东西消失,计算机软件的安全可以上升到国家安全层面,软件的漏洞也是不可忽视的。
    安全影响每个人,但没有人愿意付费,但是一个清晰的“项目分析 = 利润”商业案例将解决这个问题。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 171,296
精华内容 68,518
关键字:

关于模糊测试