Page 65 - 《软件学报》2026年第6期
P. 65
2384 软件学报 2026 年第 37 卷第 6 期
致少量无法被彻底消除的误报. 另外, 结合未检出结果的案例分析, 由于本方法缺乏物理综合层面的知识和推理能
力, 在部分案例上已达到能力瓶颈. 但整体而言, 该知识图谱对于引导中等能力模型、确保框架的普适性而言, 其
价值是不可或缺的, 证明了融入安全设计知识的机制在整体上是成功的.
研究问题 RQ3 的核心是评估深度代码语义分析在精准识别缺陷方面的作用. MARC 中的缺陷验证模块通过
精准的断言生成和验证, 是深度语义理解的关键模块. 从实验结果来看, 当去除缺陷验证模块后, 所有模型都表现
出一致的性能下滑. 以 GPT-5 为例, F1 分数从 0.653 5 下降至 0.612 2, 同时漏报率从 0.297 9 显著上升至 0.361 7. 这
一结果清晰地表明, 将自然语言描述的潜在缺陷转化为形式化的断言是深度语义理解的最终体现, 缺乏这一关键
的验证环节将严重削弱整个框架的逻辑推理与确认能力, 从而导致对复杂缺陷的误判与遗漏, 回答了 RQ3 并验证
了深度语义分析的必要性.
4.4 案例分析
4.4.1 通用输入输出模块访问控制边界绕过缺陷
本缺陷位于 HACK@DATE 2025 数据集的通用输入输出 (general-purpose input/output, gpio) 模块的核心功能
子模块中, 该子模块负责处理寄存器的写请求并更新 gpio 的输出状态. 缺陷具体存在于负责更新输出的使能寄存
器 cio_gpio_en_q 的一个时序逻辑块中, 由于该逻辑块内的一个用于处理低 16 位掩码写操作 (MASKED_OE_
LOWER) 的条件分支逻辑存在错误, 导致了控制边界绕过缺陷. 根据设计规约, 该操作本应只对输出使能信号的
低 16 位进行掩码更新, 但代码实现却错误地对整个 32 位总线执行了赋值操作. 此漏洞在硬件安全分类中归属于
CWE-1262, 即寄存器接口访问控制不当. 该缺陷导致对 MASKED_OE_LOWER 寄存器的越权写操作影响了本应
隔离的高 16 位输出使能状态. 攻击者仅需构造一次对 MASKED_OE_LOWER 寄存器的合法写操作, 即可在修改
低 16 位 gpio 使能状态的同时, 非法控制高 16 位的 gpio 引脚. 这会破坏硬件强制执行的引脚隔离机制, 允许低权
限实体非法获取高位引脚的控制权, 构成控制边界绕过安全缺陷.
该缺陷的检出过程充分体现了 MARC 的设计优势. 首先, 文档分析智能体利用 RAG 技术解析非结构化设计
文档, 从寄存器映射表中提取出关键设计规约, 即 MASKED_OE_LOWER 寄存器的预期行为是其写操作应仅影响
使能信号的低 16 位, 并将此知识整合至模块安全设计规范图谱, 从而克服了传统工具因知识鸿沟导致的漏报问
题. 在此基础上, 缺陷检测智能体依据该图谱提供的上下文, 对 RTL 源码执行上下文语义感知的代码审计, 通过数
据流分析追踪到 MASKED_OE_LOWER 的实际行为是错误地对整个 32 位总线执行了赋值. 通过对比预期行为与
实际行为之间的不一致, 该智能体识别出此越权写操作, 解决了传统 Linter 因缺乏设计意图和上下文语义理解而
无法检出的难题. 最后, 缺陷确认智能体进一步将此不一致转化为 SVA 断言, 即 MASKED_OE_LOWER 的写操作
不应影响高 16 位, 从而高置信度地确认此边界绕过缺陷. 最终, MARC 框架通过智能体协同, 实现了从非结构化
文档中自动提取安全规约, 并将其与代码的深层语义实现进行交叉验证的过程, 进而发现了传统自动化工具无法
覆盖的、与设计意图紧密相关的硬件安全缺陷.
4.4.2 密码学安全随机数生成器模块信息泄漏缺陷
本缺陷位于 HACK@DATE 2025 数据集的密码学安全随机数生成器 (cryptographically secure random number
generator, csrng) 模块的 csrng_reg_top 子模块中, 该子模块负责实现总线接口与寄存器文件的访问控制. 缺陷具体
存在于负责处理寄存器读请求的组合逻辑块中, 由于该组合逻辑块内的一个条件选择逻辑未能完整覆盖所有可能
的地址输入情况, 特别是当总线发起一次对未映射地址的读请求时, 由于默认分支不存在, 导致输出信号 reg_rdata_
next 在该条件下无确定赋值. 而根据 SystemVerilog 的硬件综合语义, 这种不完整的赋值将使得综合工具为了保持
信号的稳定性而推断出一个隐式的锁存器. 此漏洞在硬件安全分类中归属于 CWE-1277, 即组合逻辑中的锁存器
使用问题. 该隐式锁存器引入了非预期的状态记忆功能, 当一个合法的敏感寄存器被读取后, 其数据将被该锁存器
捕获. 攻击者仅需在下一个时钟周期对任一未映射的无效地址执行读操作, 便可触发该锁存器, 使其在总线上再次
输出先前锁存的敏感数据, 从而导致 csrng 的内部状态被窃取, 破坏模块安全性, 即引发 CWE-200 敏感信息泄漏
安全缺陷.

