HackerOne ログを収集する

以下でサポートされています。

このドキュメントでは、Webhook を使用して Google Security Operations にログを push するように HackerOne を構成する方法について説明します。

HackerOne は、脆弱性の調整とバグ発見報奨金プログラムのプラットフォームです。組織とセキュリティ研究者をつなぎ、セキュリティの脆弱性を特定して修正します。このプラットフォームは、バグ報奨金プログラム、脆弱性開示プログラム、ペンテスト、ソフトウェア開発ライフサイクル全体にわたる継続的なセキュリティ テストを提供します。

始める前に

  • 次の前提条件を満たしていることを確認します。

  • Google SecOps インスタンス

  • Professional または Enterprise ティアの HackerOne プログラム(ウェブフックはこれらのティアでのみ利用可能)

  • HackerOne プログラム設定に対する管理者権限

  • Google Cloud コンソールへのアクセス(API キーの作成用)

Google SecOps で Webhook フィードを作成する

フィードを作成する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [Add New Feed] をクリックします。
  3. 次のページで、[単一のフィードを構成する] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: HackerOne Webhook)。
  5. [Source type] として [Webhook] を選択します。
  6. [ログタイプ] として [HackerOne] を選択します。
  7. [次へ] をクリックします。
  8. 次の入力パラメータの値を指定します。
    • Split delimiter: 空欄のままにします。各 Webhook リクエストには、1 つの JSON イベントが含まれています。
    • Asset namespace: アセットの名前空間。
    • Ingestion labels: このフィードのイベントに適用されるラベル。
  9. [次へ] をクリックします。
  10. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

秘密鍵を生成して保存する

フィードを作成したら、認証用のシークレット キーを生成する必要があります。

  1. フィードの詳細ページで、[秘密鍵を生成] をクリックします。
  2. ダイアログに秘密鍵が表示されます。
  3. 秘密鍵をコピーして安全に保存します。

重要: 秘密鍵は一度しか表示されず、後で取得することはできません。秘密鍵を紛失した場合は、新しい秘密鍵を生成する必要があります。

フィード エンドポイントの URL を取得する

  1. フィードの [詳細] タブに移動します。
  2. [エンドポイント情報] セクションで、[フィードのエンドポイント URL] をコピーします。
  3. URL の形式は次のとおりです。

    https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import
    

    ここで、{region} は Google SecOps インスタンスのリージョン(us、europe、asia-southeast1 など)、{parent} は projects/<PROJECT_ID>/locations/<LOCATION>/instances/<INSTANCE_ID>/logTypes/<LOG_TYPE> 形式のリソースパスです。

  4. 次の手順で使用するために、この URL を保存します。

  5. [完了] をクリックします。

Google Cloud API キーを作成する

Chronicle では、認証に API キーが必要です。Google Cloud コンソールで制限付き API キーを作成します。

API キーを作成する

  1. Google Cloud コンソールの [認証情報] ページに移動します。
  2. プロジェクト(Google SecOps インスタンスに関連付けられているプロジェクト)を選択します。
  3. [認証情報を作成] > [API キー] をクリックします。
  4. API キーが作成され、ダイアログに表示されます。
  5. [API キーを編集] をクリックして、キーを制限します。

API キーを制限する

  1. [API キー] の設定ページで、次の操作を行います。
    • [名前]: わかりやすい名前を入力します(例: Chronicle HackerOne Webhook API Key)。
  2. [API の制限] で次の操作を行います。
    1. [キーを制限] を選択します。
    2. [API を選択] プルダウンで、[Google SecOps API](または [Chronicle API])を検索して選択します。
  3. [保存] をクリックします。
  4. ページ上部の [API キー] フィールドから API キーの値をコピーします。
  5. API キーを安全に保存します。

HackerOne Webhook を構成する

Webhook URL を作成する

Google SecOps エンドポイント URL、API キー、秘密鍵を 1 つの URL に結合します。API キーとシークレット キーの両方をクエリ パラメータとして追加する必要があります。

URL 形式:

```none
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
```

例:

```none
https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234...
```

次のように置き換えます。 - <ENDPOINT_URL>: フィードのエンドポイント URL を取得するセクションのフィードのエンドポイント URL。- <API_KEY>: Google Cloud API キーを作成するセクションの Google Cloud API キー。- <SECRET_KEY>: シークレット キーを生成して保存するセクションのシークレット キー。

重要: Google SecOps のシークレット キーを HackerOne の [Secret] フィールドに入力しないでください。HackerOne の [Secret] フィールドは、HMAC ペイロード署名検証(X-H1-Signature ヘッダー)に使用されます。これは、Google SecOps Webhook 認証とは別のメカニズムです。Google SecOps のシークレットを HackerOne の [Secret] フィールドに配置すると、HackerOne はその値を Google SecOps 認証情報として渡さないため、403 Forbidden エラーが発生します。代わりに、ペイロード URL のクエリ パラメータとして key と secret の両方を追加します。

