阅读笔记——《ProFuzzBench: A Benchmark for Stateful Protocol Fuzzing》

  • 【参考文献】Natella R, Pham V T. Profuzzbench: A benchmark for stateful protocol fuzzing[C]//Proceedings of the 30th ACM SIGSOFT international symposium on software testing and analysis. 2021: 662-665.
  • 【注】本文仅为作者个人学习笔记,如有冒犯,请联系作者删除。

目录

摘要

1、Introduction

2、Benchmark targets

3、Automation

4、Discussion


摘要

  • 本文为有状态的网络协议模糊测试提供了一个基准。该基准包括了一套流行协议的代表性开源网络服务器。

1、Introduction

  • 模糊测试研究进展的关键因素之一是基准的可用性,即能够代表性和明确定义的实验目标,用于应用启发式技术并获得可重复和量化的评估。
  • 然而,关于如何基准化模糊测试工具仍存在争议。例如,如何衡量模糊测试的进展和深度、如何避免偏见,以及这些目标是否具有代表性真实漏洞系统的特征。
  • 现有的模糊测试基准提案包括:
    • LAVA-M,一个注入了合成生成漏洞的开源程序集;
    • Google FuzzBench,一个在来自OSS-Fuzz项目的目标程序集上运行模糊测试工具的云服务;
    • DARPA Cyber Grand Challenge语料库;
    • Magma,一个具有手动策划漏洞的目标基准。
  • 然而,现有的基准主要关注无状态库和程序(例如多媒体文件格式解析器、数据压缩工具、操作系统实用程序等),但对状态软件的支持有限或没有支持,而状态软件对于促进适用于协议测试的模糊测试技术进步将是有用的。
  • 本文提出了一个新的网络协议状态模糊测试基准(ProFuzzBench)。该基准测试提供了一套实现流行网络协议的开源程序,以及用于完全自动化执行模糊测试实验的工具。我们选择了具有代表性的程序,这些程序在以前的有状态模糊测试研究中采用,以及商业和开源模糊测试针对的网络协议。

2、Benchmark targets

  • 表1列出了为基准测试选择的协议和相关软件实现。我们总共选择了10个协议,每个协议都有一个软件实现。FTP是唯一的例外,我们在基准测试中包含了两个实现。
  • 对于每个协议,表格提供了协议目标和协议状态特性的简要描述。
  • 在许多情况下,协议状态跟踪客户端和服务器之间通信会话的进展。例如,FTP协议规定了用于认证的初始状态,包括提供用户名和密码的消息;然后,认证后跟随一个或多个文件传输命令;最后,会话以注销结束。
  • 同样,对于安全通信协议(如SSH、TLS、DTLS),协议状态跟踪认证过程中的步骤顺序,包括公钥交换和其他加密信息的交换。
  • 在某些协议中,协议状态反映了服务器进程的当前状态及其与客户端交互的历史记录。例如,在SMTP和DAAP中,服务器会将要传输的电子邮件和要播放的歌曲加入队列;在它们被处理的同时,服务器继续通过进一步的消息与客户端互动。
  • 基准中还包括DNS协议,尽管原则上它是一个无状态协议。我们仍然选择将此协议纳入基准,因为它是一个流行的模糊测试目标,并且其实现仍可能提供有状态行为,例如缓存过去查询的记录。

