Shikata Ga Nai

Private? There is no such things.

APIキーとその管理に関する基本とツールの使い方についてまとめてみた

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を使用して正規表現パターンを追加します。

手順

  1. Secrets Patterns DBのルールをJSON形式に変換:
   $ ./convert-rules.py --db ../db/rules-stable.yml --type trufflehog > /tmp/regex.json
  1. JSONパターンを使用してTruffleHogを実行:
   $ ./trufflehog github --repo https://github.com/username/repo --include-paths=/tmp/regex.json --issue-comments --pr-comments

結果

追加パターンを使用してスキャンを強化できます。ただし、ツール間のバージョン互換性に注意が必要です。


5. セキュリティ強化のポイント

  1. キーの漏洩防止

    • キーを環境変数に保存し、コードにハードコードしない。
    • 公開リポジトリにキーをコミットしない。
  2. キーの監視

    • 定期的にAPIキーをスキャンして漏洩を確認。
    • 使用状況を監視し、不審な活動を検知。
  3. キーのローテーション

    • 定期的にAPIキーを更新し、古いキーを無効化。
  4. 権限管理

    • 各キーに必要最小限の権限を割り当てる(プリンシプル・オブ・リースト・プリビレッジ)。

まとめ

APIキーは、APIセキュリティの基盤となる重要な認証メカニズムですが、適切に管理しないとリスクを伴います。GitleaksやTruffleHogなどのツールを活用して、漏洩リスクを定期的にチェックしましょう。また、キーの保存、監視、ローテーションを徹底することで、APIの安全性を高めることができます。

Best regards, (^^ゞ