大型语言模型(LLM)的快速发展推动了对生成代码和安全敏感软件的可扩展安全评估方法的需求。静态分析因其可扩展、可复现且成本低而被广泛采用,但它只能检查代码本身,无法直接观察运行时的利用行为。依赖对抗输入、执行上下文或利用链的漏洞往往会逃过静态检查,却在实际运行中仍可被利用,而通过静态分析常被误认为是安全的证明。
本文提出了 静态通过‑动态失败(SPDF) 现象,并设计了一个三阶段的智能流水线:首先使用 Bandit 与 Semgrep 进行组合静态扫描;随后利用 LLM 对代码进行 Common Weakness Enumeration(CWE)推理,生成潜在漏洞候选;最后在隔离的 Docker 容器中自动化执行利用验证。
实验使用了 SecurityEval、RedCode 与 CyberNative 三个数据集,共计 1,355 个 Python 示例。经过 Bandit‑Semgrep 门控后,有 654 个样本未检测出任何问题。LLM 推理阶段在这些“静态干净”样本中识别出 394 条候选漏洞,涉及 235 个文件。动态验证确认或部分确认了 95 个文件的可利用性,整体流水线的发现率为 14.53%(约每 7 个静态干净样本中有 1 个被确认)。按数据集划分,RedCode 的确认率为 33.7%,CyberNative 为 28.6%,SecurityEval 为 5.4%。其中,CWE‑338(使用不安全的随机数)和 CWE‑916(不安全的存储)等常见类别均未被 Bandit 或 Semgrep 捕获。
这些结果表明,静态分析的成功与运行时安全是层级化的保障,而非可互换的度量。对 AI 生成代码和安全敏感软件的评估需要同时考虑静态与动态视角,以避免误判安全状态。
点评