RustMizan: A Compilable, Contamination-Aware Benchmarking Framework for Rust Vulnerabilities¶
会议: NeurIPS 2026
arXiv: 2607.04729
OpenReview: https://openreview.net/forum?id=buiRmXBL93
代码: https://github.com/sfu-rsl/rust-mizan
领域: 其他
关键词: 漏洞分析, Rust 内存安全, 智能体基准, 数据污染, 代码变异测试
一句话总结¶
针对大语言模型智能体在漏洞分析中缺乏可编译工程环境、评估任务单一且易受训练集污染的痛点,RustMizan 提出了首个覆盖包、文件与函数三级粒度可编译变体的 Rust 漏洞分析基准,并配套语义保持与对抗诱导的自动化变异体系,全面评估前沿智能体从二值检测到行级定位的真实分析能力。
研究背景与动机¶
随着 Rust 在 Linux 内核、Android 和 Windows 等底层安全基础设施中的规模化应用,业界对 Rust 代码安全性的期望持续走高。然而,即便 Rust 拥有严格的类型系统与所有权机制,其引入的 unsafe 代码块依然频繁诱发指针解引用失效、释放后使用(Use-After-Free)和双重释放等严重内存安全漏洞。与此同时,以大语言模型为核心的自主软件工程智能体被广泛用于辅助代码审计与缺陷排查,具备了调用终端编译器、静态分析器以及多轮交互探索真实代码库的能力。
然而,现存的漏洞评估基准严重落后于智能体的能力演进。一方面,多数基准仅截取自 Git 提交 diff 中的非可编译孤立代码片段,彻底剥离了构建环境,使得智能体与经典验证工具(如 Kani、RAPx)无法执行实际编译与动态交互;另一方面,评估维度通常退化为二值分类(存在漏洞与否),无法衡量定位漏洞具体发生函数与代码行的诊断能力。更严峻的是,开源漏洞数据普遍被直接纳入前沿大模型的预训练语料,导致模型极易凭借对公开 CVE 标识符与代码上下文的机械记忆蒙混过关,无法体现真实的程序语义推理与对抗防御能力。
填补这一空白的关键在于构建一套兼具完整工程可编译性、多层上下文可控性与抗污染变异能力的评测基准。核心 idea:构建包含包级、文件级与函数级三层独立可编译变体的真实 Rust 内存安全漏洞基准,配套基于编译器生态的语义保持与对抗性变异框架,在支持端到端级联任务评测的同时动态消除语料污染并探测模型鲁棒性。
方法详解¶
整体框架¶
RustMizan 由数据集构建、自动化变异框架与智能体交互评测环境三大支柱构成。系统首先从权威的 RustSec 咨询数据库中筛选出 42 个具有代表性的真实内存安全 CVE,通过人工精细化提取与编译依赖闭包补齐,为每个 CVE 构建横跨“完整软件包(Crate-level)”、“单文件依赖闭包(File-level)”和“单函数依赖闭包(Function-level)”的三级独立可编译项目变体,同时为修复后版本配对构建安全基线,共形成 173 个可独立编译的项目。接着,变异框架通过官方编译器基础设施对基准代码施加良性改写、对抗误导与 Rust 特异性结构变异,利用专有标记与 AST 对齐机制维持行级真值标签在变异前后的绝对精确。最后,评测系统利用 sandboxed Docker 与 ReAct 脚手架赋能智能体完整的 bash 交互权限,驱动模型完成二值分类、CWE 多标签识别、函数级定位与行级定位四项递进任务。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["RustSec 权威漏洞源<br/>42 个真实内存安全 CVE"] --> B["多粒度可编译变体构建<br/>提取包/文件/函数三级独立工程"]
B --> C["自动化三轨变异生成<br/>良性改写 / 对抗诱导 / 语言特异"]
C --> D["三重真值动态追踪机制<br/>标记追踪 / 内容匹配 / 符号重命名映射"]
D --> E["智能体交互式级联评测体系<br/>Docker 沙箱 + ReAct + 命令行探索编译"]
E --> F["四项细粒度能力诊断<br/>二值检测 / CWE归类 / 函数定位 / 行级定位"]
关键设计¶
1. 多粒度可编译变体构建:在孤立代码片段与真实工程上下文间解耦评估粒度 传统漏洞数据集(如 BigVul、DiverseVul)多为单个函数或补丁代码片段,缺乏 Cargo.toml 构建清单和类型依赖,无法被实际编译;而完整的工业级仓库又包含数万行无关代码,难以精确判定模型失败是由于推理缺陷还是上下文窗口被稀释。为此,RustMizan 针对每个漏洞人工构建三层独立的标准 Cargo 项目:包级(保留完整原始仓库拓扑)、文件级(抽取引发漏洞的单个源文件及其必要的类型与签名桩代码,封装为独立 crate)以及函数级(仅保留目标不安全函数及其直接调用的 minimal mock 依赖)。每一级变体均通过 Rust 1.84.1 编译验证。这种多粒度控制变量设计,保证了同一漏洞在不同代码作用域下的严格自洽性,使得上下文尺度对智能体推理性能的影响得以被独立解耦分析。
2. 自动化三轨变异生成与鲁棒追踪:在消除记忆污染的同时保证标签无损
针对公开数据集被预训练语料吸收引发的评测失真,变异框架依托 Rust 官方工具链(rustfmt 格式化、syn/quote 语法树解析与代码生成、rust-analyzer 项目级跨文件符号重命名)实现了无需人工核验与非 LLM 生成的代码变异:
- 良性变异(Benign):包含 format-compact(紧缩格式打破空白特征)、while-to-loop 与 for-to-while(控制流重构)、if-else-reorder(条件反转)以及中性注释与死代码辅助函数注入,消除表层 token 记忆;
- 对抗变异(Malignant):在漏洞上下文注入极具欺骗性的安全伪证注释(如声称输入已通过严格验证无 panic)以及误导性命名(将存在越界隐患的函数命名为 safe_fn_1 或 verified_var_2),评估模型是否过度盲信自然语言提示;
- Rust 特异变异(Rust-Specific):调整 #[derive(..)] 属性顺序、改写 where 约束子句、包装冗余 unsafe 块、引入 ManuallyDrop 与 MaybeUninit 包装或插入不可达分支 panic,检验对 Rust 独特语法特性的适应性。
变异过程中最大的技术挑战在于行号漂移与函数重命名会导致原始标注失效。RustMizan 设计了三位一体的真值追踪管道:针对格式调整与代码插入,在变异前于漏洞关键行前插入独一无二的锚点注释(// MIZAN_MARKER_...),跟随代码移动后再提取新行号并擦除标记;针对抹除注释的 AST 重构,采用精确文本匹配;针对符号重命名,维护跨文件重命名哈希映射表,实现变异前后函数签名与行号真值的无缝同步。
3. 智能体交互式级联评测体系:从二值粗筛向细粒度行级归因解耦
现有安全评测往往只考察模型输出单个布尔判断,无法反映真实代码审查场景中定位缺陷根因的能力。RustMizan 建立了四阶段级联评估协议:首先通过 CVC 准确率评估模型对整个 crate 漏洞存在的敏感度;随后要求模型基于代码理解预测 Common Weakness Enumeration(CWE)分类,度量弱点归类精度;进而要求输出具体的受累函数签名与精确代码行号集合。在 Docker 沙箱环境中,赋予基于 ReAct 脚手架驱动的智能体完整的 bash 终端工具,允许其自由调用 cargo check、探索文件目录和读取上下文,全流程记录智能体思考与决策轨迹。
损失函数 / 训练策略¶
评估体系针对二值与集合型任务分别定义指标。对于二值检测,采用标准准确率(CVC Accuracy);针对只在正样本上计算的定位召回,定义 Success@1 指标,即模型预测的集合中至少包含一个真实漏洞函数或代码行时即判定命中。针对 CWE 分类、函数定位与行级定位的多标签预测集合,设模型预测集合为 \(P\)、真实标签集合为 \(A\),则单样本真阳性 \(TP=|P \cap A|\),假阳性 \(FP=|P \setminus A|\),假阴性 \(FN=|A \setminus P|\)。为合理考量跨多文件或多位置复合漏洞的权重,全数据集采用微平均 \(F_1\) 分数(Micro-averaged \(F_1\))汇总:
在污染控制消融实验中,为实证变异框架对语料泄露的敏感度,作者使用 Vanilla 数据集对 Llama-3.1-8B-Instruct、Qwen3-4B-Instruct 以及 Qwen2.5-Coder-7B-Instruct 进行了 10 个 epoch 的全参数有监督微调(SFT),在 16 张 NVIDIA L40S GPU 上采用 DeepSpeed ZeRO-3 与序列并行训练,学习率设为 \(1 \times 10^{-5}\) 并配备余弦衰减与 RoPE 上下文扩展,构建受控污染基线。
实验关键数据¶
主实验¶
在未经变异的 Vanilla 基准(173 个可编译变体)上,对 Claude Sonnet 4.6、GPT 5.4、Gemini 3.1 Pro 和 Qwen 3.6 Plus 四大前沿模型展开完整的智能体交互评测,结果如表 1 所示。
| 模型 | CVC 准确率 (%) | CWE \(F_1\) (%) | 函数定位 \(F_1\) (%) | 行级定位 \(F_1\) (%) | 函数 Success@1 (%) | 行级 Success@1 (%) |
|---|---|---|---|---|---|---|
| Claude Sonnet 4.6 | 64.7 (112/173) | 17.0 | 21.3 | 23.2 | 46.3 (44/95) | 47.4 (45/95) |
| GPT 5.4 | 64.2 (111/173) | 16.0 | 15.7 | 17.5 | 46.3 (44/95) | 46.3 (44/95) |
| Gemini 3.1 Pro | 57.2 (99/173) | 22.1 | 22.4 | 23.1 | 52.6 (50/95) | 36.8 (35/95) |
| Qwen 3.6 Plus | 56.1 (97/173) | 13.7 | 24.6 | 20.2 | 44.2 (42/95) | 43.2 (41/95) |
消融与变异分析¶
为探究上下文粒度(RQ2)、良性变异防污染有效性(RQ3)以及对抗性线索(RQ4)对模型精确定位能力的影响,表 2 呈现了跨变异子集下的行级定位微平均 \(F_1\) 变化以及不同粒度下的定位差异。
| 模型 | Crate 级行 \(F_1\) | File 级行 \(F_1\) | Function 级行 \(F_1\) | Vanilla 行 \(F_1\) | Benign 行 \(F_1\) | Rust-Specific 行 \(F_1\) | Malignant 行 \(F_1\) |
|---|---|---|---|---|---|---|---|
| Claude Sonnet 4.6 | 17.9 | 24.8 | 39.4 | 23.2 | 19.7 | 24.0 | 12.8 (-10.4) |
| GPT 5.4 | 15.6 | 16.2 | 24.7 | 17.5 | 16.4 | 15.5 | 14.3 (-3.2) |
| Gemini 3.1 Pro | 16.6 | 21.5 | 41.3 | 23.1 | 20.7 | 22.2 | 19.7 (-3.4) |
| Qwen 3.6 Plus | 10.7 | 19.8 | 37.2 | 20.2 | 25.2 | 19.6 | 14.7 (-5.5) |
| 平均变化量 (\(\Delta\)) | - | - | - | 基准 | -0.5 | -0.7 | -5.6 (-26.7%) |
关键发现¶
- 检测与定位存在显著鸿沟(RQ1):前沿模型在二值漏洞检测上准确率维持在 56%–65%,但细粒度行级定位 \(F_1\) 仅徘徊在 17%–23%,说明模型往往能依据不安全代码块模式给出宏观猜测,却极难精确指出具体出错的代码语句。此外没有单一模型全维度领先,Claude 4.6 检测和行定位最强,Gemini 3.1 Pro 在 CWE 识别上占优,Qwen 3.6 Plus 在函数级定位胜出。
- 狭窄上下文显著提升定位精度(RQ2):将代码范围由整个 crate 缩减至单函数级别,使所有模型的行级 \(F_1\) 实现了成倍激增(如 Claude 从 17.9 跃升至 39.4,Gemini 从 16.6 跃升至 41.3)。这证实了当前智能体在长文本仓库中存在严重的注意力分散与搜索迷航问题。
- 前沿模型宏观未现污染但微观存在记忆(RQ3):在良性变异与 Rust 特异变异下,四大商业模型的平均行定位指标波动极小(平均变化仅 -0.5 与 -0.7 点),宏观上无明显污染痕迹;但在利用 Docent 审查模型推理轨迹时,Gemini 3.1 Pro 在未提供任何提示的情况下,自发精准输出了
CVE-2018-20991的官方编号与所在行,揭示了潜伏的暗中记忆行为。受控微调实验进一步表明,受污染的开源模型在经变异后行定位分数暴跌 44–77 点,证明了该变异框架对污染泄露的极强压制效能。 - 对抗性注释造成灾难性性能劣化(RQ4):注入虚假安全声明与重命名函数(Malignant 变异)使模型的行定位 \(F_1\) 发生系统性下滑,平均跌幅达 5.6 点(相对下降约 27%),其中 Claude 4.6 跌幅高达 44.8%(23.2 骤降至 12.8),暴露了智能体严重受自然语言误导、缺乏扎实代码语义验证的脆弱本质。
亮点与洞察¶
- 完全依赖编译器生态保证变异的可编译性与等价性:利用 rust-analyzer 的跨文件重命名与 rustfmt / syn 机制进行代码重构,摒弃了不可靠的 LLM 循环生成,在无需昂贵人工核查的前提下,原生保证了变异后代码的 100% 可编译性与语义一致性。
- 多粒度可编译变体构建范式填补了传统静态分析与智能体评测的协同鸿沟:通过为单个 CVE 封装三层独立 crate,不仅为研究输入上下文窗口对推理的瓶颈提供了严格变量控制,还使得 Kani(有界模型检验)与 RAPx(MIR 静态分析)等底层系统安全工具能够与智能体运行在同一基准之上,为未来神经-符号混合代码审计奠定了坚实基础。
局限与展望¶
- 数据集规模受人工构建限制相对温和:由于必须逐个 CVE 提取并补齐多粒度依赖、验证编译与双人同行评审,目前基准覆盖 42 个 CVE 与 173 个工程变体,相比自动化抓取的千级代码片段库规模较小。
- 预补丁/后补丁标签假设的潜在偏差:评测假定补丁提交彻底消除了漏洞且未引入新缺陷,尽管符合安全研究惯例,但在极端复杂代码库中可能存在未披露的伴生漏洞。
- 变异算子覆盖率的不均衡性:部分高级变异算子(如循环重写)依赖特定语法构造,导致未包含该构造的变体无法被全量算子覆盖,需要在后续版本中引入更多针对不同语义模式的自适应算子。
相关工作与启发¶
- vs BigVul / DiverseVul 等片段级基准:传统漏洞数据集主要基于 Git 提交切片提取单函数,缺乏完整的 build 依赖,不支持动态编译与交互;RustMizan 提供全流程独立编译工程,赋能智能体实际探索。
- vs SWE-bench / Terminal-Bench 等智能体基准:现有仓库级智能体评测关注常规功能性 issue 修复或命令执行,未深入漏洞底层成因,且缺乏抗训练集污染的系统性变异控制;RustMizan 聚焦多阶段安全分析管道,兼备细粒度定位与对抗鲁棒性探测。
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ 首次提出多粒度独立可编译的 Rust 漏洞基准,并配套无 LLM 介入的编译器级变异与真值追踪机制。
- 实验充分度: ⭐⭐⭐⭐⭐ 覆盖四大前沿商业模型与受控污染微调开源模型,对粒度差异、对抗提示及思维链记忆进行了深层定量与定性剖析。
- 写作质量: ⭐⭐⭐⭐⭐ 论文逻辑清晰、问题动机切中当前智能体评测痛点,附录详实给出了所有变异样例、指标定义与分析工具对比。
- 价值: ⭐⭐⭐⭐⭐ 为安全关键系统下的 Rust 代码智能审计提供了标准、客观且抗污染的高可信评估平台。