3、Automation

  • 协议模糊测试基准已经作为一组实用程序发布,用于自动化目标软件的编译、配置、执行和分析(图1)。
  • Bulid
    • 第一阶段是构建容器镜像。
    • 目标软件和一组协议模糊测试工具首先从它们的开源代码库中克隆。目前基准中包含的工具有AFLnwe(AFL的一个基本变体,支持通过网络套接字进行模糊测试)和AFLnet(一个基于AFL的协议感知模糊测试工具)。
    • 基准附带了一组针对每个目标软件的补丁,这些补丁在此阶段应用。
    • 对于大多数目标软件,这些补丁使程序去随机化,例如,通过在源代码中嵌入固定的种子。去随机化对于获得可重复的行为很重要,即,如果程序再次用相同的输入执行,那么将覆盖相同的执行路径。可重复的行为是正确应用覆盖驱动模糊测试技术的隐含假设。此外,去随机化支持不同模糊测试技术的比较,因为它减少了模糊测试工具因偶然因素而表现优于其他工具的可能性,而更多地体现其自身的优点。
    • 在某些情况下,补丁减少或移除了程序中的延迟(例如,使用sleep()),这些延迟用于网络设置中的同步,但在本地进行模糊测试时会不必要地拖慢进程。
    • 其他补丁使程序与模糊测试工具兼容。例如,AFL使用UNIX信号来管理目标进程并检测其故障。因此,任何自定义的信号处理程序都应被禁用,以避免干扰基于AFL的模糊测试工具。
    • 基准中的一些补丁支持专门为协议模糊测试设计的工具进行实验。例如,AFLnet以一组网络流量跟踪作为输入,其中每个模糊输入由一个跟踪表示,该跟踪由与目标软件交换的一系列消息组成。为了测试协议的更多状态,工具可能需要专注于序列中的特定消息进行模糊测试。因此,AFLnet通过识别各个消息的位置来解析流量跟踪。AFLnet包含了几个支持协议的解析器。若解析器可用,它们会寻找标记字符来分割消息,例如FTP中的字符0x0D0A。一些协议实现没有提供此类标记(例如,消息在连接关闭时结束,没有显式标记)。在这些情况下,补丁会引入此类字符以简化消息解析器的实现。
    • 此外,这些补丁支持协议模糊测试工具跟踪协议状态,以最大化状态覆盖率。一些协议(例如FTP)在服务器向客户端的响应消息中提供了独特的状态代码(例如,登录成功时返回的代码是230,表示服务器等待命令,创建新文件夹成功时返回的代码是257)。然而,并非所有协议都是如此。例如,RTSP协议对所有成功的请求都使用相同的响应代码200,而不管当前的服务器状态。为了使有状态模糊测试更有效,我们的基准为目标(Live555服务器)打上补丁,使其在处理不同命令时发送不同的状态代码,例如,处理PLAY命令时返回201,处理PAUSE命令时返回203。
    • 然后,在容器镜像内编译(打过补丁的)目标软件。首先使用AFL编译器包装器(即afl-clang-fast/afl-clang-fast++)进行编译,以包含AFL基于覆盖驱动模糊测试工具所需的动态插桩。这个二进制文件将作为模糊测试的目标。目标软件第二次编译时支持gcov:此二进制文件将在基准的最后阶段使用,以便在模糊测试后计算覆盖率指标。基准的构建阶段通过添加特定于目标的文件(例如配置文件、媒体资源)来完成容器镜像的制作。最后,将模糊测试工具和自动化脚本复制到容器镜像中。
  • Run
    • 在第二阶段,基准使用容器镜像在目标软件上运行选定的模糊测试工具。
    • 为了以严格的方式比较不同的模糊测试工具,同样的模糊测试实验应重复进行多次。通过这种方式,可以使用统计技术分析多次重复实验的结果,从而确信一个模糊测试工具确实优于另一个工具。因此,基准提供的实用工具允许用户利用多核架构并行运行多个相同容器的实例。最后,将模糊测试工具生成的原始数据从容器复制到主机。原始数据包括模糊测试工具生成的覆盖了程序新路径的输入(例如,AFL中的“有趣输入”);发现协议状态机中新状态转换的输入(例如,AFLnet中的情况);以及导致目标软件崩溃或挂起的输入。
  • Analyze
    • 最后阶段分析原始数据以生成关于模糊测试实验的统计信息。
    • 它使用支持gcov编译的目标软件再次运行这些输入,以获取每个输入的行级和分支级覆盖信息。然后,根据生成输入的时间戳,生成行覆盖率和分支覆盖率的CSV格式时间序列,用于绘图和比较不同的模糊测试工具。

