mcpField
S
secrets-scan

secrets-scan

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

secrets-scan について

secrets-scanは、ソースコードやGit履歴に含まれるハードコードされた認証情報や機密文字列を検出するエージェントスキルです。既知のパターンに加え、任意のエントロピー検査を使え、対象範囲や除外も指定できます。

主な機能

  1. 01サービス別の認証情報パターン検出
  2. 02Git履歴内の秘密情報を検索
  3. 03高エントロピー文字列の分析
  4. 04パスやファイルパターンで範囲指定
  5. 05ファイル除外と行内無視設定

活用シーン

  1. 01コミット前のソースコード確認
  2. 02現行ファイルから削除済みでも履歴に残る認証情報の検索
  3. 03指定ディレクトリやファイル形式のスキャン
  4. 04CIスキャン設定前の検出結果確認

インストール

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

$npx skills add https://github.com/jwynia/agent-skills --skill secrets-scan

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

詳細

シークレットスキャン

ソースコード内にハードコードされた認証情報や機密データを詳細に検出します。

クイックスタート

/secrets-scan                    # Scan current directory
/secrets-scan --scope src/       # Scan specific path
/secrets-scan --entropy          # Include high-entropy detection
/secrets-scan --git-history      # Check git commit history

このスキルで検出できるもの

信頼度の高いパターン

誤検知率が非常に低いパターンです。

種類パターン例プロバイダー
AWS アクセスキーAKIA...(20 文字)AWS
AWS シークレットキー40 文字の Base64AWS
GitHub トークンghp_、gho_、ghu_、ghs_、ghr_GitHub
GitLab トークンglpat-...GitLab
Slack トークンxoxb-、xoxp-、xoxa-Slack
Stripe キーsk_live_、rk_live_Stripe
TwilioSK...(34 文字)Twilio
SendGridSG. の後に Base64SendGrid
秘密鍵-----BEGIN (RSA|EC|DSA)?PRIVATE KEY-----各種
Google API キーAIza...(39 文字)Google
信頼度が中程度のパターン

コンテキストの検証が必要な場合があります。

