HomeAIARQ 框架将 CodeQL 漏洞检测的真实阳性率提升了 119.8%

ARQ 框架将 CodeQL 漏洞检测的真实阳性率提升了 119.8%

一个名为 ARQ 的新研究框架正在解决软件安全中最棘手的问题之一:让自动化代码扫描器真正标记出正确的漏洞。该工作由王春怡撰写,并于 2026 年 8 月发表在 arXiv 上,针对的是广泛用于在 C 和 C++ 代码中发现缺陷CodeQL 漏洞检测方法,并表明当今的检测查询远没有开发者想象得那么可靠。

关键要点

  • ARQ 利用合成程序的执行证据自动优化 CodeQL C/C++ 查询,而无需标注数据集或特定漏洞模板。
  • 使用三种商用大模型——GPT-5.4、Claude-Sonnet-4.6 和 Gemini-3.5-flash——对 12 条官方 CodeQL 查询进行了优化。
  • 优化后的查询在保持精度不低于 98.0% 的前提下,最多多检测出 119.8% 的真正阳性。
  • ARQ 解决了官方 CodeQL 仓库中三个长期未决的 GitHub 问题,这些问题最长已悬而未决达 27 个月。
  • 优化后的查询在实际使用的 libpng 和 zlib 库中发现了两个此前未知的漏洞。

当前 C/C++ 漏洞检测中 CodeQL 查询的局限性

静态分析器已经成为软件安全工作流中的标准组件,而 CodeQL 也是用于扫描 C/C++ 代码库最广泛采用的工具之一。这些工具通过将已知的易受攻击代码模式编码为检测查询,然后将这些模式与程序源代码进行匹配来工作。这种方法在理论上听起来很简洁,但在实践中却存在明显摩擦。

现有查询中误报与漏报的普遍存在

现有的 CodeQL 查询仍然会产生误报,即错误地将安全代码标记为存在漏洞,以及漏报,即完全错过真正的安全缺陷。这两种结果都代价不菲。误报会浪费开发者时间去追查并不存在的漏洞,而漏报则会让真实漏洞流入生产环境。这正是 ARQ 旨在弥合的缺口,也解释了为何CodeQL 漏洞检测仍然是一个活跃的研究领域,而不是一个已经被彻底解决的问题。

ARQ 框架:基于执行证据的自动化查询优化

ARQ 是一个智能体框架,它通过利用从合成程序中提取的执行证据,自动改进 C/C++ CodeQL 查询,而不是依赖人工标注示例或手工构建的模板。这一区别非常重要,因为此前大多数优化技术都依赖精心整理的数据集或提交历史,而这些都代价高昂且维护缓慢。

通过合成程序执行识别查询弱点的机制

ARQ 背后的核心洞见简单却强大:当合成程序的实际执行结果与查询的预测不一致时,就暴露了该查询的弱点。如果程序确实存在漏洞,但查询保持沉默,这就暴露了一个漏报。如果程序实际上是安全的,但查询仍然将其标记出来,这就暴露了一个误报。这为 ARQ 提供了一个内建的、自生成的“真值”来评估查询质量,而无需外部标注。

无需标注数据或特定漏洞模板的基于大模型的迭代优化循环

一旦暴露出弱点,ARQ 就会运行一个基于大语言模型的迭代循环,利用这些执行不一致作为证据来修复查询。这正是将ARQ 查询优化与早期方法区分开来的关键所在。它不依赖标注数据集,不需要挖掘提交历史,也没有将特定漏洞模板硬编码进系统。整个优化过程是自洽的,完全由合成代码中预测行为与观测行为之间的不匹配所驱动。

ARQ 优化对 CodeQL 查询的评估与影响

任何优化框架的现实检验标准在于它是否真正改善了检测结果,而 ARQ 的实验结果表明,它在这方面的提升幅度相当可观。研究人员优化了 12 条官方 CodeQL 查询,并使用两个成熟的 C/C++ 漏洞数据集对改进效果进行了基准测试,使结果在现有的C/C++ 静态分析研究中具有有意义的参照。

使用 GPT-5.4、Claude-Sonnet-4.6 和 Gemini-3.5-flash 的优化结果

ARQ 使用了三种商用大语言模型进行测试:GPT-5.4、Claude-Sonnet-4.6 和 Gemini-3.5-flash。每个模型都独立驱动迭代优化循环,使研究人员能够比较不同大模型在同一底层任务上的表现。这种多模型设计增强了一个结论的可信度:性能提升来自 ARQ 方法本身,而不是某个单一模型的偶然特性。

