标题:Agent4Vul:面向智能合约漏洞检测的多模态大语言模型智能体

Journal Tags: ㅤㅤ ㅤㅤIF 7.6 ㅤㅤ ㅤㅤ ㅤSCI Q1 ㅤㅤ ㅤㅤ ㅤㅤ ㅤㅤ ㅤㅤ ㅤㅤCCF A ㅤㅤ ㅤㅤ ㅤㅤ ㅤ中科院 工程技术2区 ㅤㅤ ㅤ

Journal: Science China Information Sciences

一、摘要

在Web 3.0生态系统下,智能合约漏洞已成为区块链系统安全的一个重大威胁。根据近期研究,大型语言模型(LLMs)在智能合约安全审计方面已展现出巨大潜力,但在有效漏洞检测方面仍能力不足。因此,如何利用LLMs的能力来有效提升智能合约漏洞检测的性能,仍然是一个关键挑战。在本文中,我们提出了Agent4Vul,一个利用多模态LLM智能体来增强智能合约漏洞检测的新型框架。具体而言,我们设计了两个基于LLM的智能体:Commentator(注释器)和Vectorizer(向量化器)。Commentator智能体为源代码生成注释,而Vectorizer智能体则将内容转换为向量表示。随后,我们开发了一个包含语义分支和图分支的多模态学习架构,该架构共同整合了来自源代码、生成注释以及字节码控制流图(CFG)的特征。我们在一个大规模的真实智能合约数据集上对Agent4Vul进行了实证评估,并与19种最先进的基线方法进行了比较。结果表明,Agent4Vul实现了:(1)在真实攻击中四种常见漏洞类型的检测上,性能全面优于所有基线方法;(2)比现有人工智能(AI)方法的F1分数高出3.61%至16.32%,甚至超越了GPT-4o和o1等先进的LLM。这项工作为LLM驱动的智能合约安全奠定了坚实的基础,并为LLMs在软件工程领域的创新应用开辟了新方向。

二、背景

基于规则的方法使用预设的规则和模式来查找智能合约中可能的漏洞,主要通过符号执行技术和静态分析实现。然而,由于它们通常依赖于既定规则和专家知识,因此在应对复杂的、未发现的漏洞时成功率较低。

基于深度学习的方法通过从大规模数据集中学习特征来识别漏洞,从而克服了基于规则系统的缺点。

随着LLMs在众多不同领域的广泛应用,一系列基于LLM的技术被开发出来,它们利用生成模型(如GPT-4)的自然语言理解和推理能力来进行漏洞发现。然而,其直接应用于检测任务的效果仍不理想,F1分数仅为41.1%。如何将模型的代码理解能力转化为实际的漏洞识别能力是其中的难点。——尽管LLMs拥有强大的代码理解能力,但在将这些能力有效转化为稳健的漏洞检测框架方面,仍然存在显著差距。

为解决现有方法的局限性,Agent4Vul将LLMs的代码理解能力与多模态学习技术相结合,以有效检测具有多样化特征的漏洞。

贡献度:
  • 一个稳健的基于多模态LLM智能体的检测框架。 提出了Agent4Vul,这是一个基于多模态LLM智能体的新型框架,旨在解决现有基于LLM方法的性能瓶颈及适应多样化漏洞类型的挑战。通过整合由LLM驱动的代码理解和多模态学习提取的语义与图结构信息,Agent4Vul实现了对各种类别智能合约漏洞的全面且精准检测。

  • 由双智能体引导的漏洞表征。 Agent4Vul引入了两个基于LLM的智能体,将LLM的代码理解能力转化为可操作的漏洞表征。Commentator智能体利用包含五种不同提示类型的灵活提示策略库(FPSL),在生成注释的推理过程中引导识别潜在漏洞;生成的注释与源代码随后由语义分支中的Vectorizer智能体处理,提取更丰富且具代表性的特征,从而提升漏洞检测效果。

  • 框架实现与全面评估。 实现了Agent4Vul并在包含超过4万个真实智能合约的大规模数据集上进行了广泛实验。结果表明,Agent4Vul优于19种最先进方法,在F1分数上取得显著提升。与基于规则、深度学习及基于LLM的方法相比,Agent4Vul在准确性和效率方面均表现出明显优势,彰显了其在智能合约漏洞检测中的卓越性能。

三、内容

