Raccogliere i log di Okta

Supportato in:

Questo documento descrive come raccogliere i log di Okta impostando un feed di Google Security Operations.

Per ulteriori informazioni, consulta Importazione dei dati in Google Security Operations.

Un'etichetta di importazione identifica l'analizzatore sintattico che normalizza i dati dei log non elaborati in formato UDM strutturato. Le informazioni contenute in questo documento si applicano al parser con l'etichetta di importazione OKTA.

Configurare SSO di Okta

Per configurare l'accesso SSO di Okta, completa le seguenti attività:

Creare un utente amministratore di sola lettura

  1. Accedi alla console di amministrazione di Okta SSO come amministratore.
  2. Crea un utente standard. Se hai già un utente standard di cui vuoi fare un amministratore di sola lettura, vai al passaggio successivo.
  3. Seleziona Sicurezza > Amministratori.
  4. Fai clic su Aggiungi amministratore.
  5. Nel campo Assegna il ruolo di amministratore a, inserisci il nome utente.
  6. Nella sezione Ruoli amministratore, seleziona la casella di controllo Amministratore di sola lettura.
  7. Esci dall'account amministratore.

Recupera chiave API

  1. Accedi alla console di amministrazione SSO di Okta con l'amministratore di sola lettura creato in precedenza.
  2. Seleziona Sicurezza > API.
  3. Fai clic su Crea token.
  4. Inserisci il nome del token e fai clic su Crea token. Viene visualizzato il valore del token.
  5. Copia la chiave API, che è obbligatoria quando configuri il feed di Google Security Operations.

    La chiave API non può essere recuperata in un secondo momento e viene archiviata in formato criptato dopo la chiusura della finestra. Se si verificano modifiche all'utente o ai privilegi dell'utente che ha creato il token, il token non è valido. Se il token viene revocato o scade, la raccolta dei log viene interrotta finché non viene configurato un nuovo token.

  6. Fai clic su Ok.

Configurare ASA di Okta

Per recuperare gli eventi di audit di Okta Advanced Server Access (ASA) tramite l'API di log di sistema di Okta, integra gli eventi di audit di Okta ASA con il log di sistema di Okta. Per attivare questa integrazione, contatta l'assistenza Okta. Per ulteriori informazioni, visita il Centro assistenza Okta.

Configura un feed in Google Security Operations per importare i log di Okta

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Add New (Aggiungi nuovo).
  3. Inserisci un nome univoco per il nome del campo.
  4. Seleziona API di terze parti come Tipo di origine.
  5. Seleziona Monitoraggio del rilevamento di CrowdStrike come Tipo di log.
  6. Fai clic su Avanti.
  7. Configura i seguenti parametri di input obbligatori:
    • Intestazione HTTP di autenticazione: specifica le credenziali che autenticano un user agent con un server, consentendo l'accesso a una risorsa protetta.
    • Nome host dell'API: specifica il nome di dominio o l'indirizzo IP dell'host che gestisce l'API.
  8. Fai clic su Avanti e poi su Invia.

Per saperne di più sui feed di Google Security Operations, consulta la documentazione dei feed di Google Security Operations. Per informazioni sui requisiti per ciascun tipo di feed, consulta Configurazione dei feed per tipo.

Se riscontri problemi durante la creazione dei feed, contatta l'assistenza di Google Security Operations.

Riferimento alla mappatura dei campi