HackerOne で Webhook を作成する

  1. HackerOne にログインして、プログラムに移動します。
  2. [エンゲージメント] に移動し、設定するプログラムのその他メニューをクリックして、[設定] をクリックします。
  3. [Automation] > [Webhooks] に移動します。
  4. [New webhook] をクリックします。
  5. 次の構成情報を指定します。
    • ペイロード URL: 上記の API キーとシークレットを含む完全な URL を貼り付けます。例: https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234...
    • シークレット: このフィールドは空白のままにします。
  6. Webhook をトリガーするイベントを選択します。次のいずれかを選択します。
    • Send me everything: すべてのイベントが Webhook をトリガーします。
    • 個別のイベントを指定する: Google SecOps に送信する特定のイベントを選択します。
  7. [Add webhook] をクリックします。

Webhook をテストする

  1. Webhook の構成ページで、[リクエストをテスト] をクリックして、構成済みのペイロード URL にリクエストの例を送信します。
  2. レスポンスが HTTP 200 であることを確認します。
  3. Webhook をクリックして詳細を表示します。
  4. [Recent deliveries] セクションで、最近の配信が成功ステータス(HTTP 200)を示していることを確認します。
  5. 配信をクリックすると、POST ペイロード リクエストが表示されます。

エラー(HTTP 403)が表示された場合: API キーとシークレット キーがペイロード URL のクエリ パラメータとして正しく追加されていることを確認します。HackerOne の [Secret] フィールドが空白であることを確認します。- HTTP 401: API キーが有効で、Google SecOps API に制限されていることを確認します。- HTTP 404: エンドポイント URL が正しく、完全なパス(/v1/{parent}/logs:import)が含まれていることを確認します。

Google SecOps で取り込みを確認する

  1. Google SecOps で、[SIEM 設定] > [フィード] に移動します。
  2. HackerOne Webhook フィードを見つけます。
  3. [ステータス] 列を確認します([アクティブ] になっているはずです)。
  4. [Events received] カウントを確認します(増加しているはずです)。
  5. [Last succeeded on](前回の成功日時)のタイムスタンプを確認します(最近の日付である必要があります)。

Webhook の制限とベスト プラクティス

リクエストに関する上限

| Limit | Value |
|-------|-------|
| **Max request size** | 4 MB |
| **Max QPS (queries per second)** | 15,000 |
| **Request timeout** | 30 seconds |
| **Retry behavior** | Automatic with exponential backoff |

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
attributes.cleared, attributes.rules_of_engagement_signed, attributes.identity_verified, attributes.background_checked, attributes.citizenship_verified, attributes.residency_verified, type, attributes.title, attributes.main_state, attributes.state, relationships.reporter.data.type, relationships.reporter.data.attributes.reputation, relationships.reporter.data.attributes.signal, relationships.reporter.data.attributes.impact, relationships.reporter.data.attributes.disabled, relationships.reporter.data.attributes.profile_picture.62x62, relationships.reporter.data.attributes.profile_picture.82x82, relationships.reporter.data.attributes.profile_picture.110x110, relationships.reporter.data.attributes.profile_picture.260x260, relationships.reporter.data.attributes.hackerone_triager, relationships.program.data.id, relationships.program.data.type, relationships.program.data.attributes.handle, relationships.severity.data.type, relationships.severity.data.attributes.rating, relationships.severity.data.attributes.author_type, relationships.severity.data.attributes.calculation_method, relationships.weakness.data.id, relationships.weakness.data.type, relationships.weakness.data.attributes.name, relationships.weakness.data.attributes.description, relationships.weakness.data.attributes.external_id, relationships.structured_scope.data.id, relationships.structured_scope.data.type, relationships.structured_scope.data.attributes.asset_type, relationships.structured_scope.data.attributes.eligible_for_bounty, relationships.structured_scope.data.attributes.eligible_for_submission, relationships.structured_scope.data.attributes.instruction, relationships.structured_scope.data.attributes.max_severity, relationships.structured_scope.data.attributes.confidentiality_requirement, relationships.structured_scope.data.attributes.integrity_requirement, relationships.structured_scope.data.attributes.availability_requirement, relationships.inboxes.data.id, relationships.inboxes.data.type, relationships.inboxes.data.attributes.name, relationships.inboxes.data.attributes.type additional.fields Key-Value ラベルとして統合
timestamp metadata.event_timestamp yyyy-MM-dd'T'HH:mm:ss.SSSZ 形式の日付フィルタを使用して解析されます
metadata.event_type has_principal が true の場合は「STATUS_UPDATE」、has_principal_user_user が true の場合は「USER_UNCATEGORIZED」、それ以外の場合は「GENERIC_EVENT」に設定します。
id metadata.product_log_id 値が直接コピーされる
relationships.structured_scope.data.attributes.asset_identifier principal.asset.asset_id 「ASSET:」の接頭辞が付いています。
attributes.email_alias principal.user.email_addresses 統合済み
relationships.reporter.data.id principal.user.employee_id 値を直接コピーする
relationships.reporter.data.attributes.name principal.user.first_name 値が直接コピーされる
attributes.username, relationships.reporter.data.attributes.username principal.user.user_display_name relationships.reporter.data.attributes.username が空でない場合はその値、それ以外の場合は attributes.username
relationships.severity.data.attributes.user_id principal.user.userid 値を直接コピーする
relationships.severity.data.id security_result.rule_id 値が直接コピーされる
relationships.severity.data.attributes.max_severity security_result.severity 大文字に変換
attributes.vulnerability_information security_result.summary 値を直接コピーする

変更ログ

このパーサーの変更ログを表示する

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。