外观
用影响函数检测代码生成 Prompt 批次污染
摘要
CodeSIFT 研究如何判断一批代码生成 prompt 是否整体受到污染,而不是识别某个已知 CWE。它用曲率数据近似模型 Hessian,计算每个生成结果对模型参数的影响,再比较候选批次和已知良性参考批次的影响分布。单侧 Welch t-test 显著时,系统把整个批次升级审查。
作者手工构造 800 条 Python 记录,其中恶意与良性各 400 条;另取 The Stack v2 的 100 条 prompt 估计曲率。实验覆盖 Granite-3B、DeepSeek-Coder-6.7B 和 Qwen2.5-Coder-7B,并与 Bandit、Semgrep 和 AST taint tracker 比较。中高污染比例下最高 AUROC 为 0.98;最低污染比例下约为 0.6–0.85。论文未公开实现和原始记录,也没有测试真实低基率流量或自适应攻击。
方法的独特价值
静态分析器检查生成后的已知危险模式,prompt 过滤器则常依赖显式恶意词。CodeSIFT 改为询问:为了让模型吸收这段生成代码,其参数需要相对良性行为移动多远。检测信号来自模型内部参数空间,不需要在部署时预先写出具体漏洞规则。
这里的“无需预定义威胁类别”并不等于没有威胁模型。论文数据仍按 AuthSec 和 InfraCloud 的 CWE/OWASP 弱点构造,模型也必须开放参数和梯度。本站将该方法归入防护验证与监测,而不是编码 Agent 的具体漏洞页面。
适用范围
CodeSIFT 适合自托管、可访问参数的代码模型批处理入口。系统必须有三类数据:接近模型预训练分布的 curvature set、可信良性参考批次,以及待判断的候选批次。输出是“该批次是否异常”的统计结论,不能定位其中哪一条 prompt 恶意,也不修复生成代码。
论文只验证 Python、3B–7B 模型和作者构造的认证/基础设施任务。闭源 API、单条实时请求、很小批次、多语言代码和极低污染比例不在已验证范围。
方法与实施流程
- 用 100 条 The Stack v2 prompt 构造 curvature set,近似经验 Hessian 的逆。
- 对良性参考集合与候选集合分别生成代码;默认每条 prompt 采样 25 个 completion。
- 按层保存注意力和 MLP 投影的 Kronecker-factored 曲率因子,并计算预条件梯度。
- 用参数化 Bregman response function 近似上调单个样本权重后的参数变化,再取 L1/L2 范数形成影响分数。
- 对候选与良性参考的分数做单侧 Welch 两样本 t-test;拒绝原假设时标记批次污染。
- 在独立良性批次上扫描显著性水平
α=0.01–0.09,检查经验误报率是否跟随名义阈值。
以下是本站依据论文算法重构的防御性伪代码。它只表达验证流程,不含原始恶意 prompt 或漏洞生成指令。
python
curvature = fit_curvature(clean_stack_fixture, model)
reference_scores = influence_scores(known_benign_batch, model, curvature, samples=25)
candidate_scores = influence_scores(candidate_batch, model, curvature, samples=25)
p_value = welch_ttest(candidate_scores, reference_scores, alternative="greater")
decision = "QUARANTINE_BATCH" if p_value < alpha else "PASS_TO_CODE_REVIEW"论文估计每条 prompt、每个 sample 的主要计算为模型参数量 m 的线性矩阵—向量乘,N 次采样约为 O(mN);曲率因子可以预计算,但存储和数值精度仍是部署成本。
质量控制
数据与基线
作者手工编写 800 条记录:400 条 malicious、400 条 benign。恶意池分为 AuthSec 与 InfraCloud,各 200 条;良性池也按相同领域分布配对。每条记录包含自然语言 completion instruction 和带一个空位的 Python skeleton。作者先选 CWE/OWASP 目标弱点,再撰写恶意骨架和指令,并用多个代码模型确认预期弱点会出现在输出中。
基线是 Bandit、Semgrep 和自建 AST taint tracker。三者都先对每条生成代码给二值标记,再使用与 CodeSIFT 相同的批次 t-test,尽量把差异限制在底层信号。
模型、指标与结果
- Granite-3B-Code-Instruct-2K、DeepSeek-Coder-6.7B-Instruct 和 Qwen2.5-Coder-7B-Instruct 共 3 个模型。
- AuthSec 的最低污染设置中,CodeSIFT AUROC 约 0.6–0.85;污染达到约 40%–50% 后接近 1.0。
- InfraCloud 更难,最高 AUROC 随模型约为 0.88–0.98。
- 在作者测试的 3 个模型、2 个数据集和
α=0.01–0.09条件中,CodeSIFT 的经验误报率大体跟随α。静态基线在部分设置接近 CodeSIFT,但在其他模型上接近随机甚至低于 0.5 AUROC。 - 附录同时扫描批次大小、每条 prompt 的采样数和污染率。AuthSec 在批次 20–30 条时已接近上限,InfraCloud 更依赖批次规模;把采样数降至 5 在部分设置仍足够,但这不是所有模型的最低要求。
生产验收必须固定良性参考来源、curvature 数据版本、模型 checkpoint、生成参数和批次构成。误报率要在真实良性流量上重新校准,不能直接采用作者的 α。
局限与待验证问题
证据等级为 moderate。论文没有公开 CodeSIFT 实现、AuthSec/InfraCloud 原始记录或固定归档,因此目前无法端到端复跑。800 条数据全部由同一团队手工编写,恶意和良性 prompt 可能含有作者风格、骨架结构或生成流程的共模差异;论文没有按漏洞家族完全留出,也没有真实生产流量。
方法只做批次判断。真实入口的恶意比例通常远低于论文的中高污染设置,小批次性能也更弱。攻击者还可能优化生成结果,使参数影响接近良性参考,或者污染参考/curvature 数据。后续研究需要开放工件、跨作者数据、留出漏洞家族(held-out vulnerability family)、自适应攻击、低基率评测以及更大模型的显存和延迟测量。