Raccogliere i log di HackerOne

Supportato in:

Questo documento spiega come configurare HackerOne per inviare 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 della sicurezza per identificare e correggere le vulnerabilità di sicurezza. La piattaforma offre programmi di bug bounty, programmi di divulgazione delle vulnerabilità, pentesting 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 a Google Cloud Console (per la creazione della chiave API)

Crea 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:
    • Delimitatore 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. Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.

Genera e salva 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. Una finestra di dialogo mostra 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 Endpoint Information (Informazioni sull'endpoint), copia l'URL dell'endpoint del feed.
  3. Il formato dell'URL è:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    

    o per gli endpoint regionali:

    https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    
  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.

Crea la chiave API

  1. Vai alla pagina Credenziali della console Google Cloud.
  2. Seleziona il tuo progetto (quello associato alla tua istanza di 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 Chiave API:
    • Nome: inserisci un nome descrittivo (ad esempio, Chronicle HackerOne Webhook API Key).
  2. In Limitazioni 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.

Configura il webhook di HackerOne

Costruisci l'URL webhook

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

Formato dell'URL:

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

Esempio:

```none
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?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 della sezione Crea chiave API Google Cloud. - <SECRET_KEY>: la chiave segreta della sezione Genera e salva 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 segreto di Google SecOps nel campo Segreto di HackerOne, si verifica un errore 403 Forbidden perché HackerOne non trasmette questo valore come credenziale di autenticazione di Google SecOps. Aggiungi invece key e secret come parametri di ricerca nell'URL payload.

Crea un webhook in HackerOne

  1. Accedi a HackerOne e vai al tuo programma.
  2. Vai a Coinvolgimento, fai clic sul menu con tre puntini per il programma che vuoi configurare, poi fai clic su Impostazioni.
  3. Vai ad Automazione > Webhook.
  4. Fai clic su Nuovo webhook.
  5. Fornisci i seguenti dettagli di configurazione:
    • URL payload: incolla l'URL completo con la chiave API e il segreto riportati sopra (ad esempio, https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...).
    • Secret (Segreto): lascia questo campo vuoto.
  6. Seleziona gli eventi che vuoi attivare il webhook. Scegli una delle seguenti opzioni:
    • Inviami tutto: tutti gli eventi attiveranno il webhook.
    • Consenti di specificare singoli eventi: seleziona gli eventi specifici che vuoi inviare a Google SecOps.
  7. Fai clic su Aggiungi webhook.

Testare il webhook

  1. Nella pagina di configurazione del webhook, fai clic su Richiesta di test per inviare una richiesta di esempio all'URL payload configurato.
  2. Verifica che la risposta sia HTTP 200.
  3. Fai clic sul webhook per visualizzare i dettagli.
  4. Nella sezione Consegne recenti, verifica che le consegne recenti mostrino lo stato riuscito (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 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 (/v2/unstructuredlogentries:batchCreate).

Verifica 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 conteggio Eventi ricevuti (deve aumentare).
  5. Controlla il timestamp di Ultima operazione riuscita il giorno (deve essere recente).

Limiti e best practice per i 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 Logic
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 etichette chiave-valore
timestamp metadata.event_timestamp Analizzato utilizzando il filtro per data con il formato aaaa-MM-gg'T'HH:mm:ss.SSSZ
metadata.event_type Imposta "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 Unita
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 ottenuto da relationships.reporter.data.attributes.username se non è vuoto, altrimenti da 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

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