在 Juliet v1.3 和 FormAI v2 基准数据集上的性能提升

研究将 ARQ 优化后的查询与原始 CodeQL 查询在 Juliet v1.3 和 FormAI v2 数据集上进行了对比,这两个数据集是评估漏洞检测工具的公认基准。优化后的查询检测到的真正阳性数量显著增加,最高提升达 119.8%,同时在整个过程中保持至少 98.0% 的精度。这一组合颇为引人注目:通过放宽检测条件来捕获更多真正阳性相对容易,但这样通常会导致误报增加、精度下降。ARQ 的结果则呈现相反的模式,这意味着该框架并非只是撒下更大的一张网,而是在“打磨”这张网本身。

解决长期 GitHub 问题并在 libpng 和 zlib 中发现新漏洞

除了基准测试数据之外,ARQ 还带来了切实的现实世界修复。该框架解决了官方 CodeQL 查询仓库中三个长期未解决的 GitHub 问题,这些问题最长已开放 27 个月而未获修复。除此之外,优化后的查询还在 libpng 和 zlib 这两个广泛使用的真实世界库中暴露出两个此前未被发现的漏洞。这是一个重要信号:这不仅仅是一个在排行榜上刷出更好数字的学术练习,而是一个能够在无数应用所依赖的软件中挖掘出真实、此前未知安全缺陷的工具。

这对软件安全意味着什么

其影响远不止于 CodeQL 本身。误报和漏报是整个静态分析领域的长期顽疾,而不仅仅是某一个工具的问题,任何能够在不依赖标注数据或手工模板的前提下同时减少这两类问题的方法,都有潜力影响未来基于大模型的查询改进工具的构建方式。对于依赖自动化扫描来保护 C/C++ 代码库的组织而言,一个在将真正阳性检测率提升的同时仍能将精度保持在 98% 以上的框架,可能意味着更少的工程时间被浪费在虚假警报上,也意味着更少的真实漏洞悄然溜过检测。

在 libpng 和 zlib 中发现新漏洞也强调了一个重要事实:即便是成熟且经过大量审查的开源库,仍然可能潜藏未被发现的缺陷,而经过更好优化的检测查询可以在现有工具无能为力的地方将其挖掘出来。

常见问题

ARQ 旨在解决 C/C++ 漏洞检测中的什么问题?

ARQ 通过利用合成程序的执行证据自动优化现有 CodeQL 查询,从而解决其中的误报和漏报问题。

ARQ 如何识别 CodeQL 查询中的弱点?

每当合成程序的执行结果与查询的判定不一致时,ARQ 就会检测到查询的弱点:这种不匹配表明存在误报或漏报。

大语言模型在 ARQ 中扮演什么角色?

ARQ 使用基于大语言模型的迭代优化循环,根据执行反馈来修复查询,而无需标注数据或特定漏洞模板。

ARQ 在优化 CodeQL 查询方面展现了哪些具体改进?

ARQ 优化后的 CodeQL 查询在保持至少 98.0% 精度的前提下,将真正阳性检测提高了最多 119.8%,修复了三个长期存在的 GitHub 问题,并在真实世界库中发现了两个新漏洞。

{“@context”:”https://schema.org”,”@type”:”FAQPage”,”mainEntity”:[{“@type”:”Question”,”name”:”ARQ 旨在解决 C/C++ 漏洞检测中的什么问题?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”ARQ 通过利用合成程序的执行证据自动优化现有 CodeQL 查询,从而解决其中的误报和漏报问题。”}},{“@type”:”Question”,”name”:”ARQ 如何识别 CodeQL 查询中的弱点?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”每当合成程序的执行结果与查询的判定不一致时,ARQ 就会检测到查询的弱点:这种不匹配表明存在误报或漏报。”}},{“@type”:”Question”,”name”:”大语言模型在 ARQ 中扮演什么角色?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”ARQ 使用基于大语言模型的迭代优化循环,根据执行反馈来修复查询,而无需标注数据或特定漏洞模板。”}},{“@type”:”Question”,”name”:”ARQ 在优化 CodeQL 查询方面展现了哪些具体改进?”,”acceptedAnswer”:{“@type”:”Answer”,”text”:”ARQ 优化后的 CodeQL 查询在保持至少 98.0% 精度的前提下,将真正阳性检测提高了最多 119.8%,修复了三个长期存在的 GitHub 问题,并在真实世界库中发现了两个新漏洞。”}}]}

本文在人工智能的协助下完成,并由编辑团队进行审核。

RELATED ARTICLES

Stay updated on all the news about cryptocurrencies and the entire world of blockchain.

Featured video

LATEST