← 最新论文
💻 computer science

Pre-Model Representation Failures in GNN-Based Smart Contract Vulnerability Detection

本文对基于图神经网络(GNN)的智能合约漏洞检测器进行了失效分析,揭示了图表示层中的关键缺陷——例如硬编码的变量白名单、结构歧义以及语义节点的缺失——会导致相同的代码生成不同的图,并使具有完全可利用性的合约被误分类为安全,从而导致后续的模型改进失效。

原作者: Birindwa Prisca Hondi, Chinoso Philip Nwishienyi, Charity Wanja Mwaura, Alia Teto, Jema David Ndibwile

发布于 2026-08-18
📖 1 分钟阅读☕ 轻松阅读

原作者: Birindwa Prisca Hondi, Chinoso Philip Nwishienyi, Charity Wanja Mwaura, Alia Teto, Jema David Ndibwile

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

在去中心化金融的数字世界中,资金通过被称为智能合约的自执行计算机程序进行流动。这些程序存在于区块链上——一种记录每笔交易的公共账本——旨在无需人类中介的情况下处理真实资产。由于这些合约管理着价值不菲的资金,一个隐藏的缺陷就可能导致即时且不可逆转的窃取。为了防范此类风险,研究人员开发了能够扫描代码以在漏洞被利用前发现弱点的自动化系统。一种流行的做法是使用一种被称为图神经网络(Graph Neural Network)的人工智能技术。要理解其工作原理,可以将一段复杂的代码想象成一张由连接的点和线组成的地图,其中点代表程序的各个部分,而线则展示它们如何相互作用。随后,计算机通过研究这张地图来判断该程序是安全的还是危险的。人们希望,通过观察代码的结构而非仅仅逐行阅读代码,这些系统能够发现人类可能会忽略的细微陷阱。

来自卡内基梅隆大学非洲分校的一个研究小组决定测试这种方法的根基。他们专注于一个名为 GNNSCVulDetector 的特定系统,该系统被广泛用于发现一种被称为“重入”(reentrancy)的危险缺陷。这种缺陷发生在程序在更新自身记录之前就将资金发送出去时,从而允许窃贼诱骗系统支付超出应付金额的款项。研究人员并没有测试计算机的学习能力或思考速度,而是调查了在计算机看到数据之前发生的步骤:将源代码转化为地图的过程。他们想知道这张地图是否准确地反映了它本应代表的代码。他们的调查揭示了一个惊人的事实:制图过程本身存在缺陷,这种缺陷是任何训练都无法修复的。

他们发现的第一个问题是,该系统极易被代码的简单改动所欺骗。研究人员拿取了一个已知的存在漏洞的合约,仅仅是重命名了它的组成部分,包括更改合约本身的名称、函数名称以及持有资金的变量名称。他们还添加了一些毫无作用的代码行,仅为了让文件显得杂乱。在正常情况下,这些改动会使程序看起来有所不同,即便其危险逻辑保持不变。然而,当研究人员将原始版本和修改后的版本同时输入系统时,计算机生成的地图在字节级别上完全一致。系统无法分辨两者的区别。这意味着攻击者只需通过重命名变量,就能绕过安全检查,而无需了解检测器的工作原理或其训练数据。该系统对代码的实际结构视而不见,看到的只是僵化的名称模式。

通过深入挖掘,研究人员发现了原因所在。构建地图的工具并不像人类程序员那样阅读并理解代码。相反,它依赖于一个硬编码的、包含 47 个特定变量名称的列表,只有这些名称是被允许识别的。如果代码使用了列表中的名称,工具会在地图上创建一个节点;如果名称不在列表中,工具会忽略它或创建一个通用的占位符。研究人员通过创建四个具有完全相同危险缺陷但使用不同资金变量名称的合约进行了测试。当变量名称与列表完美匹配时,地图看起来很正常;当名称稍有不同时,地图会发生混乱的变化;当名称是列表中完全没有的新名称时,地图会发生退化,丢失重要的细节。在最坏的情况下,当没有任何名称匹配时,工具会根据其自身的内部规则伪造出原代码中并不存在的地图部分,从而创造出一个基于虚无结构的地图。这意味着地图的质量完全取决于程序员是否恰好使用了那 47 个获准使用的名称之一。

第二个主要失败涉及地图中代表攻击者的特定部分。在系统的设计中,有一个专门用于代表外部调用者(即触发攻击的外部实体)的节点。对于重入缺陷的存在,这个外部调用者必须出现在地图中。研究人员发现,对于文献中最著名的一个漏洞合约案例,这个节点完全缺失了。尽管代码清晰地展示了这一过程,但工具未能绘制出攻击者与漏洞函数之间的连接。这并非地图设计的局限性,因为训练数据中的其他合约都显示了这种连接。这是工具在决定如何构建地图时出现的不一致性。由于连接缺失,计算机无法识别出攻击模式,即便该模式就在代码之中。

为了证明这个缺失的部分确实导致了系统的失败,研究人员构建了一个包含完全可利用的重入缺陷的极简定制合约。他们使用了一个已知在获准列表上的变量名称,以确保第一个关于重命名的问题不会产生干扰。他们将这个合约输入系统。结果是一个明显的误判:系统将这个危险的合约标记为安全。原因非常直接:由于工具未能绘制出外部调用者与漏洞函数之间的连接,地图缺乏识别威胁所需的关键信号。计算机并非在计算上出错,它只是在处理一个不完整的画面。在计算机开始思考之前,做出正确决策所需的信息就已经被丢弃了。

这些发现表明,以往研究中报告的高准确率数据具有误导性,因为这些数据是在未能暴露这些缺陷的条件下测量的。这些系统之所以表现良好,是因为测试数据恰好使用了工具可以识别的特定名称和模式。在现实世界中,当代码使用不同的命名规范和结构时,这些系统可能会发生无声的失效。研究人员强调,改进人工智能模型本身并不能解决这个问题。再多的训练或数据也无法修复一张从一开始就被画错的地图。解决方案在于改变代码转化为地图的方式,从简单的名称匹配转向对代码实际行为的深度理解。在基础问题得到解决之前,构建在其之上的安全系统仍然会对它们本应防范的攻击保持脆弱。

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

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

试用 Digest →