smart-contract-security について
スマートコントラクトを監査する開発者向けのセキュリティスキルです。脆弱性の確認、監査手順、ツールの活用、インシデント対応を扱います。
主な機能
- 01一般的な脆弱性の解説
- 02体系的な監査チェックリスト
- 03静的解析とファジングのガイド
- 04形式検証の参考情報
- 05インシデント対応手順
活用シーン
- 01リリース前のコントラクト確認
- 02ファジングと不変条件テストの計画
- 03脆弱性の疑いがある事案の評価
- 04責任ある情報開示の準備
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pluginagentmarketplace/ custom-plugin-blockchain --skill smart-contract-securityインストール後、Claude Code で/smart-contract-securityを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/config.yamlschema.jsonreferences/GUIDE.mdPATTERNS.mdscripts/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.0 | 2025-01 | ツールと手法を備えた本番環境向けリリース |
| 1.0.0 | 2024-12 | 初回リリース |
コメント
Markdown 対応