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  以检测智能合约中的逻辑漏洞. 该方法首先对智能合约代
                 码进行静态分析, 以确定可能涉及逻辑漏洞的函数, 然后通过多维过滤技术, 如调用路径、变量依赖等多个维度,
   358   359   360   361   362   363   364   365   366   367   368