Page 363 - 《软件学报》2026年第1期
P. 363
360 软件学报 2026 年第 37 卷第 1 期
CoT) 提示, 以模拟专业审计员的审计流程, 并在 SolidiFI-benchmark 数据集 [120] 上评估了 7 种常见漏洞类型的检测
效果. 实验结果表明, 虽然该方法的精确率高达 96.6%, 但召回率仅为 37.8%, 显示其在检测过程中存在遗漏漏洞
的风险. 这种误差源于 LLM 的生成机制可能过度依赖训练数据的统计模式, 而非对代码逻辑的深层理解. 其次, 对
训练数据的依赖性导致 LLM 在面对新型或罕见漏洞时表现不佳. 若训练数据缺乏某些漏洞类型, 模型的泛化能力
将显著下降.
LLM 能力扩展方法
任务
基座模型 生成器 判别器
漏洞生成 漏洞检测
结果
LLM-based agents 生成对抗
智能合约 Input
prompt: 请你考虑一 识别漏洞
下 withdraw 函数
任务数据
模型微调 prompt: 请你结合上
下文考虑 withdraw 函数
预训练模型 调优技术
Output
微调 思维链
图 7 LLM 作为主要检测引擎的方法示意图
为检测逻辑漏洞, Ma 等人 [121] 提出了一种结合微调和基于 LLM 的代理的通用框架 TrustLLM. 该方法采用两
阶段微调策略, 首先调整检测器模型以做出决策, 然后调整推理器模型以生成漏洞原因. 随后引入两个基于 LLM
的代理——Ranker 和 Critic, 根据微调后的 Reasoner 模型输出, 反复选择和辩论最合适的漏洞原因. Soud 等人 [122]
通过对代码进行切片、令牌化和语法分析, 将其转换为适合模型处理的格式, 并基于 RoBERTa [123] 的 CodeBERTa [124]
模型进行分析. CodeBERTa 是一种专为处理编程语言语义关系而设计的变体 Transformer 模型, 具有 6 层结构和
84M 参数. 该模型能够通过深度上下文理解有效捕捉代码中的漏洞特征, 并在包含 9 种逻辑漏洞的大型数据集上
进行训练, 实验结果表明 Sóley 在漏洞检测方面表现优异.
3.1.4.2 LLM 与传统方法相结合
LLM 与传统方法相结合的应用, 通过将 LLM 的上下文理解、生成和推理能力融入传统漏洞检测技术, 增强
了在处理复杂语义、逻辑推断和测试生成方面的效率与准确性, 从而优化了现有的检测流程.
在静态分析方面, 传统的形式化验证通常需要专家手动编写不变式、前置条件、后置条件和规则等属性, 这
一过程耗时且易出错. Liu 等人 [125] 提出了一种新的方法 PropertyGPT, 旨在自动生成形式化属性, 以简化和加速形
式化验证过程. 该方法利用如 GPT-4 的上下文学习能力, 将现有由人类编写的属性 (如来自 Certora 审计报告的属
性) 转换并自动生成适用于未知代码的自定义属性. 整体流程具体如图 8 所示, 通过将现有属性嵌入向量数据库,
并检索参考属性辅助上下文学习, 生成新的属性. 在生成属性后, 方法通过编译和静态分析反馈对这些属性进行迭
代修正, 确保其可编译、适用且可在运行时验证. Wang 等人 [54] 提出了一种精确且快速的智能合约不变性推断框
架 SMARTINV, 设计了新的微调和提示策略思维树 (tree of thought, ToT) 以应用于基础模型, 能够跨越智能合约
的多个模态进行推理, 并生成不变性属性, 然后通过检测生成的不变性属性是否被违反来定位潜在漏洞. 此外,
Sun 等人 [81] 结合了 GPT 与静态分析, 提出了 GPTScan 以检测智能合约中的逻辑漏洞. 该方法首先对智能合约代
码进行静态分析, 以确定可能涉及逻辑漏洞的函数, 然后通过多维过滤技术, 如调用路径、变量依赖等多个维度,

