Raccogliere i log del contesto utente di Duo

Supportato in:

Questo documento spiega come importare i log del contesto utente di Duo in Google Security Operations utilizzando un'API. Il parser elabora i dati JSON, mappando le informazioni utente (inclusi gli alias dei nomi utente per indirizzi email, gruppi, numeri di telefono e dettagli del dispositivo) all'UDM e acquisendo lo stato dell'account utente. Gestisce anche le strutture di dati nidificate ed esegue diverse trasformazioni e unioni dei dati per creare l'evento UDM finale.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

Configura l'applicazione API Admin e ottieni le chiavi

  1. Accedi al pannello amministratore di Duo come amministratore.
  2. Nella barra laterale a sinistra, fai clic su Applicazioni > Gestisci applicazioni.
  3. Premi il pulsante Aggiungi applicazione.
  4. Nel campo di ricerca, digita API Admin e fai clic su Aggiungi accanto a API Duo Admin.
  5. Nella schermata successiva vengono visualizzate le seguenti informazioni:
    • Chiave di integrazione: (una stringa come DIYYYYYYYYYYYYYY).
    • Chiave segreta: una stringa di 40 caratteri.
    • Nome host API: ad esempio, api-abcd1234.duosecurity.com.
  6. Copia e salva la chiave di integrazione, la chiave segreta e il nome host API in una posizione sicura.
  7. Scorri fino a Impostazioni e imposta Autorizzazioni su Concedi risorsa di lettura.
  8. Fai clic su Salva modifiche.

Configurare i feed

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su + Aggiungi nuovo feed.
  3. Nel campo Nome feed, inserisci un nome per il feed (ad esempio, Duo Users Logs).
  4. Seleziona API di terze parti come Tipo di origine.
  5. Seleziona il tipo di log Contesto utente Duo.
  6. Fai clic su Avanti.
  7. Specifica i valori per i seguenti parametri di input:
    • Nome utente: inserisci la chiave di integrazione copiata in precedenza.
    • Secret (Segreto): inserisci la chiave segreta copiata in precedenza.
    • Nome host API: fornisci l'URL del server API Duo (ad esempio, api-abcd1234.duosecurity.com).
    • Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
    • Etichette di importazione: l'etichetta applicata agli eventi di questo feed.
  8. Fai clic su Avanti.
  9. Rivedi la configurazione del feed nella schermata Finalizza e poi fai clic su Invia.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
