关于Sec-Bench:首个自动化评估LLM代理在真实世界软件安全任务上性能的基准测试框架的学术报告
本研究由来自伊利诺伊大学厄巴纳-香槟分校的Hwiwon Lee、Ziqi Zhang、Lingming Zhang以及普渡大学的Hanxiao Lu共同完成。该研究以论文形式发表,标题为“Sec-Bench: Automated Benchmarking of LLM Agents on Real-World Software Security Tasks”,并已被第39届神经信息处理系统大会(NeurIPS 2025)接收。
一、 研究的学术背景 本研究属于人工智能安全与软件工程安全的交叉领域,具体聚焦于大型语言模型代理在软件安全工程任务中的能力评估。随着LLM被日益集成到软件开发生命周期中,对其在复杂安全任务上的性能进行严格评估变得至关重要,这关系到其安全部署的信任度。然而,现有的网络安全基准测试存在显著局限性:它们要么依赖于人工构造的CTF挑战,要么使用简化的漏洞数据集,这些数据集往往无法捕捉安全工程师在实践中面临的真实复杂性、模糊性和环境依赖性。例如,现有基准要么规模有限,要么数据质量存疑(有研究表明某些数据集样本不准确率高达71%),要么无法提供可复现的漏洞环境和工作验证机制。因此,领域内亟需一个能够自动构建、基于真实世界漏洞、并提供高质量、可验证、可扩展的基准测试框架。
在此背景下,本研究团队旨在开发一个名为Sec-Bench的框架,以解决上述挑战。其核心目标是:1)自动从公共漏洞数据库收集真实世界的CVE实例;2)在隔离环境中自动复现这些漏洞;3)自动生成经过验证的补丁和概念验证;4)基于这些已验证的实例,构建一个用于评估LLM代理在真实安全任务(如概念验证生成和漏洞修补)上性能的高质量基准。Sec-Bench的设计遵循三个关键质量原则:高质量(具有已验证的PoC和精确触发条件)、自动化(最小化人工干预,便于扩展)以及真实性(忠实反映专业安全工程实践中的挑战)。
二、 研究的详细工作流程 Sec-Bench框架包含三个核心模块:预处理器、验证器和评估器。其工作流程是一个高度自动化的多阶段管道。
1. 预处理器模块: * 研究对象与样本: 研究从OSV(开源漏洞)数据库等公共来源收集了初始的38,201个CVE实例,涉及7,926个开源项目。研究聚焦于C/C++项目,因为这类项目在关键基础设施中普遍存在且易受内存安全漏洞影响。 * 处理与实验方法: 该模块执行三个步骤。首先,元数据收集:从OSV数据库提取漏洞描述、参考URL、仓库信息等。其次,漏洞报告与候选修复提取:针对每个实例,使用定制的网络爬虫工具从GitHub Issues、RedHat Bugzilla等多种漏洞跟踪平台收集漏洞报告,这些报告通常包含复现方法和潜在修复信息。同时,从OSS-Fuzz项目适配配置文件以支持不同项目的构建需求。此步骤后,筛选出4,836个具有足够文档的实例。最后,环境配置:为每个实例创建定制的Docker容器环境,包含项目特定的依赖和设置。研究还开发了一个“harness”(测试套件),以便LLM代理能够轻松地构建项目、执行PoC和验证补丁。通过进一步过滤那些能够通过内存安全消毒剂生成报告的实例,最终保留了898个实例作为候选,进入下一阶段。
2. 验证器模块: * 研究对象与样本: 输入是预处理器准备的898个候选CVE实例及其对应的Docker环境和漏洞报告。 * 处理与实验方法: 这是Sec-Bench的核心创新部分,名为SecVerifier。它采用一个新颖的多智能体脚手架,将复杂的验证过程分解为三个顺序执行的子任务,由三个专用代理在管理代理的协调下完成: * 构建代理: 负责确保脆弱的代码仓库能在目标环境中成功编译。它分析并解决编译错误,优化构建脚本,输出优化后的构建脚本、依赖列表以及解决编译问题的补丁文件。 * 利用代理: 负责创建或验证一个能触发漏洞的功能性概念验证(PoC)工件。它分析漏洞报告,提取或构造PoC。如果报告中缺乏可用的PoC,它会尝试从零开始生成一个,这需要对根本原因、漏洞模式和受影响代码路径进行深入分析。最终输出一个功能性的PoC输入和触发它所需的命令序列。 * 修复代理: 负责合成一个统一的补丁来解决漏洞。它分析候选的修复提交,隔离出仅与漏洞相关的修改,并将其整合到一个全面的补丁文件中。如果现有修复不可用或失败,该代理会通过调查底层漏洞和追踪相关代码路径来自行设计补丁。补丁的有效性通过确保其能阻止PoC触发漏洞并保留原始功能来验证。 * 数据验证方法: 验证过程依赖于内存安全消毒剂作为判定“真相”的标准。这是本研究的一个关键设计选择。消毒剂通过在代码中插入内存访问监控检查来检测漏洞,并提供带有调用栈信息的确定性报告。一个实例被成功验证的条件是:PoC执行时能触发预期的消毒剂错误报告;而应用补丁后,相同的PoC执行则不再触发该错误。这种基于工具的方法提供了客观、可重复的验证,避免了主观判断。 * 结果与后续流程: 经过SecVerifier的自动化验证,从898个种子实例中成功验证了200个实例,总体成功率为22.3%。其中,构建代理、利用代理和修复代理的成功率分别为81.7%、39.4%和69.2%。利用代理的成功率最低,这反映了从模糊或不完整的报告中生成或验证PoC是极具挑战性的。这些成功验证的200个实例构成了后续评估的高质量数据集。
3. 评估器模块: * 研究对象与样本: 基于上述验证的200个CVE实例。 * 处理与实验方法: 评估器将每个已验证的实例打包成一个干净的Docker镜像,包含脆弱的代码库、环境配置以及验证过程中的关键工件。然后,它基于这些实例制定了两个关键的、反映真实安全工程工作流程的任务来评估LLM代理: * PoC生成任务: 要求LLM代理仅根据漏洞描述(包含消毒剂报告)和代码库访问权限,生成一个能触发漏洞的工作PoC。成功标准是生成的PoC在执行时,能在预期位置触发正确的消毒剂错误类型。 * 漏洞修补任务: 要求LLM代理在给定漏洞描述、代码库访问权限和一个工作PoC的情况下,创建安全修复补丁。成功标准是生成的补丁能够成功编译,并且在应用后,原有的PoC无法再触发消毒剂错误。 * 实验设置: 研究选择了三个最先进的代码代理框架:SWE-Agent、OpenHands和Aider,并搭配三个有代表性的LLM模型:Claude 3.7 Sonnet、GPT-4o和O3-mini。由于预算限制,使用Claude 3.7 Sonnet在完整的200个实例数据集上评估了最佳表现代理,同时使用从Sec-Bench中选取的80个代表性实例对所有代理和模型组合进行了详细比较。
三、 研究的主要结果 1. 验证器性能: SecVerifier的多智能体架构被证明是有效的。在与单智能体基线CodeAct(基于相同的OpenHands框架)的对比实验中(在50个随机实例上),SecVerifier取得了26.0%的整体验证成功率,显著高于CodeAct的14.0%,提升了85.7%。特别是在修复代理和构建代理任务上,分别有22.9%和18.0%的提升,证明了多智能体分工协作在复杂安全任务上的优势。
2. LLM代理在安全任务上的评估结果: * 整体表现: 在完整的200个实例数据集上,表现最佳的代理(SWE-Agent和OpenHands)在漏洞修补任务上的最高成功率仅为34.0%,在PoC生成任务上的最高成功率仅为18.0%。这凸显了Sec-Bench基准的挑战性,以及当前最先进的LLM代理在解决真实世界安全任务方面存在显著的能力差距。 * 详细对比: 在80个实例的子集上,不同代理和模型的组合表现进一步揭示了细节。SWE-Agent和OpenHands表现相当,而Aider在所有模型和任务上表现 consistently 较低。例如,在漏洞修补任务上,Claude 3.7 Sonnet搭配SWE-Agent取得了33.8%的成功率,而搭配Aider仅为20.0%。在PoC生成任务上,成功率普遍更低,Claude 3.7 Sonnet搭配SWE-Agent仅为12.5%。 * 失败分析: 研究对漏洞修补任务的失败案例进行了分类分析,主要失败类型包括:无补丁生成、补丁格式错误、编译错误以及补丁后仍然存在漏洞。分析发现,SWE-Agent主要受困于编译错误和补丁后仍存在漏洞;OpenHands则因生成长度过大的补丁而容易产生格式错误;Aider则由于缺乏对代码库的深度探索,更容易出现无法生成任何补丁的情况。对于PoC生成任务,失败的主要原因是代码库文件众多导致数据流分析困难、未能有效利用测试套件导致输出信息过载、以及缺乏对调试器的使用,使得生成精确的字节级漏洞利用载荷变得极为困难。 * 数据污染分析: 为了检验模型可能通过记忆训练数据中的CVE信息而获得不公平优势,研究对比了模型知识截止日期前后发布的漏洞实例上的表现。统计检验(Wilcoxon符号秩检验)显示,模型在截止日期前后的数据上表现没有显著差异(p值为0.27),表明数据污染问题在本研究的评估中影响不大,结果反映了模型的真实推理能力。
四、 研究的结论与价值 本研究成功构建并发布了Sec-Bench,这是首个能够自动构建、基于真实世界软件漏洞、并用于评估LLM代理安全工程能力的综合性基准测试框架。其核心贡献在于: 1. 提出了一个通用的多智能体脚手架,能够自动从真实世界代码仓库复现漏洞,构建高质量、可扩展的安全基准。 2. 基于该基准,制定了两个具有挑战性和现实意义的安全任务(PoC生成和漏洞修补),以系统评估LLM代理。 3. 通过全面的评估,揭示了当前最先进LLM代码代理在真实安全任务上的显著性能局限,其成功率远低于在通用软件工程任务(如SWE-Bench)上的表现。
该研究的科学价值在于为AI安全社区提供了一个可靠、可重复、可扩展的评估标准,推动了LLM代理在安全领域的能力测评从合成、简化场景向真实、复杂场景的转变。其应用价值在于为开发更实用、更智能、更自主的安全工程AI代理指明了方向,并设定了明确的性能基线。研究结果表明,要开发出能有效协助安全工程师的LLM代理,仍需在理解复杂代码库上下文、分析数据/控制流以追踪攻击向量、以及实施精确修复而不引入安全回归等方面取得重大突破。
五、 研究的亮点 1. 高度自动化和可扩展性: Sec-Bench首次实现了从原始漏洞报告到可评估基准实例的端到端自动化构建,每个实例的平均成本仅为0.87美元,极大地降低了创建高质量安全基准的门槛和成本。 2. 创新的多智能体验证架构: SecVerifier通过分解复杂任务并利用专用代理协同工作,显著提升了漏洞验证的成功率(比单智能体基线高85.7%),为自动化处理复杂安全任务提供了新的范式。 3. 基于真实世界漏洞的高质量基准: 数据集源于真实的CVE,并经过严格的自动化验证和手动审查,确保了漏洞场景的真实性和评估的可靠性。数据集统计显示,其问题描述文本长度是SWE-Bench的4.7倍,反映了安全任务的复杂性。 4. 揭示关键性能差距: 评估结果以量化数据清晰地表明,即使是最先进的LLM代理,在真实安全任务上的表现也远未达到实用水平,这为未来研究提供了明确的挑战和目标。 5. 开源与可访问性: 研究团队公开了Sec-Bench的代码、数据集和排行榜,促进了社区的验证、使用和进一步发展。
六、 其他有价值的内容 研究还包含了详尽的数据集统计分析(如CVSS评分和CWE类型的分布)、详细的实验配置说明、完整的智能体提示词模板、以及所使用的开源代码许可证列表,确保了研究的可复现性和透明度。此外,论文也讨论了Sec-Bench的当前局限性(如目前专注于C/C++和内存安全漏洞)和未来的扩展方向(如支持更多编程语言和漏洞类型)。这些内容为其他研究者在此基础上进行改进和扩展提供了坚实的基础。