本文提出了Agent4Vul,一种利用基于多模态大型语言模型(LLM)智能体的先进智能合约漏洞检测框架。该框架引入了两个智能体:Commentator(注释器)和Vectorizer(向量化器),它们旨在处理智能合约特征的多模态性。Commentator智能体为智能合约源代码生成详细注释,增强对代码的语义理解;而Vectorizer智能体则将内容(包括注释和源代码)转换为高维向量表示,以提取关键特征。基于这两个智能体,该框架集成了两个特征处理分支:语义分支图分支,它们共同实现了全面的多模态漏洞检测。

  • 在语义分支中(3.1.2),Commentator智能体采用五种定制的基于提示的策略来生成注释,将LLMs深度的代码理解能力转化为可用于漏洞检测的可操作洞察。随后,Vectorizer智能体将注释和源代码编码为向量表示,从而有助于从智能合约中提取关键的语义特征。

  • 在图分支中(3.1.3),Vectorizer智能体处理智能合约字节码的控制流图(CFG),将节点信息嵌入到高维表示中。然后,这些嵌入表示会通过一个图注意力网络(GAT),利用消息传递机制有效捕获智能合约的结构信息。

  • 最后(3.1.4),来自语义分支和图分支的特征通过多模态特征融合策略进行整合,并输入到一个分类模型中,从而实现全面且稳健的漏洞检测。该方法充分利用了源代码的语义信息和字节码的结构特征,构建了一个由基于LLM的智能体驱动的多模态协同智能合约漏洞检测框架。

  • 我们进行了广泛的实验来评估Agent4Vul的性能,并将其与19种最先进的(SOTA)漏洞检测方法进行了基准测试。实验使用了一个包含超过40000个真实世界智能合约的大规模数据集[21]。结果表明,Agent4Vul显著优于现有方法,其F1分数实现了从3.61%到16.32%的显著提升。

3.1Agent 4Vul框架

为应对前述挑战,我们提出了一种名为 Agent4Vul 的新方法,该方法利用多模态LLM智能体来识别智能合约中的漏洞。从LLM的视角来看,智能合约漏洞被划分为两个主要分支:语义分支 和 图分支这两个分支随后被进一步发展为检测路径,通过集成智能体和多模态学习来增强漏洞检测能力。

3.1.1Agent4Vul 概览

我们提出了 Agent4Vul,一个用于智能合约漏洞检测的尖端多模态框架,如图2和算法1所示。在本文的语境下,智能合约的“多模态”指的是以下模态的组合:

    • 源代码:用高级编程语言(如 Solidity)编写的原始代码,它定义了智能合约的逻辑和结构。

    • 注释:由 Commentator 智能体 生成的描述性注释。这些注释不仅解释了代码的功能,还对潜在的漏洞进行推理,这使其区别于传统的代码注释。

    • 字节码控制流图:合约字节码的图表示[28],它突出了合约在字节码层面的控制流结构。

Agent4Vul 框架将上述三种模态集成为一个全面的智能合约漏洞检测方法。它采用两个基于LLM的智能体,每个智能体专注于合约的不同方面。

    • Commentator 智能体:负责注释生成。该智能体生成详细、可操作的注释,这些注释不仅解释代码逻辑,还对潜在漏洞进行推理。它使用一个多样化的提示策略库 来引导LLM,使其生成针对漏洞检测定制的、富有洞察力的注释。

    • Vectorizer 智能体:负责向量化。该智能体将多模态信息(源代码、注释和字节码)转换为高维向量,以捕捉关键的语义特征。它采用思维链(CoT)推理方法,逐步处理输入,确保生成有意义的特征表示,从而实现有效的漏洞检测。

Agent4Vul 框架的结构分为两个主要分支,每个分支专注于智能合约数据的不同模态。

    • 语义分支:该分支的主要任务是处理源代码注释,以提取对漏洞检测至关重要的语义特征。此分支将 Commentator 智能体 的输出与源代码相结合,并利用 Vectorizer 智能体 生成能够捕捉底层漏洞指示性语义模式的特征向量。

    • 图分支:该分支处理智能合约的字节码控制流图。通过将控制流结构嵌入到高维向量中,该分支旨在捕捉基于图的特征,这些特征反映了字节码层面的执行路径和潜在漏洞。Vectorizer 智能体 在此过程中扮演关键角色,它将CFG数据转换为有意义的表示形式,随后对其进行分析以检测合约结构中的漏洞。

    • 特征融合与漏洞检测:这两个分支协同工作,为智能合约漏洞检测提供了一个强大的框架,它结合了来自高级代码和注释的洞察,以及对字节码的低层级图分析。

