论文
用于漏洞检测的神经符号推理
Neuro-Symbolic Reasoning for Vulnerability Detection
摘要
询问 大语言模型 (LLM) 指针取消引用是否安全,它通常可以产生“是”的合理理由。困难在于流畅的论证并不能成为证明。这个差距正是自动漏洞检测存在的地方:对于源代码中的给定操作,决定是否确实会发生诸如空取消引用、释放后使用或双重释放之类的内存安全缺陷。我们将基于 LLM 的漏洞检测的不可靠性追溯到一种机制,即安全义务的过早履行,并认为补救措施不是更好的提示,而是角色的分离:解释代码的组件一定不能同时是决定满足安全义务的组件。在本文中,我们提出了 LeanGuard,这是一种神经符号框架,它将每个动作分配给为其配备的一侧。在神经方面,LLM 严格充当从抽象语法树(AST)中提取的候选事实的语义过滤器:它修剪虚假事实并保留真实事实,但从不履行义务或自行决定判决。在象征方面,幸存的事实被编译成精益4中的验证模型(形式化证明助手,其内核仅在形式化证明后才接受结论),其中每个危险操作都必须与可证明覆盖其范围的防护相匹配;如果没有这样的警卫,这项义务就会一直存在,而不是被争论不休。由于函数很少会带有完整的上下文,因此这种符号模型必然是部分的:未经证明的义务还不是缺陷。因此,具有证据意识的裁决者会根据每个裁决的质量来权衡象征性裁决和神经裁决。我们在五个 CWE 类上实例化该框架,以了解这种分工可以推进到什么程度。