EnvFuzz

EnvFuzz

Linux环境全面模糊测试工具

EnvFuzz是一款针对Linux用户模式软件的全面模糊测试工具。它通过记录和重放环境交互,能够测试包括网络服务、GUI应用、编辑器、编译器和数据库在内的多种程序。EnvFuzz自动模糊测试所有输入源,包括常被忽视的用户交互,无需配置即可对二进制文件进行测试。这种方法有助于发现传统模糊测试难以检测的bug,为软件安全测试提供了新的解决方案。

EnvFuzz模糊测试环境交互GUI应用系统调用Github开源项目

程序环境模糊测试(EnvFuzz)

EnvFuzz (εFuzz) 是一种新型的模糊测试器,可以对几乎任何东西进行模糊测试,包括:

  • 网络服务器/客户端
  • 图形用户界面 (GUI) 应用程序
  • 编辑器
  • 编译器
  • 数据库
  • 任何其他Linux用户模式软件

例如,以下演示展示了如何使用EnvFuzz对GUI应用程序进行模糊测试:


<p align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/b82ce349-8cb2-4917-ba02-f1681e18dc18.gif" alt="EnvFuzz演示" style="width: 85%;"> </p>

[EnvFuzz对GUI应用程序二进制文件(gnome-calculator)进行模糊测试的演示。 首先,正常运行应用程序,并将所有环境交互(包括用户输入)记录到文件中。 接下来,对应用程序进行模糊测试,这次是通过重复播放原始记录但应用一个或多个变异。 EnvFuzz快速发现了几个崩溃,以红色突出显示。]


与仅对特定输入源进行模糊测试的现有模糊测试器(如AFL)不同,EnvFuzz对主体与其环境(ε)之间的整个交互进行模糊测试——包括所有文件(配置、缓存、资源、字体等)、套接字(会话管理器、辅助功能服务、名称服务等)、通过窗口系统的用户交互、特殊文件、设备和标准流,如下图所示:

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/0c65cc0c-0211-4206-8d37-46f29b78cb02.png" alt="完整计算器应用程序环境" style="width: 60%;"> </p>

换句话说,EnvFuzz将整个环境(ε)本身视为模糊测试目标——即所谓的程序环境模糊测试。 这甚至包括通过窗口系统的用户交互(例如,鼠标移动、按钮点击等),这些被视为与任何其他套接字或文件没有区别的输入源。 这使得EnvFuzz成为一个非常全面的模糊测试器,因为它会自动对所有输入(和输入组合)进行模糊测试,甚至包括在典型模糊测试活动中通常被忽视的不常见输入。

EnvFuzz也非常通用,旨在对现成的用户模式Linux二进制文件进行模糊测试,无需任何配置或设置。 请参见上面的演示。

EnvFuzz如何工作?

EnvFuzz基于底层的完整环境记录和重放(rr)和模糊测试基础设施。 该基础设施基于这样一个洞察:对于典型的用户模式程序,所有环境交互都通过内核-用户模式接口进行。 因此,通过记录此接口,我们也隐式地记录了程序与环境的交互,然后可以对其进行模糊测试。 基本上,EnvFuzz分两个阶段工作:

  1. 记录阶段正常执行程序,并将主体与其环境之间的所有交互(例如,系统调用、信号、线程切换等)记录到文件中。
  2. 接下来是重放与模糊测试阶段,在模糊测试循环中重复执行程序。 然而,这次原始的环境交互从记录中重放,但应用了一个或多个可能的变异。 这些变异可能会引发新的程序行为和可能的崩溃。

由于EnvFuzz在环境交互的抽象层面上工作,它可以对非常多样化的主体进行模糊测试,而无需任何特殊处理。 这使得EnvFuzz强大且易于使用。

上面的简单演示展示了EnvFuzz的使用示例:

  1. 第一阶段使用以下命令记录 gnome-calculator 应用程序:

     $ ./env-fuzz record gnome-calculator
    

    这会创建一个 out/ 子目录,记录存储在 out/RECORD.pcap.gz 文件中。

  2. 第二阶段使用以下命令模糊测试 gnome-calculator 应用程序:

     $ ./env-fuzz fuzz
    

    模糊测试器使用步骤(1.)中的原始记录作为初始种子,并重复执行程序。 模糊测试器不会精确重放原始记录,而是应用一个(或多个)变异,引发新的程序行为和可能的崩溃。

发现的崩溃存储在 out/crash/ 子目录中,可以使用以下命令重放:

    $ ./env-fuzz replay out/crash/SIGSEGV_XXXX_m0YYYY.patch

我们将EnvFuzz应用于各种程序,发现了几个新的错误,包括那些难以或无法用传统模糊测试器发现的错误。 有关更多信息,请参阅下面列出的预印本。

构建

要构建EnvFuzz,只需运行 build.sh 脚本。

    $ ./build.sh

这仅在基于Ubuntu的系统上进行过测试。

EnvFuzz使用方法