细节如下-----------------------------------------------------------------------------------------------------------------

3.1.2语义分支

语义分支:该分支的主要任务是处理源代码注释,以提取对漏洞检测至关重要的语义特征。此分支将 Commentator 智能体 的输出与源代码相结合,并利用 Vectorizer 智能体 生成能够捕捉底层漏洞指示性语义模式的特征向量。——为提取智能合约的语义特征,我们开发了语义分支,如图2中蓝色边框区域所示。Commentator 智能体 是该分支的基石,它为合约代码生成详细的注释,并构建智能合约的源代码和注释信息以供进一步分析。为此,我们为 Commentator 智能体 设计了一个灵活提示策略库,如图3所示。该库包含五种精心设计的提示策略,用以引导LLM逐步推理代码并生成高质量注释。这些策略概述如下。

    • 提示策略1:简单描述。此策略提供了一种直接的注释生成方法,指示LLM用简单、简洁的功能描述来为每一行代码添加注释。这为生成人类可读的解释提供了一个基线。

    • 提示策略2:详细描述。此策略强调更细粒度的分析,要求LLM突出变量使用、函数定义以及代码内部执行的具体操作。注释内容详尽,并与相应代码行精确对齐,从而保持源代码结构的完整性。

    • 提示策略3:角色扮演。此策略为LLM分配一个具有特定目标和约束的角色,鼓励其表现得像一位智能合约专家。通过模拟专业评论员的推理工作流,LLM能够生成技术上准确且上下文相关的注释。

    • 提示策略4:思维链。此策略采用思维链范式,指示LLM在生成注释的同时展示其推理过程。通过系统性的分析、推理和验证,智能体生成的注释不仅描述了功能,还提供了对代码逻辑和目的的深入洞察。

    • 提示策略5:漏洞定制的思维链。受文献[29]的启发,此策略在思维链范式的基础上,增加了对特定漏洞的关注。例如,在检测重入攻击时,提示会突出显示余额变量和call.value使用等关键元素。用户还可以根据特定的规则或感兴趣的漏洞进一步定制CoT提示,以使智能体的输出满足检测需求。

