Mengumpulkan log HackerOne
Dokumen ini menjelaskan cara mengonfigurasi HackerOne untuk mengirim log ke Google Security Operations menggunakan webhook.
HackerOne adalah platform koordinasi kerentanan dan program imbalan atas penemuan bug yang menghubungkan organisasi dengan peneliti keamanan untuk mengidentifikasi dan memperbaiki kerentanan keamanan. Platform ini menyediakan program bug bounty, program pengungkapan kerentanan, pentesting, dan pengujian keamanan berkelanjutan di seluruh siklus proses pengembangan software.
Sebelum memulai
Pastikan Anda memiliki prasyarat berikut:
Instance Google SecOps
Program HackerOne dengan paket Professional atau Enterprise (webhook hanya tersedia untuk paket ini)
Akses administratif ke setelan program HackerOne Anda
Akses ke Konsol Google Cloud (untuk pembuatan kunci API)
Membuat feed webhook di Google SecOps
Membuat feed
- Buka Setelan > Pengelolaan Data > Feed. Jika Anda menggunakan platform khusus SIEM, buka Settings > Feeds.
- Klik Tambahkan Feed Berita 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 Log type.
- 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 berita baru Anda di layar Finalize, lalu klik Submit.
Membuat dan menyimpan 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 sekali dan tidak dapat diambil lagi. Jika Anda kehilangan kunci tersebut, 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://{region}-chronicle.googleapis.com/v1/{parent}/logs:importDengan
{region}adalah region instance Google SecOps Anda (misalnya,us,europe, atauasia-southeast1), dan{parent}adalah jalur resource dalam formatprojects/<PROJECT_ID>/locations/<LOCATION>/instances/<INSTANCE_ID>/logTypes/<LOG_TYPE>.Simpan URL ini untuk langkah berikutnya.
Klik Done.
Membuat kunci Google Cloud API
Chronicle memerlukan kunci API untuk autentikasi. Buat kunci API yang dibatasi di Konsol Google Cloud.
Membuat kunci API
- Buka halaman Credentials Konsol Google Cloud.
- Pilih project Anda (project yang terkait dengan instance Google SecOps Anda).
- Klik Create credentials > kunci API.
- Kunci API akan dibuat dan ditampilkan dalam dialog.
- Klik Edit kunci API 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 API restrictions:
- Pilih Restrict key.
- Di dropdown Select APIs, telusuri dan pilih Google SecOps API (atau Chronicle API).
- Klik Simpan.
- Salin nilai kunci API dari kolom API key di bagian atas halaman.
Simpan kunci API dengan aman.
Mengonfigurasi webhook HackerOne
Membuat URL webhook
Gabungkan URL endpoint, kunci API, dan kunci rahasia Google SecOps 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://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234...
```
Ganti kode berikut:
- <ENDPOINT_URL>: URL endpoint feed dari bagian Mendapatkan URL endpoint feed.
<API_KEY>: Kunci API Google Cloud dari bagian Membuat kunci API Google Cloud.
- <SECRET_KEY>: Kunci rahasia dari bagian Membuat dan menyimpan 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 secret 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:
- Payload URL: Tempel URL lengkap dengan kunci API dan rahasia dari atas. Contoh,
https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234.... - Secret: Biarkan kolom ini kosong.
- Payload URL: Tempel URL lengkap dengan kunci API dan rahasia dari atas. Contoh,
- Pilih peristiwa yang ingin Anda gunakan untuk memicu webhook. Pilih salah satu opsi berikut:
- Send me everything: 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.
- Pastikan responsnya adalah HTTP 200.
- Klik webhook Anda untuk melihat detailnya.
- Di bagian Recent deliveries, 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 (/v1/{parent}/logs:import).
Memverifikasi penyerapan di Google SecOps
- Di Google SecOps, buka Setelan > Pengelolaan Data > Feed. Jika Anda menggunakan platform khusus SIEM, buka Settings > Feeds.
- Temukan feed webhook HackerOne Anda.
- Periksa kolom Status (seharusnya Active).
- Periksa jumlah Peristiwa yang diterima (seharusnya bertambah).
- Periksa stempel waktu Terakhir berhasil pada (seharusnya baru-baru ini).
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 | Diurai menggunakan filter tanggal dengan format yyyy-MM-dd'T'HH:mm:ss.SSSZ |
| metadata.event_type | Ditetapkan ke "STATUS_UPDATE" jika has_principal benar, "USER_UNCATEGORIZED" jika has_principal_user_user benar, jika tidak, "GENERIC_EVENT" | |
| id | metadata.product_log_id | Nilai disalin 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 langsung |
| relationships.reporter.data.attributes.name | principal.user.first_name | Nilai disalin langsung |
| attributes.username, relationships.reporter.data.attributes.username | principal.user.user_display_name | Nilai dari relationships.reporter.data.attributes.username jika tidak kosong, jika tidak, attributes.username |
| relationships.severity.data.attributes.user_id | principal.user.userid | Nilai disalin langsung |
| relationships.severity.data.id | security_result.rule_id | Nilai disalin langsung |
| relationships.severity.data.attributes.max_severity | security_result.severity | Dikonversi menjadi huruf besar |
| attributes.vulnerability_information | security_result.summary | Nilai disalin langsung |
Log Perubahan
Melihat Log Perubahan untuk parser ini
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.