Mengumpulkan log HackerOne
Dokumen ini menjelaskan cara mengonfigurasi HackerOne untuk mengirimkan log ke Google Security Operations menggunakan webhook.
HackerOne adalah platform koordinasi kerentanan dan program penemuan bug yang menghubungkan organisasi dengan peneliti keamanan untuk mengidentifikasi dan memperbaiki kerentanan keamanan. Platform ini menyediakan program bug bounty, program pengungkapan kerentanan, pengujian penetrasi, dan pengujian keamanan berkelanjutan di seluruh siklus proses pengembangan software.
Sebelum memulai
Pastikan Anda memiliki prasyarat berikut:
Instance Google SecOps
Program HackerOne dengan tingkat Profesional atau Enterprise (webhook hanya tersedia untuk tingkat ini)
Akses administratif ke setelan program HackerOne Anda
Akses ke Konsol Google Cloud (untuk pembuatan kunci API)
Membuat feed webhook di Google SecOps
Buat feed
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Di halaman berikutnya, klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
HackerOne Webhook). - Pilih Webhook sebagai Jenis sumber.
- Pilih HackerOne sebagai Jenis log.
- Klik Berikutnya.
- Tentukan nilai untuk parameter input berikut:
- Pembatas pemisahan: Biarkan kosong. Setiap permintaan webhook berisi satu peristiwa JSON.
- Namespace aset: Namespace aset
- Label penyerapan: Label yang akan diterapkan ke peristiwa dari feed ini
- Klik Berikutnya.
- Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.
Buat dan simpan kunci rahasia
Setelah membuat feed, Anda harus membuat kunci rahasia untuk autentikasi:
- Di halaman detail feed, klik Buat Kunci Rahasia.
- Dialog akan menampilkan kunci rahasia.
- Salin dan simpan kunci rahasia dengan aman.
Penting: Kunci rahasia hanya ditampilkan satu kali dan tidak dapat diambil lagi. Jika Anda kehilangan kunci ini, Anda harus membuat kunci rahasia baru.
Mendapatkan URL endpoint feed
- Buka tab Detail untuk feed tersebut.
- Di bagian Endpoint Information, salin Feed endpoint URL.
Format URL-nya adalah:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateatau untuk endpoint regional:
https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateSimpan URL ini untuk langkah berikutnya.
Klik Done.
Membuat kunci Google Cloud API
Chronicle memerlukan kunci API untuk autentikasi. Buat kunci API terbatas di Konsol Google Cloud.
Buat kunci API
- Buka halaman Credentials Google Cloud Console.
- Pilih project Anda (project yang terkait dengan instance Google SecOps Anda).
- Klik Create credentials > API key.
- Kunci API dibuat dan ditampilkan dalam dialog.
- Klik Edit API key untuk membatasi kunci.
Membatasi kunci API
- Di halaman setelan kunci API:
- Name: Masukkan nama deskriptif (misalnya,
Chronicle HackerOne Webhook API Key).
- Name: Masukkan nama deskriptif (misalnya,
- Di bagian Pembatasan API:
- Pilih Restrict key.
- Di drop-down Select APIs, telusuri dan pilih Google SecOps API (atau Chronicle API).
- Klik Simpan.
- Salin nilai kunci API dari kolom Kunci API di bagian atas halaman.
Simpan kunci API dengan aman.
Mengonfigurasi webhook HackerOne
Buat URL webhook
Gabungkan URL endpoint Google SecOps, kunci API, dan kunci rahasia menjadi satu URL. Kunci API dan kunci rahasia harus ditambahkan sebagai parameter kueri.
Format URL:
```none
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
```
Contoh:
```none
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
```
Ganti yang berikut:
- <ENDPOINT_URL>: URL endpoint feed dari bagian Mendapatkan URL endpoint feed.
- <API_KEY>: Kunci Google Cloud API dari bagian Membuat kunci Google Cloud API.
- <SECRET_KEY>: Kunci rahasia dari bagian Buat dan simpan kunci rahasia.
Penting: Jangan masukkan kunci rahasia Google SecOps di kolom Secret HackerOne. Kolom Secret HackerOne digunakan untuk validasi tanda tangan payload HMAC (header X-H1-Signature), yang merupakan mekanisme terpisah dari autentikasi webhook Google SecOps. Menempatkan rahasia Google SecOps di kolom Secret HackerOne akan menghasilkan error 403 Forbidden karena HackerOne tidak meneruskan nilai tersebut sebagai kredensial autentikasi Google SecOps. Sebagai gantinya, tambahkan key dan secret sebagai parameter kueri di URL Payload.
Membuat webhook di HackerOne
- Login ke HackerOne dan buka program Anda.
- Buka Interaksi, klik menu tiga titik untuk program yang ingin Anda konfigurasi, lalu klik Setelan.
- Buka Automation > Webhooks.
- Klik Webhook baru.
- Berikan detail konfigurasi berikut:
- URL Payload: Tempelkan URL lengkap dengan kunci API dan secret dari atas (misalnya,
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...). - Secret: Biarkan kolom ini kosong.
- URL Payload: Tempelkan URL lengkap dengan kunci API dan secret dari atas (misalnya,
- Pilih peristiwa yang ingin Anda gunakan untuk memicu webhook. Pilih salah satu opsi berikut:
- Kirimkan semuanya kepada saya: Semua peristiwa akan memicu webhook.
- Izinkan saya menentukan peristiwa satu per satu: Pilih peristiwa tertentu yang ingin Anda kirim ke Google SecOps.
Klik Tambahkan webhook.
Menguji webhook
- Di halaman konfigurasi webhook, klik Test request untuk mengirim contoh permintaan ke URL Payload yang dikonfigurasi.
- Verifikasi bahwa responsnya adalah HTTP 200.
- Klik webhook Anda untuk melihat detailnya.
- Di bagian Pengiriman terbaru, pastikan pengiriman terbaru menampilkan status berhasil (HTTP 200).
- Klik pengiriman mana pun untuk melihat permintaan payload POST.
Jika Anda menerima error:
- HTTP 403: Pastikan kunci API dan kunci rahasia ditambahkan dengan benar sebagai parameter kueri di URL Payload. Pastikan kolom Secret HackerOne kosong.
- HTTP 401: Pastikan kunci API valid dan dibatasi untuk Google SecOps API.
- HTTP 404: Pastikan URL endpoint sudah benar dan menyertakan jalur lengkap (/v2/unstructuredlogentries:batchCreate).
Memverifikasi penyerapan di Google SecOps
- Buka SIEM Settings > Feeds di Google SecOps.
- Temukan feed webhook HackerOne Anda.
- Periksa kolom Status (seharusnya Aktif).
- Periksa jumlah Peristiwa yang diterima (harus bertambah).
- Periksa stempel waktu Terakhir berhasil pada (seharusnya baru).
Batasan dan praktik terbaik webhook
Batas permintaan
| Limit | Value |
|-------|-------|
| **Max request size** | 4 MB |
| **Max QPS (queries per second)** | 15,000 |
| **Request timeout** | 30 seconds |
| **Retry behavior** | Automatic with exponential backoff |
Tabel pemetaan UDM
| Kolom Log | Pemetaan UDM | Logika |
|---|---|---|
| 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 | Digabungkan sebagai label nilai kunci |
| timestamp | metadata.event_timestamp | Diuraikan menggunakan filter tanggal dengan format yyyy-MM-dd'T'HH:mm:ss.SSSZ |
| metadata.event_type | Disetel ke "STATUS_UPDATE" jika has_principal benar, "USER_UNCATEGORIZED" jika has_principal_user_user benar, atau "GENERIC_EVENT" | |
| id | metadata.product_log_id | Nilai disalin secara langsung |
| relationships.structured_scope.data.attributes.asset_identifier | principal.asset.asset_id | Diawali dengan "ASSET:" |
| attributes.email_alias | principal.user.email_addresses | Digabung |
| relationships.reporter.data.id | principal.user.employee_id | Nilai disalin secara langsung |
| relationships.reporter.data.attributes.name | principal.user.first_name | Nilai disalin secara langsung |
| attributes.username, relationships.reporter.data.attributes.username | principal.user.user_display_name | Nilai dari relationships.reporter.data.attributes.username jika tidak kosong, atau attributes.username |
| relationships.severity.data.attributes.user_id | principal.user.userid | Nilai disalin secara langsung |
| relationships.severity.data.id | security_result.rule_id | Nilai disalin secara langsung |
| relationships.severity.data.attributes.max_severity | security_result.severity | Dikonversi menjadi huruf besar |
| attributes.vulnerability_information | security_result.summary | Nilai disalin secara langsung |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.