FPSL中的五种基于提示的策略遵循系统性的方法,旨在可解释性、细粒度、上下文相关性和漏洞特异性推理之间取得平衡。策略1和2通过分层精炼描述机制确保注释结构。策略3引入角色约束以增强上下文建模能力。策略4和5则发展推理链并聚焦于漏洞特征。FPSL的设计旨在逐步提升语义信息提取的能力,从基础的代码理解过渡到具备漏洞感知的推理,同时保持方法论的适应性。通过FPSL,Commentator 智能体能够有效地对智能合约进行推理,将LLM的代码理解能力转化为专注于漏洞的洞察。这使得该智能体能够在语义层面捕捉到指示漏洞的特征,为语义分支内检测性能的提升奠定了基础。(FPSL的设计理念与作用

为了有效地将源代码和注释文本转换为高质量的向量表示,以供后续的漏洞检测使用,Vectorizer 智能体 采用了思维链提示范式,以实现逐步推理的过程。如图4所示,CoT提示经过专门设计,用于引导LLM从源代码及其相关注释中生成语义丰富的向量表示。该过程包含以下步骤。Vectorizer智能体的CoT向量化流程:

    • (1) 角色定义与任务描述:Vectorizer 智能体被定义为一个专门负责语义嵌入的实体,其任务是将智能合约的源代码和注释文本转换为高维向量表示。这些向量需要捕捉输入文本的语义和句法特征,同时也要反映出与漏洞检测相关的关键信息。

    • (2) 文本预处理:在向量化步骤之前,源代码和注释文本会经过一个预处理阶段,以标准化输入格式,并消除可能影响嵌入质量的不相关或噪声信息。此预处理包括分词、停用词移除和词干提取。分词将文本分割成有意义的单元(如子词或词元),确保文本在嵌入任务中是标准化的。通过这种系统性的预处理,Vectorizer 智能体确保输入文本已针对后续的嵌入任务进行了优化。

    • (3) 向量化转换:预处理后,Vectorizer 智能体采用一个专为嵌入任务预训练的LLM,将处理过的源代码和注释文本转换为高维向量表示。每个词元都会通过LLM的嵌入层和Transformer架构,以生成具有上下文感知能力的嵌入。这些嵌入随后被聚合,生成两个向量表示:FS 代表源代码的语义特征,FC 代表来自注释文本的辅助解释性特征。

通过采用这种逐步推理的方法,Vectorizer 智能体确保了多模态文本信息被有效地转换为语义丰富的向量表示。这种基于CoT的向量化过程增强了智能体理解输入文本的能力,同时确保生成的嵌入能够全面捕捉与漏洞相关的特征。这为语义分支提供了至关重要的基础,支持高精度的漏洞检测。(CoT向量化流程的优势

3.1.3图分支

图分支:该分支处理智能合约的字节码控制流图。Vectorizer智能体处理智能合约字节码的控制流图(CFG),将节点信息嵌入到高维表示中。然后,这些嵌入表示会通过一个图注意力网络(GAT),利用消息传递机制有效捕获智能合约的结构信息。这些特征反映了字节码层面的执行路径和潜在漏洞。Vectorizer 智能体 在此过程中扮演关键角色,它将CFG数据转换为有意义的表示形式,随后对其进行分析以检测合约结构中的漏洞。——在 Agent4Vul 框架中,图分支旨在捕获字节码控制流图的结构特征,以用于漏洞检测。为构建CFG,我们利用了 BinaryCFGExtractor 工具[21],该工具可以从编译后的字节码中提取出控制流图。该CFG被表示为一个图 G = (V, E, X),其中 V 代表节点集合(表示字节码基本块),E 代表边集合(表示基本块之间的控制流),而 X 代表节点属性(用于捕获基本块级别的信息)。

一旦CFG构建完成,Vectorizer 智能体 便被用来对字节码基本块进行编码。此编码过程与语义分支中概述的步骤相类似,使该智能体能够同时捕获指令级和基本块级的信息。这确保了对字节码中嵌入的语义和结构特征进行全面的表达。

在对字节码基本块进行初步编码后,我们应用图注意力网络来学习CFG的图结构化嵌入。GAT采用注意力机制来聚合来自邻居节点的信息,使其能够有效地对字节码基本块之间的交互以及整个图的拓扑结构进行建模。具体来说,GAT通过使用由注意力分数定义的、来自邻居节点的加权贡献,来迭代地更新每个节点的表示,从而计算出节点嵌入。这一过程增强了模型捕获CFG内部局部和全局结构模式的能力。其注意力系数 αij 由以下公式给出:

其中,⊕ 表示拼接操作,a 是单层多层感知机的权重向量,LeakyReLU 是激活函数。GAT通过关注其邻居节点来计算每个节点的隐藏状态,公式如下:

其中,σ 是一个非线性激活函数,Eij ≠ 0 表示图中节点 i 和 j 之间存在邻居关系,W 是一个权重矩阵。字节码的图语义嵌入 GB 通过以下公式计算得出:

其中,⊙ 表示逐元素乘积(哈达玛积),σ 是激活函数。矩阵 Mⱼ 和偏置向量 bⱼ(下标 j ∈ {1, 2})是可训练的网络参数。|V| 代表节点的数量,P 是一个多层感知机。

图分支的输出是一组图结构化嵌入 GB,这些嵌入既编码了各个字节码基本块的语义属性,也编码了它们之间的结构依赖关系。随后,这些嵌入被用于下游的分类任务,以识别与智能合约字节码中控制流异常和结构缺陷相关的漏洞。

3.1.4特征融合和漏洞检测

特征融合与漏洞检测:这两个分支协同工作,为智能合约漏洞检测提供了一个强大的框架,它结合了来自高级代码和注释的洞察,以及对字节码的低层级图分析。——在通过语义分支和图分支处理后,Agent4Vul 框架会提取出三个关键的特征集:源代码特征 FS、注释特征 FC 和字节码控制流图特征 GB。这些特征捕获了智能合约的互补信息,涵盖了其语义、上下文和结构特征。为了将这些多模态特征整合成一个统一的表示 FMul,我们会根据具体的检测场景,采用以下三种特征融合策略之一。

    • 决策级融合 [30]:每个特征集(FS、FC、GB)都通过独立的、特定于模态的分类器进行处理。这些分类器基于各自的模态生成初步的漏洞预测结果。最终的决策通过聚合这些分类器的输出来做出,这种方式在利用互补信息的同时,确保了每个模态独有的特征得以保留。

    • 特征级融合 [31]:将原始的特征集 FS、FC 和 GB 直接拼接(concatenate)成一个单一的特征向量,使得分类器能够从这个组合输入中直接学习跨模态的关系。

    • 混合级融合 [32]:这是一种结合了决策级和特征级融合的方法。它将来自特定模态分类器的预测结果与融合后的特征表示进行整合,从而同时捕获各模态的独立特征以及跨模态的交互作用。

从所选融合策略中得到的融合特征表示 FMul,随后会被送入一个分类模型中进行最终的漏洞检测。我们采用两种模型之一:一种是擅长处理表格数据的 LightGBM 模型 [33];另一种是用于处理深度多模态关系的全连接层 [34]。在推理阶段,训练好的模型会分析这些融合后的特征,从而有效地预测漏洞。通过利用量身定制的融合策略,Agent4Vul 框架能够在各种智能合约漏洞检测中实现稳健且准确的结果。

3.2评估

在本节中,我们对 Agent4Vul 框架进行了全面的实验评估,围绕以下研究问题(RQ)来考察其有效性和性能表现。

    • RQ1:Agent4Vul 的性能与当前最先进的智能合约漏洞检测方法相比如何?详见第2.2节。

    • RQ2:Agent4Vul 中各个模块对整体性能的贡献如何?详见第2.3节。

    • RQ3:不同的大型语言模型(LLM)选择对框架性能有何影响?详见第2.4节。

    • RQ4:来自 FPSL 的提示策略对框架性能有何影响?详见第2.5节。

    • RQ5:不同的特征融合策略对框架性能有何影响?详见第2.6节。

3.2.1数据集

选用了当前规模最大的公开智能合约漏洞数据集[21],该数据集包含 40,000 个真实世界的智能合约,并针对四种类型的漏洞提供了详细的注释。在这些合约中,有 4290 个被识别存在漏洞:其中 136 个存在委托调用漏洞,1368 个存在整数上溢/下溢漏洞,680 个存在重入漏洞,2242 个存在时间戳依赖漏洞。为进行评估,该数据集被随机划分为 80% 用于训练和 20% 用于测试。每项实验均重复五次,并报告其平均结果。

Commentator(注释器)智能体利用了 GLM-4 [35] 和 Qwen [36] 模型,它们具备先进的自然语言理解与推理能力,能够生成详细且准确的代码注释。Vectorizer(向量化器)智能体则依赖于 Voyage-lite-02-instruct [37] 和 GritLM-7B [38] 模型,这两个模型是专门为特征嵌入而设计的,用以捕获代码的语义信息。特征分类模型 FC 和 LightGBM [33] 基于 PyTorch 框架,使用 Python 语言实现。

所有实验均在一台配备 Intel Core i9 CPU(主频 3200 MHz)、NVIDIA GeForce RTX 4090 GPU 和 64 GB RAM 的计算机上进行。软件环境使用 Ubuntu 20.04 LTS 作为操作系统。对于 FC 层网络,学习率在 {0.5, 0.1, 0.05, 0.01, 0.005, 0.001} 的范围内进行调整。关于 LightGBM 模型的超参数,我们采用逐步调优的方法进行优化。其调整范围及最终确认的最优参数组合如表 1 所示

3.2.2RQ1:Agent4Vul 的性能与当前最先进的智能合约漏洞检测方法相比如何?
    • 首先将 Agent4Vul 与七种基于规则的技术进行比较,结果表明,在所有四种漏洞类型上,Agent4Vul 的表现均显著优于所有现有的基于规则的工具。(与类别最高比较)

    • 将 Agent4Vul 与七种最先进的基于深度学习的方法进行比较,结果表明,在所有四种漏洞类型上,Agent4Vul 的表现均显著优于所有基于深度学习的方法。(与总体最高比较)

    • 与大语言模型方法的对比:将 Agent4Vul 与最新的 LLM(包括 GPT-4o¹)、o1²)、DeepSeek-V3³) 和 DeepSeek-R1⁴))进行了基准测试,尽管这些 LLM 在整数上溢/下溢漏洞上表现较好,但在其他三种漏洞类型上表现相对较弱,相比之下,Agent4Vul 利用多模态 LLM 智能体,有效发挥了 LLM 的推理和语义理解能力,从而将代码理解转化为有效的漏洞检测。

    • AgentVul优越性分析:首先,推理能力的集成通过使 Commentator 智能体生成详细的代码注释,同时 Vectorizer 智能体有效提取有意义的特征,从而增强了漏洞检测效果。其次,多模态学习的应用使得源代码、注释和控制流图等不同数据源能够有效结合,从而全面地展现了合约的行为。最后,先进模型的采用,如 LightGBM,确保了强大的分类能力,从而实现了更准确的漏洞检测。

    • 本文提出的 Agent4Vul 在所有四种漏洞类型上的表现均优于最先进的方法,与现有最佳方法相比,其 F1 分数提升了 3.61% 到 16.32% 不等。