Questo parser gestisce i log di sistema di Okta in formato JSON, estraendo i campi sia dai log con wrapping di Stackdriver sia dai log non elaborati di Okta. Normalizza i dati nel formato UDM, concentrandosi sugli eventi di gestione di identità e accessi, tra cui accessi, disconnessioni, modifiche delle autorizzazioni e minacce alla sicurezza, gestendo al contempo vari tipi di autenticazione e arricchendo i dati con il contesto geografico e le informazioni sull'agente utente. Il parser estrae anche dettagli relativi alla sicurezza, come motivi di rischio, indicatori di minacce e informazioni su attività sospette.

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
actor.alternateId principal.user.email_addresses/principal.user.userid Se il campo alternateId è un indirizzo email valido, la parte del nome utente viene associata a principal.user.userid e l'indirizzo email completo viene aggiunto all'elenco principal.user.email_addresses. Se non è un'email valida, l'intero valore viene mappato a principal.user.userid.
actor.displayName principal.user.user_display_name Mappatura diretta.
actor.id principal.user.product_object_id Mappatura diretta.
actor.type principal.user.attribute.roles.name Mappatura diretta.
authenticationContext.authenticationProvider security_result.detection_fields.value dove key è "authenticationProvider" Mappatura diretta come campo di rilevamento.
authenticationContext.credentialProvider security_result.detection_fields.value dove key è "credentialProvider" Mappatura diretta come campo di rilevamento.
authenticationContext.credentialType extensions.auth.mechanism Utilizzato per dedurre il meccanismo di autenticazione. "OTP" o "SMS" diventa "OTP", "PASSWORD" diventa "USERNAME_PASSWORD", "IWA" o eventType "user.authentication.auth_via_AD_agent" diventa "LOCAL".
authenticationContext.externalSessionId network.parent_session_id Mappatura diretta.
client.device principal.asset.type / additional.fields.value.string_value dove key è "device" Se il valore è "Dispositivo mobile", viene mappato a "MOBILE". Se "Computer", viene mappato a "WORKSTATION". Se "Sconosciuto", viene mappato a "ROLE_UNSPECIFIED". È stato aggiunto anche come campo aggiuntivo.
client.geographicalContext.city principal.location.city Mappatura diretta.
client.geographicalContext.country principal.location.country_or_region Mappatura diretta.
client.geographicalContext.geolocation.lat principal.location.region_latitude Mappatura diretta.
client.geographicalContext.geolocation.lon principal.location.region_longitude Mappatura diretta.
client.geographicalContext.postalCode additional.fields.value.string_value dove key è "Codice postale" Mappatura diretta come campo aggiuntivo.
client.geographicalContext.state principal.location.state Mappatura diretta.
client.ipAddress principal.ip/principal.asset.ip Mappatura diretta. Se non è presente, l'analizzatore tenta di estrarlo da altri campi come request.ipChain.0.ip o debugContext.debugData.clientAddress.
client.userAgent.browser target.resource.attribute.labels.value dove key è "Browser" Mappatura diretta come etichetta.
client.userAgent.os principal.platform Se il valore contiene "Linux", viene mappato a "LINUX". Se "windows", viene mappato a "WINDOWS". Se "mac" o "ios", viene mappato a "MAC".
client.userAgent.rawUserAgent network.http.user_agent Mappatura diretta. Inoltre, vengono analizzati e archiviati in network.http.parsed_user_agent.
client.zone additional.fields.value.string_value dove key è "zona" Mappatura diretta come campo aggiuntivo.
debugContext.debugData.behaviors security_result.description Mappatura diretta. I singoli comportamenti vengono estratti anche come campi di rilevamento distinti.
debugContext.debugData.changedAttributes security_result.detection_fields.value dove key è "changedAttributes" Mappatura diretta come campo di rilevamento.
debugContext.debugData.clientAddress principal.ip/principal.asset.ip Utilizzato come opzione di riserva se client.ipAddress e request.ipChain.0.ip non sono presenti.
debugContext.debugData.deviceFingerprint target.asset.asset_id Deve essere preceduto dal prefisso "device_finger_print:" e poi mappato.
debugContext.debugData.dtHash security_result.detection_fields.value dove key è "dtHash" Mappatura diretta come campo di rilevamento.
debugContext.debugData.factor security_result.detection_fields.value dove key è "fattore" Mappatura diretta come campo di rilevamento.
debugContext.debugData.factorIntent security_result.detection_fields.value dove key è "factorIntent" Mappatura diretta come campo di rilevamento.
debugContext.debugData.logOnlySecurityData.risk.reasons security_result.detection_fields.value dove key è "Motivi di rischio" Mappatura diretta come campo di rilevamento.
debugContext.debugData.privilegeGranted target.user.attribute.roles.name/target.user.attribute.roles.description Ogni privilegio viene aggiunto come ruolo separato con il nome e la descrizione impostati sul valore del privilegio.
debugContext.debugData.pushOnlyResponseType security_result.detection_fields.value dove key è "pushOnlyResponseType" Mappatura diretta come campo di rilevamento.
debugContext.debugData.pushWithNumberChallengeResponseType security_result.detection_fields.value dove key è "pushWithNumberChallengeResponseType" Mappatura diretta come campo di rilevamento.
debugContext.debugData.requestId network.session_id Mappatura diretta.
debugContext.debugData.requestUri extensions.auth.auth_details/target.url Mappatura diretta.
debugContext.debugData.suspiciousActivityEventId security_result.detection_fields.value dove key è "suspiciousActivityEventId" Mappatura diretta come campo di rilevamento.
debugContext.debugData.suspiciousActivityEventType security_result.detection_fields.value dove key è "suspiciousActivityEventType" Mappatura diretta come campo di rilevamento.
debugContext.debugData.threatDetections security_result.detection_fields.value dove key è "threatDetections" Mappatura diretta come campo di rilevamento.
debugContext.debugData.threatSuspected security_result.detection_fields.value dove key è "threatSuspected" Mappatura diretta come campo di rilevamento. Utilizzato anche per determinare security_result.threat_status. Se true, lo stato è "ACTIVE", altrimenti "FALSE_POSITIVE".
debugContext.debugData.url target.url Mappatura diretta.
displayMessage security_result.summary Mappatura diretta.
eventType metadata.product_event_type Mappatura diretta. Viene utilizzato anche per determinare metadata.event_type (vedi la logica di seguito).
legacyEventType security_result.detection_fields.value dove key è "legacyEventType" Mappatura diretta come campo di rilevamento.
outcome.reason security_result.category_details Mappatura diretta.
outcome.result security_result.action "SUCCESS" o "ALLOW" diventa "ALLOW", "CHALLENGE" diventa "CHALLENGE", "FAILURE", "DENY", "SKIPPED" o "RATE_LIMIT" diventa "BLOCK".
published metadata.event_timestamp Convertito in un timestamp.
request.ipChain.0.geographicalContext.* principal.location.* Il contesto geografico del primo IP della catena è mappato alla posizione del principale.
request.ipChain.0.ip principal.ip/principal.asset.ip Mappatura diretta.
request.ipChain.1.geographicalContext.* intermediary.location.* Il contesto geografico del secondo IP della catena viene mappato alla posizione intermediaria.
request.ipChain.1.ip intermediary.ip Mappatura diretta.
securityContext.asNumber security_result.detection_fields.value dove key è "asNumber" Mappatura diretta come campo di rilevamento.
securityContext.asOrg security_result.detection_fields.value dove key è "asOrg" Mappatura diretta come campo di rilevamento.
securityContext.domain security_result.detection_fields.value dove key è "domain" Mappatura diretta come campo di rilevamento se il valore non è ".".
securityContext.isp security_result.detection_fields.value dove key è "isp" Mappatura diretta come campo di rilevamento.
securityContext.isProxy security_result.detection_fields.value dove key è "IP anonimizzato" Mappatura diretta come campo di rilevamento.
target.0.alternateId target.user.email_addresses/target.user.userid Logica simile a actor.alternateId.
target.0.detailEntry.clientAppId target.asset_id Con prefisso "Client_app_id:" e poi mappato.
target.0.displayName target.user.user_display_name / target.application / target.resource.name Mappatura eseguita in base a target.0.type.
target.0.id target.user.product_object_id/target.resource.product_object_id Mappatura eseguita in base a target.0.type.
target.0.type target.user.attribute.roles.name/target.resource.resource_subtype Mappatura eseguita in base al valore. Viene utilizzato anche per determinare la mappatura di altri campi target.0.
target.1.alternateId target.user.email_addresses/target.user.userid Logica simile a actor.alternateId.
target.1.detailEntry.clientAppId target.asset_id Con prefisso "Client_app_id:" e poi mappato.
target.1.displayName target.user.user_display_name/target.resource.name Mappatura eseguita in base a target.1.type.
target.1.id target.user.product_object_id/target.resource.product_object_id Mappatura eseguita in base a target.1.type.
target.1.type target.user.attribute.roles.name/target.resource.resource_subtype Mappatura eseguita in base al valore. Viene utilizzato anche per determinare la mappatura di altri campi target.1.
target.2.alternateId target.2.displayName target.2.id target.2.type transaction.id network.session_id Mappatura diretta.
transaction.type additional.fields.value.string_value dove key è "type" Mappatura diretta come campo aggiuntivo.
uuid metadata.product_log_id Mappatura diretta.
N/D metadata.event_type Determinato da eventType. Consulta il codice dell'analizzatore per la logica di mappatura completa. Alcune mappature delle chiavi includono: "user.authentication.sso", "user.authentication.auth_via_mfa", "user.session.start" mappate a "USER_LOGIN"; "user.session.end" mappato a "USER_LOGOUT"; "user.account.reset_password" mappato a "USER_CHANGE_PASSWORD"; "application.user_membership.update" mappato a "USER_CHANGE_PERMISSIONS"; "security.threat.detected" mappato a "USER_UNCATEGORIZED"; "system.import.user.delete" mappato a "USER_DELETION"; "policy.rule.update" mappato a "SETTING_MODIFICATION"; "group.user_membership.remove" mappato a "GROUP_MODIFICATION". Molti altri valori eventType vengono mappati a "USER_UNCATEGORIZED".
N/D metadata.log_type Impostato su "OKTA".
N/D metadata.product_name Impostato su "Okta".
N/D metadata.vendor_name Impostato su "Okta".
N/D extensions.auth.type Impostato su "SSO".

