Raccogliere i log di Auth0
Panoramica
Questo parser estrae gli eventi dei log di Auth0 dai messaggi in formato JSON. Inizializza i campi UDM, analizza il payload JSON, mappa i campi pertinenti allo schema UDM e classifica gli eventi in base al campo type, impostando azioni di sicurezza e tipi di eventi appropriati.
Prima di iniziare
- Assicurati di avere un'istanza Google SecOps.
- Un account Auth0 con le autorizzazioni necessarie.
Configura un feed in Google SecOps per importare i log di Auth0
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log Auth0).
- Seleziona Webhook come Tipo di origine.
- Seleziona AUTH_ZERO come Tipo di log.
- Fai clic su Avanti.
- (Facoltativo) Specifica i valori per i seguenti parametri di input:
- Delimitatore di split: il delimitatore utilizzato per separare le righe di log, ad esempio
\n
. - Spazio dei nomi degli asset: lo spazio dei nomi degli asset.
- Etichette di importazione: l'etichetta applicata agli eventi di questo feed.
- Delimitatore di split: il delimitatore utilizzato per separare le righe di log, ad esempio
- Fai clic su Avanti.
- Controlla la configurazione del feed nella schermata Concludi e poi fai clic su Invia.
- Fai clic su Genera chiave segreta per generare una chiave segreta per autenticare questo feed.
- Copia e memorizza la chiave segreta. Non potrai più visualizzare questa chiave segreta. Se necessario, puoi rigenerare una nuova chiave segreta, ma questa azione rende obsoleta la chiave segreta precedente.
- Nella scheda Dettagli, copia l'URL dell'endpoint del feed dal campo Informazioni sull'endpoint. Devi specificare questo URL endpoint nell'applicazione client.
- Fai clic su Fine.
Crea una chiave API per il feed webhook
Vai alla console Google Cloud > Credenziali.
Fai clic su Crea credenziali e poi seleziona Chiave API.
Limita l'accesso della chiave API all'API Google Security Operations.
Specifica l'URL dell'endpoint
- Nell'applicazione client, specifica l'URL dell'endpoint HTTPS fornito nel feed webhook.
Attiva l'autenticazione specificando la chiave API e la chiave segreta nell'intestazione personalizzata nel seguente formato:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Consiglio: specifica la chiave API come intestazione anziché nell'URL. Se il client webhook non supporta le intestazioni personalizzate, puoi specificare la chiave API e la chiave segreta utilizzando parametri di ricerca nel seguente formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Sostituisci quanto segue:
ENDPOINT_URL
: l'URL dell'endpoint del feed.API_KEY
: la chiave API per l'autenticazione in Google Security Operations.SECRET
: la chiave segreta che hai generato per autenticare il feed.
Configurare il webhook Auth0 per Google SecOps
- Accedi alla dashboard di Auth0.
- Vai a Monitoraggio > Stream.
- Fai clic su Crea stream di log.
- Fai clic sul pulsante Webhook personalizzato e assegna un nome a tua scelta. Ad esempio: Webhook Google SecOps.
- Configura quanto segue:
- URL del payload: inserisci l'URL dell'endpoint API Google SecOps.
- Content-Type: imposta l'intestazione Content-Type su application/json. In questo modo, Google SecOps viene a conoscenza del formato dei dati inviati.
- (Facoltativo) Token di autorizzazione: configura un segreto per una maggiore sicurezza. Verrà utilizzato per verificare l'autenticità delle richieste webhook.
Personalizza il payload: puoi personalizzare il payload inviato a Google SecOps modificando la categoria evento. In questo modo puoi selezionare punti dati specifici dall'evento Auth0 e formattarli in base alle esigenze di Google SecOps. Per informazioni dettagliate sulle variabili di contesto e sulle opzioni di scripting disponibili, consulta la documentazione di Auth0. Assicurati che il payload finale sia conforme al formato UDM di Google SecOps previsto.
- Fai clic su Salva per creare l'webhook.
- Attiva l'evento associato all'hook (ad esempio, registra un nuovo utente, accedi).
- Verifica che i log vengano inviati a Google SecOps controllando il feed nella console Google SecOps.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logica |
---|---|---|
client_id |
principal.asset.product_object_id |
Mappato direttamente dal campo client_id . |
client_name |
principal.hostname |
Mappato direttamente dal campo client_name . |
connection |
security_result.description |
Mappato direttamente dal campo connection . |
connection_id |
security_result.rule_id |
Mappato direttamente dal campo connection_id . |
date |
metadata.event_timestamp |
Analizzata dal campo date utilizzando il formato ISO8601. |
description |
metadata.description |
Mappato direttamente dal campo description . |
details.error |
security_result.detection_fields |
Mappato dal campo details.error . La chiave è "Error". |
details.error.oauthError |
security_result.detection_fields |
Mappato dal campo details.error.oauthError . La chiave è "oauthError". |
details.error.type |
security_result.detection_fields |
Mappato dal campo details.error.type . La chiave è "oauth_error_type". |
details.ipOnAllowlist |
security_result.detection_fields |
Mappato dal campo details.ipOnAllowlist . La chiave è "ipOnAllowlist". |
details.link |
target.url |
Mappato direttamente dal campo details.link , se presente, altrimenti dedotto da altri campi (vedi di seguito). |
details.request.auth.strategy |
security_result.detection_fields |
Mappato dal campo details.request.auth.strategy . La chiave è "strategy". |
details.request.body.app_metadata.blockedReason |
security_result.detection_fields |
Mappato dal campo details.request.body.app_metadata.blockedReason . La chiave è "blockedReason". |
details.request.body.app_metadata.customer_id |
target.user.product_object_id |
Mappato direttamente dal campo details.request.body.app_metadata.customer_id . |
details.request.body.app_metadata.migrated |
security_result.detection_fields |
Mappato dal campo details.request.body.app_metadata.migrated . La chiave è "migrated". |
details.request.channel |
security_result.detection_fields |
Mappato dal campo details.request.channel . La chiave è "channel". |
details.request.method |
network.http.method |
Mappato direttamente dal campo details.request.method dopo la conversione in lettere maiuscole. |
details.request.path |
target.url |
Mappato direttamente dal campo details.request.path se details.link non è presente, altrimenti derivato da altri campi (vedi di seguito). |
details.response.body.email |
target.user.email_addresses |
Mappato direttamente dal campo details.response.body.email . |
details.response.body.email_verified |
security_result.detection_fields |
Mappato dal campo details.response.body.email_verified . La chiave è "email_verified". |
details.response.body.nickname |
target.user.user_display_name |
Mappato direttamente dal campo details.response.body.nickname . |
details.response.body.user_id |
target.user.userid |
Mappato direttamente dal campo details.response.body.user_id . |
details.response.statusCode |
network.http.response_code |
Mappato direttamente dal campo details.response.statusCode dopo la conversione in numero intero. |
details.return_to |
target.url |
Mappato direttamente dal campo details.return_to se details.link e details.request.path non sono presenti, altrimenti derivato da altri campi (vedi di seguito). |
details.session_id |
network.session_id |
Mappato direttamente dal campo details.session_id . |
details.stats.loginsCount |
additional.fields |
Mappato dal campo details.stats.loginsCount . La chiave è "loginsCount". |
details.requiresVerification |
security_result.detection_fields |
Mappato dal campo details.requiresVerification . La chiave è "requiresVerification". |
details.to |
target.user.email_addresses |
Mappato direttamente dal campo details.to . |
hostname |
target.hostname |
Mappato direttamente dal campo hostname . |
ip |
principal.ip |
Mappato direttamente dal campo ip . |
js_data.audience |
target.url |
Mappato direttamente dal campo js_data.audience se details.link , details.request.path e details.return_to non sono presenti. |
js_data.details.body.email_verified |
security_result.detection_fields |
Mappato dal campo js_data.details.body.email_verified . La chiave è "email_verified". |
js_data.details.body.is_signup |
security_result.detection_fields |
Mappato dal campo js_data.details.body.is_signup . La chiave è "is_signup". |
js_data.details.body.transaction.redirect_uri |
target.url |
Mappato direttamente dal campo js_data.details.body.transaction.redirect_uri se details.link , details.request.path , details.return_to e js_data.audience non sono presenti. |
js_data.scope |
security_result.detection_fields |
Mappato dal campo js_data.scope . La chiave è "scope". |
js_data.tracking_id |
security_result.detection_fields |
Mappato dal campo js_data.tracking_id . La chiave è "tracking_id". |
log_id |
metadata.product_log_id |
Mappato direttamente dal campo log_id . |
metadata.log_type |
metadata.log_type |
Mappato direttamente dal campo log_type . |
metadata.product_name |
metadata.product_name |
Impostato su "AUTH_ZERO". |
metadata.vendor_name |
metadata.vendor_name |
Impostato su "AUTH_ZERO". |
metadata.product_event_type |
metadata.product_event_type |
Mappato direttamente dal campo type . |
network.http.parsed_user_agent |
network.http.parsed_user_agent |
Analizzati dal campo user_agent . |
network.http.user_agent |
network.http.user_agent |
Mappato direttamente dal campo user_agent . |
security_result.action |
security_result.action |
Determinato dal campo type (ALLOW o BLOCK). Consulta il codice del parser per mappature specifiche. |
strategy |
security_result.detection_fields |
Mappato dal campo strategy . La chiave è "strategy". |
strategy_type |
security_result.detection_fields |
Mappato dal campo strategy_type . La chiave è "strategy_type". |
target.user.email_addresses |
target.user.email_addresses |
Mappato direttamente dal campo user_name se si tratta di un indirizzo email, altrimenti derivato da altri campi (vedi sopra). |
target.user.userid |
target.user.userid |
Mappato direttamente dal campo user_id o details.response.body.user_id o user_name se user_id non è presente. |
user_agent |
network.http.user_agent |
Mappato direttamente dal campo user_agent . |
user_id |
target.user.userid |
Mappato direttamente dal campo user_id . |
user_name |
target.user.email_addresses |
Mappato direttamente dal campo user_name . Imposta su "MACCHINA" se security_result.action è "ALLOW" e type è "slo", "sapi", "s", "ss" o "ssa". Imposta su "OTP" se extensions.auth.type è "MACHINE" e type è "slo". Determinato da una combinazione di campi, tra cui type , client_name , ip , hostname e has_user . Consulta il codice del parser per mappature specifiche. |
Modifiche
2024-03-07
- Correzione di bug:
- "data.user_name" è stato mappato a "target.user.email_addresses".
- "data.details.body.email_verified" e "data.details.body.is_signup" sono stati mappati a "security_result.detection_fields".
- È stata mappata la stringa "data.details.body.transaction.redirect_uri" a "target.url".
2023-06-19
- Parser appena creato.