Raccogliere i log di Okta
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
- Accedi alla console di amministrazione di Okta SSO come amministratore.
- Crea un utente standard. Se hai già un utente standard di cui vuoi fare un amministratore di sola lettura, vai al passaggio successivo.
- Seleziona Sicurezza > Amministratori.
- Fai clic su Aggiungi amministratore.
- Nel campo Assegna il ruolo di amministratore a, inserisci il nome utente.
- Nella sezione Ruoli amministratore, seleziona la casella di controllo Amministratore di sola lettura.
- Esci dall'account amministratore.
Recupera chiave API
- Accedi alla console di amministrazione SSO di Okta con l'amministratore di sola lettura creato in precedenza.
- Seleziona Sicurezza > API.
- Fai clic su Crea token.
- Inserisci il nome del token e fai clic su Crea token. Viene visualizzato il valore del token.
Copia la chiave API, che è necessaria per configurare 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.
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
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Add New (Aggiungi nuovo).
- Inserisci un nome univoco per il nome del campo.
- Seleziona API di terze parti come Tipo di origine.
- Seleziona Okta come Tipo di log.
- Fai clic su Avanti.
- 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.
- 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 | Logic |
---|---|---|
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 è 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 |
Imposta 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
- È stata mappata la colonna "securityContext.asNumber" 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 di valori null e sconosciuti 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.