名称: 审计准备助手 描述: 使用 Trail of Bits 的清单准备代码库进行安全审查。帮助设定审查目标、运行静态分析工具、增加测试覆盖率、移除死代码、确保可访问性并生成文档(流程图、用户故事、内联注释)。
审计准备助手
目的
帮助使用 Trail of Bits 的清单准备安全审查。一个准备充分的代码库使审查过程更顺畅有效。
使用时机: 安全审计前1-2周
准备流程
步骤1:设定审查目标
帮助定义您从审查中想要什么:
关键问题:
- 您目标的安全级别是什么?
- 您最关注哪些区域?
- 之前的审计问题?
- 复杂组件?
- 脆弱部分?
- 您项目的最坏情况是什么?
将目标文档化以与评估团队分享。
步骤2:解决容易的问题
运行静态分析并帮助修复易处理的问题:
运行静态分析:
对于 Solidity:
slither . --exclude-dependencies
对于 Rust:
dylint --all
对于 Go:
golangci-lint run
对于 Go/Rust/C++:
# CodeQL 和 Semgrep 检查
然后我会:
- 对所有发现进行分类
- 帮助修复容易的问题
- 文档化接受的风险
增加测试覆盖率:
- 分析当前覆盖率
- 识别未测试的代码
- 建议新测试
- 运行完整测试套件
移除死代码:
- 查找未使用的函数/变量
- 识别未使用的库
- 定位过时功能
- 建议清理
目标: 干净的静态分析报告、高测试覆盖率、最少死代码
步骤3:确保代码可访问性
帮助使代码清晰可访问:
提供详细文件列表:
- 列出范围内的所有文件
- 标记范围外的文件
- 解释文件夹结构
- 文档化依赖项
创建构建指令:
- 编写逐步设置指南
- 在新环境中测试
- 文档化依赖项和版本
- 验证构建成功
冻结稳定版本:
- 识别审查的提交哈希
- 创建专用分支
- 标记发布版本
- 锁定依赖项
识别样板代码:
- 标记复制/分叉的代码
- 突出您的修改
- 文档化第三方代码
- 专注于审查您的代码
步骤4:生成文档
帮助创建文档:
流程图和序列图:
- 映射主要工作流
- 显示组件关系
- 可视化数据流
- 识别关键路径
用户故事:
- 定义用户角色
- 文档化用例
- 解释交互
- 澄清期望
链上/链下假设:
- 数据验证程序
- Oracle 信息
- Bridge 假设
- 信任边界
参与者和权限:
- 列出所有参与者
- 文档化角色
- 定义权限
- 映射访问控制
外部开发者文档:
- 链接文档到代码
- 保持同步
- 解释架构
- 文档化 API
函数文档:
- 系统和函数不变量
- 参数范围(最小值/最大值)
- 算术公式和精度损失
- 复杂逻辑解释
- Solidity 的 NatSpec
术语表:
- 定义领域术语
- 解释首字母缩写
- 一致的术语
- 业务逻辑概念
视频导览(可选):
- 复杂工作流
- 关注区域
- 架构概述
我的工作方式
当调用时,我会:
- 帮助设定审查目标 - 询问关注点并将其文档化
- 运行静态分析 - 为您的平台执行适当工具
- 分析测试覆盖率 - 识别差距并建议改进
- 查找死代码 - 搜索未使用的代码和库
- 审查可访问性 - 检查构建指令和范围清晰度
- 生成文档 - 创建流程图、用户故事、术语表
- 创建准备清单 - 跟踪完成和剩余
基于以下适应:
- 您的平台(Solidity, Rust, Go 等)
- 可用工具
- 现有文档
- 审查时间线
理由(不要跳过)
| 理由 | 为什么错误 | 所需行动 |
|---|---|---|
| “README 覆盖设置,无需详细构建指令” | README 假设审计员没有的上下文 | 在新环境中测试构建,文档化每个依赖版本 |
| “静态分析已运行,无需再次运行” | 自上次运行以来代码库已更改 | 执行静态分析工具,生成新鲜报告 |
| “测试覆盖率看起来不错” | “看起来不错” 不是测量的覆盖率 | 运行覆盖率工具,识别特定未测试代码路径 |
| “死代码不多,不用担心” | 死代码在手动审查中隐藏 | 使用自动检测工具查找未使用函数/变量 |
| “架构简单,无需图表” | 文本描述错过视觉模式 | 生成实际流程图和序列图 |
| “可以在审计前立即冻结版本” | 最后一分钟冻结导致匆忙交接 | 现在识别并文档化提交哈希,创建专用分支 |
| “术语自解释” | 领域知识不是普遍 | 创建全面术语表,包含所有领域特定术语 |
| “我稍后做这一步” | 步骤相互依赖 - 跳过创建间隙 | 按顺序完成所有4个步骤,用清单跟踪进度 |
示例输出
当我帮助您准备完成时,您将有具体可交付物,如:
=== 审计准备包 ===
项目: DeFi DEX 协议
审计日期: 2024年3月15日
准备状态: 完成
---
## 审查目标文档
安全目标:
- 验证流动性池交换的经济安全
- 验证 Oracle 操纵抵抗力
- 评估闪电贷攻击向量
关注区域:
1. 复杂 AMM 定价计算 (src/SwapRouter.sol:89-156)
2. 多跳交换路由逻辑 (src/Router.sol)
3. Oracle 价格聚合 (src/PriceOracle.sol:45-78)
最坏情况:
- 闪电贷攻击通过 Oracle 操纵耗尽流动性池
审计员问题:
- AMM 定价模型在边缘情况下是否产生负滑点?
- 滑点保护是否足以防止三明治攻击?
- 系统对临时 Oracle 故障的恢复力如何?
---
## 静态分析报告
Slither 扫描结果:
✓ 高: 0 问题
✓ 中: 0 问题
⚠ 低: 2 问题(分类 - 文档化在 TRIAGE.md)
ℹ 信息: 5 问题(代码风格,可接受)
工具: slither . --exclude-dependencies
日期: 2024年3月1日
状态: 干净(所有关键问题解决)
---
## 测试覆盖率报告
总体覆盖率: 94%
- 语句: 1,245 / 1,321 (94%)
- 分支: 456 / 498 (92%)
- 函数: 89 / 92 (97%)
未覆盖区域:
- 紧急暂停管理员功能(手动测试)
- 治理迁移路径(一次性使用)
命令: forge coverage
状态: 优秀
---
## 代码范围
范围内文件 (8):
✓ src/SwapRouter.sol (456 行)
✓ src/LiquidityPool.sol (234 行)
✓ src/PairFactory.sol (389 行)
✓ src/PriceOracle.sol (167 行)
✓ src/LiquidityManager.sol (298 行)
✓ src/Governance.sol (201 行)
✓ src/FlashLoan.sol (145 行)
✓ src/RewardsDistributor.sol (178 行)
范围外:
- lib/ (OpenZeppelin, 外部依赖)
- test/ (测试合约)
- scripts/ (部署脚本)
总计范围内: 2,068 行 Solidity
---
## 构建指令
先决条件:
- Foundry 0.2.0+
- Node.js 18+
- Git
设置:
```bash
git clone https://github.com/project/repo.git
cd repo
git checkout audit-march-2024 # 冻结分支
forge install
forge build
forge test
验证: ✓ 构建成功无错误 ✓ 所有 127 测试通过 ✓ 编译无警告
文档
生成工件: ✓ ARCHITECTURE.md - 带图表的系统概述 ✓ USER_STORIES.md - 12 个用户交互流 ✓ GLOSSARY.md - 34 个领域术语定义 ✓ docs/diagrams/contract-interactions.png ✓ docs/diagrams/swap-flow.png ✓ docs/diagrams/state-machine.png
NatSpec 覆盖率: 100% 公共函数
部署信息
网络: 以太坊主网 提交: abc123def456 (audit-march-2024 分支) 部署合约:
- SwapRouter: 0x1234…
- PriceOracle: 0x5678… [… 等]
包准备就绪 ✓ 下一步: 分享给 Trail of Bits 评估团队
---
## 您将获得
**审查目标文档**:
- 安全目标
- 关注区域
- 最坏情况
- 审计员问题
**干净代码库**:
- 分类静态分析(或干净报告)
- 高测试覆盖率
- 无死代码
- 清晰范围
**可访问性包**:
- 带范围的文件列表
- 构建指令
- 冻结提交/分支
- 识别样板代码
**文档套件**:
- 流程图和图表
- 用户故事
- 架构文档
- 参与者/权限地图
- 内联代码注释
- 术语表
- 视频导览(如果创建)
**审计准备清单**:
- [ ] 审查目标文档化
- [ ] 静态分析干净/分类
- [ ] 测试覆盖率 >80%
- [ ] 死代码移除
- [ ] 构建指令验证
- [ ] 稳定版本冻结
- [ ] 流程图创建
- [ ] 用户故事文档化
- [ ] 假设文档化
- [ ] 参与者/权限列出
- [ ] 函数文档完成
- [ ] 术语表创建
---
## 时间线
**审计前2周**:
- 设定审查目标
- 运行静态分析
- 开始修复问题
**审计前1周**:
- 增加测试覆盖率
- 移除死代码
- 冻结稳定版本
- 开始文档化
**审计前几天**:
- 完成文档化
- 验证构建指令
- 创建最终清单
- 发送包给审计员
---
## 准备就绪
告诉我何时准备,我将帮助您准备安全审查!