はじめに#
ソフトウェア開発において、セキュリティレビューは品質を担保する上で不可欠なプロセスです。しかし、手動でのセキュリティレビューは時間がかかり、見落としのリスクも伴います。Claude CodeのAgent Skillsを活用することで、OWASP Top 10に基づいた脆弱性検出、依存関係の安全性チェック、セキュリティレポートの自動生成を効率的に行えます。
本記事では、セキュリティレビュー専用のAgent SkillsとSubagentを作成し、コードの脆弱性を体系的に検出・修正するワークフローを構築する方法を解説します。この記事を読むことで、以下のことができるようになります。
- セキュリティレビュー専用スキルを作成し、OWASP Top 10に基づく検査を自動化する
- 依存関係の脆弱性を検出するスキルを構築する
- セキュリティレポートを自動生成するワークフローを実装する
- セキュリティ検査をCI/CDパイプラインに統合する
実行環境#
- オペレーティングシステム: macOS 10.15以上、Ubuntu 20.04以上/Debian 10以上、Windows 10以上(WSL 1/2またはGit for Windows)
- ハードウェア: 4GB以上のRAM
- Node.js 18以上(npmインストールの場合のみ必要)
- インターネット接続(認証およびAI処理に必要)
- シェル環境: Bash、Zsh、またはFish推奨
前提条件#
- Claude Codeがインストール済みであること
- コマンドライン操作の基礎知識
- プログラミングの基礎知識(言語は問わない)
- 基本的なセキュリティ概念の理解
セキュリティレビュースキルの設計#
セキュリティレビューを自動化するには、検出対象の脆弱性カテゴリに応じたスキルを設計する必要があります。本記事では、以下の4つのスキルを作成します。
flowchart TB
subgraph skills["セキュリティレビュースキル体系"]
A[owasp-scanner<br>OWASP Top 10検査]
B[dependency-audit<br>依存関係監査]
C[security-reporter<br>レポート生成]
D[secret-scanner<br>機密情報検出]
end
E[ソースコード] --> A
E --> D
F[package.json等] --> B
A --> G[検出結果]
B --> G
D --> G
G --> C
C --> H[セキュリティレポート]OWASP Top 10:2025の概要#
セキュリティスキルを設計する前に、検出対象となるOWASP Top 10:2025の脆弱性カテゴリを確認しましょう。
| 順位 |
カテゴリ |
概要 |
| A01 |
Broken Access Control |
認可制御の不備による不正アクセス |
| A02 |
Security Misconfiguration |
セキュリティ設定の誤り |
| A03 |
Software Supply Chain Failures |
サードパーティコンポーネントの脆弱性 |
| A04 |
Cryptographic Failures |
暗号化の不備・誤用 |
| A05 |
Injection |
SQL、NoSQL、コマンドインジェクション |
| A06 |
Insecure Design |
設計レベルのセキュリティ欠陥 |
| A07 |
Authentication Failures |
認証メカニズムの脆弱性 |
| A08 |
Software or Data Integrity Failures |
整合性検証の欠如 |
| A09 |
Security Logging and Alerting Failures |
ログ・監視の不備 |
| A10 |
Mishandling of Exceptional Conditions |
例外処理の不備 |
OWASP Top 10検査スキルの作成#
OWASP Top 10に基づいてコードを検査するスキルを作成します。
ディレクトリ構造の準備#
1
|
mkdir -p .claude/skills/owasp-scanner
|
SKILL.mdの作成#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
cat > .claude/skills/owasp-scanner/SKILL.md << 'EOF'
---
name: owasp-scanner
description: OWASP Top 10:2025に基づくセキュリティ脆弱性スキャン。コードレビュー、セキュリティ監査、脆弱性検出、ペネトレーションテスト準備で使用。PROACTIVELY use when reviewing code that handles user input, authentication, authorization, or sensitive data.
allowed-tools: Read, Grep, Glob, Bash
---
# OWASP Top 10:2025 セキュリティスキャナー
あなたはOWASP Top 10:2025に精通したセキュリティ専門家です。コードベースを体系的にスキャンし、潜在的な脆弱性を特定します。
## スキャン手順
1. **対象ファイルの特定**: セキュリティに関連するファイル(認証、認可、入力処理、DB操作、暗号化)を特定
2. **カテゴリ別検査**: OWASP Top 10の各カテゴリについて順次検査
3. **重大度評価**: 発見した問題に重大度(Critical/High/Medium/Low)を割り当て
4. **修正提案**: 各問題に対する具体的な修正コードを提示
## 検査チェックリスト
### A01: Broken Access Control(アクセス制御の不備)
- [ ] 認可チェックの欠如または不十分な実装
- [ ] パストラバーサルの可能性
- [ ] IDOR(Insecure Direct Object Reference)
- [ ] CORS設定の誤り
- [ ] メタデータ操作(JWTトークン改ざん等)
検査パターン:
\`\`\`bash
# 認可チェックの欠如を検出
grep -rn "req\\.params\\|req\\.query\\|req\\.body" --include="*.js" --include="*.ts" | grep -v "auth\\|permission\\|authorize"
\`\`\`
### A02: Security Misconfiguration(セキュリティ設定ミス)
- [ ] デバッグモードの本番有効化
- [ ] デフォルト認証情報の使用
- [ ] 不要なHTTPメソッドの有効化
- [ ] セキュリティヘッダーの欠如
- [ ] エラーメッセージによる情報漏洩
検査パターン:
\`\`\`bash
# デバッグ設定の検出
grep -rn "DEBUG.*true\\|debug.*=.*true\\|NODE_ENV.*development" --include="*.js" --include="*.ts" --include="*.json"
\`\`\`
### A03: Software Supply Chain Failures(サプライチェーンの問題)
- [ ] 既知の脆弱性を持つ依存関係
- [ ] 信頼できないソースからのパッケージ
- [ ] ロックファイルの不整合
- [ ] 署名検証の欠如
検査パターン:
\`\`\`bash
# 依存関係の脆弱性チェック(npm)
npm audit --json 2>/dev/null || echo "npm audit not available"
\`\`\`
### A04: Cryptographic Failures(暗号化の問題)
- [ ] 弱い暗号アルゴリズム(MD5、SHA1、DES)
- [ ] ハードコードされた暗号鍵
- [ ] 不適切な乱数生成
- [ ] HTTPSの未使用または不適切な設定
検査パターン:
\`\`\`bash
# 弱い暗号アルゴリズムの検出
grep -rn "md5\\|sha1\\|des\\|rc4\\|Math\\.random" --include="*.js" --include="*.ts" --include="*.py"
\`\`\`
### A05: Injection(インジェクション)
- [ ] SQLインジェクション
- [ ] NoSQLインジェクション
- [ ] コマンドインジェクション
- [ ] LDAPインジェクション
- [ ] XSS(クロスサイトスクリプティング)
検査パターン:
\`\`\`bash
# SQLインジェクションの可能性検出
grep -rn "query.*\\$\\|execute.*\\$\\|\\`.*\\${" --include="*.js" --include="*.ts"
# コマンドインジェクションの検出
grep -rn "exec\\|spawn\\|system\\|shell" --include="*.js" --include="*.ts" --include="*.py"
\`\`\`
### A06: Insecure Design(安全でない設計)
- [ ] レート制限の欠如
- [ ] ビジネスロジックの欠陥
- [ ] 多要素認証の欠如
- [ ] 入力検証スキーマの欠如
### A07: Authentication Failures(認証の問題)
- [ ] 弱いパスワードポリシー
- [ ] ブルートフォース対策の欠如
- [ ] セッション管理の不備
- [ ] 認証情報の平文保存
検査パターン:
\`\`\`bash
# パスワード関連の脆弱性検出
grep -rn "password.*=.*['\"]\\|secret.*=.*['\"]" --include="*.js" --include="*.ts" --include="*.env"
\`\`\`
### A08: Software or Data Integrity Failures(整合性の問題)
- [ ] 署名なしのデシリアライゼーション
- [ ] CI/CDパイプラインの整合性欠如
- [ ] 自動更新の検証不足
### A09: Security Logging and Alerting Failures(ログ・監視の問題)
- [ ] 認証イベントの未記録
- [ ] 失敗ログの欠如
- [ ] ログインジェクションの可能性
### A10: Mishandling of Exceptional Conditions(例外処理の問題)
- [ ] キャッチされない例外
- [ ] エラー時の情報漏洩
- [ ] 不適切なエラーレスポンス
検査パターン:
\`\`\`bash
# 例外処理の不備検出
grep -rn "catch.*{\\s*}\\|catch.*console\\.log" --include="*.js" --include="*.ts"
\`\`\`
## 出力形式
各発見に対して以下の形式で報告:
### [重大度] カテゴリ名: 問題タイトル
**ファイル**: `path/to/file.ts:行番号`
**問題のコード**:
\`\`\`language
脆弱なコード
\`\`\`
**リスク説明**: この脆弱性がもたらすリスクの説明
**修正案**:
\`\`\`language
修正後のコード
\`\`\`
**参考**: OWASP該当ページへのリンク
EOF
|
スキルの動作確認#
1
|
> owasp-scannerスキルを使って、src/ディレクトリのセキュリティスキャンを実行して
|
Claude Codeが自動的にスキルを適用し、OWASP Top 10に基づいた検査を実行します。
依存関係監査スキルの作成#
サードパーティライブラリの脆弱性を検出するスキルを作成します。
SKILL.mdの作成#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
mkdir -p .claude/skills/dependency-audit
cat > .claude/skills/dependency-audit/SKILL.md << 'EOF'
---
name: dependency-audit
description: プロジェクトの依存関係を監査し、既知の脆弱性を検出。npm audit、pip-audit、安全でないバージョン、サプライチェーンリスクの特定で使用。PROACTIVELY use when reviewing package.json, requirements.txt, or any dependency files.
allowed-tools: Read, Bash, Glob
---
# 依存関係セキュリティ監査
プロジェクトの依存関係を監査し、既知の脆弱性やセキュリティリスクを特定します。
## 監査手順
1. **依存関係ファイルの特定**: package.json、requirements.txt、pom.xml等を検出
2. **ツール別監査の実行**: 各エコシステムの監査ツールを使用
3. **結果の集約と優先順位付け**: 重大度別に結果を整理
4. **修正アクションの提案**: アップデートまたは代替ライブラリを提案
## エコシステム別監査コマンド
### Node.js (npm/yarn/pnpm)
\`\`\`bash
# npm監査
npm audit --json 2>/dev/null | head -100
# 詳細レポート
npm audit 2>/dev/null
# 自動修正可能な脆弱性
npm audit fix --dry-run 2>/dev/null
\`\`\`
### Python (pip)
\`\`\`bash
# pip-audit(インストール済みの場合)
pip-audit --format json 2>/dev/null || echo "pip-audit not installed"
# safety(インストール済みの場合)
safety check --json 2>/dev/null || echo "safety not installed"
# requirements.txtから脆弱性チェック
pip-audit -r requirements.txt 2>/dev/null
\`\`\`
### Java (Maven)
\`\`\`bash
# OWASP Dependency Check(プラグイン設定済みの場合)
mvn org.owasp:dependency-check-maven:check 2>/dev/null || echo "Dependency check plugin not configured"
\`\`\`
## 追加チェック項目
### ライセンスリスク
- [ ] GPL系ライセンスの商用利用への影響
- [ ] 未知のライセンス
### 保守状況
- [ ] 長期間更新のないパッケージ
- [ ] 非推奨(deprecated)パッケージ
- [ ] 低ダウンロード数のパッケージ
### ロックファイル整合性
- [ ] package-lock.json/yarn.lockの存在
- [ ] ロックファイルとマニフェストの整合性
## 出力形式
### 脆弱性サマリー
| 重大度 | 件数 | 即時対応 |
|--------|------|----------|
| Critical | X件 | 必須 |
| High | X件 | 推奨 |
| Medium | X件 | 計画的に |
| Low | X件 | 任意 |
### 詳細レポート
各脆弱性について:
**パッケージ**: `package-name@version`
**重大度**: Critical/High/Medium/Low
**CVE**: CVE-XXXX-XXXXX
**影響**: 脆弱性の影響説明
**修正バージョン**: X.X.X以上
**推奨アクション**: `npm update package-name` または代替パッケージの提案
EOF
|
機密情報検出スキルの作成#
ソースコード内の機密情報(APIキー、パスワード、トークン)を検出するスキルを作成します。
SKILL.mdの作成#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
mkdir -p .claude/skills/secret-scanner
cat > .claude/skills/secret-scanner/SKILL.md << 'EOF'
---
name: secret-scanner
description: ソースコード内の機密情報(APIキー、パスワード、トークン、認証情報)を検出。シークレットスキャン、認証情報漏洩防止、コミット前チェックで使用。MUST BE USED before committing code or during security reviews.
allowed-tools: Read, Grep, Glob, Bash
---
# 機密情報スキャナー
ソースコード、設定ファイル、ドキュメント内の機密情報を検出し、漏洩リスクを防止します。
## スキャン対象パターン
### APIキー・トークン
\`\`\`bash
# AWS関連
grep -rn "AKIA[0-9A-Z]{16}" --include="*" 2>/dev/null
grep -rn "aws_secret_access_key\\|aws_access_key_id" --include="*" 2>/dev/null
# Google Cloud
grep -rn "AIza[0-9A-Za-z_-]{35}" --include="*" 2>/dev/null
# GitHub
grep -rn "gh[pousr]_[A-Za-z0-9_]{36}" --include="*" 2>/dev/null
grep -rn "github_pat_[A-Za-z0-9_]{22,}" --include="*" 2>/dev/null
# Slack
grep -rn "xox[baprs]-[0-9]{10,13}-[0-9]{10,13}-[a-zA-Z0-9]{24}" --include="*" 2>/dev/null
# Stripe
grep -rn "sk_live_[0-9a-zA-Z]{24}" --include="*" 2>/dev/null
grep -rn "rk_live_[0-9a-zA-Z]{24}" --include="*" 2>/dev/null
\`\`\`
### パスワード・認証情報
\`\`\`bash
# ハードコードされたパスワード
grep -rn "password\\s*[=:]\\s*['\"][^'\"]*['\"]" --include="*.js" --include="*.ts" --include="*.py" --include="*.java" 2>/dev/null
# 接続文字列
grep -rn "mongodb://\\|postgres://\\|mysql://\\|redis://" --include="*" 2>/dev/null | grep -v ".example\\|.sample"
# Basic認証ヘッダー
grep -rn "Authorization.*Basic" --include="*" 2>/dev/null
\`\`\`
### 秘密鍵・証明書
\`\`\`bash
# RSA秘密鍵
grep -rn "BEGIN RSA PRIVATE KEY\\|BEGIN OPENSSH PRIVATE KEY\\|BEGIN EC PRIVATE KEY" --include="*" 2>/dev/null
# PEM形式の鍵
find . -name "*.pem" -o -name "*.key" 2>/dev/null
\`\`\`
### 環境変数関連
\`\`\`bash
# .envファイルのコミット確認
git ls-files | grep -E "^\\.env$|\\.env\\.[^example]" 2>/dev/null
# .gitignoreの確認
grep -q "^\\.env" .gitignore 2>/dev/null || echo "WARNING: .env not in .gitignore"
\`\`\`
## 除外パターン
以下は誤検知として除外:
- テストファイル内のモック値
- ドキュメント内のサンプル値(`example`、`sample`、`dummy`を含む)
- 環境変数の参照(`process.env.XXX`)
- プレースホルダー(`<YOUR_API_KEY>`形式)
## 出力形式
### [CRITICAL] 機密情報の検出
**ファイル**: `path/to/file.ts:行番号`
**種類**: APIキー / パスワード / 秘密鍵 / トークン
**検出パターン**: 具体的なマッチパターン
**リスク**:
- リポジトリ公開時の認証情報漏洩
- 不正アクセスのリスク
- コンプライアンス違反
**推奨対応**:
1. 即座に該当の認証情報をローテーション
2. 環境変数またはシークレット管理サービスに移行
3. git履歴からの完全削除を検討(git filter-branch等)
**修正例**:
\`\`\`javascript
// Before (危険)
const apiKey = "sk_live_xxxxxxxxxxxxx";
// After (安全)
const apiKey = process.env.STRIPE_API_KEY;
\`\`\`
EOF
|
セキュリティレポート生成スキルの作成#
検出結果を統合し、フォーマットされたレポートを生成するスキルを作成します。
SKILL.mdの作成#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
mkdir -p .claude/skills/security-reporter
cat > .claude/skills/security-reporter/SKILL.md << 'EOF'
---
name: security-reporter
description: セキュリティスキャン結果を集約し、Markdown形式のレポートを生成。セキュリティ監査レポート、脆弱性サマリー、修正計画の作成で使用。
allowed-tools: Read, Write, Bash, Glob
---
# セキュリティレポートジェネレーター
複数のセキュリティスキャン結果を集約し、構造化されたレポートを生成します。
## レポート構成
1. **エグゼクティブサマリー**: 経営層向けの概要
2. **リスク評価**: 重大度別の分布と傾向
3. **詳細findings**: カテゴリ別の脆弱性詳細
4. **修正計画**: 優先順位付きのアクションアイテム
5. **推奨事項**: 長期的なセキュリティ改善提案
## レポートテンプレート
\`\`\`markdown
# セキュリティ監査レポート
**プロジェクト**: [プロジェクト名]
**監査日**: [日付]
**監査バージョン**: [コミットハッシュ/バージョン]
## エグゼクティブサマリー
本監査では、[対象範囲]を対象に、OWASP Top 10:2025に基づくセキュリティ評価を実施しました。
### 総合評価
| 指標 | 値 |
|------|-----|
| 総検出数 | XX件 |
| Critical | XX件 |
| High | XX件 |
| Medium | XX件 |
| Low | XX件 |
| リスクスコア | XX/100 |
### 主要なリスク
1. [最も重大なリスク1]
2. [最も重大なリスク2]
3. [最も重大なリスク3]
## リスク分布
[重大度別の円グラフやバーチャートの説明]
### カテゴリ別分布
| OWASPカテゴリ | 件数 | 最高重大度 |
|--------------|------|------------|
| A01: Broken Access Control | X | High |
| A05: Injection | X | Critical |
| ... | ... | ... |
## 詳細findings
### Critical(即時対応必須)
#### FINDING-001: [タイトル]
- **カテゴリ**: OWASP A0X
- **ファイル**: `path/to/file.ts:XX`
- **CVSS**: X.X
- **CWE**: CWE-XXX
**説明**: [脆弱性の詳細説明]
**影響**: [ビジネスへの影響]
**再現手順**:
1. [手順1]
2. [手順2]
**修正方法**: [具体的な修正コード]
### High(早期対応推奨)
[同様のフォーマットで記載]
### Medium(計画的対応)
[同様のフォーマットで記載]
### Low(改善推奨)
[同様のフォーマットで記載]
## 修正計画
### フェーズ1: 緊急対応(1週間以内)
- [ ] FINDING-001: [対応内容]
- [ ] FINDING-002: [対応内容]
### フェーズ2: 短期対応(1ヶ月以内)
- [ ] FINDING-003: [対応内容]
### フェーズ3: 中期対応(3ヶ月以内)
- [ ] FINDING-004: [対応内容]
## 推奨事項
### プロセス改善
- セキュリティコードレビューの導入
- 定期的な脆弱性スキャンの自動化
### 技術的改善
- WAFの導入検討
- シークレット管理の一元化
## 付録
### 使用ツール
- Claude Code owasp-scanner skill
- npm audit
- [その他のツール]
### 参考資料
- [OWASP Top 10:2025](https://owasp.org/Top10/2025/)
- [CWEリファレンス](https://cwe.mitre.org/)
\`\`\`
## 出力ファイル
レポートは以下のパスに出力:
- `security-reports/YYYY-MM-DD-security-audit.md`
EOF
|
セキュリティレビューサブエージェントの作成#
より高度なセキュリティレビューを行うためのカスタムサブエージェントを作成します。スキルとサブエージェントを組み合わせることで、独立したコンテキストで深い分析が可能になります。
サブエージェントの作成#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
mkdir -p .claude/agents
cat > .claude/agents/security-auditor.md << 'EOF'
---
name: security-auditor
description: 包括的なセキュリティ監査を実行する専門家。コードレビュー、脆弱性評価、ペネトレーションテスト準備、セキュリティ監査レポート作成で使用。PROACTIVELY use for any security-related code review or audit tasks.
tools: Read, Grep, Glob, Bash, Write
model: sonnet
skills: owasp-scanner, dependency-audit, secret-scanner, security-reporter
---
# セキュリティ監査専門エージェント
あなたはCISSP、OSCP、CEH資格を持つシニアセキュリティエンジニアです。アプリケーションセキュリティ、インフラセキュリティ、DevSecOpsの専門知識を持ち、以下の責務を担います。
## 監査アプローチ
### 1. 脅威モデリング
- アプリケーションの攻撃対象領域(Attack Surface)を特定
- データフローを分析し、信頼境界を識別
- STRIDEモデルに基づく脅威分類
### 2. コードレビュー
- OWASP Top 10:2025に基づく体系的レビュー
- セキュアコーディングプラクティスの遵守確認
- ビジネスロジックの脆弱性特定
### 3. 構成レビュー
- セキュリティヘッダーの確認
- 認証・認可設定の検証
- 暗号化設定の評価
### 4. 依存関係分析
- 既知の脆弱性を持つライブラリの特定
- ライセンスコンプライアンスの確認
- サプライチェーンリスクの評価
## 監査実行時の行動規範
1. **網羅性**: すべてのOWASPカテゴリを順次チェック
2. **証拠ベース**: 各findingに具体的なコード例を添付
3. **実用性**: 修正可能で実装可能な推奨事項を提供
4. **優先順位**: リスクベースで問題を分類
## 重大度判定基準
| 重大度 | 基準 |
|--------|------|
| Critical | 認証バイパス、RCE、大規模データ漏洩の可能性 |
| High | 機密データアクセス、権限昇格の可能性 |
| Medium | 限定的な情報漏洩、サービス品質への影響 |
| Low | 情報開示、ベストプラクティス違反 |
## 最終成果物
監査完了時に以下を提供:
1. 重大度別の脆弱性一覧
2. 各脆弱性の詳細説明と修正コード
3. 優先順位付きの修正計画
4. 長期的なセキュリティ改善提案
EOF
|
サブエージェントの使用方法#
1
|
> security-auditorサブエージェントを使って、このプロジェクトの包括的なセキュリティ監査を実行して
|
サブエージェントは自動的に関連するスキルをロードし、独立したコンテキストで監査を実行します。
実践的なワークフロー例#
シナリオ1: プルリクエスト前のセキュリティチェック#
1
|
> プルリクエストを作成する前に、今回の変更に対してセキュリティチェックを実行して
|
Claude Codeは以下の手順で自動的にチェックを実行します。
git diffで変更ファイルを特定
- 変更されたファイルに対してowasp-scannerスキルを適用
- secret-scannerスキルで機密情報の混入をチェック
- 問題があれば報告と修正提案を提示
シナリオ2: 新しい依存関係の追加時#
1
|
> dependency-auditスキルを使って、新しく追加したlodash@4.17.21の安全性を確認して
|
シナリオ3: 定期セキュリティ監査#
1
|
> security-auditorエージェントを使って、四半期セキュリティ監査を実施し、レポートをsecurity-reports/に保存して
|
CI/CDパイプラインへの統合#
セキュリティスキャンをCI/CDパイプラインに組み込むことで、継続的なセキュリティ検証が可能になります。
GitHub Actionsでの活用例#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
name: Security Scan
on:
pull_request:
branches: [main, develop]
jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm ci
- name: Run npm audit
run: npm audit --audit-level=high
continue-on-error: true
- name: Run Claude Code Security Scan
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
npx claude-code --print "owasp-scannerスキルを使って、src/ディレクトリのセキュリティスキャンを実行し、結果をJSON形式で出力して" > security-scan-results.json
- name: Upload Security Report
uses: actions/upload-artifact@v4
with:
name: security-report
path: security-scan-results.json
|
スキャン結果のSlack通知#
1
2
3
4
5
6
7
8
9
10
11
|
# カスタムスラッシュコマンドとして保存
mkdir -p .claude/commands
cat > .claude/commands/security-scan-and-notify.md << 'EOF'
security-auditorエージェントを使って以下を実行してください:
1. プロジェクト全体のセキュリティスキャンを実行
2. Critical/Highの問題があれば、Slack通知用のサマリーを作成
3. 詳細レポートをsecurity-reports/latest.mdに保存
$ARGUMENTSで指定されたディレクトリがあれば、そのディレクトリを優先的にスキャンしてください。
EOF
|
言語別セキュリティチェックの拡張#
JavaScript/TypeScript向け追加チェック#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
cat >> .claude/skills/owasp-scanner/SKILL.md << 'EOF'
## JavaScript/TypeScript固有のチェック
### プロトタイプ汚染
\`\`\`bash
grep -rn "__proto__\\|constructor\\[\\|Object\\.assign" --include="*.js" --include="*.ts"
\`\`\`
### eval/Functionの危険な使用
\`\`\`bash
grep -rn "eval(\\|new Function(\\|setTimeout(.*\\$\\|setInterval(.*\\$" --include="*.js" --include="*.ts"
\`\`\`
### DOM-based XSS
\`\`\`bash
grep -rn "innerHTML\\|outerHTML\\|document\\.write\\|insertAdjacentHTML" --include="*.js" --include="*.ts" --include="*.jsx" --include="*.tsx"
\`\`\`
EOF
|
Python向け追加チェック#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
cat >> .claude/skills/owasp-scanner/SKILL.md << 'EOF'
## Python固有のチェック
### pickle脆弱性
\`\`\`bash
grep -rn "pickle\\.load\\|pickle\\.loads\\|cPickle" --include="*.py"
\`\`\`
### 安全でないYAML読み込み
\`\`\`bash
grep -rn "yaml\\.load(" --include="*.py" | grep -v "Loader=yaml\\.SafeLoader\\|safe_load"
\`\`\`
### subprocess脆弱性
\`\`\`bash
grep -rn "subprocess.*shell=True\\|os\\.system\\|os\\.popen" --include="*.py"
\`\`\`
EOF
|
ベストプラクティス#
セキュリティレビュースキルを効果的に活用するためのベストプラクティスをまとめます。
スキル設計のポイント#
| ポイント |
説明 |
| 明確な説明文 |
descriptionにトリガーワード(security、vulnerability、audit等)を含める |
| 適切なツール制限 |
読み取り専用ツールに制限し、意図しない変更を防止 |
| 段階的チェック |
チェックリスト形式で網羅性を確保 |
| 具体的な出力形式 |
重大度、ファイル、修正案を含む構造化出力 |
誤検知の削減#
flowchart LR
A[検出結果] --> B{除外パターンに<br>マッチ?}
B -->|Yes| C[除外]
B -->|No| D{テストファイル?}
D -->|Yes| E[低優先度]
D -->|No| F{サンプル値?}
F -->|Yes| C
F -->|No| G[報告対象]継続的な改善#
- 検出パターンの更新: 新しい脆弱性パターンを定期的に追加
- 誤検知の分析: 除外ルールを適宜調整
- チームでの共有: プロジェクトスキルをGitで管理し、改善を共有
まとめ#
Claude CodeのAgent Skillsを活用したセキュリティレビューの自動化について解説しました。本記事で作成したスキルとサブエージェントを活用することで、以下のことが実現できます。
- OWASP Top 10に基づく体系的な脆弱性検出: owasp-scannerスキルによる網羅的なコードスキャン
- 依存関係の安全性確保: dependency-auditスキルによるサプライチェーンリスクの特定
- 機密情報漏洩の防止: secret-scannerスキルによるハードコードされた認証情報の検出
- 効率的なレポート生成: security-reporterスキルによる構造化されたセキュリティレポートの自動生成
- 包括的な監査の実行: security-auditorサブエージェントによる専門的な監査
セキュリティレビューは一度きりではなく、継続的に実施することが重要です。本記事で紹介したスキルをCI/CDパイプラインに統合し、開発プロセスの一部として定着させることで、セキュアなソフトウェア開発を実現してください。
参考リンク#