Page 55 - 《软件学报》2026年第6期
P. 55

2374                                                       软件学报  2026  年第  37  卷第  6  期


                 描述语言代码转化为抽象语法树等结构化表示. 随后, Linter 遍历该结构化表示, 通过语法分析、结构匹配和模式
                 识别等手段, 逐一检查代码是否违反了规则库中定义的规则, 这些规则覆盖了从编码风格、设计结构到可综合性
                 等多个维度. 这种基于模式匹配的自动化检查机制, 使得                 Linter 能够高效地识别出常见的编码缺陷和潜在的设计
                 风险, 尽早提升代码质量.
                    然而, Linter 的工作模式导致了高漏报率和高误报率的瓶颈. 首先, 现有静态分析技术存在显著的“设计知识鸿
                 沟”, 这是导致高漏报率的根本原因. 关键的安全规约, 例如信任边界的划分、关键资产的定义以及特定的安全协
                 议状态机等, 通常仅存在于非结构化的自然语言设计文档之中. 传统的                      Linter 无法自动解析和理解这些非结构化
                 的设计知识, 因而其规则库只能包含通用的、与具体设计意图无关的语法或结构模式. 这使得工具无法检测出那
                 些与特定设计语义和安全需求紧密耦合的深层次漏洞, 从而造成了大量危险的安全缺陷被漏报. 其次, 这些工具普
                 遍存在语义理解缺失的问题. 由于           Linter 依赖于浅层的模式匹配, 无法推断代码背后真实的设计意图和功能逻辑.
                 因此, 许多在特定协议或算法上下文中完全正确、安全的设计实现, 会因为其代码结构偶然触发了通用规则而被
                 错误地标记为潜在缺陷. 正如文献          [39] 指出的, 高误报率是当前      Linter 类工具面临的普遍问题. 这种由语义缺失所
                 引致的海量误报, 增加了硬件工程师的人工甄别负担, 并严重削弱了自动化工具在工程实践中的应用价值.
                  1.3   基于大语言模型的代码分析技术
                    近年来, 以大规模预训练模型为代表的大语言模型为解决代码的深层语义理解难题提供了全新的范式, 有望
                 突破传统静态分析技术的瓶颈. 与依赖预设规则进行语法和结构匹配的                        Linter 不同, 大语言模型通过在海量代码
                 和自然语言文本上进行训练, 获得了强大的上下文学习与逻辑推理能力, 使其能够理解代码背后更为复杂的语义
                 和设计意图    [40] . 这一潜力已在众多代码相关任务中得到验证, 在代码生成与补全领域, 研究表明经过微调的                         LLM
                 能够高效生成功能正确且语法规范的             Verilog  代码, 其表现在某些场景下甚至超越了先进的商用模型                [11] , 并且已
                 发展出如   RTLCoder [41] 等在性能和模型轻量化上取得平衡的开源模型, 以及如              ChatCPU [42] 的覆盖敏捷设计与验证
                 的自动化平台. 在更为复杂的自动程序修复任务中, LLM                不仅能够修复简单的函数级错误, 在具备充分的仓库级
                 上下文后, 其修复复杂跨文件漏洞的能力也得到显著增强                  [43] .
                    而在更为关键的硬件安全领域, LLM            的应用已经初见成效       [44] , 现有工作证明了   LLM  能够有效修复     Verilog
                 代码中的安全相关缺陷, 其性能已超越部分最先进的专用硬件漏洞修复工具                          [12] . 进一步地, 研究界正积极探索利
                 用  LLM  进行主动安全缺陷检测与定位. 例如, FLAG         [45]  结合静态分析与   LLM, 通过对比分析原始代码与         LLM  生
                 成代码之间的词法单元及行级差异, 实现了一种无需测试用例的                     RTL  功能及安全缺陷定位方法. 此外, 亦有工作
                 从安全感知的代码生成角度切入, 如           SecV [46] 框架利用从硬件  CWE (common weakness enumeration) 语料库中构建
                 的知识图谱, 引导     LLM  在代码生成阶段即主动规避已知的安全漏洞. 这些研究成果充分表明, LLM                     具备处理和理
                 解  RTL  代码复杂语义的能力, 为其应用于更具挑战性的硬件安全缺陷早期检测任务奠定了坚实的技术可行性基
                 础. 相较于硬件领域, LLM      在软件安全领域的应用则更为深入. 例如, IRIS            框架利用    LLM  自动为静态分析工具
                 CodeQL  推断和生成污点分析规范, 显著提升了后者在真实               Java 项目中的漏洞检出率, 并发现了多个未知漏洞             [47] .
                 同样, LLIFT  通过将  LLM  与静态分析相结合, 增强对       Linux  内核代码的路径分析能力, 成功定位了多个此前未被
                 发现的使用前未初始化缺陷          [15] .
                    但是真实的代码分析任务并非一个简单过程, 而是需要结合规划、工具使用和流程控制的系统性工程                                   [47] . 单
                 一的  LLM  调用本质上是无状态的, 缺乏主动分解任务、与外部工具交互以及根据中间结果动态调整策略的能力.
                 因此, 针对单一大语言模型对于多阶段、多工具协同的复杂任务处理能力不足的问题. 研究界开始将                                LLM  从一个
                 被动的语言模型演进为一个主动的智能体               [47] , 并构建多智能体协同框架     [16] . 基于多智能体的方法论已在硬件领域
                 开始应用. 在   RTL  代码生成任务中, MAGE     [48] 采用多智能体架构, 通过调试机制探索候选代码空间, 提升生成代码
                 的功能正确性. 在多智能体框架下, 不同的            LLM  实例被赋予特定的专家角色, 每个智能体负责解决一个子问题. 这
                 些智能体之间可以相互协作、传递信息, 并调用外部工具来获取和处理数据, 从而模拟一个人类专家团队的复杂
                 决策与工作流程. 通过这种角色分工与协同推理的模式, 能够将一个宏大的审计任务分解为一系列可管理的步骤,
   50   51   52   53   54   55   56   57   58   59   60