Modifiche

2024-05-16

  • Se "is_alert" è true e "is_significant" è true, imposta "security_result.alert_state" su "ALERTING".

2024-03-05

  • Aggiornamento del campo "security_result.action" per indicare se il traffico è stato consentito o bloccato.

2024-02-16

  • Correzione di bug:
  • Quando "target.0.type" è "User" o "AppUser", mappa "target.0.alternateId" a "target.user.userid".
  • Quando "target.1.type" è "User" o "AppUser", mappa "target.1.alternateId" a "target.user.userid".

2023-12-14

  • "securityContext.asNumber" è stato mappato a "security_result.detection_fields".
  • "legacyEventType" è stato mappato a "security_result.detection_fields".
  • È stato aggiunto "conditional_check" prima di impostare "metadata.event_type".

2023-06-28

  • Valore completo mappato di "debugContext.debugData.suspiciousActivityEventType" a "security_result.detection_fields".
  • È stato mappato il valore completo di "debugContext.debugData.logOnlySecurityData.behaviors.New Device" a "security_result.detection_fields".

2023-06-09

  • Il campo "debugContext.debugData.deviceFingerprint" è mappato a "target.asset.asset_id".
  • Il valore completo di "debugContext.debugData.risk.reasons" è stato mappato a "security_result.detection_fields".

