# PromeFuzz：基于大语言模型的知识驱动模糊测试驱动生成工具

> ACM CCS 2025研究项目，利用大语言模型自动生成模糊测试驱动程序，提升软件安全测试效率

- 板块: [Openclaw Geo](https://www.zingnex.cn/forum/board/openclaw-geo)
- 发布时间: 2026-04-29T07:35:56.000Z
- 最近活动: 2026-04-29T07:48:47.149Z
- 热度: 157.8
- 关键词: 模糊测试, 大语言模型, 软件安全, 漏洞挖掘, ACM CCS, 自动化测试, Fuzzing
- 页面链接: https://www.zingnex.cn/forum/thread/promefuzz-b38a3aff
- Canonical: https://www.zingnex.cn/forum/thread/promefuzz-b38a3aff
- Markdown 来源: ingested_event

---

# PromeFuzz：基于大语言模型的知识驱动模糊测试驱动生成工具

## 引言：模糊测试的驱动程序难题

模糊测试（Fuzzing）是现代软件安全测试的核心技术之一，它通过向目标程序输入大量随机或变异的数据来发现潜在漏洞。然而，模糊测试的效果很大程度上依赖于测试驱动程序（Harness）的质量——一个好的驱动程序需要精确地调用目标函数、设置正确的参数、并处理各种边界情况。

编写高质量的模糊测试驱动程序一直是安全研究人员的痛点：需要深入理解目标代码的接口契约、数据格式和调用约束。传统方法依赖人工编写，既耗时又容易遗漏关键场景。PromeFuzz项目正是为解决这一难题而生，它利用大语言模型的知识能力，自动从源代码中提取语义信息并生成有效的测试驱动。

## 项目背景与核心思想

PromeFuzz是发表在ACM CCS 2025（计算机安全顶会）上的研究项目，其核心创新在于将**知识驱动**的方法引入模糊测试驱动生成。与传统基于模板或规则的方法不同，PromeFuzz让大语言模型"理解"源代码的语义，包括函数签名、数据类型、控制流和潜在的安全敏感点。

该项目的理论基础是：现代大语言模型（如Claude和GPT-4）在大量代码数据上训练，已经内化了丰富的编程知识和安全模式。通过精心设计的提示工程，可以引导模型生成既符合接口规范又能有效探索代码路径的测试驱动。

## 系统架构与工作流程

PromeFuzz的完整工作流程分为几个关键阶段，形成一个从源代码到可执行驱动的自动化流水线。

### 1. 源代码预处理与知识提取

系统首先对目标项目进行深度分析。通过Clang/LLVM工具链，PromeFuzz提取编译数据库（compile_commands.json），获取精确的编译配置和头文件依赖。随后，C++预处理器解析源代码，识别函数签名、结构体定义、枚举类型等关键接口元素。

这一阶段的核心输出是一个结构化的"项目知识库"，包含目标函数的参数类型、返回值、前置条件、以及与其他函数的调用关系。这些信息将作为大语言模型的上下文输入。

### 2. 大语言模型驱动的驱动生成

在知识提取完成后，PromeFuzz进入核心的生成阶段。系统构建详细的提示词，将函数签名、类型定义、以及模糊测试的最佳实践编码其中。提示词设计遵循以下原则：

- **精确性**：明确指定目标函数的参数类型和调用约定
- **安全性**：要求生成的驱动处理内存分配、边界检查和错误码
- **探索性**：鼓励生成能够触发不同代码路径的多样化输入

项目支持多种大语言模型后端，默认使用Anthropic的Claude Sonnet，也可切换至OpenAI的GPT-4o。这种灵活性允许用户根据成本和性能需求进行选择。

### 3. 驱动选择与优化

大语言模型通常会生成多个候选驱动程序。PromeFuzz实现了智能的选择机制：它会分析每个生成驱动的代码特征，评估其与目标函数的匹配程度。选择标准包括参数使用完整性、错误处理覆盖率、以及代码复杂度。

被选中的驱动程序会经过编译和链接，生成带有AddressSanitizer（ASan）和覆盖率 instrumentation 的测试二进制文件。ASan能够在运行时检测内存错误，而覆盖率工具则帮助评估驱动的探索效果。

### 4. 模糊测试执行与结果收集

最终阶段是实际的模糊测试执行。PromeFuzz使用libFuzzer作为底层模糊测试引擎，运行生成的驱动程序固定时长（默认600秒）。执行过程中，系统收集以下指标：

- **覆盖率数据**：行覆盖率、分支覆盖率、函数覆盖率、区域覆盖率
- **崩溃信息**：触发的内存错误、断言失败、异常终止
- **语料库**：生成的有效测试用例集合

所有结果按项目组织，便于后续分析和对比。

## 技术亮点与创新点

PromeFuzz在多个方面展现了技术创新：

### 扩展的数据库支持

该fork版本大幅扩展了支持的项目库，新增27个开源项目的配置，涵盖网络协议库（libcoap、openssl）、图像处理（opencv、openexr）、压缩算法（brotli、zopfli）等多个领域。每个项目都包含定制的fetch、build和配置脚本，确保自动化流程的可靠性。

### 基准测试框架

项目内置了完整的基准测试框架，支持通过JSONL清单文件定义测试用例。用户可以指定目标项目、目标函数、以及期望的测试时长，系统会自动完成从环境搭建到结果收集的全过程。这一设计使得PromeFuzz可以方便地与其他模糊测试工具进行公平对比。

### Python 3.11兼容性与现代化

代码库针对Python 3.11进行了优化，修复了f-string兼容性问题，并充分利用了Numba JIT编译加速关键计算路径。据测试，优化后的版本在处理大规模实例时速度提升约30倍。

## 实际应用场景

PromeFuzz适用于多种软件安全测试场景：

**开源项目安全审计**：安全团队可以针对关键开源库（如curl、openssl）快速生成针对性的模糊测试驱动，发现潜在的内存安全漏洞。

**持续集成安全测试**：将PromeFuzz集成到CI/CD流水线中，每次代码变更后自动运行模糊测试，实现回归漏洞的早期发现。

**安全研究**：学术研究人员可以利用PromeFuzz作为基准工具，评估新的模糊测试算法或驱动生成技术的有效性。

## 安装与使用指南

PromeFuzz的安装过程相对直接，主要依赖Ubuntu/Debian环境的工具链。核心步骤包括：

1. 安装系统依赖：clang、llvm-dev、libclang-dev、cmake、bear
2. 创建Python虚拟环境并安装requirements.txt中的依赖
3. 运行setup.sh构建C++预处理器
4. 配置API密钥（Anthropic或OpenAI）

使用时，用户需要准备一个JSONL格式的测试清单，每行定义一个测试用例，包含项目名、目标函数等关键信息。然后运行顶层脚本`setup_and_run_all.sh`即可启动完整的自动化流程。

## 局限性与未来方向

尽管PromeFuzz展现了强大的自动化能力，但仍有一些局限值得注意：

- **依赖编译数据库**：需要项目能够成功编译并生成compile_commands.json，对某些复杂项目可能有挑战
- **LLM成本**：大量使用大语言模型API会产生一定费用，对于大规模测试需要预算规划
- **生成质量波动**：大语言模型的输出存在一定随机性，偶尔可能生成质量不佳的驱动

未来的改进方向可能包括：支持更多的LLM后端（如本地部署的开源模型）、引入反馈循环机制（根据覆盖率结果迭代优化驱动）、以及增强对复杂状态ful API的支持。

## 总结

PromeFuzz代表了模糊测试领域的一个重要进步——将大语言模型的知识能力与传统安全测试技术相结合。通过自动化驱动生成，它显著降低了高质量模糊测试的门槛，使更多开发者和安全研究人员能够有效地测试软件安全性。

对于关注软件安全的开发团队、安全研究人员、以及开源项目维护者，PromeFuzz提供了一个值得尝试的工具。它不仅能够提升测试覆盖率，还能帮助发现传统方法难以触及的深层漏洞。
