关于 auditing-foundry-smart-contract-security
面向 Foundry Solidity 项目的部署前安全审计技能,结合静态分析、可选符号执行、模糊与不变量测试、人工审查及密钥检查,并输出发现项和部署判定。
主要功能
- 01Slither 与 Aderyn 静态分析
- 02可选 Mythril 符号执行
- 03模糊与不变量测试
- 04人工漏洞检查清单
- 05机密信息与密钥库检查
- 06JSON 发现项及部署判定
适用场景
- 01部署前审计 Foundry 项目
- 02测试资产转移合约的不变量
- 03审查预言机或代理集成
- 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 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdsecure-deployment-and-keys.mdvulnerability-checklist.mdscripts/agent.py详细介绍
审计 Foundry 智能合约安全
概述
已部署的智能合约是不可变的,并且托管着真实资金,因此发布到主网的 bug 无法被修补——只能被利用。大多数灾难性的 DeFi 损失来自一小部分反复出现的类别:重入、访问控制失效、预言机/价格操纵,以及未检查的算术运算或外部调用。
本技能对 Foundry 项目运行一次纵深防御、部署前审计,叠加四种相互独立的技术,每种都能捕获其他技术遗漏的问题:
- 静态分析 ——
slither(90+ 检测器)和aderyn(Cyfrin,Rust)在数秒内扫描 AST/IR,查找已知的反模式。 - 符号执行 ——
mythril(可选,较慢)探索执行路径,并通过 SMT 求解深层算术/重入 bug。 - 基于属性的测试 ——
forge test结合模糊测试(testFuzz_*)和不变量测试(invariant_*+ 带幽灵变量的 handler 合约),证明协议级属性在数百万个随机序列中成立。 - 人工审查 + 密钥卫生 —— 结构化的检查清单(参见
references/vulnerability-checklist.md)以及密钥/keystore 审计,确保私钥永远不会以明文形式存在,部署通过加密的castkeystore 进行(参见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。