← 最新论文
💻 computer science

An empirical analysis of vulnerability detection tools for solidity smart contracts

本文在一个新发布的、人工标注的包含 2,182 个 Solidity 智能合约的数据集上,对 20 种自动化漏洞检测工具及一种基于大语言模型的方法进行了实证评估,揭示了各工具在准确性上的显著差异,并证明组合使用特定的一组三种工具可在不到一分钟内检测出高达 76.78% 的漏洞。

原作者: Francesco Salzano, Cosmo Kevin Antenucci, Simone Scalabrino, Giovanni Rosa, Rocco Oliveto, Remo Pareschi

发布于 2026-05-19
📖 1 分钟阅读☕ 轻松阅读

原作者: Francesco Salzano, Cosmo Kevin Antenucci, Simone Scalabrino, Giovanni Rosa, Rocco Oliveto, Remo Pareschi

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象区块链世界是一个巨大的、公开的数字化市场。在这个市场中,人们使用智能合约来运行自动化的商业交易——就像一台自动售货机,当你投入正确数量的硬币时会自动 dispensing 零食,只不过这里涉及的是数百万美元的交易。这些合约是用一种名为Solidity的语言编写的。

问题在于,如果自动售货机的逻辑中存在微小的裂缝,窃贼就可能偷走里面的所有资金。由于这些合约是公开的,且往往持有巨额资金,因此发现这些“裂缝”(漏洞)至关重要。

本文本质上是一份针对人们用来寻找这些裂缝的工具的成绩单。以下是研究人员所做工作的简要说明:

1. “黄金标准”测试集

想象一下,你想测试一组金属探测器在寻找埋藏宝藏方面的能力有多强。你不能仅仅询问金属探测器是否找到了宝藏并相信它们的话;你需要一个测试,其中你确切知道宝藏隐藏的位置。

  • 旧方法:以往的研究通常使用由其他金属探测器“猜测”宝藏位置的测试集。这就像让一个金属探测器寻找硬币,然后让第二个金属探测器来确认。如果第一个探测器错了,第二个探测器可能也会认同这个错误。
  • 新方法:本文的研究人员创建了一个全新的、庞大的测试集。他们选取了2,182 个真实的智能合约,并让三位人类专家逐行手动阅读,以发现其中的漏洞。他们标记了问题所在的确切代码行。这就像老师用红笔批改一叠试卷,标记出具体错误的答案,而不仅仅是说“整份试卷都错了”。

2. 测试“金属探测器”(工具)

研究人员将19 种不同的自动化工具(即“金属探测器”)应用于他们新的人类评分测试集。他们还测试了一个大型语言模型(LLM),这就像是一个阅读了数百万本书籍并试图根据模式猜测漏洞位置的 AI。

结果令人惊讶:

  • 没有单一的英雄:没有任何单一工具能发现所有漏洞。这就像有一位医生非常擅长诊断骨折,却极不擅长发现感染。
  • “算术”问题:一些工具在发现数学错误方面表现出色(就像一台把 2+2 算成 5 的计算器),但在发现其他类型的漏洞方面却毫无用处。
  • “误报”问题:许多工具过于多疑。它们会对安全的代码大喊“危险!”,产生大量误报(假阳性)。这使得开发人员在使用它们时感到厌烦,因为他们必须手动检查每一个警报。
  • AI(ChatGPT)的意外:AI 在简单的、教科书式的漏洞示例(如练习题)上表现尚可。然而,当在现实世界、复杂的合约上测试时,AI 的表现急剧下降。这就像一个在模拟考试中取得满分的学生,却在真实考试中不及格,因为真实的问题更加混乱和复杂。研究人员怀疑,AI 可能“死记硬背”了练习题的答案,因为这些示例在网上非常普遍。

3. “梦之队”解决方案

既然没有单一工具是完美的,研究人员问道:如果我们把它们结合起来会怎样?

他们根据工具擅长的领域对它们进行了分组,并挑选了表现最好的三个工具协同工作:

  1. Conkas(数学专家)
  2. Slither(通才,速度快且擅长多种任务)
  3. Smartcheck(拒绝服务攻击的专家)

结果:仅使用这三个工具组合,他们就发现了76.78%的所有已知漏洞。更棒的是,运行这三个工具平均耗时不到一分钟。这就像拥有一个由三位专家组成的团队,他们互相弥补盲点,解决问题的速度比任何单个人都要快。

4. 为什么“逐行”很重要

研究人员还询问了开发人员他们真正想要什么样的漏洞报告。

  • 文件级别:“这个文件中有一个漏洞。”(太模糊,就像说“房子里有漏水”,却不说具体是哪个房间)。
  • 函数级别:“这个函数中有一个漏洞。”(好一些,但仍然模糊)。
  • 行级别:“第 42 行有一个漏洞。”(完美)。

调查显示,开发人员压倒性地偏好行级别的报告,因为它确切地告诉他们在哪里打补丁。本文提供了此类最大规模的数据集,具有这种特定的、高精度的细节。

总结

  • 问题:用于发现智能合约漏洞的自动化工具往往不可靠,充满误报,或者遗漏真实漏洞。
  • 解决方案:研究人员构建了一个庞大的、经人工验证的“答案键”,以便正确测试这些工具。
  • 发现:AI 工具难以应对现实世界的复杂性,且没有单一工具能解决所有问题。
  • 对策:特定组合的三个现有工具效果最佳,能在最短时间内发现最多的漏洞。
  • 贡献:他们向公众发布了这个庞大的、经人工验证的数据集,以便他人在未来构建更好的工具。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →