Raccogliere i log di HackerOne

Supportato in:

Questo documento spiega come configurare HackerOne per inviare i log a Google Security Operations utilizzando i webhook.

HackerOne è una piattaforma di coordinamento delle vulnerabilità e di bug bounty che mette in contatto le organizzazioni con i ricercatori di sicurezza per identificare e correggere le vulnerabilità di sicurezza. La piattaforma fornisce programmi di bug bounty, programmi di divulgazione delle vulnerabilità, pentest e test di sicurezza continui durante il ciclo di vita dello sviluppo software.

Prima di iniziare

  • Assicurati di soddisfare i seguenti prerequisiti:

  • Un'istanza Google SecOps

  • Programma HackerOne con livello Professional o Enterprise (i webhook sono disponibili solo per questi livelli)

  • Accesso amministrativo alle impostazioni del programma HackerOne

  • Accesso alla Google Cloud Console (per la creazione della chiave API)

Creare un feed webhook in Google SecOps

Creare il feed

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Nella pagina successiva, fai clic su Configura un singolo feed.
  4. Nel campo Nome feed, inserisci un nome per il feed (ad esempio, HackerOne Webhook).
  5. Seleziona Webhook come Tipo di origine.
  6. Seleziona HackerOne come Tipo di log.
  7. Fai clic su Avanti.
  8. Specifica i valori per i seguenti parametri di input:
    • Separatore di divisione: lascia vuoto. Ogni richiesta webhook contiene un singolo evento JSON.
    • Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset
    • Etichette di importazione: l'etichetta da applicare agli eventi di questo feed
  9. Fai clic su Avanti.
  10. Esamina la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.

Generare e salvare la chiave segreta

Dopo aver creato il feed, devi generare una chiave segreta per l'autenticazione:

  1. Nella pagina dei dettagli del feed, fai clic su Genera chiave segreta.
  2. Viene visualizzata una finestra di dialogo con la chiave segreta.
  3. Copia e salva la chiave segreta in modo sicuro.

Importante: la chiave segreta viene visualizzata una sola volta e non può essere recuperata in un secondo momento. Se la perdi, devi generare una nuova chiave segreta.

Recuperare l'URL dell'endpoint del feed

  1. Vai alla scheda Dettagli del feed.
  2. Nella sezione Informazioni sull'endpoint, copia l'URL dell'endpoint del feed.
  3. Il formato dell'URL è:

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

    Dove {region} è la regione dell'istanza Google SecOps (ad esempio us, europe o asia-southeast1) e {parent} è il percorso della risorsa nel formato projects/<PROJECT_ID>/locations/<LOCATION>/instances/<INSTANCE_ID>/logTypes/<LOG_TYPE>.

  4. Salva questo URL per i passaggi successivi.

  5. Fai clic su Fine.

Creare una chiave API Google Cloud

Chronicle richiede una chiave API per l'autenticazione. Crea una chiave API con limitazioni nella Google Cloud Console.

Creare la chiave API

  1. Vai alla pagina Credenziali della console Google Cloud.
  2. Seleziona il progetto (il progetto associato all'istanza Google SecOps).
  3. Fai clic su Crea credenziali > Chiave API.
  4. Viene creata una chiave API e visualizzata in una finestra di dialogo.
  5. Fai clic su Modifica chiave API per limitare la chiave.

Limitare la chiave API

  1. Nella pagina delle impostazioni della chiave API :
    • Nome: inserisci un nome descrittivo (ad esempio, Chronicle HackerOne Webhook API Key).
  2. In Restrizioni API:
    1. Seleziona Limita chiave.
    2. Nel menu a discesa Seleziona API, cerca e seleziona API Google SecOps (o API Chronicle).
  3. Fai clic su Salva.
  4. Copia il valore della chiave API dal campo Chiave API nella parte superiore della pagina.
  5. Salva la chiave API in modo sicuro.

Configurare il webhook di HackerOne

Costruire l'URL del webhook

Combina l'URL dell'endpoint Google SecOps, la chiave API e la chiave segreta in un unico URL. Sia la chiave API sia la chiave segreta devono essere aggiunte come parametri di ricerca.

Formato URL:

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

Esempio:

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

Sostituisci quanto segue: - <ENDPOINT_URL>: l'URL dell'endpoint del feed dalla sezione Recuperare l'URL dell'endpoint del feed. - <API_KEY>: la chiave API Google Cloud dalla sezione Creare una chiave API Google Cloud. - <SECRET_KEY>: la chiave segreta dalla sezione Generare e salvare la chiave segreta.

Importante: non inserire la chiave segreta di Google SecOps nel campo Secret di HackerOne. Il campo Secret di HackerOne viene utilizzato per la convalida della firma del payload HMAC (intestazione X-H1-Signature), che è un meccanismo separato dall'autenticazione webhook di Google SecOps. Se inserisci il secret di Google SecOps nel campo Secret di HackerOne, riceverai un errore 403 Forbidden perché HackerOne non passa questo valore come credenziale di autenticazione di Google SecOps. Invece, aggiungi sia key sia secret come parametri di ricerca nell'URL del payload.

Creare un webhook in HackerOne

  1. Accedi a HackerOne e vai al tuo programma.
  2. Vai a Engagements (Coinvolgimenti), fai clic sul menu kebab del programma che vuoi configurare, poi fai clic su Settings (Impostazioni).
  3. Vai a Automation > Webhooks (Automazione > Webhook).
  4. Fai clic su New webhook (Nuovo webhook).
  5. Fornisci i seguenti dettagli di configurazione:
    • Payload URL (URL del payload): incolla l'URL completo con la chiave API e il secret di sopra. Ad esempio, https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234....
    • Secret (Secret): lascia questo campo vuoto.
  6. Seleziona gli eventi che vuoi attivare il webhook. Scegli una delle seguenti opzioni:
    • Send me everything (Inviami tutto): tutti gli eventi attiveranno il webhook.
    • Let me specify individual events (Consenti di specificare singoli eventi): seleziona gli eventi specifici che vuoi inviare a Google SecOps.
  7. Fai clic su Add webhook (Aggiungi webhook).

Testare il webhook

  1. Nella pagina di configurazione del webhook, fai clic su Test request (Richiesta di test) per inviare una richiesta di esempio all'URL del payload configurato.
  2. Verifica che la risposta sia HTTP 200.
  3. Fai clic sul webhook per visualizzare i dettagli.
  4. Nella sezione Recent deliveries (Consegne recenti), verifica che le consegne recenti mostrino lo stato di riuscita (HTTP 200).
  5. Fai clic su una consegna per visualizzare la richiesta del payload POST.

Se ricevi un errore: - HTTP 403: verifica che la chiave API e la chiave segreta siano aggiunte correttamente come parametri di ricerca nell'URL del payload. Verifica che il campo Secret di HackerOne sia vuoto. - HTTP 401: verifica che la chiave API sia valida e limitata all'API Google SecOps. - HTTP 404: verifica che l'URL dell'endpoint sia corretto e includa il percorso completo (/v1/{parent}/logs:import).

Verificare l'importazione in Google SecOps

  1. Vai a Impostazioni SIEM > Feed in Google SecOps.
  2. Individua il feed webhook di HackerOne.
  3. Controlla la colonna Stato (deve essere Attivo).
  4. Controlla il numero di Eventi ricevuti (deve essere in aumento).
  5. Controlla il timestamp Ultimo successo (deve essere recente).

Limiti e best practice dei webhook

Limiti per le richieste

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

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
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 Unite come coppie chiave-valore
timestamp metadata.event_timestamp Analizzato utilizzando il filtro della data con il formato yyyy-MM-dd'T'HH:mm:ss.SSSZ
metadata.event_type Impostato su "STATUS_UPDATE" se has_principal è true, "USER_UNCATEGORIZED" se has_principal_user_user è true, altrimenti "GENERIC_EVENT"
id metadata.product_log_id Valore copiato direttamente
relationships.structured_scope.data.attributes.asset_identifier principal.asset.asset_id Con il prefisso "ASSET:"
attributes.email_alias principal.user.email_addresses Unito
relationships.reporter.data.id principal.user.employee_id Valore copiato direttamente
relationships.reporter.data.attributes.name principal.user.first_name Valore copiato direttamente
attributes.username, relationships.reporter.data.attributes.username principal.user.user_display_name Valore da relationships.reporter.data.attributes.username se non è vuoto, altrimenti attributes.username
relationships.severity.data.attributes.user_id principal.user.userid Valore copiato direttamente
relationships.severity.data.id security_result.rule_id Valore copiato direttamente
relationships.severity.data.attributes.max_severity security_result.severity Convertito in maiuscolo
attributes.vulnerability_information security_result.summary Valore copiato direttamente

Log delle modifiche

Visualizza il log delle modifiche per questo parser

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.