mcpField
A
auditing-foundry-smart-contract-security

auditing-foundry-smart-contract-security

github.com/mukul975安全35.2k104 次安装8 周前更新
代码仓库

关于 auditing-foundry-smart-contract-security

面向 Foundry Solidity 项目的部署前安全审计技能,结合静态分析、可选符号执行、模糊与不变量测试、人工审查及密钥检查,并输出发现项和部署判定。

主要功能

  1. 01Slither 与 Aderyn 静态分析
  2. 02可选 Mythril 符号执行
  3. 03模糊与不变量测试
  4. 04人工漏洞检查清单
  5. 05机密信息与密钥库检查
  6. 06JSON 发现项及部署判定

适用场景

  1. 01部署前审计 Foundry 项目
  2. 02测试资产转移合约的不变量
  3. 03审查预言机或代理集成
  4. 04检查部署密钥是否泄漏

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill auditing-foundry-smart-contract-security

安装后在 Claude Code 中输入/auditing-foundry-smart-contract-security确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
secure-deployment-and-keys.md
vulnerability-checklist.md
scripts/
agent.py

详细介绍

审计 Foundry 智能合约安全

概述

已部署的智能合约是不可变的,并且托管着真实资金,因此发布到主网的 bug 无法被修补——只能被利用。大多数灾难性的 DeFi 损失来自一小部分反复出现的类别:重入、访问控制失效、预言机/价格操纵,以及未检查的算术运算或外部调用。

本技能对 Foundry 项目运行一次纵深防御、部署前审计,叠加四种相互独立的技术,每种都能捕获其他技术遗漏的问题:

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

本技能是开发侧、部署前的——由构建合约的工程师运行,而不是事故后由 SOC 运行。审计结果会决定部署是否放行:任何高危/严重级别的静态发现、测试失败、密钥泄露或低覆盖率 = FAIL。

何时使用

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

前提条件

  • 已安装 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))——而不仅仅是单元测试。有关 handler 模式,请参见 references/api-reference.md,并为每个访问控制防护编写一个 test_RevertWhen_*(配合 vm.expectRevert)。

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

针对每一份合约走查 references/vulnerability-checklist.md:重入 (检查-生效-交互 / nonReentrant)、访问控制、预言机操纵、 delegatecall/代理存储布局、未检查的返回值、tx.origin、弱 随机性、DoS、抢跑/MEV,以及 ERC 特有的陷阱(approve 竞态、 转账手续费、变基)。

第 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

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

第 7 步:分诊与报告

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

预期输出

一份 JSON 审计报告,列出各项发现,包含 SWC 标识符、严重程度、工具来源、 受影响的合约/函数/行号以及修复建议;外加测试/覆盖率摘要,以及 单一的 PASS / FAIL 部署门禁。任何高危/严重静态发现、测试失败、泄露的密钥, 或涉及资金流动的代码覆盖率低于配置阈值时,均判定为 FAIL。

评论

支持 Markdown