SuperAPI AI 工具集

auditing-foundry-smart-contract-security

安全与审计

查看项目

更新于 10-15 14:55

技能介绍

用途

该技能用于在 Foundry 项目中对 Solidity 智能合约执行部署前安全审计。已部署的智能合约不可变且托管真实资金,主网上的漏洞无法修补,只能被利用。多数灾难性 DeFi 损失来自少数反复出现的类别:重入、访问控制失效、预言机/价格操纵、未检查的算术或外部调用。该技能由构建合约的工程师在部署前运行,而非安全运营中心在事件后使用。

主要能力

该技能采用纵深防御,叠加四种独立技术,每种都能捕获其他技术遗漏的问题:

  • 静态分析:slither(90+ 检测器)和 aderyn(Cyfrin,Rust)在数秒内扫描 AST/IR,查找已知反模式。
  • 符号执行:mythril(可选,较慢)探索执行路径并通过 SMT 求解深层算术/重入缺陷。
  • 基于属性的测试:forge test 配合模糊测试(testFuzz_)和不变量测试(invariant_ + 带幽灵变量的 handler 合约),证明协议级属性在数百万随机序列下成立。
  • 人工审查与密钥卫生:结构化检查清单(references/vulnerability-checklist.md)以及密钥/keystore 审计,确保私钥不以明文存在,部署通过加密的 cast keystore 进行(references/secure-deployment-and-keys.md)。

使用方式

前置条件

  • 安装 Foundry(forge、cast、anvil):curl -L https://foundry.paradigm.xyz | bash && foundryup
  • Slither + solc:pip install slither-analyzer 以及 solc-select install <ver> && solc-select use <ver>
  • Aderyn(推荐):cargo install aderyn(或 npm i -g @cyfrin/aderyn)
  • Mythril(可选,慢速符号执行):pip install mythril
  • gitleaks(密钥泄露扫描):参见配套技能 implementing-secret-scanning-with-gitleaks
  • 一个可编译的 Foundry 项目(forge build 成功)——分析器需要构建产物。
  • 假定 Solidity ^0.8.x(内置溢出检查);0.8 之前的合约需要额外 SafeMath 审查。
  • 建议在 virtualenv 中安装 Python 工具(在外部管理的发行版上)。切勿在解锁了有资金钱包的机器上对不受信任的合约源码运行分析。

步骤

步骤 1:构建并检查项目

forge build                    # analyzers require fresh artifacts
forge fmt --check              # style gate (optional)
cat foundry.toml               # note solc version, optimizer, remappings, evm_version

步骤 2:静态分析(快速,每次运行)

# Slither — full project (uses foundry.toml + remappings automatically)
slither . --json slither-report.json

# Aderyn — Cyfrin Rust analyzer, complementary detectors
aderyn . -o aderyn-report.json

或运行捆绑的编排器,它同时运行两者、去重并对结果进行门禁:

python3 scripts/agent.py --project . --output audit-report.json

步骤 3:对关键合约进行符号执行(可选,慢速)

# Only on the highest-value contract(s) — Mythril is path-explosive
myth analyze src/Vault.sol --solc-json mythril.config.json --execution-timeout 300 -o json
# or: python3 scripts/agent.py --project . --mythril src/Vault.sol

步骤 4:基于属性的测试——模糊测试 + 不变量

forge test -vvv                                  # unit + fuzz tests
forge coverage --report summary                  # coverage of value-moving code
forge test --match-test invariant_ -vvv          # invariant suite (handler-based)

每个价值转移合约都应有带 handler 的不变量测试(有界输入、幽灵变量、targetContract(handler)),而不仅是单元测试。参见 references/api-reference.md 了解 handler 模式,并为每个访问控制守卫编写 test_RevertWhen_*(配合 vm.expectRevert)。

步骤 5:对照检查清单进行人工审查

对每个合约走查 references/vulnerability-checklist.md:重入(checks-effects-interactions / nonReentrant)、访问控制、预言机操纵、delegatecall/代理存储布局、未检查的返回值、tx.origin、弱随机性、DoS、抢跑/MEV,以及 ERC 特定陷阱(approve 竞争、转账收费、rebase)。

步骤 6:密钥卫生与安全部署

gitleaks detect --no-banner            # no private keys / mnemonics / .env committed
git ls-files | grep -E '\.env$|keystore' && echo "WARN: secrets tracked by git"

# Import the deploy key ONCE into an encrypted keystore — never a plaintext PRIVATE_KEY env
cast wallet import deployer --interactive

# Deploy via the keystore account (testnet first), simulate before --broadcast
forge script script/Deploy.s.sol --account deployer --rpc-url <testnet> --broadcast --verify

完整加固规则(MetaMask 卫生、主网硬件钱包、RPC 信任、部署后验证)见 references/secure-deployment-and-keys.md。

步骤 7:分类与报告

合并 Slither + Aderyn + Mythril + 测试结果,按(文件、行号)去重,剔除已确认的误报,按可利用性 × 财务影响排序,并将每个发现映射到其 SWC id。编排器输出 audit-report.json,带有 PASS/FAIL 门禁。

适用场景

  • 在将任何 Solidity 合约部署到测试网或主网 EVM 链之前。
  • 编写或审查 Foundry 项目(foundry.toml、src/、test/、script/)时。
  • 合约处理价值时:代币(ERC-20/721/1155)、金库、质押、AMM、桥、治理。
  • 添加模糊测试或不变量测试时,或价值转移函数的覆盖率未知时。
  • 编写部署脚本时——验证密钥位于加密 keystore 而非 .env 明文。
  • 集成价格预言机、外部调用、delegatecall 或可升级代理时。
  • 分类 Slither/Aderyn 报告并需要区分真实缺陷与误报时。

限制

  • 该技能是开发侧、部署前的,不适用于事件后的安全运营。
  • Mythril 为可选且路径爆炸,仅建议用于最高价值的合约。
  • 假定 Solidity ^0.8.x;0.8 之前的合约需要额外 SafeMath 审查。
  • 分析器需要构建产物,项目必须能通过 forge build。
  • 切勿在解锁了有资金钱包的机器上对不受信任的合约源码运行分析。
  • 部署门禁规则:任何高危/严重静态发现、测试失败、密钥泄露或价值转移代码覆盖率低于配置阈值均判定为 FAIL。

预期输出

一份 JSON 审计报告,列出发现项及其 SWC 标识、严重性、工具来源、受影响合约/函数/行号及修复建议;外加测试/覆盖率摘要和单一的 PASS/FAIL 部署门禁。