如何利用 AI 审计 C/C++/Rust 代码中的敏感数据擦除漏洞

解决安全关键代码中的内存泄露痛点:通过分析源码、LLVM IR 及汇编代码,检测密钥、密码等敏感数据在失效后是否未被正确擦除,或被编译器优化(DSE)误删。

为什么需要这个技能

在处理加密密钥、种子或用户密码时,简单的 memset 往往不足以保证安全。现代编译器在开启优化(如 -O2)时,如果发现内存写入后不再被读取,会将其判定为“死存储(Dead Store)”并直接优化掉。

这意味着即使你在代码里写了擦除逻辑,最终生成的机器码中该逻辑可能已消失,导致敏感数据在内存中残留,极易被侧信道攻击或内存 Dump 提取。本技能能让 AI 深入到汇编层级,验证擦除操作是否真实存在于最终二进制文件中。

适用场景

  • 密码学实现审计:检查密钥、Nonce、私钥在生命周期结束时是否彻底清除。
  • 认证系统评审:分析密码、Token 或 Session 数据在内存中的处理流程。
  • 合规性检查:针对 PII(个人可识别信息)处理代码进行内存安全验证。
  • 编译器优化分析:验证安全擦除函数(如 explicit_bzero)是否被错误地优化。

核心工作流

该技能采用多 Agent 协作流水线,通过 8 个阶段完成从源码到汇编的深度分析:

  1. 预检与环境搭建:检查 clangcargo 及编译数据库(compile_commands.json),创建分析工作区。
  2. 源码分析:识别敏感对象(SO),追踪数据流,检测是否调用了 approved wipe APIs(如 SecureZeroMemory 或 Rust 的 Zeroize trait)。
  3. 编译器分析(关键步)
    • 生成不同优化级别(O0, O1, O2)的 LLVM IR。
    • 对比 IR 差异,若擦除指令在 O0 存在但在 O2 消失,则标记为 OPTIMIZED_AWAY_ZEROIZE
    • 分析汇编代码,检测栈帧在返回时是否仍保留秘密字节(STACK_RETENTION)或寄存器溢出(REGISTER_SPILL)。
  4. PoC 验证:AI 自动为发现的漏洞编写 Proof-of-Concept 程序,通过实际编译运行来确认漏洞的可利用性。
  5. 报告生成:输出包含严重程度、置信度及修复建议的 final-report.md

下载和安装

下载 zeroize-audit 中文版 Skill ZIP

解压后将目录放入你的 AI 工具 skills 文件夹,重启工具后即可使用。具体路径参考内附的 USAGE.zh.md

你可能还需要

暂无推荐