Hello there, ('ω')ノ
APIキーは、クライアント(アプリケーション、ユーザ、または他のサービス)がAPIサーバと通信するときに使用する認証(AuthN)および認可(AuthZ)の基本メカニズムです。
1. APIキーとは?
- APIキーの役割:
APIキーは、クライアントがAPIにアクセスする際に、APIサーバがクライアントを認識するために使用される一意の文字列です。 - シングルキーとペアキー:
- シングルキー: 1つのキーでアクセスを管理。
- ペアキー: 1つのキーがユーザ名/ログイン名として機能し、もう1つがパスワードのように動作。
なぜAPIキーを使用するのか?
- ユーザ名/パスワードの認証は人間向け。APIキーはアプリケーション間の通信に特化。
- 1つのユーザに複数のAPIキーを割り当て、異なる権限を付与可能(AuthZの柔軟性)。
2. APIキーの管理とセキュリティ
2.1 APIキーの提供方法
- 全リクエストに必須: APIキーはすべてのリクエストに含める必要があります。
- 保存方法:
- 環境変数に格納(推奨)。
- 設定ファイルに保存(ただし暗号化またはアクセス制御が必須)。
- 漏洩リスク:
開発者がAPIキーを公開リポジトリやHTML/JavaScriptファイルにハードコードすると、攻撃者がアクセスする可能性があります。
3. APIキーの検出ツール
以下のツールは、APIキーの検出やセキュリティ管理に役立ちます:
ツール名 | 概要 |
---|---|
badsecrets | 多様なプラットフォームで秘密情報を検出するライブラリ。 |
Gitleaks | Gitリポジトリ内のキーを検出する最も人気のあるツール。 |
KeyFinder | Web閲覧中にキーを検出するChrome拡張機能。 |
Keyhacks | 公開されたバグバウンティプログラムで見つかったキーを集約。 |
Mantra | HTMLやJavaScriptファイルからキーを検索。 |
Nuclei Templates | APIエンドポイントに対してキーをテスト可能。 |
TruffleHog | GitHubリポジトリやコンテナイメージで秘密情報を検出。 |
4. TruffleHogでAPIキーを検出する手順
4.1 TruffleHogの基本使用例
以下のコマンドを使用してGitHubリポジトリ内でキーを検索します:
$ docker run --rm -it -v "$PWD:/pwd" trufflesecurity/trufflehog:latest github --repo https://github.com/username/repo --issue-comments --pr-comments
コマンドのポイント
--repo
: 対象のリポジトリURLを指定。--issue-comments
: イシューのコメントもスキャン。--pr-comments
: プルリクエストのコメントもスキャン。
出力例
TruffleHog. Unearth your secrets. 2024-11-03T12:12:34Z info trufflehog running source... 2024-11-03T12:12:36Z info trufflehog finished scanning { "verified_secrets": 0, "unverified_secrets": 0, "scan_duration": "2.502645278s" }
結果: この例では秘密情報は見つかりませんでした。
4.2 Secrets Patterns DBとの連携
TruffleHogの検出能力を拡張するため、Secrets Patterns DBを使用して正規表現パターンを追加します。
手順
- Secrets Patterns DBのルールをJSON形式に変換:
$ ./convert-rules.py --db ../db/rules-stable.yml --type trufflehog > /tmp/regex.json
- JSONパターンを使用してTruffleHogを実行:
$ ./trufflehog github --repo https://github.com/username/repo --include-paths=/tmp/regex.json --issue-comments --pr-comments
結果
追加パターンを使用してスキャンを強化できます。ただし、ツール間のバージョン互換性に注意が必要です。
5. セキュリティ強化のポイント
キーの漏洩防止
- キーを環境変数に保存し、コードにハードコードしない。
- 公開リポジトリにキーをコミットしない。
キーの監視
- 定期的にAPIキーをスキャンして漏洩を確認。
- 使用状況を監視し、不審な活動を検知。
キーのローテーション
- 定期的にAPIキーを更新し、古いキーを無効化。
権限管理
- 各キーに必要最小限の権限を割り当てる(プリンシプル・オブ・リースト・プリビレッジ)。
まとめ
APIキーは、APIセキュリティの基盤となる重要な認証メカニズムですが、適切に管理しないとリスクを伴います。GitleaksやTruffleHogなどのツールを活用して、漏洩リスクを定期的にチェックしましょう。また、キーの保存、監視、ローテーションを徹底することで、APIの安全性を高めることができます。
Best regards, (^^ゞ