mcpField
S
smart-contract-security

smart-contract-security

github.com/pluginagentmarketplaceセキュリティ1263 回インストール42 週間前に更新
リポジトリ

smart-contract-security について

スマートコントラクトを監査する開発者向けのセキュリティスキルです。脆弱性の確認、監査手順、ツールの活用、インシデント対応を扱います。

主な機能

  1. 01一般的な脆弱性の解説
  2. 02体系的な監査チェックリスト
  3. 03静的解析とファジングのガイド
  4. 04形式検証の参考情報
  5. 05インシデント対応手順

活用シーン

  1. 01リリース前のコントラクト確認
  2. 02ファジングと不変条件テストの計画
  3. 03脆弱性の疑いがある事案の評価
  4. 04責任ある情報開示の準備

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/pluginagentmarketplace/custom-plugin-blockchain --skill smart-contract-security

インストール後、Claude Code で/smart-contract-securityを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
config.yaml
schema.json
references/
GUIDE.md
PATTERNS.md
scripts/
validate.py

詳細

スマートコントラクトセキュリティスキル

脆弱性の検出、監査手法、インシデント対応手順を通じて、スマートコントラクトのセキュリティを習得します。

クイックスタート

# Invoke this skill for security analysis
Skill("smart-contract-security", topic="vulnerabilities", severity="high")

対象トピック

1. よくある脆弱性

以下を認識し、防止します。

  • 再入可能性:CEI パターンへの違反
  • アクセス制御:修飾子の不足
  • オラクル操作:フラッシュローン攻撃
  • 整数関連の問題:精度の損失
2. 監査手法

体系的なレビューのプロセス:

  • 手動レビュー:1 行ずつ分析
  • 静的解析:自動化ツール
  • ファジング:プロパティベーステスト
  • 形式検証:数学的証明
3. セキュリティツール

必須のツール:

  • Slither:高速な静的解析
  • Mythril:シンボリック実行
  • Foundry:ファジング、インバリアント
  • Certora:形式検証
4. インシデント対応

セキュリティイベントに対処します。

  • トリアージ:深刻度の評価
  • 緩和:緊急措置
  • 事後分析:根本原因の分析
  • 開示:責任ある報告

脆弱性のクイックリファレンス

重大:再入可能性
// VULNERABLE
function withdraw(uint256 amount) external {
    (bool ok,) = msg.sender.call{value: amount}("");
    require(ok);
    balances[msg.sender] -= amount;  // After call!
}

// FIXED: CEI Pattern
function withdraw(uint256 amount) external {
    balances[msg.sender] -= amount;  // Before call
    (bool ok,) = msg.sender.call{value: amount}("");
    require(ok);
}
高:アクセス制御の不足
// VULNERABLE
function setAdmin(address newAdmin) external {
    admin = newAdmin;  // Anyone can call!
}

// FIXED
function setAdmin(address newAdmin) external onlyOwner {
    admin = newAdmin;
}
高:戻り値の未確認
// VULNERABLE
IERC20(token).transfer(to, amount);  // Ignored!

// FIXED: Use SafeERC20
using SafeERC20 for IERC20;
IERC20(token).safeTransfer(to, amount);
中:精度の損失
// VULNERABLE: Division before multiplication
uint256 fee = (amount / 1000) * rate;

// FIXED: Multiply first
uint256 fee = (amount * rate) / 1000;

監査チェックリスト

監査前
  • 警告なしでコードをコンパイルできる
  • 十分なカバレッジでテストが成功する
  • ドキュメントをレビュー済み
コアセキュリティ
  • CEI パターンに従っている
  • 再入可能性ガードが設定されている
  • 管理者関数にアクセス制御がある
  • 入力検証が完了している
DeFi 固有
  • オラクルの鮮度チェック
  • スリッページ保護
  • フラッシュローンへの耐性
  • サンドイッチ攻撃の防止

セキュリティツール

静的解析
# Slither - Fast vulnerability detection
slither . --exclude-dependencies

# Mythril - Symbolic execution
myth analyze src/Contract.sol

# Semgrep - Custom rules
semgrep --config "p/smart-contracts" .
ファジング
// Foundry fuzz test
function testFuzz_Withdraw(uint256 amount) public {
    amount = bound(amount, 1, type(uint128).max);

    vm.deal(address(vault), amount);
    vault.deposit{value: amount}();

    uint256 before = address(this).balance;
    vault.withdraw(amount);

    assertEq(address(this).balance, before + amount);
}
インバリアントテスト
function invariant_BalancesMatchTotalSupply() public {
    uint256 sum = 0;
    for (uint i = 0; i < actors.length; i++) {
        sum += token.balanceOf(actors[i]);
    }
    assertEq(token.totalSupply(), sum);
}

深刻度の分類

深刻度影響例
重大資金の直接的な損失再入可能性、保護されていない初期化
高深刻な損害アクセス制御、オラクル操作
中条件付きの影響精度の損失、タイミングの問題
低軽微な問題イベントの不足、命名

インシデント対応

1. 検出
# Monitor for suspicious activity
cast logs --address $CONTRACT --from-block latest
2. 緩和
// Emergency pause
function pause() external onlyOwner {
    _pause();
}
3. 復旧
  • 被害範囲を評価する
  • 開示を調整する
  • 監査を受けた修正をデプロイする

よくある落とし穴

落とし穴リスク防止策
正常系のみをテストするエッジケースの見落とし境界値をファジングテストする
インテグレーションを無視する外部呼び出しのリスクすべての依存関係をレビューする
block.timestamp を信頼するマイナーによる操作長い時間枠でのみ使用する

関連項目

  • Bonded Agent:06-smart-contract-security
  • 関連スキル:solidity-development、defi-protocols

リソース

  • SWC Registry:一般的な脆弱性の分類
  • Rekt News:ハッキングの事後分析
  • Immunefi:バグ報奨金

バージョン履歴

バージョン日付変更内容
2.0.02025-01ツールと手法を備えた本番環境向けリリース
1.0.02024-12初回リリース

コメント