access_device.browser event.idm.entity.entity.resource.attribute.labels.value Il valore viene estratto direttamente dal campo access_device.browser o da surfaced_auth.access_device.browser se il primo è vuoto. La chiave è impostata su "access_device browser".
access_device.browser_version event.idm.entity.entity.resource.attribute.labels.value Il valore viene estratto direttamente dal campo access_device.browser_version o da surfaced_auth.access_device.browser_version se il primo è vuoto. La chiave è impostata su "access_device browser_version".
access_device.ip.address event.idm.entity.entity.ip Il valore viene estratto direttamente dal campo access_device.ip.address o da surfaced_auth.access_device.ip se il primo è vuoto.
access_device.location.city event.idm.entity.entity.location.city Il valore viene estratto direttamente dal campo access_device.location.city o da surfaced_auth.access_device.location.city se il primo è vuoto.
access_device.location.country event.idm.entity.entity.location.country_or_region Il valore viene estratto direttamente dal campo access_device.location.country o da surfaced_auth.access_device.location.country se il primo è vuoto.
access_device.location.state event.idm.entity.entity.location.state Il valore viene estratto direttamente dal campo access_device.location.state o da surfaced_auth.access_device.location.state se il primo è vuoto.
access_device.os event.idm.entity.entity.asset.platform_software.platform Il valore deriva dal campo access_device.os o da surfaced_auth.access_device.os se il primo è vuoto. Se il valore corrisponde (senza distinzione tra maiuscole e minuscole) a "ios" o "mac", il campo UDM viene impostato su "MAC". Se corrisponde a "windows", il campo UDM è impostato su "WINDOWS". Se corrisponde a "linux", il campo UDM è impostato su "LINUX".
access_device.os_version event.idm.entity.entity.asset.platform_software.platform_version Il valore viene estratto direttamente dal campo access_device.os_version o da surfaced_auth.access_device.os_version se il primo è vuoto.
action.details event.idm.entity.sec_result.action_details Il valore viene preso da questo campo se action è vuoto.
action.name event.idm.entity.sec_result.detection_fields.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "action_name".
activity_id event.idm.entity.sec_result.detection_fields.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "activity_id".
actor.details.created event.idm.entity.entity.user.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "creata".
actor.details.email event.idm.entity.entity.user.email_addresses Il valore viene estratto direttamente dal campo.
actor.details.groups.key event.idm.entity.entity.user.group_identifiers Il valore viene estratto direttamente dal campo.
actor.details.groups.name event.idm.entity.entity.user.group_identifiers Il valore viene estratto direttamente dal campo.
actor.details.last_login event.idm.entity.entity.user.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "last_login".
actor.details.status event.idm.entity.entity.user.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "stato".
actor.key event.idm.entity.entity.resource.product_object_id Il valore viene estratto direttamente dal campo.
actor.name event.idm.entity.entity.user.user_display_name Il valore viene preso direttamente dal campo o da surfaced_auth.user.name se il primo è vuoto.
actor.type event.idm.entity.entity.user.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "actor type".
akey event.idm.entity.metadata.product_entity_id Il valore viene preso direttamente dal campo oppure sekey se akey è vuoto.
application event.idm.entity.entity.application Il valore viene estratto direttamente dal campo.
collection_time.seconds, create_time.seconds event.idm.entity.metadata.collected_timestamp.seconds, event.timestamp.seconds Il valore maggiore tra collection_time.seconds e create_time.seconds viene utilizzato sia per collected_timestamp.seconds sia per timestamp.seconds di primo livello.
collection_time.nanos, create_time.nanos event.idm.entity.metadata.collected_timestamp.nanos, event.timestamp.nanos Il valore in nanosecondi corrispondente al maggiore tra collection_time.seconds e create_time.seconds viene utilizzato sia per collected_timestamp.nanos sia per timestamp.nanos di primo livello.
email event.idm.entity.entity.user.email_addresses Il valore viene estratto direttamente dal campo.
explanations event.idm.entity.entity.resource.attribute.labels Le coppie chiave-valore all'interno di ogni oggetto dell'array explanations vengono convertite in etichette. La chiave di ogni etichetta è preceduta da "explanation ".
firstname event.idm.entity.entity.user.first_name Il valore viene estratto direttamente dal campo.
from_common_netblock event.idm.entity.entity.resource.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "from_common_netblock".
from_new_user event.idm.entity.entity.resource.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "from_new_user".
groups.N.name (N=0..10) event.idm.entity.entity.user.group_identifiers Il valore viene estratto direttamente dal campo.
lastname event.idm.entity.entity.user.last_name Il valore viene estratto direttamente dal campo.
low_risk_ip event.idm.entity.entity.resource.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "low_risk_ip".
phones.0.model event.idm.entity.relations.entity.asset.hardware.model Il valore viene estratto direttamente dal campo.
phones.0.number event.idm.entity.entity.user.phone_numbers Il valore viene estratto direttamente dal campo.
phones.0.phone_id event.idm.entity.relations.entity.asset.product_object_id Il valore viene estratto direttamente dal campo.
phones.0.platform event.idm.entity.relations.entity.asset.hardware.manufacturer Il valore viene estratto direttamente dal campo.
priority_event event.idm.entity.entity.resource.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "priority_event".
realname event.idm.entity.entity.user.user_display_name Il valore viene estratto direttamente dal campo.
sekey event.idm.entity.metadata.product_entity_id Se akey è vuoto, il valore viene preso direttamente dal campo.
state event.idm.entity.entity.resource.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "state".
status event.idm.entity.entity.user.attribute.labels.value, event.idm.entity.entity.user.user_authentication_status Il valore viene estratto direttamente dal campo. La chiave per l'etichetta è impostata su "status". Il valore viene utilizzato anche per determinare user_authentication_status. "active" e "bypass" vengono mappati a "ACTIVE", "disabled" e "pending deletion" vengono mappati a "SUSPENDED" e "locked out" viene mappato a "NO_ACTIVE_CREDENTIALS".
surfaced_auth.access_device.browser event.idm.entity.entity.resource.attribute.labels.value Il valore viene preso da questo campo se access_device.browser è vuoto. La chiave è impostata su "surfaced_auth access_device browser".
surfaced_auth.access_device.browser_version event.idm.entity.entity.resource.attribute.labels.value Il valore viene preso da questo campo se access_device.browser_version è vuoto. La chiave è impostata su "surfaced_auth access_device browser_version".
surfaced_auth.access_device.ip event.idm.entity.entity.ip Il valore viene preso da questo campo se access_device.ip.address è vuoto.
surfaced_auth.access_device.location.city event.idm.entity.entity.location.city Il valore viene preso da questo campo se access_device.location.city è vuoto.
surfaced_auth.access_device.location.country event.idm.entity.entity.location.country_or_region Il valore viene preso da questo campo se access_device.location.country è vuoto.
surfaced_auth.access_device.location.state event.idm.entity.entity.location.state Il valore viene preso da questo campo se access_device.location.state è vuoto.
surfaced_auth.access_device.os event.idm.entity.entity.asset.platform_software.platform Il valore viene preso da questo campo se access_device.os è vuoto. La logica per la mappatura al campo UDM è la stessa di access_device.os.
surfaced_auth.access_device.os_version event.idm.entity.entity.asset.platform_software.platform_version Il valore viene preso da questo campo se access_device.os_version è vuoto.
surfaced_auth.user.key event.idm.entity.entity.user.userid Il valore viene preso da questo campo se username è vuoto.
surfaced_auth.user.name event.idm.entity.entity.user.user_display_name Il valore viene preso da questo campo se actor.name è vuoto.
target.details.biometrics_status event.idm.entity.entity.asset.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "biometrics_status".
target.details.country_code event.idm.entity.entity.asset.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "country_code".
target.details.extension event.idm.entity.entity.asset.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "extension".
target.details.manufacturer event.idm.entity.entity.asset.hardware.manufacturer Il valore viene estratto direttamente dal campo.
target.details.model event.idm.entity.entity.asset.hardware.model Il valore viene estratto direttamente dal campo.
target.details.number event.idm.entity.entity.user.phone_numbers Il valore viene estratto direttamente dal campo.
target.details.os event.idm.entity.entity.asset.software.name Il valore viene estratto direttamente dal campo.
target.details.os_version event.idm.entity.entity.asset.software.version Il valore viene estratto direttamente dal campo.
target.details.passcode_status event.idm.entity.entity.asset.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "passcode_status".
target.details.tampered_status event.idm.entity.entity.asset.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "tampered_status".
target.key event.idm.entity.entity.asset.asset_id Il valore viene estratto direttamente dal campo.
target.name event.idm.entity.entity.asset.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "name".
target.type event.idm.entity.entity.asset.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "type".
triage_event_uri event.idm.entity.entity.url Il valore viene estratto direttamente dal campo.
triaged_as_interesting event.idm.entity.entity.resource.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "triaged_as_interesting".
ts event.timestamp.seconds, event.idm.entity.metadata.collected_timestamp.seconds Se presente, il timestamp viene analizzato da questo campo utilizzando il formato ISO8601 o RFC 3339. I secondi e i nanosecondi estratti vengono utilizzati sia per timestamp di primo livello sia per collected_timestamp.
type event.idm.entity.entity.resource.attribute.labels.value Il valore viene estratto direttamente dal campo. La chiave è impostata su "type".
user_id event.idm.entity.metadata.product_entity_id Il valore viene estratto direttamente dal campo.
username event.idm.entity.entity.user.userid Il valore viene preso direttamente dal campo oppure surfaced_auth.user.key se username è vuoto.
(Parser Logic) event.idm.entity.metadata.vendor_name Codificato su "Duo".
(Parser Logic) event.idm.entity.metadata.product_name Codificato come "Contesto utente Duo".
(Parser Logic) event.idm.entity.metadata.entity_type Determinato in base alla presenza di altri campi. Se user_present è true, è impostato su "USER". Se asset_mid_present è true, è impostato su "ASSET". Se ip_present è true, è impostato su "IP_ADDRESS". Se resource_present è true, è impostato su "RESOURCE". In caso contrario, è impostato su "UNKNOWN_ENTITYTYPE".
(Parser Logic) event.idm.entity.relations.entity_type Imposta il valore su "ASSET" se phones[0] non è vuoto.
(Parser Logic) event.idm.entity.relations.relationship Imposta il valore su "OWNS" se phones[0] non è vuoto.
(Parser Logic) event.idm.entity.relations.entity.asset.type Imposta il valore su "MOBILE" se phones[0] non è vuoto.

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