3.2.3RQ2:Agent4Vul 中各个模块对整体性能的贡献如何?

双智能体消融实验:

在 Agent4Vul 中,我们引入了两个基于大语言模型的智能体:Commentator(注释器)和 Vectorizer(向量化器)。为评估这些智能体的有效性,我们对框架的语义分支进行了修改,并设计了如下消融测试:
(1) 移除 Commentator 智能体:智能合约源代码绕过 Commentator 的注释生成步骤,直接由 Vectorizer 进行编码,以获得用于漏洞检测的嵌入特征向量。——移除 Commentator 智能体会导致所有四种漏洞类型的检测准确率均出现下降,其中在整数上溢/下溢漏洞上的降幅最为显著,达到了 18.18%。这表明 Commentator 智能体在将对智能合约代码的理解转化为漏洞检测能力方面扮演着至关重要的角色,从而显著提升了整体性能。
(2) 移除 Vectorizer 智能体:智能合约源代码由 Commentator 进行注释,但绕过 Vectorizer。取而代之的是,使用 word2vec [39] 来生成用于漏洞检测的嵌入特征向量。——在移除 Vectorizer 智能体后,准确率下降了 1.82% 到 27.27% 不等。与 word2vec 相比,利用预训练大语言模型执行嵌入任务的 Vectorizer 智能体能够实现更复杂、更精确的特征表示,从而带来更强的检测性能。
(3) 同时移除两个智能体:Commentator 和 Vectorizer 均被绕过,智能合约源代码直接使用 word2vec 来生成用于漏洞检测的嵌入特征向量。——当两个智能体同时被移除时,所有四种漏洞类型的准确率进一步下降。

