Raccogli i log del contesto utente di Duo

Parser Version: 1.0

Supportata 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 (tra cui l'aliasing dei nomi utente agli indirizzi email, ai gruppi, ai numeri di telefono e ai dettagli del dispositivo) all'UDM e acquisendo lo stato dell'account utente. Inoltre, gestisce le strutture di dati nidificate ed esegue diverse trasformazioni e unioni di 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 di amministrazione di Duo come amministratore.
  2. Nella barra laterale sinistra, fai clic su Applicazioni > Gestisci applicazioni.
  3. Premi il pulsante Add Application (Aggiungi applicazione).
  4. Nel campo di ricerca, digita Admin API e fai clic su Add (Aggiungi) accanto a Duo Admin API.
  5. Nella schermata successiva vengono visualizzate le seguenti informazioni:
    • Integration Key (Chiave di integrazione): (una stringa come DIYYYYYYYYYYYYYY).
    • Secret Key (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 dell'API in un luogo sicuro.
  7. Scorri fino a Impostazioni e imposta Autorizzazioni su Concedi risorsa di lettura.
  8. Fai clic su Salva modifiche.

Configura i feed

  1. Vai a Impostazioni > Gestione dei dati > Feed. Se utilizzi una piattaforma solo SIEM, vai a Impostazioni > Feed.
  2. Fai clic su + Aggiungi nuovo feed.
  3. Nel campo Nome feed, inserisci un nome per il feed (ad es. Duo Users Logs).
  4. Seleziona API di terze parti come Tipo di origine.
  5. Seleziona il tipo di log Duo User Context.
  6. Fai clic su Avanti.
  7. Specifica i valori per i seguenti parametri di input:
    • Username (Nome utente): inserisci la Integration Key (Chiave di integrazione) copiata in precedenza.
    • Secret: inserisci la chiave secret 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, quindi fai clic su Invia.

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
access_device.browser event.idm.entity.entity.resource.attribute.labels.value Il valore viene preso direttamente dal campo access_device.browser o 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 preso direttamente dal campo access_device.browser_version o 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 preso direttamente dal campo access_device.ip.address o surfaced_auth.access_device.ip se il primo è vuoto.
access_device.location.city event.idm.entity.entity.location.city Il valore viene preso direttamente dal campo access_device.location.city o 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 preso direttamente dal campo access_device.location.country o surfaced_auth.access_device.location.country se il primo è vuoto.
access_device.location.state event.idm.entity.entity.location.state Il valore viene preso direttamente dal campo access_device.location.state o surfaced_auth.access_device.location.state se il primo è vuoto.
access_device.os event.idm.entity.entity.asset.platform_software.platform Il valore viene ricavato dal campo access_device.os o 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 viene impostato su "WINDOWS". Se corrisponde a "linux", il campo UDM viene impostato su "LINUX".
access_device.os_version event.idm.entity.entity.asset.platform_software.platform_version Il valore viene preso direttamente dal campo access_device.os_version o 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 preso direttamente dal campo. La chiave è impostata su "action_name".
activity_id event.idm.entity.sec_result.detection_fields.value Il valore viene preso direttamente dal campo. La chiave è impostata su "activity_id".
actor.details.created event.idm.entity.entity.user.attribute.labels.value Il valore viene preso direttamente dal campo. La chiave è impostata su "creata".
actor.details.email event.idm.entity.entity.user.email_addresses Il valore viene preso direttamente dal campo.
actor.details.groups.key event.idm.entity.entity.user.group_identifiers Il valore viene preso direttamente dal campo.
actor.details.groups.name event.idm.entity.entity.user.group_identifiers Il valore viene preso direttamente dal campo.
actor.details.last_login event.idm.entity.entity.user.attribute.labels.value Il valore viene preso direttamente dal campo. La chiave è impostata su "last_login".
actor.details.status event.idm.entity.entity.user.attribute.labels.value Il valore viene preso direttamente dal campo. La chiave è impostata su "status".
actor.key event.idm.entity.entity.resource.product_object_id Il valore viene preso 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 campo è vuoto.
actor.type event.idm.entity.entity.user.attribute.labels.value Il valore viene preso direttamente dal campo. La chiave è impostata su "tipo di attore".
akey event.idm.entity.metadata.product_entity_id Il valore viene preso direttamente dal campo o da sekey se akey è vuoto.
application event.idm.entity.entity.application Il valore viene preso 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 dei nanosecondi corrispondente al valore 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 preso direttamente dal campo.
explanations event.idm.entity.entity.resource.attribute.labels Le coppie chiave-valore all'interno di ogni oggetto nell'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 preso direttamente dal campo.
from_common_netblock event.idm.entity.entity.resource.attribute.labels.value Il valore viene preso direttamente dal campo. La chiave è impostata su "from_common_netblock".
from_new_user event.idm.entity.entity.resource.attribute.labels.value Il valore viene preso 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 preso direttamente dal campo.
lastname event.idm.entity.entity.user.last_name Il valore viene preso direttamente dal campo.
low_risk_ip event.idm.entity.entity.resource.attribute.labels.value Il valore viene preso direttamente dal campo. La chiave è impostata su "low_risk_ip".
phones.0.model event.idm.entity.relations.entity.asset.hardware.model Il valore viene preso direttamente dal campo.
phones.0.number event.idm.entity.entity.user.phone_numbers Il valore viene preso direttamente dal campo.
phones.0.phone_id event.idm.entity.relations.entity.asset.product_object_id Il valore viene preso direttamente dal campo.
phones.0.platform event.idm.entity.relations.entity.asset.hardware.manufacturer Il valore viene preso direttamente dal campo.
priority_event event.idm.entity.entity.resource.attribute.labels.value Il valore viene preso direttamente dal campo. La chiave è impostata su "priority_event".
realname event.idm.entity.entity.user.user_display_name Il valore viene preso direttamente dal campo.
sekey event.idm.entity.metadata.product_entity_id Il valore viene preso direttamente dal campo se akey è vuoto.
state event.idm.entity.entity.resource.attribute.labels.value Il valore viene preso 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 preso 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 ad "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 preso direttamente dal campo. La chiave è impostata su "biometrics_status".
target.details.country_code event.idm.entity.entity.asset.attribute.labels.value Il valore viene preso direttamente dal campo. La chiave è impostata su "country_code".
target.details.extension event.idm.entity.entity.asset.attribute.labels.value Il valore viene preso direttamente dal campo. La chiave è impostata su "extension".
target.details.manufacturer event.idm.entity.entity.asset.hardware.manufacturer Il valore viene preso direttamente dal campo.
target.details.model event.idm.entity.entity.asset.hardware.model Il valore viene preso direttamente dal campo.
target.details.number event.idm.entity.entity.user.phone_numbers Il valore viene preso direttamente dal campo.
target.details.os event.idm.entity.entity.asset.software.name Il valore viene preso direttamente dal campo.
target.details.os_version event.idm.entity.entity.asset.software.version Il valore viene preso direttamente dal campo.
target.details.passcode_status event.idm.entity.entity.asset.attribute.labels.value Il valore viene preso direttamente dal campo. La chiave è impostata su "passcode_status".
target.details.tampered_status event.idm.entity.entity.asset.attribute.labels.value Il valore viene preso direttamente dal campo. La chiave è impostata su "tampered_status".
target.key event.idm.entity.entity.asset.asset_id Il valore viene preso direttamente dal campo.
target.name event.idm.entity.entity.asset.attribute.labels.value Il valore viene preso direttamente dal campo. La chiave è impostata su "name".
target.type event.idm.entity.entity.asset.attribute.labels.value Il valore viene preso direttamente dal campo. La chiave è impostata su "type".
triage_event_uri event.idm.entity.entity.url Il valore viene preso direttamente dal campo.
triaged_as_interesting event.idm.entity.entity.resource.attribute.labels.value Il valore viene preso direttamente dal campo. La chiave è impostata su "triaged_as_interesting".
ts event.timestamp.seconds, event.idm.entity.metadata.collected_timestamp.seconds Il timestamp viene analizzato da questo campo, se presente, utilizzando il formato ISO8601 o RFC 3339. I secondi e i nanosecondi estratti vengono utilizzati sia per il timestamp di primo livello sia per il collected_timestamp.
type event.idm.entity.entity.resource.attribute.labels.value Il valore viene preso direttamente dal campo. La chiave è impostata su "type".
user_id event.idm.entity.metadata.product_entity_id Il valore viene preso direttamente dal campo.
username event.idm.entity.entity.user.userid Il valore viene preso direttamente dal campo o da surfaced_auth.user.key se username è vuoto.
(Logica del parser) event.idm.entity.metadata.vendor_name Impostato come hardcoded su "Duo".
(Logica del parser) event.idm.entity.metadata.product_name Impostato come hardcoded su "Duo User Context".
(Logica del parser) event.idm.entity.metadata.entity_type Determinato in base alla presenza di altri campi. Se user_present è true, viene impostato su "USER". Se asset_mid_present è true, viene impostato su "ASSET". Se ip_present è true, viene impostato su "IP_ADDRESS". Se resource_present è true, viene impostato su "RESOURCE". In caso contrario, viene impostato su "UNKNOWN_ENTITYTYPE".
(Logica del parser) event.idm.entity.relations.entity_type Imposta su "ASSET" se phones[0] non è vuoto.
(Logica del parser) event.idm.entity.relations.relationship Impostato su "OWNS" se phones[0] non è vuoto.
(Logica del parser) event.idm.entity.relations.entity.asset.type Imposta su "MOBILE" se phones[0] non è vuoto.

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.