種類パターン備考
汎用 API キーapi[_-]?key.*=.*['"][a-zA-Z0-9]{16,}変数名
汎用シークレットsecret.*=.*['"][^'"]+コンテキストが必要
パスワードpassword.*=.*['"][^'"]+設定値の場合があります
接続文字列://[^:]+:[^@]+@DB 認証情報
Bearer トークンBearer [a-zA-Z0-9_-]+ヘッダー/コード内
高エントロピー検出

エントロピー分析によって、潜在的なシークレットを検出します。

/secrets-scan --entropy

次のような高いランダム性を持つ文字列を検出します。

  • Base64 でエンコードされたシークレット
  • 16 進数でエンコードされたトークン
  • カスタム形式の API キー

検出パターン

クラウドプロバイダーのキー
# AWS
AKIA[0-9A-Z]{16}                           # Access Key ID
[A-Za-z0-9/+=]{40}                         # Secret Access Key (context needed)

# Azure
[a-zA-Z0-9+/=]{88}                         # Storage Account Key

# GCP
AIza[0-9A-Za-z_-]{35}                      # API Key
[0-9]+-[a-z0-9]{32}\.apps\.googleusercontent\.com  # OAuth Client
バージョン管理トークン
# GitHub
gh[pousr]_[A-Za-z0-9]{36,}                 # Personal/OAuth/User/Repo/App
github_pat_[A-Za-z0-9]{22}_[A-Za-z0-9]{59} # Fine-grained PAT

# GitLab
glpat-[A-Za-z0-9-_]{20,}                   # Personal Access Token

# Bitbucket
[a-zA-Z0-9]{24}                            # App Password (context needed)
決済・金融
# Stripe
sk_live_[a-zA-Z0-9]{24,}                   # Secret Key
rk_live_[a-zA-Z0-9]{24,}                   # Restricted Key
pk_live_[a-zA-Z0-9]{24,}                   # Publishable Key

# Square
sq0[a-z]{3}-[A-Za-z0-9_-]{22,}            # Access Token

# PayPal
access_token\$[a-zA-Z0-9-_.]+             # OAuth Token
コミュニケーションサービス
# Slack
xox[bpas]-[0-9]{10,}-[a-zA-Z0-9]{24,}     # Bot/User/App Token

# Twilio
SK[a-f0-9]{32}                             # API Key SID
[a-f0-9]{32}                               # Auth Token (context)

# SendGrid
SG\.[a-zA-Z0-9_-]{22}\.[a-zA-Z0-9_-]{43}  # API Key
データベース接続文字列
# PostgreSQL/MySQL
(postgres|mysql|mariadb)://[^:]+:[^@]+@[^/]+/\w+

# MongoDB
mongodb(\+srv)?://[^:]+:[^@]+@

# Redis
redis://:[^@]+@
秘密鍵
-----BEGIN (RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----
-----BEGIN PGP PRIVATE KEY BLOCK-----
JWT とセッション
eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+   # JWT

スキャンオプション

基本スキャン
/secrets-scan

信頼度の高いパターンのみをスキャンします。

エントロピー分析を使用
/secrets-scan --entropy

高エントロピー文字列の検出を追加します(検出件数が増え、誤検知も発生する場合があります)。

対象範囲を指定
/secrets-scan --scope src/api/
/secrets-scan --scope "*.ts"
Git 履歴スキャン
/secrets-scan --git-history
/secrets-scan --git-history --since "2024-01-01"

コミットされ、その後削除されたシークレットをコミット履歴からスキャンします。

除外パターン
/secrets-scan --exclude "*.test.ts" --exclude "fixtures/"

出力形式

検出結果レポート
SECRETS SCAN RESULTS
====================

High-Confidence Findings: 2
Medium-Confidence Findings: 5
Entropy Findings: 3

[!] CRITICAL: AWS Access Key
    File: src/config/aws.ts:15
    Pattern: AKIAIOSFODNN7EXAMPLE
    Action: Rotate immediately, check CloudTrail

[!] CRITICAL: GitHub Token
    File: .env.example:8
    Pattern: ghp_xxxx...xxxx (redacted)
    Action: Revoke token, remove from history

[H] HIGH: Database Password
    File: docker-compose.yml:23
    Pattern: password: supersecret
    Action: Use environment variable

[M] MEDIUM: Possible API Key
    File: src/services/api.ts:44
    Pattern: apiKey = "a1b2c3..."
    Context: May be test value
概要統計
Files scanned: 342
Patterns checked: 127
Time elapsed: 2.3s

By Severity:
  Critical: 2
  High: 5
  Medium: 8

By Type:
  Cloud credentials: 2
  API keys: 4
  Passwords: 3
  Private keys: 1
  Other: 5

誤検知への対処

よくある誤検知
  1. 例示用/プレースホルダーの値

    • AKIAIOSFODNN7EXAMPLE(AWS の例)
    • sk_test_...(Stripe のテストキー)
    • your-api-key-here
  2. テスト用フィクスチャ

    • テストファイル内のモック認証情報
    • フィクスチャデータ
  3. ドキュメント

    • README の例
    • API ドキュメント
無視ファイル

.secrets-scan-ignore を作成します。

# Ignore test fixtures
**/fixtures/**
**/__mocks__/**
*.test.ts
*.spec.js

# Ignore documentation
docs/**
*.md

# Ignore specific false positives
src/constants.ts:EXAMPLE_KEY

# Inline ignore comment
# secrets-scan-ignore: test fixture
インラインで無視
// secrets-scan-ignore: example value
const EXAMPLE_KEY = "AKIAIOSFODNN7EXAMPLE";

修正手順

シークレットが見つかった場合
  1. 直ちに行うこと

    • 認証情報を直ちにローテーションします
    • 不正使用がないかアクセスログを確認します
    • コード/設定から削除します
  2. Git 履歴をクリーンアップ

    # Remove secret from history
    git filter-branch --force --index-filter \
      'git rm --cached --ignore-unmatch path/to/file' \
      --prune-empty --tag-name-filter cat -- --all
    
    # Or use BFG Repo Cleaner
    bfg --replace-text secrets.txt repo.git
    
  3. 今後のコミットを防止

    • pre-commit フックを追加します
    • CI でシークレットスキャンを設定します
予防策
# Install pre-commit hook
npx husky add .husky/pre-commit "npx secrets-scan --staged"

統合

CI/CD パイプライン
# GitHub Actions
- name: Secrets Scan
  run: |
    /secrets-scan --fail-on-findings
    exit $?

# Exit codes:
# 0 = No findings
# 1 = Findings detected
# 2 = Error during scan
Pre-Commit フック
#!/bin/sh
# .husky/pre-commit
files=$(git diff --cached --name-only)
/secrets-scan --files "$files"

関連スキル

  • /security-scan - セキュリティの包括的な分析
  • /config-scan - 設定のセキュリティ
  • /dependency-scan - パッケージの脆弱性

コメント