AUC 曲线进一步证明,Agent4Vul 展现出了卓越的分类性能,这再次印证了 Commentator 和 Vectorizer 智能体在漏洞检测中的有效性。

多模态特征消融实验:

在 Agent4Vul 中,智能合约的模态包括源代码模态 FS、注释模态 FC 和字节码控制流图模态 GB。为评估多模态特征的有效性,我们设计了每次移除一种模态(即 FS、FC 或 GB)的消融测试:

(1)移除源代码模态 FS:移除源代码模态 FS 后,委托调用、重入和时间戳依赖漏洞的准确率分别下降了 5.00%、3.64% 和 1.43%。对于整数上溢/下溢漏洞,其准确率和 F1 分数保持不变,但 AUC 分数下降了 0.006。这是因为,对于整数上溢/下溢漏洞,由 FC 和 GB 提取的特征质量已经非常高。
(2) 移除注释模态 FC :移除 FC 时,这导致准确率下降了 14.54%,表明 FC 在提取该漏洞类型的关键特征方面起着至关重要的作用,而 FS 贡献的额外信息则微乎其微。(整数上下溢)
(3) 移除字节码控制流图模态 GB:移除 GB 后,委托调用和时间戳依赖漏洞的准确率下降最为显著,分别达到了 12.50% 和 14.28%。

实验结果表明,每一种模态都对 Agent4Vul 的性能有显著贡献,任何一种模态的缺失都会导致整体性能的明显下降。Agent4Vul 中的每一个模块都是不可或缺的。无论是 Commentator 和 Vectorizer 智能体,还是多模态特征,对于 Agent4Vul 的性能都至关重要。

3.2.4RQ3:不同的大型语言模型(LLM)选择对框架性能有何影响?