2023-05-17

  • Il campo "authenticationContext.externalSessionId" è mappato a "network.parent_session_id".
  • Il campo "debugContext.debugData.pushOnlyResponseType" è mappato a "security_result.detection_fields.key/value".
  • Il campo "debugContext.debugData.factor" è mappato a "security_result.detection_fields.key/value".
  • Il campo "debugContext.debugData.factorIntent" è mappato a "security_result.detection_fields.key/value".
  • Il campo "debugContext.debugData.pushWithNumberChallengeResponseType" è mappato a "security_result.detection_fields.key/value".
  • Il campo "debugContext.debugData.dtHash" è mappato a "security_result.detection_fields.key/value".
  • Il campo "client.userAgent.rawUserAgent" è mappato a "network.http.user_agent".
  • È stata modificata la mappatura da "ALLOW_WITH_MODIFICATION" al valore enumerato "CHALLENGE" in "security_result.action".
  • Per l'eventType "system.api_token.create", è stato modificato metadata.event_type da "USER_UNCATEGORIZED" a "RESOURCE_CREATION".

2023-04-28

  • Correzione di bug:
  • La mappatura di "security_result.threat_status" è stata modificata in "ACTIVE" quando "debugContext.debugData.threatSuspected" è "true", altrimenti è stata mappata a "FALSE_POSITIVE".

2023-03-24

  • I campi "logOnlySecurityData" sono stati mappati a "security_result.detection_fields".
  • Inoltre, è stato risolto l'errore di analisi aggiungendo "DEFERRED" all'elenco di azioni.

2023-04-11

  • I campi mappati a "http.user_agent" sono stati rimappati a "http.parsed_user_agent".
  • "target.displayName" è stato mappato a "target.resource_ancestors.name".
  • È stata mappata la colonna "targetfield.detailEntry.methodTypeUsed" a "target.resource_ancestors.attribute.labels".
  • È stata mappata la proprietà "targetfield.detailEntry.methodUsedVerifiedProperties" a "target.resource_ancestors.attribute.labels".

2023-02-20

  • Modifica di "metadata.event_type" da "USER_LOGIN" a "STATUS_UPDATE" dove "eventType" è "user.authentication.auth_via_AD_agent"

2022-12-14

  • È stata mappata la proprietà "debugContext.debugData.changedAttributes" a "security_result.detection_fields".
  • È stato aggiunto il controllo null per "detail.actor.alternateId".

2022-11-17

  • Il campo "target[n].alternateId" è mappato a "target.resource.attribute.labels".
  • Il campo "detail.target.0.alternateId" è mappato a "target.resource.attribute.labels".

2022-11-08

  • Correzione di bug:
  • È stata aggiunta una condizione per il controllo corretto dell'email per il campo "user_email".
  • È stato aggiunto il controllo per il campo "Azione1" non presente in "RATE_LIMIT".
  • È stato aggiunto il controllo null e sconosciuto per "actor.displayName".

2022-11-04

  • È stato aggiunto il supporto per i log con più eventi.

2022-10-15

  • "signOnModeType" mappato a "security_result.detection_fields".
  • "authenticationProvider" mappato a "security_result.detection_fields".
  • "credentialProvider" mappato a "security_result.detection_fields".
  • "device" mappato a "additional.fields".
  • "zone" mappato a "additional.fields".
  • "type" mappato a "additional.fields".