记录:

    $ ./env-fuzz record -- vim hello.txt

重放:

    $ ./env-fuzz replay

模糊测试:

    $ ./env-fuzz fuzz

重放崩溃:

    $ ./env-fuzz replay out/crash/SIGSEGV_XXXX_mYYYYY.patch

调试崩溃:

    $ ./env-fuzz replay out/crash/SIGSEGV_XXXX_mYYYYY.patch -d

EnvFuzz还支持(可选的)AFL风格的覆盖率插桩:

插桩程序二进制文件:

    $ ./env-fuzz instrument program

这将生成一个插桩后的 program.rr 二进制文件,可以替代原始文件。

也可以对库代码进行插桩:

    $ ./env-fuzz instrument /path/to/library.so

这将在 lib/ 子目录中放置一个插桩版本的库,该目录包含在库搜索路径中。

EnvFuzz 文件

在模糊测试过程中,将生成几个文件:

  • out/COMMAND.cmd:命令行
  • out/RECORD.pcap.gz:记录
  • out/crash/*.patch:崩溃补丁
  • out/hang/*.patch:挂起补丁
  • out/abort/*.patch:中止补丁
  • out/queue/m*/*.patch:有趣的补丁
  • lib/:存储修补后的 libc 和插桩库的位置

注意,存储在 out/RECORD.pcap.gz 文件中的交互可以使用 Wireshark 查看。

EnvFuzz 技术信息

EnvFuzz 使用 E9Patch 静态重写 libc 中的所有 syscall 指令。

因此,每当程序调用系统调用(例如 openreadwrite 等)时,调用将被转移到我们的记录和回放基础设施。 对于记录,该基础设施充当用户模式和内核模式之间的"中间人",所有交互都保存到文件中。 对于回放(带有模糊测试),程序会(重复)执行,但这次每个系统调用都从原始记录中"回放",可能会应用一个或多个变异。 在回放期间,系统调用几乎完全从记录中提供服务,不与内核和真实环境交互。 除了 libc 系统调用外,EnvFuzz 还有特殊方法处理 vDSO、信号、线程切换和 libc 外的系统调用指令。 EnvFuzz 不使用 ptrace。

一个问题是,在应用变异后,程序行为可能(而且会)发生偏离。 事实上,模糊测试的主要目的是诱导新的行为,以期发现新的错误。 为了处理这种情况,EnvFuzz 在变异后采用"系统调用模拟",以"宽松"的回放模式进行。 这允许仅使用原始记录来探索多样化的程序行为。 更多信息请参见下面的预印本。

EnvFuzz 状态

实现完整的环境记录和回放基础设施是出了名的具有挑战性。 例如,相关的 rr-debug 项目估计总共花费了五人年来源)用于开发(截至 2017 年),即便如此,它也无法完美记录和回放所有程序。 我们的底层记录和回放框架开发时间远未达到这个水平,当前实现应被视为不一定适用于所有程序的"研究原型"。 尽管如此,我们"按原样"提供该系统,因为 EnvFuzz 已被证明在发现其他模糊测试器无法检测到的错误方面很有效,即使实现尚未完全完善。

我们将根据社区的兴趣程度继续开发和改进 EnvFuzz。

EnvFuzz 问题

请记住,EnvFuzz 是 alpha 质量的软件和研究原型。

请在此报告明显的错误:

通常不应报告与回放过程中意外偏离相关的问题。 话虽如此,我们非常欢迎修复偏离问题的拉取请求。

同样,不应报告与缺少 ioctl、fcntl 和 prctl 相关的问题。 相反,您应该尽可能更新相应的 .tab 文件,并考虑提交拉取请求。

致谢

本研究得到新加坡国家研究基金会和新加坡网络安全局在其国家网络安全研发计划(模糊测试 NRF-NCR25-Fuzz-0001)下的支持。本材料中表达的任何意见、发现和结论或建议均为作者的观点,不反映新加坡国家研究基金会和新加坡网络安全局的观点。

许可证

该软件已根据 GNU 公共许可证 (GPL) 第 3 版发布。 有关更多信息,请参阅 LICENSE 文件。

引用 EnvFuzz

有关更多信息,请参阅我们的研究论文:

  • Ruijie Meng, Gregory J. Duck, Abhik Roychoudhury, 程序环境模糊测试, ACM SIGSAC 计算机与通信安全会议 (CCS), 2024。

如果您在科学工作中使用此代码,请按以下方式引用论文:

@inproceedings{envfuzz,
    title={程序环境模糊测试},
    author={Meng, Ruijie and Duck, Gregory J. and Roychoudhury, Abhik},
    booktitle={第 31 届 ACM SIGSAC 计算机与通信安全会议 (CCS) 论文集},
    year={2024}
}

编辑推荐精选

博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
商汤小浣熊

商汤小浣熊

最强AI数据分析助手

小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。

imini AI

imini AI

像人一样思考的AI智能体

imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。

下拉加载更多