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

news2024/11/16 12:46:49

  • 【参考文献】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协议),我们也面临着在运行时识别协议当前状态的问题。

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

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

相关文章

Java反射角度简单理解spring IOC容器

概述 Java反射(Reflection)是Java编程语言的一个特性,它允许在运行时对类、接口、字段和方法进行动态查询和操作。反射提供了一种在运行时查看和修改程序行为的能力,这通常用于实现一些高级功能,如框架(Spring)、ORM&…

【正点原子Linux连载】 第四十七章 音频驱动实验摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1)实验平台:正点原子ATK-DLRK3568开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id731866264428 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第四十…

EEGLAB的相关使用

目录 概念 1.安装EEGLAB 2.文件实例演示 导入数据集处理 (1)导入数据集 (2)画图 (3) 修改并存储数据集 (4) 保存数据集 (5) 删除数据集 &#xff0…

零基础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…

php TP8 阿里云短信服务SDKV 2.0

安装:composer require alibabacloud/dysmsapi-20170525 2.0.24 官方文档:短信服务_SDK中心-阿里云OpenAPI开发者门户 (aliyun.com) 特别注意:传入参数获得值形式 正确: $PhoneNumbers $postData[PhoneNumbers];$signName $po…

Vue集成Iframe

一、应用场景,为什么要集成Iframe? 1、庞大项目拆分后,便于管理和部署,用集成Iframe的方法合并 2、避免功能重复开发,共用模块可单独开发为一个项目,既可独立部署,也可集成到中台系统 二、集成…

【feature selection】特征选择学习笔记

文章目录 1. 什么是特征选择2. 特征选择与特征提取的区别3. 特征选择的方法3.1 Filtering过滤法3.2 Wrapper包装法3.3 Embedding嵌入法 4. 特征选择示例4.1 方差选择法示例4.2 递归特征消除法示例 1. 什么是特征选择 特征选择是特征工程的内容, 其目标是寻找最优特征子集。剔除…

暴雨“彩虹”行业大模型加速器平台全新发布

近日,在第七届数字中国建设峰会期间,暴雨信息全新发布“彩虹”行业大模型加速器平台,聚焦于为客户降本增效减负,将海量通用数据与行业特有数据融合,专注于流程工艺的智能化改进,因地制宜深挖业务需求&#…

图像上下文学习|多模态基础模型中的多镜头情境学习

【原文】众所周知,大型语言模型在小样本上下文学习(ICL)方面非常有效。多模态基础模型的最新进展实现了前所未有的长上下文窗口,为探索其执行 ICL 的能力提供了机会,并提供了更多演示示例。在这项工作中,我…

【论文速读】GPT-1:Improving Language Understanding by Generative Pre-Training

摘要 自然语言理解包括广泛的不同的任务,如文本隐含、问题回答、语义相似性评估和文档分类。虽然大量的未标记文本语料库非常丰富,但用于学习这些特定任务的标记数据非常稀缺,这使得经过区别训练的模型要充分执行任务具有挑战性。我们证明&a…

mongoengine,一个非常实用的 Python 库!

更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个超酷的 Python 库 - mongoengine。 Github地址:https://github.com/MongoEngine/mongoengine 在现代应用程序开发中,NoSQL数据库因其灵活性和高性能而广受欢迎。MongoD…

基于Android Studio图书管理,图书借阅系统

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 用户 书架:搜索书籍,查看书籍,借阅书籍,收藏书籍,借阅书籍必须在一个月之内还书; 我的:可以修改密码,退出登录&#xff…

M功能-支付平台(三)

target:离开柬埔寨倒计时-221day 前言 今天周六,但是在柬埔寨还是工作日,想着国内的朋友开始休周末就羡慕呀,记不清在这边过了多少个周六了,多到我已经习惯了。而且今天技术部还停电了,真的是热的受不了呀…

网络安全的重要组成部分:数据库审计

数据库审计(简称DBAudit)以安全事件为中心,以全面审计和精确审计为基础,实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库遭受到的风险行为进行实时告警。它通过对用户访问数据…

MCU复位电路

【单片机复位电路,巧妙的RC无处不在。】https://www.bilibili.com/video/BV1XW4y1571r?vd_source3cc3c07b09206097d0d8b0aefdf07958 左侧的RESET引脚正常情况下是低电平,是高电平复位;右侧的RESET引脚正常情况下是高电平,是低电…

刷代码随想录有感(77):回溯算法——含有重复元素的全排列

题干&#xff1a; 代码&#xff1a; class Solution { public:vector<int> tmp;vector<vector<int>> res;void backtracking(vector<int> nums, vector<int> used){if(tmp.size() nums.size()){res.push_back(tmp);return;}sort(nums.begin(),…

第十六节:带你梳理Vue2: 生命周期与钩子函数

前沿: 通过前面几节的学习&#xff0c;我们已经对vue有了初步的了解&#xff0c;大致了解了vue可以帮我们干什么&#xff0c; 那么接下来我们就来看看vue的生命周期和它常用的钩子函数, 1. 理解生命周期的含义 生命周期&#xff1a;就是一个组件从实例化创建并添加到DOM树开…

每日5题Day8 - LeetCode 36 - 40

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;36. 有效的数独 - 力扣&#xff08;LeetCode&#xff09; 题目要求我们进行判断&#xff0c;我们不需要自己填写&#xff0c;所以要一个标志位&#xff0c;来看当…

MySQL 存储过程(实验报告)

一、实验名称&#xff1a; 存储过程 二、实验日期&#xff1a; 2024 年5 月 25 日 三、实验目的&#xff1a; 掌握MySQL存储过程的创建及调用&#xff1b; 四、实验用的仪器和材料&#xff1a; 硬件&#xff1a;PC电脑一台&#xff1b; 配置&#xff1a;内存&#xff0…

外卖霸王餐返利外卖会员卡小程序开发

外卖霸王餐返利外卖会员卡小程序开发 "社交电商赋能下的外卖返利小程序"是专为商家与用户双赢而设计的创新平台。 以下是其开发方案的详细步骤&#xff1a; 一、需求梳理&#xff1a;首先&#xff0c;我们需要明确小程序的核心功能和特色。包括设定活动类型、返利…