2022-10-14

  • Correzione di bug:
  • È stato aggiunto il controllo condizionale per "principal.user.email_addresses" e "target.user.email_addresses".
  • È stato aggiunto il pattern grok per verificare la presenza di un indirizzo IP valido per il campo "request.ipChain.0.ip" mappato a "principal.ip".
  • È stata aggiunta la condizione on_error per il campo "debugContext.debugData.url" mappato a "target.url".

2022-10-03

  • "client.userAgent.os" è stato mappato a "principal.platform".
  • "client.device" è stato mappato a "principal.asset.type".
  • "IP anonimizzato" (stringa hardcoded) mappato a security_result.detection_fields.key dove il valore "securityContext.isProxy" corrisponde a security_result.detection_fields.value.

2022-09-16

  • "securityContext.asOrg" mappato a "security_result.category_details".
  • 'securityContext.isProxy' mappato a 'security_result.detection_fields'.
  • 'securityContext.domain' mappato a 'security_result.detection_fields'.
  • 'securityContext.isp' mappato a 'security_result.detection_fields'.
  • "debugContext.debugData.risk.level" mappato a "security_result.severity".
  • 'debugContext.debugData.risk.reasons' mappato a 'security_result.detection_fields'.

2022-08-12

  • i log appena importati sono stati analizzati e mappati ai seguenti campi:
  • "detail.uuid" mappato a "metadata.product_log_id".
  • 'detail.eventType' mappato a 'metadata.product_event_type'
  • 'detail.actor.id' mappato a 'principal.user.product_object_id'.
  • if 'detail.actor.alternateId' mapped to 'principal.user.userid' else
  • "detail.actor.alternateId" mappato a "principal.user.email_addresses".
  • "detail.actor.displayName" mappato a "principal.user.user_display_name".
  • "detail.actor.type" mappato a ".principal.user.attribute.roles".
  • 'detail.client.ipChain.0.ip' mappato a 'principal.ip'.
  • 'detail.client.ipChain.0.geographicalContext.state' mappato a 'principal.location.state'.
  • 'detail.client.ipChain.0.geographicalContext.city' mappato a 'principal.location.city'.
  • 'detail.client.ipChain.0.geographicalContext.country' mappato a 'principal.location.country_or_region'.
  • 'detail.debugContext.debugData.requestUri' mappato a 'target.url'.
  • 'detail.target.0.type' mappato a 'target.resource.resource_subtype'.
  • 'detail.target.0.id' mappato a 'target.resource.resource.product_object_id'.
  • "detail.target.0.displayName" mappato a "target.resource.resource_subtype".
  • 'detail.target.0.detailEntry.policyType' mappato a 'target.resource_ancestors.attribute.labels'.
  • 'detail.outcome.reason' mappato a 'security_result.category_details'.
  • 'detail.debugContext.debugData.threatSuspected' mappato a 'security_result.detection_fields'.
  • "detail.displayMessage" mappato a "security_result.summary".
  • 'detail.outcome.result' mappato a 'security_result.action'.
  • 'detail.severity' mappato a 'security_result.severity'.
  • 'detail.transaction.id' mappato a 'network.session_id'.
  • 'detail.debugContext.debugData.requestUri' mappato a 'extensions.auth.auth_details'.

2022-07-08

  • Mappatura modificata per "actor.type" da "principal.user.role_name" a "principal.user.attribute.roles".
  • Mappatura modificata per "target.0.type" da "target.user.role_name" a "target.user.attribute.roles".
  • Mappatura modificata per "target.1.type" da "target.user.role_name" a "target.user.attribute.roles".

2022-06-15

  • Enhancement-
  • per "target.0.type" == "Token".
  • "target.0.detailEntry.clientAppId" è stato mappato a "target.asset_id".
  • È stato aggiunto un controllo condizionale per il campo "transaction.id" mappato al campo UDM "network.session_id".

2022-06-03

  • Enhancement-
  • È stato mappato anche debugContext.debugData.privilegeGranted a target.user.attribute.roles.name.
  • È stata mappata la richiesta debugContext.debugData.requestUri ad extensions.auth.auth_details.
  • Sono stati mappati debugContext.debugData.suspiciousActivityEventId, debugContext.debugData.threatDetections e debugContext.debugData.threatSuspected a security_result.detection_fields.

2022-03-22

  • Enhancement-
  • debugContext.debugData.behaviors mappato a security_result.description.
  • debugContext.debugData.threatSuspected mappato a security_result.threat_status.
  • debugContext.debugData.risk mappato a security_result.severity.