为了研究不同大语言模型对 Agent4Vul 性能的影响,我们使用两组 LLM 进行了实验。具体而言,注释智能体利用 GLM-4 和 Qwen 模型来实现我们在 FPSL 中设计的 CoT(思维链)提示,并为智能合约生成注释。向量化器智能体则使用 Voyage-lite-02-instruct 和 GritLM-7B 模型,将注释和源代码转换为嵌入向量表示。

    • 注释智能体:GLM-4 vs. Qwen:在 委托调用漏洞上,Qwen 的表现优于 GLM-4,其 F1 分数高出 2.34%。相反,在 溢出/下溢和 时间戳依赖漏洞上,GLM-4 略占优势,F1 分数分别高出 2.45% 和 1.42%。在 重入漏洞上,GLM-4 以 9.71% 的 F1 分数差距显著超越了 Qwen。实验结果表明,与 Qwen 相比,GLM-4 在理解和推理智能合约方面具备更卓越的能力。GLM-4 生成的注释在功能描述、逻辑解释和潜在漏洞识别方面都更为精确。这种优势可能源于 GLM-4 在处理复杂逻辑和条件判断方面的增强能力,使其在检测涉及状态转换和条件跳转的漏洞时表现更佳。相比之下,Qwen 擅长处理直白的文本特征,但在复杂的逻辑推理任务上则有所欠缺。

    • 向量化智能体:Voyage-lite-02-instruct vs. GritLM-7B:在所有四种漏洞类型上,Voyage-lite-02-instruct 在准确率、召回率、精确率和 F1 分数方面均显著优于 GritLM-7B。实验结果表明,Voyage-lite-02-instruct 更擅长捕捉用于智能合约漏洞检测的全面特征表示。从技术上看,Voyage-lite-02-instruct 使用的嵌入向量维度为 1024,而 GritLM-7B 为 4096。更大的向量维度通常意味着更高的计算复杂度和存储需求,这可能会在实际应用中降低性能。Voyage-lite-02-instruct 的较小向量维度使其能够高效地捕捉智能合约中的关键特征,同时保持较低的计算开销和存储需求。这种效率很可能是其在漏洞检测性能上优于 GritLM-7B 的原因。

    不同 LLM 的选择对 Agent4Vul 框架的性能有重大影响。我们的评估表明,GLM-4 和 Voyage-lite-02-instruct 是更有效的模型,它们能显著提升智能合约漏洞检测的整体。

3.2.5RQ4:来自 FPSL 的提示策略对框架性能有何影响?

我们探讨了不同提示策略对四种合约漏洞类型检测性能的影响,其中,漏洞定制的思维链提示集成了针对这四种漏洞类型的核心规则,具体细节如下:(1) 委托调用:重点关注 delegatecall 函数的使用,检查在执行任何委托调用之前 msg.sender 与合约所有者之间的关系。(2) 溢出/下溢:重点关注与余额相关的变量是如何定义和操作的,以及对它们执行的算术运算。(3) 重入:重点关注与余额相关的变量、函数以及 call.value 函数的使用。(4) 时间戳:特别关注 block.timestamp 变量的使用,以确保其被正确解读。在实验中,我们利用 Agent4Vul 语义分支的 FC 特征,并结合 FC 分类器对该特征(FC)进行分类。实验仅聚焦于不同提示策略对生成注释的影响:

根据实验结果,我们发现漏洞定制的 CoT 策略在针对重入漏洞的推理质量上表现更佳。这表明,所设计的漏洞核心规则在注释生成过程中起到了积极作用,有效增强了对重入漏洞的检测效果。然而,对于溢出/下溢、委托调用和时间戳漏洞,漏洞定制的 CoT 策略并未产生最优的推理结果。当提示策略不提供漏洞核心规则时,使用 CoT 策略、简单描述或详细描述反而能生成更高质量的注释。通过对生成的注释进行深入分析,我们观察到,在没有相应漏洞的合约中,大语言模型倾向于做出预判性判断。例如,在没有委托调用漏洞的合约中,注释可能会提到:“如果存在 delegatecall 函数,且 msg.sender 未被授权,将存在安全风险”,这影响了注释的质量,并干扰了漏洞检测。相比之下,使用不包含漏洞核心规则但更具通用性的提示策略,能更好地还原代码的实际语义,从而得出更准确的推理注释。

FPSL 中提示策略的选择,显著影响了注释智能体在不同漏洞类型上的推理和注释生成质量。因此,FPSL 的设计是至关重要的。

3.2.6RQ5:不同的特征融合策略对框架性能有何影响?

  • 如图 8 所示的实验结果表明,在检测委托调用和时间戳漏洞时,特征级融合策略优于决策级和混合级融合策略。其 F1 分数分别达到了 97.45% 和 98.58%。这表明,在特征层面进行融合能够更好地捕获与漏洞检测相关的重要信息,从而提升模型的检测能力。

  • 混合级融合策略在检测溢出/下溢和重入漏洞时表现出优越的性能,说明该策略能有效地将自身特征与其他模态的决策输出相结合,从而提高了推理的准确性。这一结果表明,不同类型的漏洞需要采用不同的融合策略,以最大化特征信息的利用效率。

  • 不同的特征融合策略对 Agent4Vul 的漏洞检测性能有显著影响。因此,有必要选择合适的特征融合策略。

