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 スマートコントラクトのセキュリティ監査
概要
デプロイ済みのスマートコントラクトは不変であり、実際の資金を預かるため、mainnet にリリースされたバグは修正できず、悪用されるだけです。DeFi で発生する壊滅的な損失の大半は、再入可能性、アクセス制御の不備、オラクル/価格操作、算術演算や外部呼び出しの未検証といった、繰り返し発生する少数の脆弱性クラスに起因します。
このスキルでは、Foundry プロジェクトの多層防御によるデプロイ前監査を実行します。それぞれが他の手法では見つけられない問題を検出する、4 つの独立した手法を組み合わせます。
- 静的解析 —
slither(90 種類以上の検出器)とaderyn(Cyfrin、Rust)で AST/IR をスキャンし、既知のアンチパターンを数秒で検出します。 - シンボリック実行 —
mythril(任意、低速)で実行パスを探索し、SMT を用いて深い算術演算や再入可能性のバグを解決します。 - プロパティベーステスト — ファジング(
testFuzz_*)と不変条件テスト(invariant_*とゴースト変数を持つハンドラーコントラクト)を使ったforge testにより、何百万ものランダムなシーケンスにわたってプロトコルレベルのプロパティが維持されることを検証します。 - 手動レビューと鍵の衛生管理 — 構造化されたチェックリスト(
references/vulnerability-checklist.mdを参照)とシークレット/キーストアの監査を行い、秘密鍵が平文で保存されることのないようにし、デプロイには暗号化されたcastキーストアを使用します(references/secure-deployment-and-keys.mdを参照)。
このスキルは開発側でデプロイ前に使用するものです。インシデント後に SOC が実行するのではなく、コントラクトを開発するエンジニアが実行します。検出結果はデプロイの可否を左右します。高または重大な静的解析結果、テストの失敗、鍵の漏えい、または低いカバレッジが 1 つでもあれば、結果は不合格です。
使用する場面
- Solidity コントラクトを EVM のテストネットまたは mainnet にデプロイする前。
- Foundry プロジェクト(
foundry.toml、src/、test/、script/)を作成またはレビューするとき。 - コントラクトがトークン(ERC-20/721/1155)、Vault、ステーキング、AMM、ブリッジ、ガバナンスなどの価値を扱うとき。
- ファジングテストや不変条件テストを追加するとき、または価値を移動する関数のカバレッジが不明なとき。
- デプロイスクリプトを設定するとき。鍵が
.envの平文ではなく、暗号化されたキーストアに保存されていることを確認するため。 - 価格オラクル、外部呼び出し、
delegatecall、またはアップグレード可能なプロキシを統合するとき。 - Slither/Aderyn のレポートをトリアージし、実際のバグと誤検出を区別するとき。
前提条件
- 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 の追加レビューが必要です。
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)
価値を移動するすべてのコントラクトには、単体テストだけでなく、**ハンドラーを使った不変条件テスト(入力の範囲制限、ゴースト変数、targetContract(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
完全な強化ルール(MetaMask の衛生管理、メインネット用のハードウェアウォレット、RPC の信頼性、デプロイ後の検証)については、references/secure-deployment-and-keys.md を参照してください。
ステップ 7:トリアージと報告
Slither + Aderyn + Mythril + テストの結果を統合し、(ファイル、行)ごとに重複を排除して、確認済みの誤検知を除外し、悪用可能性 × 金銭的影響に基づいて順位付けし、それぞれを SWC ID に対応付けます。オーケストレーターは、PASS/FAIL ゲートを含む audit-report.json を出力します。
出力内容
SWC 識別子、重大度、ツールの情報源、影響を受けるコントラクト/関数/行、修正方法を記載した検出結果の JSON 監査レポートに加えて、テスト/カバレッジの概要と、単一のデプロイ判定(PASS / FAIL)が出力されます。価値移転を行うコードにおいて、高または重大な静的解析の検出結果、テストの失敗、秘密情報の漏えい、または設定されたしきい値を下回るカバレッジがある場合は、FAIL となります。