security-auditor について
security-auditorは、リリース準備や変更レビューを行う開発チーム向けのコードベースセキュリティスキャンスキルです。依存関係、シークレット、静的解析を組み合わせ、検出結果の優先順位付けと修正方法を示します。
主な機能
- 01依存関係の脆弱性スキャン
- 02シークレットと認証情報の検出
- 03OWASPに基づく静的チェック
- 04言語別の脆弱性チェック
- 05統合セキュリティレポートの生成
- 06優先順位付けと修正のガイド
活用シーン
- 01デプロイ前のプロジェクト監査
- 02既知の依存関係脆弱性の確認
- 03コードベース内のシークレット検出
- 04プルリクエストのセキュリティレビュー
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ curiositech/ some_claude_skills --skill security-auditorインストール後、Claude Code で/security-auditorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.claude-plugin/plugin.jsonreferences/owasp-top-10-2024.mdscripts/detect-secrets.shfull-audit.showasp-check.py詳細
セキュリティ監査
コードベースを包括的にセキュリティスキャンします。脆弱性がインシデントになる前に特定します。修正方法のガイダンスを含む、実行可能な検出結果に重点を置きます。
使用する場面
次の場合に使用します:
- デプロイ前のセキュリティ監査
- 依存関係の脆弱性スキャン
- シークレット/認証情報の漏えい検出
- コードレベルのSAST(静的アプリケーションセキュリティテスト)
- 関係者向けのセキュリティ体制レポート
- OWASP Top 10への準拠チェック
- PR前のセキュリティレビュー
次の場合は使用しないでください:
- ランタイムセキュリティ(WAF、レート制限)— インフラストラクチャツールを使用してください
- ネットワークセキュリティ/ファイアウォールルール — クラウド/DevOpsスキルを使用してください
- SOC2/HIPAA/PCIへの準拠 — 法務/組織的なプロセスが必要です
- ペネトレーションテストの実行 — これは検出であり、悪用ではありません
クイックスタート
完全なセキュリティ監査
# Run comprehensive scan
./scripts/full-audit.sh /path/to/project
# Output: security-report.json + summary
クイックチェック
# Dependency vulnerabilities only
npm audit --json > deps-audit.json
# Secret detection only
./scripts/detect-secrets.sh /path/to/project
# OWASP check specific file
./scripts/owasp-check.py /path/to/file.js
主なスキャン機能
1. 依存関係のスキャン
| パッケージマネージャー | コマンド | 重大度レベル |
|---|---|---|
| npm | npm audit --json | critical、high、moderate、low |
| yarn | yarn audit --json | npmと同じ |
| pip | pip-audit --format json | critical、high、medium、low |
| cargo | cargo audit --json | 同じ |
判断フロー:
Critical severity found?
├── YES → Block deployment, immediate fix required
│ └── Check if patch available → npm audit fix --force
├── NO → High severity?
├── YES → Fix within sprint, document if deferred
└── NO → Low/Moderate → Track, fix during maintenance
2. シークレットの検出
リスクの高いパターン:
- APIキー:「key」、「api」、「secret」の近くにある
/[A-Za-z0-9_]{20,}/ - AWS認証情報:
AKIA[0-9A-Z]{16} - 秘密鍵:
-----BEGIN (RSA|EC|OPENSSH) PRIVATE KEY----- - JWTトークン:
eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+ - 接続文字列:
://[^:]+:[^@]+@
エントロピー分析:
- 20文字を超える文字列でシャノンエントロピーが4.5を超える場合は、疑わしいものとして扱います
- ソース内のBase64エンコードされたデータは調査します
誤検出への対処:
Secret-like pattern found?
├── In test file? → Lower severity, document
├── In example/docs? → Check if placeholder
├── High entropy + near "password"/"secret" → High confidence
└── In .env.example? → Acceptable if placeholder values
3. OWASP Top 10の静的解析
| # | 脆弱性 | 検出パターン |
|---|---|---|
| A01 | アクセス制御の不備 | ルートに認証チェックがない |
| A02 | 暗号化の失敗 | 脆弱なアルゴリズム(パスワードにMD5、SHA1を使用) |
| A03 | インジェクション | パラメーター化されていないクエリ、eval()、innerHTML |
| A04 | 安全でない設計 | 認証情報のハードコード、レート制限の欠如 |
| A05 | セキュリティ設定の不備 | 本番環境でのデバッグモード、デフォルトの認証情報 |
| A06 | 脆弱なコンポーネント | 依存関係に既知のCVEがある |
| A07 | 認証の失敗 | 脆弱なパスワードポリシー、セッションの問題 |
| A08 | 完全性の失敗 | 署名されていない更新、信頼できないデシリアライズ |
| A09 | ログ記録の失敗 | ログ内の機密データ、監査証跡の欠如 |
| A10 | SSRF | 検証されていないURL入力をfetch/requestに渡す |
4. 言語固有のチェック
JavaScript/TypeScript:
eval()、new Function()— コードインジェクションinnerHTML、outerHTML— XSSの攻撃経路document.write()— DOMベースのXSS- ユーザー入力を使った
child_process.exec()— コマンドインジェクション - タイムアウトのない正規表現 — ReDoSの脆弱性
Python:
- 信頼できないデータを使った
pickle.loads()— 任意コード実行 Loader=SafeLoaderを指定しないyaml.load()— コードインジェクションsubprocess.shell=True— コマンドインジェクションeval()、exec()— コードインジェクション- SQL文字列の連結 — SQLインジェクション
SQL:
- クエリ内での文字列連結 — SQLインジェクション
LIKE '%' + input + '%'— ワイルドカードを介したインジェクション- パラメーター化の欠如 — 重大な脆弱性
アンチパターン
アンチパターン:隠すことで安全を確保
例:「このハードコードされたパスワードは誰にも見つからない」 問題点:ソース内のシークレットはいずれ必ず漏えいします 代わりに:環境変数、シークレットマネージャーを使い、シークレットをハードコードしないでください
アンチパターン:監査疲れ
例:検出結果が500件あり、すべて「中程度」で、チームが無視している 問題点:重大な問題がノイズに埋もれます 代わりに:悪用されやすさに基づいて優先順位を付け、最初は重大/高のみを対象にしてください
アンチパターン:理解せずに修正
例:レビューせずに npm audit fix --force を実行する
問題点:破壊的変更を引き起こす可能性があり、根本原因にも対処できません
代わりに:各修正をレビューし、脆弱性を理解したうえで、修正後にテストしてください
アンチパターン:一度きりの監査
どのようなものか:「昨年、セキュリティ監査を実施しました」 なぜ問題なのか:CVE は毎日新たに見つかり、コードは絶えず変更されます 代わりに:CI/CD に統合し、最低でも週次で自動スキャンを実施します
セキュリティレポートの形式
{
"summary": {
"critical": 0,
"high": 2,
"medium": 5,
"low": 12,
"informational": 8
},
"findings": [
{
"id": "SEC-001",
"severity": "high",
"category": "A03:Injection",
"title": "SQL Injection in user search",
"location": "src/api/users.js:45",
"description": "User input concatenated directly into SQL query",
"evidence": "const query = `SELECT * FROM users WHERE name = '${input}'`",
"remediation": "Use parameterized queries: db.query('SELECT * FROM users WHERE name = $1', [input])",
"references": ["https://owasp.org/www-community/attacks/SQL_Injection"]
}
],
"recommendations": [
"Implement parameterized queries across all database access",
"Add input validation layer",
"Enable SQL query logging for monitoring"
]
}
CI/CD との統合
GitHub Actions の例
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run security audit
run: |
npm audit --json > audit.json
./scripts/detect-secrets.sh . > secrets.json
./scripts/generate-report.py
- name: Fail on critical
run: |
if jq '.summary.critical > 0' report.json; then
echo "Critical vulnerabilities found!"
exit 1
fi
スクリプト(scripts/ フォルダー内)
| スクリプト | 目的 |
|---|---|
full-audit.sh | 包括的なセキュリティスキャン |
detect-secrets.sh | 高エントロピー文字列とパターンの検出 |
owasp-check.py | OWASP Top 10 の静的解析 |
generate-report.py | 検出結果を統合レポートにまとめる |
エキスパートと初心者のアプローチ
| 初心者 | エキスパート |
|---|---|
| リリース前に一度だけ監査を実施する | CI/CD に統合し、コミットごとに実施する |
| ツールの出力だけに注目する | 脆弱性の背景を理解する |
| すべて修正するか、何も修正しない | 悪用可能性に基づいてトリアージする |
| 1 つのスキャナーを使う | 複数のツールを組み合わせる |
| 誤検知を無視する | 検出ルールを調整する |
成功指標
| 指標 | 目標 |
|---|---|
| 本番環境へのデプロイ前の重大/高リスク | 0 |
| 重大な問題の平均修正時間 | < 24 時間 |
| 誤検知率 | < 10% |
| スキャン範囲 | デプロイ可能なコードの 100% |
参考ファイル
references/owasp-top-10-2024.md- OWASP の詳細なガイダンスreferences/secret-patterns.md- 包括的な正規表現パターンreferences/remediation-playbook.md- 脆弱性の種類ごとの修正ガイダンスreferences/ci-cd-templates.md- 統合例scripts/- 実用的なセキュリティスキャンスクリプト
検出対象:依存関係の CVE | シークレットの漏えい | インジェクション脆弱性 | OWASP 違反 | セキュリティ設定の誤り
併用対象:site-reliability-engineer(デプロイゲート)| code-review(PR のセキュリティチェック)