3.3讨论

在 Agent4Vul 框架中,我们目前结合了评估中使用的四种大语言模型各自的最佳性能结果。由于选择不同的 LLM 会显著影响对智能合约中各类漏洞的检测性能,我们未来的工作将致力于进一步挖掘注释智能体和向量化智能体中 LLM 的潜力。我们计划采用集成学习方法,将多个 LLM 关联起来以提升整体检测性能,例如加权投票或堆叠。

在 Agent4Vul 框架中,我们以零样本的方式使用 LLM,并未针对智能合约漏洞检测任务进行微调。我们设计的多模态智能体有效地将 LLM 的代码理解能力转化为漏洞检测能力,从而提升了检测性能。与微调相比,零样本方法更具成本效益,并能节省大量计算资源。尽管微调可以取得良好效果 [26],但它对于参数较少的 LLM 来说存在局限性。对像 GPT-4 这样的 LLM 进行微调可能是有效的,但由于高昂的成本和计算需求,其实现具有挑战性。

3.4结论

在本文中,我们提出了 Agent4Vul,一个将基于大语言模型(LLM)的智能体与多模态学习相结合的新型智能合约漏洞检测框架。我们的方法利用 LLM 的优势,将智能合约的理解能力有效转化为漏洞检测能力。通过在多模态处理的语义分支和图结构分支中引入 注释智能体向量化智能体,我们在检测性能上取得了显著提升。大量的实验结果表明,Agent4Vul 优于 19 种最先进的检测方法,其 F1 分数提升了 3.61% 至 16.32%。这凸显了该框架在不同情境下准确识别漏洞的稳健性和有效性。未来,我们将通过采用集成学习(如加权投票和堆叠)来增强注释智能体和向量化智能体中 LLM 的能力,以提高检测性能。我们也认识到 LLM 的计算开销,尤其是在大规模数据场景下,并计划探索模型蒸馏等权衡方案,以平衡效率与性能。

💡 Innovations

利用LLMs的多模态处理能——将LLMs的代码理解能力与多模态学习技术相结合,以有效检测具有多样化特征的漏洞。

🧩 Shortcomings

LLM开销问题、可以通过采用集成学习(如加权投票和堆叠)来增强注释智能体和向量化智能体中 LLM 的能力,以提高检测性能

🤔 Personal Summary

由于大语言模型快速发展,可以利用生成模型(如GPT-4)的自然语言理解和推理能力来进行漏洞发现。然而,其直接应用于检测任务的效果仍不理想。如何将模型的代码理解能力转化为实际的漏洞识别能力是其中的难点。因此提出了改论文的方法:

将大语言模型应用于两个方面:两个基于LLM的智能体,每个智能体专注于合约的不同方面。Commentator(注释器)和Vectorizer(向量化器),它们旨在处理智能合约特征的多模态性。Commentator智能体为智能合约源代码生成详细注释,增强对代码的语义理解;而Vectorizer智能体则将内容(包括注释和源代码)转换为高维向量表示,以提取关键特征。基于这两个智能体,该框架集成了两个特征处理分支:语义分支图分支,它们共同实现了全面的多模态漏洞检测。

  • 在语义分支中(3.1.2),Commentator智能体采用五种定制的基于提示的策略来生成注释,将LLMs深度的代码理解能力转化为可用于漏洞检测的可操作洞察。随后,Vectorizer智能体将注释和源代码编码为向量表示,从而有助于从智能合约中提取关键的语义特征。

  • 在图分支中(3.1.3),Vectorizer智能体处理智能合约字节码的控制流图(CFG),将节点信息嵌入到高维表示中。然后,这些嵌入表示会通过一个图注意力网络(GAT),利用消息传递机制有效捕获智能合约的结构信息。

  • 最后(3.1.4),来自语义分支和图分支的特征通过多模态特征融合策略进行整合,并输入到一个分类模型中,从而实现全面且稳健的漏洞检测。该方法充分利用了源代码的语义信息和字节码的结构特征,构建了一个由基于LLM的智能体驱动的多模态协同智能合约漏洞检测框架。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