4、Discussion

  • Configuration and multi-party protocols
    • 网络协议的模糊测试需要配置其软件实现。选择特定配置决定了通过模糊测试可以测试网络服务器的哪些部分。对于真实世界的网络服务器来说,配置空间可能非常复杂,但这个问题尚未被研究过。之前的研究主要集中在无状态程序上,如库和命令行工具,主要挑战来自于输入的复杂性及其到达深层执行路径的约束。由于配置影响攻击面,它间接成为模糊测试需要关注的问题。
    • 值得注意的是,某些协议可能需要运行多于两方的实体。现有的模糊测试技术仅采用客户端-服务器方案,其中模糊测试工具充当客户端。然而,在SIP协议的情况下,至少需要三方:被测试的服务器、一个“呼叫者”和一个“被呼叫者”。一个或多个“被呼叫者”和“呼叫者”必须首先在服务器上注册;然后,呼叫者可以通过指明被呼叫者的名字来联系服务器;服务器将充当呼叫者和被呼叫者之间的代理,以建立他们之间的通信(例如,VoIP通话)。在这个过程中,服务器将处理“振铃”、被呼叫者可能忙线等情况。
    • 图2显示了模糊测试工具与Kamailio SIP目标软件之间交互的示例。为了模糊测试一个建立呼叫者和被呼叫者之间通话的SIP会话,模糊测试工具应扮演其中一个角色(在我们的基准中,它扮演呼叫者)。除了模糊测试工具之外,还需要另一个进程来扮演另一个角色。因此,基准附带了脚本,用于自动执行SIP服务器和使用SIP客户端的被呼叫者;在被呼叫者注册后,模糊测试工具可以重放和模糊测试来自语料库的消息序列。语料库已根据进程配置进行准备,即语料库中引用的端口号和客户端名称与SIP客户端和模糊测试工具所使用的一致。
    • 对于更复杂的协议,例如IP路由和网络管理,可能需要更多方参与才能进行有意义的测试。当设置多个方时,为目标找到合适的配置变得更加具有挑战性。此外,这些协议超出了当前模糊测试工具的支持范围,因为它们主要关注对服务器单个数据流的模糊测试。
  • Deterministic execution
    • 模糊测试完整的网络服务器面临的另一个挑战是由于广泛使用线程和基于事件的I/O而导致的非确定性行为。
    • 当将相同的输入应用于目标软件时,其非确定性会导致程序路径覆盖率的变化,从而妨碍覆盖驱动的模糊测试。出于这个原因,AFL模糊测试工具对每个扩展覆盖范围的新输入执行“校准”,以评估执行是否确定,并报告异常新输入的百分比(稳定性指标)。
    • 在基准中,我们遵循了AFL建议的最佳实践,在可能的情况下禁用线程;或者,将内核级线程(如pthreads)替换为用户级线程(如GNU Pth)及相关的I/O API,就像我们在forked-daapd目标中所做的那样。尽管采取了这些对策,但由于目标软件调用的库中使用了线程和I/O,报告的稳定性在几个基准中仍低于50%。此外,用户级线程增加了测试设置的复杂性(例如,在forked-daapd中,它阻碍了覆盖数据的保存)。
  • Test execution speed
    • 网络服务器的模糊测试执行速度可能非常慢。与模糊测试库和命令行工具相比(在AFL中可以达到每秒数千次执行),网络服务器的模糊测试因复杂的进程初始化(例如,初始化缓存或数据库)、网络开销(由于进程之间的通信和上下文切换)以及测试用例中长消息序列而变慢。例如,在模糊测试SIP时,由于模糊测试工具与其他进程(服务器和SIP被呼叫者)之间的同步,初始化速度变慢,每秒执行次数不到5次。特别是,在模糊测试DAAP时,被测试的服务器需要大约2秒钟才能可靠地完成初始化,因此模糊测试速度显著下降。
  • State identification
    • 协议模糊测试的目标是生成覆盖协议状态的测试。一个重要的研究领域是当协议状态机的正式规范不可用时(例如,使用模型推理技术,通过反复试验逆向分析协议)进行模糊测试。在我们的基准中,当协议在消息中没有明确编码当前状态时(例如RTSP协议),我们也面临着在运行时识别协议当前状态的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

# 【基于随机森林算法的数据回归预测】附详细Matlab代码

文章目录 1. 引言2. 随机森林算法原理2.1 决策树基础2.2 随机森林的构建 3. 随机森林回归的实现3.1 数据准备3.2 模型训练3.3 模型预测 4. 模型评估5. 参数调优6. 结论7. 参考文献 在数据科学的世界里,预测模型是解决未来未知问题的关键工具。随机森林算法&#xff…

C++ wasm 使用教程

环境搭建 git clone https://github.com/emscripten-core/emsdk.gitgit pull./emsdk install latest./emsdk activate latestsource ./emsdk_env.sh./emcc -v && ./emcc c11__Thread_local.c -s WASM_WORKERS --threadprofiler --memoryprofiler -v -o test.html &…

MySQL笔记第三天(从小白到入门)

文章目录 MySQL笔记SQL语言介绍数据库系统关系型数据库非关系型数据库SQL和数据库系统的关系数据库系统架构 MySQL的介绍概念MySQL的版本 MySQL的DDL操作-重点基本数据库操作基本表操作 MySQL的DML操作-重点insert-插入数据update-更新数据delete-删除数据 MySQL的约束-了解概述…

变量与常量

1.变量 数学中的定义: 变量:可变的数据称为变量 Java中定义: 内存中一块存储区域 该区域的数据可以在同一类型范围内不断变化 变量是程序中最基本的存储单元,包含了变量类型、变量名和存储的值 变量的作用就是在内存中保存…

element-plusDate Picker 日期选择器获取年月日

