kcolbchain/audit-checklist
GitHub: kcolbchain/audit-checklist
一个基于 Foundry 的可执行智能合约审计清单,提供覆盖常见漏洞的现成测试模板。
Stars: 0 | Forks: 5
# audit-checklist
可执行智能合约审计清单 — 用于 Foundry 的现成测试模板,涵盖常见漏洞类别。由 [kcolbchain](https://kcolbchain.com) 创建(始于 2015)。
## 存在的原因
大多数审计清单是 PDF 格式,而这份是代码。将其导入你的 Foundry 项目并运行 `forge test` — 它会针对你的合约检查重入、访问控制缺口、预言机操纵、升级风险以及闪电贷向量。
基于自 2019 年以来的真实审计模式。
## 快速开始
```
# 如果尚未安装 Foundry,请安装 Foundry
curl -L https://foundry.paradigm.xyz | bash
foundryup
# 创建新的 Foundry 项目(或使用现有项目)
forge init my-audit-project
cd my-audit-project
# 安装 audit-checklist
forge install kcolbchain/audit-checklist
```
### 你的第一次审计 — 5 分钟教程
本教程将从头到尾针对一个**故意存在漏洞的合约**进行审计(该合约随仓库一起发布:`VulnerableVault.sol`)。完成之后,你将运行一次真实的审计并看到每个检查标记出的真实漏洞。
#### 1. 安装
```
forge init my-audit-project && cd my-audit-project
forge install kcolbchain/audit-checklist
```
此时 `remappings.txt` 应包含:`audit-checklist/=lib/audit-checklist/src/`。
#### 2. 编写审计 harness
创建 `test/VaultAudit.t.sol` —— 每个检查都需要一个 `setUp()`,在其中部署目标合约并让 `targetContract` 指向它,以及任何协议特定的钩子(例如如何存款、要调用哪个函数取款)。
检查类继承自 `forge-std/Test`,因此你可以使用所有常规的 Foundry 辅助函数。
```
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import {ReentrancyCheck} from "audit-checklist/checks/ReentrancyCheck.sol";
import {AccessControlCheck} from "audit-checklist/checks/AccessControlCheck.sol";
import {VulnerableVault} from "audit-checklist/examples/VulnerableVault.sol";
contract VaultReentrancyAudit is ReentrancyCheck {
VulnerableVault vault;
function setUp() public {
vault = new VulnerableVault();
vault.initialize();
targetContract = address(vault);
}
// Tell ReentrancyCheck how to trigger a withdraw + how to seed deposits.
function getWithdrawCalldata() internal pure override returns (bytes memory) {
return abi.encodeWithSignature("withdraw()");
}
function performDeposit(address depositor, uint256 amount) internal override {
vm.prank(depositor);
vault.deposit{value: amount}();
}
}
```
请参考本仓库中的 `test/Example.t.sol`,其中对 `AccessControlCheck`、`OracleCheck`、`UpgradeCheck` 和 `FlashLoanCheck` 使用了相同的模式。
#### 3. 运行检查
```
forge test -vv
```
针对 `VulnerableVault` 的预期输出如下:
```
Running 1 test for test/VaultAudit.t.sol:VaultReentrancyAudit
[FAIL. Reason: Reentrancy detected: balance drained by recursive call]
test_Reentrancy_WithdrawDoesNotFollowCEI()
```
这正是工具**按设计工作**的表现 —— 测试失败意味着某个检查发现了漏洞。对于你自己的合约,干净的 `forge test` 运行表示没有匹配到任何模式;失败则是一条需要调查的漏洞线索。
#### 4. 解读结果
| 结果 | 含义 |
|------|------|
| ✅ 所有检查通过 | 未触发本清单中的任何模式。仍需手动审计。 |
| ❌ 某项检查失败 | 匹配到了已知的不良模式。请阅读失败原因并手动验证。 |
| ⚠️ `setUp` 期间测试回滚 | 你的钩子(例如 `performDeposit`)有误 — 检查实际上并未运行。 |
#### 5. 浏览内置示例
```
forge test --match-contract Example -vvv
```
此命令会对 `VulnerableVault` 运行所有检查,该合约包含四个**故意设计的漏洞**(缺少初始化保护、`withdraw` 中的重入、缺少 `emergencyWithdraw` 的访问控制、现货价格预言机问题)。每个检查都应失败,从而确认你的安装正常,并为你提供真实失败样式的参考。
### 运行特定检查
```
// Run only reentrancy checks
import {ReentrancyCheck} from "audit-checklist/checks/ReentrancyCheck.sol";
contract MyAudit is ReentrancyCheck { ... }
// Run only access control checks
import {AccessControlCheck} from "audit-checklist/checks/AccessControlCheck.sol";
contract MyAudit is AccessControlCheck { ... }
// Run all checks
import {ReentrancyCheck, AccessControlCheck, OracleCheck, UpgradeCheck, FlashLoanCheck} from "audit-checklist/checks/ReentrancyCheck.sol";
contract MyAudit is ReentrancyCheck, AccessControlCheck, OracleCheck, UpgradeCheck, FlashLoanCheck { ... }
```
### 审计漏洞合约示例
本仓库包含 `VulnerableVault.sol`,用于演示这些检查如何工作:
```
# 运行示例审计
forge test --match-contract Example -vvv
```
此命令会对故意设计为脆弱的演示合约运行所有检查,展示每个测试捕获的问题。
## 在浏览器中浏览检查
一个交互式探索器位于 [`web/`](web/) —— 每个检查一页,包含检测逻辑、所需钩子以及它在 `VulnerableVault` 中标记的真实漏洞。
你可以通过以下方式运行它:
- 本地运行:`python3 -m http.server -d web 8080`
- 或直接打开:`[在线演示](web/index.html)`
## 覆盖的漏洞类别
| 检查 | 检测内容 |
|------|----------|
| `ReentrancyCheck` | 检查效应与交互顺序违规、通过回调的跨函数重入 |
| `AccessControlCheck` | 未受保护的管理函数、未保护的初始化器、缺失的角色检查 |
| `OracleCheck` | 可操纵的现货价格读取、缺少 TWAP、单源预言机 |
| `UpgradeCheck` | 代理中的存储布局冲突、未初始化的实现合约 |
| `FlashLoanCheck` | 易受闪电贷价格/状态操纵的函数 |
## 架构
```
src/
├── ChecklistBase.sol — Base contract with shared test helpers
├── checks/
│ ├── ReentrancyCheck.sol — Reentrancy detection tests
│ ├── AccessControlCheck.sol — Access control verification
│ ├── OracleCheck.sol — Oracle manipulation checks
│ ├── UpgradeCheck.sol — Proxy upgrade safety
│ └── FlashLoanCheck.sol — Flash loan resistance
├── examples/
│ └── VulnerableVault.sol — Intentionally vulnerable demo contract
test/
└── Example.t.sol — Full example audit against VulnerableVault
```
## 许可证
MIT
## 贡献
欢迎提出问题和 PR。如果你发现了未被覆盖的漏洞模式,请打开议题或提交一个检查。
标签:DeFi安全, Foundry测试模板, kcolbchain, SOC Prime, Solidity安全, 区块链安全, 升级风险, 可执行审计清单, 合约审计, 安全模板, 对称加密, 开发工具, 智能合约审计, 检查列表, 自动化审计, 访问控制漏洞, 重入漏洞, 闪电贷向量, 预言机操纵