SPLASH: Contrastive Audit Pressure for Detecting and Localizing Security Hallucinations in Generated Code
作者: Mirza Masfiqur Rahman, MD Ajwad Akil, Imtiaz Karim, Ashish Kundu, Ramana Kompella, Elisa Bertino
分类: cs.CR, cs.LG, cs.SE
发布日期: 2026-10-19
💡 一句话要点
提出SPLASH以检测和定位生成代码中的安全幻觉问题
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 安全幻觉 代码生成 审计压力 静态分析 机器学习 程序评估 脆弱性检测
📋 核心要点
- 现有方法无法有效检测生成代码中的安全幻觉,这些幻觉在功能测试中表现良好却存在安全隐患。
- SPLASH通过引入审计压力度量,比较生成程序在不同审查下的表现,能够有效选择安全代码并定位脆弱语句。
- 在63,684个生成程序的实验中,SPLASH成功选择安全代码的比例达到74%,并在58%的不安全程序中准确定位脆弱语句。
📝 摘要(中文)
由大型语言模型生成的代码常常通过所有功能测试,但仍然存在安全隐患。这些安全幻觉通常以高置信度生成,并在样本中重复出现,因此生成器自身的不确定性和静态分析工具都无法可靠地捕捉到它们。本文提出了SPLASH,基于一种新的度量标准——审计压力,比较生成程序在安全审查和风格审查下的教师强制日志概率。通过将审计压力聚合到语句和程序中,并基于竞争编辑的概率模型,SPLASH能够在模型的候选程序中选择安全程序,并定位脆弱语句,无需模型训练、CWE特定规则或对生成模型的内部访问。在对12个模型生成的63,684个程序进行的实验中,SPLASH在74%的情况下选择了安全代码,并在58%的不安全程序中将脆弱语句置于首位,其表现优于前沿的LLM评判者。
🔬 方法详解
问题定义:本文旨在解决由大型语言模型生成的代码中存在的安全幻觉问题。现有方法在功能测试中表现良好,但无法有效识别潜在的安全漏洞。
核心思路:SPLASH的核心思路是引入审计压力这一新度量,通过比较生成程序在安全审查和风格审查下的日志概率,来选择安全的代码并定位脆弱的语句。
技术框架:SPLASH的整体架构包括审计压力计算模块、生成程序评估模块和脆弱语句定位模块。首先计算生成程序的审计压力,然后根据压力值选择安全程序,最后定位脆弱语句。
关键创新:SPLASH的主要创新在于引入审计压力这一度量,能够在无需模型训练和特定规则的情况下有效识别安全漏洞,这与现有方法的依赖性形成鲜明对比。
关键设计:在技术细节上,SPLASH使用了基于竞争编辑的概率模型来计算审计压力,并通过聚合到语句和程序层面来提高准确性。
🖼️ 关键图片
📊 实验亮点
在对63,684个程序的实验中,SPLASH在74%的情况下成功选择了安全代码,并在58%的不安全程序中将脆弱语句置于首位,表现优于前沿的LLM评判者,显示出其在安全代码检测中的显著优势。
🎯 应用场景
该研究的潜在应用领域包括软件安全性评估、自动化代码审查和生成代码的安全性验证。通过有效检测和定位安全幻觉,SPLASH能够帮助开发者提高生成代码的安全性,降低潜在的安全风险,具有重要的实际价值和未来影响。
📄 摘要(原文)
Code generated by large language models often passes every functional test while remaining insecure. These security hallucinations are common, written with high confidence, and repeated across samples, so neither the generator's own uncertainty nor static analyzers reliably catch them. We introduce SPLASH, which is guided by a new measure called audit pressure. It contrasts teacher-forced log-probabilities for the generated program under a security review and a style review. Aggregated to statements and programs, and grounded in a probabilistic model of competing edits, audit pressure allows SPLASH to choose the secure program among a model's candidate programs and locate the vulnerable statement, with no model training, CWE-specific rules, or internal access to the generating model. On 63,684 programs generated by 12 models for 899 tasks, SPLASH picks secure code in 74% of cases, places the vulnerable statement first in 58% of insecure programs, and chooses better than a frontier LLM judge.