代码逻辑 对选择日期选择后进行搜索 : function dataValue(value) {console.log(value);scenic_list.value arrlist.value.filter(function (item) {// 判断是否满足搜索条件if (String(item.create_time).indexOf(String(value)) > -1) {return scenic_list}}…

零基础HTML教程(33)--HTML5表单新功能

文章目录 1. 背景2. HTML5新增表单元素2.1 number (数字输入框)2.2 email (邮箱输入框)2.3 url (链接输入框)2.4 tel (电话输入框)2.5 range (范围选择框)2.6 color (颜色选择框)2.7 datetime (日期时间选择框)2.8 search (搜索框) 3. placeholder (占位属性&#x…

vue3封装ElementUI plus Dialog弹窗

因为ElementuiPlus的dialog弹框的初始样式不太好看,而公司要求又要好看,本来是已经实现了,但是后来想想了发现封装完dialog的其他功能也要,所以特此记录一下 方案一 思路:封装一个组件,将所有新增的参数引入el-dialog 参数中,实现参数共用 新建一个组件,将官网暴露的属性全部引…

flutter开发实战-外接纹理texture处理图片展示

flutter开发实战-外接纹理处理图片展示 在Flutter中,如果你想要创建一个外接纹理的widget,你可以使用Texture widget。Texture widget用于显示视频或者画布(canvas)的内容。该组件只有唯一入参textureId 通过外接纹理的方式&…

机器视觉-硬件

机器视觉-硬件 镜头焦距凸透镜焦点不止一个相机镜头由多个镜片组成对焦和变焦 镜头光圈光圈的位置光圈系数F 镜头的景深景深在光路中的几何意义 远心镜头远心镜头的种类远心镜头特性应用场景 镜头的分辨率镜头反差镜头的MTF曲线镜头的靶面尺寸镜头的几何相差相机镜头接口螺纹接…

深度学习设计模式之桥接模式

文章目录 前言一、介绍二、详细分析1.核心组成2.实现步骤3.代码示例4.优缺点优点缺点 5.使用场景 总结 前言 桥接模式是将抽象部分与实现部分分离,使它们都可以独立的变化。 一、介绍 桥接模式是结构型设计模式,主要是将抽象部分与实现部分分离&#x…

APISIX-简单使用

APISIX-简单使用 这个工具还是很不错的,可视化的配置很清晰 , 想用NGINX的配置模式也是可以的,就是要去修改配置文件了。 APISIX,一个很不错的可视化工具,用来代替Nginx相当不错,可作为Nginx的平替方案&…

【单元测试】如何让单元测试的价值最大化

如何让单元测试的价值最大化 1.背景2.用例设计问题3.边界测试问题4.Mock 测试问题5.与集成测试的分工问题6.单测度量问题7.总结 1.背景 关于 “什么是单元测试”、“为什么要做单元测试”、“怎么做单元测试”,网络上相关的技术文章汗牛充栋。尽管如此,…

大数据之Hive函数大全

🔧 Hive函数大全 更多大数据学习资料请关注公众号“大数据领航员"免费领取 一、数学函数 1、取整函数: round 1.函数描述 返回值语法结构功能描述doubleround(double a)返回double类型的整数值部分(遵循四舍五入) 2.例程 hive>…

DOS学习-目录与文件应用操作经典案例-copy

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 一.前言 copy命令的功能是复制一个或多个已经存在的文件到新的位置,或者将多个文件的内容整合后保存为一个单独的文件,亦或者用于创建批…

SQL基础交互

第二章 检索数据 例如,我们从数据库表 products 中查询 prod_id 和 vend_id,各个列之间以逗号分隔,最后一列的后面不加逗号。 SELECT prod_id, vend_id FROM products; 我们还可以从数据库表中查询所有列。例如: SELECT prod_id, vend_id, prod_name, …

【openlayers系统学习】00官网的Workshop介绍

00Workshop介绍 官方文档:https://openlayers.org/workshop/en/ openlayers官网Workshop学习。 通过官网Workshop,系统学习openlayers的使用。 基本设置 这些说明假定您从最新Workshop版本的 openlayers-workshop-en.zip​ 文件开始。此外&#xff…

继“三级淋巴结”之后,再看看“单细胞”如何与AI结合【医学AI|顶刊速递|05-25】

小罗碎碎念 24-05-25文献速递 今天想和大家分享的是肿瘤治疗领域的另一个热点——单细胞技术,我们一起来看看,最新出炉的顶刊,是如何把AI与单细胞结合起来的。 另外,今天是周末,所以会有两篇文章——一篇文献速递&…

【LeetCode:2769. 找出最大的可达成数字 + 模拟】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

C++—数组

数组是由一批相同类型的元素&#xff08;element&#xff09;的集合所组成的数据结构&#xff0c;分配一块连续的内存来存储。 语法&#xff1a; <数据类型> <数组名>[<数组长度>]; 数据类型&#xff1a;数组内存放的数据类型&#xff0c;如int、char&…

高仿百度网页(附带源码)

高仿百度网页 效果图部分源码及素材领取源码下期更新预报 效果图 部分源码及素材 <script language"javascript">function show_date_time() {window.setTimeout("show_date_time()", 1000);BirthDay new Date("1/20/2023 16:52:21");//…