Collecter les journaux Okta
Ce document explique comment collecter les journaux Okta en configurant un flux Google Security Operations.
Pour en savoir plus, consultez Ingestion de données dans Google Security Operations.
Un libellé d'ingestion identifie l'analyseur qui normalise les données de journal brutes au format UDM structuré. Les informations de ce document s'appliquent à l'analyseur avec le libellé d'ingestion OKTA
.
Configurer l'authentification unique Okta
Pour configurer l'authentification unique Okta, effectuez les tâches suivantes:
Créer un utilisateur administrateur en lecture seule
- Connectez-vous à la console d'administration de l'authentification unique Okta en tant qu'administrateur.
- Créez un utilisateur avec accès standard. Si vous souhaitez faire d'un utilisateur standard existant un administrateur en lecture seule, passez à l'étape suivante.
- Sélectionnez Sécurité > Administrateurs.
- Cliquez sur Ajouter un administrateur.
- Dans le champ Attribuer le rôle d'administrateur à, saisissez le nom d'utilisateur.
- Dans la section Rôles d'administrateur, cochez la case Administrateur en lecture seule.
- Déconnectez-vous du compte administrateur.
Obtenir une clé API
- Connectez-vous à la console d'administration du SSO Okta avec l'administrateur en lecture seule créé précédemment.
- Sélectionnez Sécurité > API.
- Cliquez sur Créer un jeton.
- Saisissez le nom du jeton, puis cliquez sur Créer un jeton. La valeur du jeton s'affiche.
Copiez la clé API, qui est requise lorsque vous configurez le flux Google Security Operations.
La clé API ne peut pas être récupérée ultérieurement et est stockée sous forme chiffrée une fois la fenêtre fermée. Si des modifications sont apportées à l'utilisateur ou aux droits de l'utilisateur ayant créé le jeton, le jeton n'est plus valide. Si le jeton est révoqué ou a expiré, la collecte des journaux est arrêtée jusqu'à ce qu'un nouveau jeton soit configuré.
Cliquez sur OK, j'ai compris.
Configurer l'ASA Okta
Pour extraire les événements d'audit Okta Advanced Server Access (ASA) via l'API de journal système Okta, intégrez les événements d'audit Okta ASA au journal système Okta. Pour activer cette intégration, contactez l'assistance Okta. Pour en savoir plus, consultez le Centre d'aide Okta.
Configurer un flux dans Google Security Operations pour ingérer les journaux Okta
- Accédez à Paramètres du SIEM > Flux.
- Cliquez sur Add New (Ajouter nouveau).
- Saisissez un nom unique dans le champ Nom du champ.
- Sélectionnez API tierce comme Type de source.
- Sélectionnez Surveillance de la détection CrowdStrike comme Type de journal.
- Cliquez sur Suivant.
- Configurez les paramètres d'entrée obligatoires suivants :
- En-tête HTTP d'authentification: spécifie les identifiants qui authentifient un user-agent auprès d'un serveur, ce qui lui permet d'accéder à une ressource protégée.
- Nom d'hôte de l'API: spécifiez le nom de domaine ou l'adresse IP de l'hôte qui héberge l'API.
- Cliquez sur Suivant, puis sur Envoyer.
Pour en savoir plus sur les flux Google Security Operations, consultez la documentation sur les flux Google Security Operations. Pour en savoir plus sur les exigences associées à chaque type de flux, consultez la section Configuration des flux par type.
Si vous rencontrez des problèmes lors de la création de flux, contactez l'assistance Google Security Operations.
Référence de mappage de champ
Cet analyseur gère les journaux système Okta au format JSON, en extrayant des champs à la fois des journaux encapsulés Stackdriver et des journaux Okta bruts. Il normalise les données au format UDM, en se concentrant sur les événements de gestion de l'identité et des accès, y compris les connexions, les déconnexions, les modifications d'autorisations et les menaces de sécurité, tout en gérant différents types d'authentification et en enrichissant les données avec des informations sur le contexte géographique et l'agent utilisateur. L'analyseur extrait également des informations liées à la sécurité, telles que les raisons de risque, les indicateurs de menace et les informations sur les activités suspectes.
Tableau de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
actor.alternateId |
principal.user.email_addresses /principal.user.userid |
Si le champ alternateId est une adresse e-mail valide, la partie du nom d'utilisateur est mappée sur principal.user.userid et l'adresse e-mail complète est ajoutée à la liste principal.user.email_addresses . Si l'adresse e-mail n'est pas valide, la valeur entière est mappée sur principal.user.userid . |
actor.displayName |
principal.user.user_display_name |
Mappage direct. |
actor.id |
principal.user.product_object_id |
Mappage direct. |
actor.type |
principal.user.attribute.roles.name |
Mappage direct. |
authenticationContext.authenticationProvider |
security_result.detection_fields.value , où key est "authenticationProvider" |
Mappage direct en tant que champ de détection. |
authenticationContext.credentialProvider |
security_result.detection_fields.value , où key est "credentialProvider" |
Mappage direct en tant que champ de détection. |
authenticationContext.credentialType |
extensions.auth.mechanism |
Utilisé pour déduire le mécanisme d'authentification. "OTP" ou "SMS" devient "OTP", "PASSWORD" devient "USERNAME_PASSWORD", "IWA" ou eventType "user.authentication.auth_via_AD_agent" devient "LOCAL". |
authenticationContext.externalSessionId |
network.parent_session_id |
Mappage direct. |
client.device |
principal.asset.type / additional.fields.value.string_value , où key est "device" (appareil) |
Si la valeur est "Mobile", elle est mappée sur "MOBILE". Si la valeur est "Computer" (Ordinateur), elle est mappée sur "WORKSTATION". Si la valeur est "Unknown" (Inconnu), elle est mappée sur "ROLE_UNSPECIFIED". Ajouté également en tant que champ supplémentaire. |
client.geographicalContext.city |
principal.location.city |
Mappage direct. |
client.geographicalContext.country |
principal.location.country_or_region |
Mappage direct. |
client.geographicalContext.geolocation.lat |
principal.location.region_latitude |
Mappage direct. |
client.geographicalContext.geolocation.lon |
principal.location.region_longitude |
Mappage direct. |
client.geographicalContext.postalCode |
additional.fields.value.string_value , où key correspond à "Code postal" |
Mappage direct en tant que champ supplémentaire. |
client.geographicalContext.state |
principal.location.state |
Mappage direct. |
client.ipAddress |
principal.ip /principal.asset.ip |
Mappage direct. Si ce n'est pas le cas, l'analyseur tente de l'extraire à partir d'autres champs tels que request.ipChain.0.ip ou debugContext.debugData.clientAddress . |
client.userAgent.browser |
target.resource.attribute.labels.value , où key correspond à "Navigateur" |
Mappage direct en tant que libellé. |
client.userAgent.os |
principal.platform |
Si la valeur contient "Linux", elle est mappée sur "LINUX". Si la valeur est "windows", elle est mappée sur "WINDOWS". Si la valeur est "mac" ou "ios", elle est mappée sur "MAC". |
client.userAgent.rawUserAgent |
network.http.user_agent |
Mappage direct. Il est également analysé et stocké dans network.http.parsed_user_agent . |
client.zone |
additional.fields.value.string_value , où key est "zone" |
Mappage direct en tant que champ supplémentaire. |
debugContext.debugData.behaviors |
security_result.description |
Mappage direct. Les comportements individuels sont également extraits en tant que champs de détection distincts. |
debugContext.debugData.changedAttributes |
security_result.detection_fields.value , où key est "changedAttributes" |
Mappage direct en tant que champ de détection. |
debugContext.debugData.clientAddress |
principal.ip /principal.asset.ip |
Utilisé en remplacement si client.ipAddress et request.ipChain.0.ip ne sont pas présents. |
debugContext.debugData.deviceFingerprint |
target.asset.asset_id |
Préfixé par "device_finger_print:", puis mappé. |
debugContext.debugData.dtHash |
security_result.detection_fields.value , où key est "dtHash" |
Mappage direct en tant que champ de détection. |
debugContext.debugData.factor |
security_result.detection_fields.value , où key est "facteur" |
Mappage direct en tant que champ de détection. |
debugContext.debugData.factorIntent |
security_result.detection_fields.value , où key est "factorIntent" |
Mappage direct en tant que champ de détection. |
debugContext.debugData.logOnlySecurityData.risk.reasons |
security_result.detection_fields.value , où key correspond à "Raisons du risque" |
Mappage direct en tant que champ de détection. |
debugContext.debugData.privilegeGranted |
target.user.attribute.roles.name /target.user.attribute.roles.description |
Chaque droit est ajouté en tant que rôle distinct, avec un nom et une description correspondant à la valeur du droit. |
debugContext.debugData.pushOnlyResponseType |
security_result.detection_fields.value , où key est "pushOnlyResponseType" |
Mappage direct en tant que champ de détection. |
debugContext.debugData.pushWithNumberChallengeResponseType |
security_result.detection_fields.value , où key est "pushWithNumberChallengeResponseType" |
Mappage direct en tant que champ de détection. |
debugContext.debugData.requestId |
network.session_id |
Mappage direct. |
debugContext.debugData.requestUri |
extensions.auth.auth_details /target.url |
Mappage direct. |
debugContext.debugData.suspiciousActivityEventId |
security_result.detection_fields.value , où key est "suspiciousActivityEventId" |
Mappage direct en tant que champ de détection. |
debugContext.debugData.suspiciousActivityEventType |
security_result.detection_fields.value , où key est "suspiciousActivityEventType" |
Mappage direct en tant que champ de détection. |
debugContext.debugData.threatDetections |
security_result.detection_fields.value , où key est "threatDetections" |
Mappage direct en tant que champ de détection. |
debugContext.debugData.threatSuspected |
security_result.detection_fields.value , où key est "threatSuspected" |
Mappage direct en tant que champ de détection. Utilisé également pour déterminer security_result.threat_status . Si la valeur est "true", l'état est "ACTIVE", sinon "FALSE_POSITIVE". |
debugContext.debugData.url |
target.url |
Mappage direct. |
displayMessage |
security_result.summary |
Mappage direct. |
eventType |
metadata.product_event_type |
Mappage direct. Permet également de déterminer metadata.event_type (voir la logique ci-dessous). |
legacyEventType |
security_result.detection_fields.value , où key est "ancienEventType" |
Mappage direct en tant que champ de détection. |
outcome.reason |
security_result.category_details |
Mappage direct. |
outcome.result |
security_result.action |
"SUCCESS" ou "ALLOW" devient "ALLOW", "CHALLENGE" devient "CHALLENGE", "FAILURE", "DENY", "SKIPPED" ou "RATE_LIMIT" devient "BLOCK". |
published |
metadata.event_timestamp |
Converti en code temporel. |
request.ipChain.0.geographicalContext.* |
principal.location.* |
Le contexte géographique de la première adresse IP de la chaîne est mappé sur l'emplacement du principal. |
request.ipChain.0.ip |
principal.ip /principal.asset.ip |
Mappage direct. |
request.ipChain.1.geographicalContext.* |
intermediary.location.* |
Le contexte géographique de la deuxième adresse IP de la chaîne est mappé sur l'emplacement intermédiaire. |
request.ipChain.1.ip |
intermediary.ip |
Mappage direct. |
securityContext.asNumber |
security_result.detection_fields.value où key est "asNumber" |
Mappage direct en tant que champ de détection. |
securityContext.asOrg |
security_result.detection_fields.value où key est "asOrg" |
Mappage direct en tant que champ de détection. |
securityContext.domain |
security_result.detection_fields.value , où key est "domain" |
Mappage direct en tant que champ de détection si la valeur n'est pas ".". |
securityContext.isp |
security_result.detection_fields.value , où key est "isp" |
Mappage direct en tant que champ de détection. |
securityContext.isProxy |
security_result.detection_fields.value , où key correspond à "adresse IP anonymisée" |
Mappage direct en tant que champ de détection. |
target.0.alternateId |
target.user.email_addresses /target.user.userid |
Logique semblable à actor.alternateId . |
target.0.detailEntry.clientAppId |
target.asset_id |
Préfixé par "Client_app_id:", puis mappé. |
target.0.displayName |
target.user.user_display_name / target.application / target.resource.name |
Mappage basé sur target.0.type . |
target.0.id |
target.user.product_object_id /target.resource.product_object_id |
Mappage basé sur target.0.type . |
target.0.type |
target.user.attribute.roles.name /target.resource.resource_subtype |
Mappage basé sur la valeur. Permet également de déterminer le mappage d'autres champs target.0 . |
target.1.alternateId |
target.user.email_addresses /target.user.userid |
Logique semblable à actor.alternateId . |
target.1.detailEntry.clientAppId |
target.asset_id |
Préfixé par "Client_app_id:", puis mappé. |
target.1.displayName |
target.user.user_display_name /target.resource.name |
Mappage basé sur target.1.type . |
target.1.id |
target.user.product_object_id /target.resource.product_object_id |
Mappage basé sur target.1.type . |
target.1.type |
target.user.attribute.roles.name /target.resource.resource_subtype |
Mappage basé sur la valeur. Permet également de déterminer le mappage d'autres champs target.1 . |
target.2.alternateId target.2.displayName target.2.id target.2.type transaction.id |
network.session_id |
Mappage direct. |
transaction.type |
additional.fields.value.string_value , où key est "type" |
Mappage direct en tant que champ supplémentaire. |
uuid |
metadata.product_log_id |
Mappage direct. |
N/A | metadata.event_type |
Déterminé par eventType . Consultez le code de l'analyseur pour obtenir la logique de mappage complète. Voici quelques exemples de mappages clés: "user.authentication.sso", "user.authentication.auth_via_mfa" et "user.session.start" sont mappés sur "USER_LOGIN" ; "user.session.end" est mappé sur "USER_LOGOUT" ; "user.account.reset_password" est mappé sur "USER_CHANGE_PASSWORD" ; "application.user_membership.update" est mappé sur "USER_CHANGE_PERMISSIONS" ; "security.threat.detected" est mappé sur "USER_UNCATEGORIZED" ; "system.import.user.delete" est mappé sur "USER_DELETION" ; "policy.rule.update" est mappé sur "SETTING_MODIFICATION" ; "group.user_membership.remove" est mappé sur "GROUP_MODIFICATION". De nombreuses autres valeurs eventType sont mappées sur "USER_UNCATEGORIZED". |
N/A | metadata.log_type |
Définissez cette valeur sur "OKTA". |
N/A | metadata.product_name |
Définissez-le sur "Okta". |
N/A | metadata.vendor_name |
Définissez-le sur "Okta". |
N/A | extensions.auth.type |
Définissez cette valeur sur "SSO". |
Modifications
2024-05-16
- Si "is_alert" est défini sur "true" et que "is_significant" est défini sur "true", définissez "security_result.alert_state" sur "ALERTING".
2024-03-05
- Mise à jour du champ "security_result.action" pour indiquer si le trafic a été autorisé ou bloqué.
2024-02-16
- Correction de bug:
- Lorsque "target.0.type" est "User" ou "AppUser", mappez "target.0.alternateId" sur "target.user.userid".
- Lorsque "target.1.type" est "User" ou "AppUser", mappez "target.1.alternateId" sur "target.user.userid".
2023-12-14
- Mappage de "securityContext.asNumber" sur "security_result.detection_fields".
- Mappage de "legacyEventType" sur "security_result.detection_fields".
- Ajout de "conditional_check" avant de définir "metadata.event_type".
2023-06-28
- Mappage de la valeur complète de "debugContext.debugData.suspiciousActivityEventType" sur "security_result.detection_fields".
- Mappage de la valeur complète de "debugContext.debugData.logOnlySecurityData.behaviors.New Device" sur "security_result.detection_fields".
2023-06-09
- Le champ "debugContext.debugData.deviceFingerprint" est mappé sur "target.asset.asset_id".
- Mappage de la valeur complète de "debugContext.debugData.risk.reasons" sur "security_result.detection_fields".
2023-05-17
- Le champ "authenticationContext.externalSessionId" est mappé à "network.parent_session_id".
- Le champ "debugContext.debugData.pushOnlyResponseType" est mappé sur "security_result.detection_fields.key/value".
- Le champ "debugContext.debugData.factor" est mappé sur "security_result.detection_fields.key/value".
- Le champ "debugContext.debugData.factorIntent" est mappé à "security_result.detection_fields.key/value".
- Le champ "debugContext.debugData.pushWithNumberChallengeResponseType" est mappé sur "security_result.detection_fields.key/value".
- Le champ "debugContext.debugData.dtHash" est mappé sur "security_result.detection_fields.key/value".
- Le champ "client.userAgent.rawUserAgent" est mappé sur "network.http.user_agent".
- Modification du mappage de "ALLOW_WITH_MODIFICATION" en valeur d'énumération "CHALLENGE" sous "security_result.action".
- Pour le type d'événement "system.api_token.create", la valeur de metadata.event_type a été modifiée de "USER_UNCATEGORIZED" à "RESOURCE_CREATION".
2023-04-28
- Correction de bug:
- Modification de la mise en correspondance de "security_result.threat_status" sur "ACTIVE" lorsque "debugContext.debugData.threatSuspected" est défini sur "true", sinon mis en correspondance avec "FALSE_POSITIVE".
24/03/2023
- Mappage des champs "logOnlySecurityData" sur "security_result.detection_fields".
- En outre, l'erreur d'analyse a été résolue en ajoutant "DEFERRED" à la liste d'actions.
2023-04-11
- Les champs mappés sur "http.user_agent" ont été remappés sur "http.parsed_user_agent".
- "target.displayName" a été mappé sur "target.resource_ancestors.name".
- Mappage de "targetfield.detailEntry.methodTypeUsed" sur "target.resource_ancestors.attribute.labels".
- "targetfield.detailEntry.methodUsedVerifiedProperties" a été mappé sur "target.resource_ancestors.attribute.labels".
2023-02-20
- Modification de "metadata.event_type" de "USER_LOGIN" en "STATUS_UPDATE", où "eventType" est "user.authentication.auth_via_AD_agent"
2022-12-14
- Mappage de "debugContext.debugData.changedAttributes" sur "security_result.detection_fields".
- Ajout d'une vérification de valeur nulle pour "detail.actor.alternateId".
2022-11-17
- Le champ "target[n].alternateId" est mappé à "target.resource.attribute.labels".
- Le champ "detail.target.0.alternateId" est mappé sur "target.resource.attribute.labels".
2022-11-08
- Correction de bug:
- Ajout d'une condition pour la vérification correcte de l'adresse e-mail pour le champ "user_email".
- Ajout d'une vérification du champ "Action1" qui ne figure pas dans "RATE_LIMIT".
- Ajout d'une vérification de valeur nulle et inconnue pour "actor.displayName".
2022-11-04
- Ajout de la prise en charge des journaux contenant plusieurs événements.
2022-10-15
- "signOnModeType" mappé sur "security_result.detection_fields".
- "authenticationProvider" mappé sur "security_result.detection_fields".
- "credentialProvider" mappé sur "security_result.detection_fields".
- "device" mappé sur "additional.fields".
- "zone" mappé sur "additional.fields".
- "type" mappé sur "additional.fields".
2022-10-14
- Correction de bug:
- Ajout d'une vérification conditionnelle pour "principal.user.email_addresses" et "target.user.email_addresses".
- Ajout de grok pour vérifier la présence d'une adresse IP valide pour le champ "request.ipChain.0.ip" mappé sur "principal.ip".
- Ajout de la condition on_error pour le champ "debugContext.debugData.url" mappé sur "target.url".
2022-10-03
- "client.userAgent.os" a été mappé sur "principal.platform".
- "client.device" a été mappé sur "principal.asset.type".
- Mappage de "IP anonymisée" (chaîne codée en dur) sur security_result.detection_fields.key où la valeur "securityContext.isProxy" correspond à security_result.detection_fields.value.
2022-09-16
- "securityContext.asOrg" mappé sur "security_result.category_details".
- "securityContext.isProxy" mappé sur "security_result.detection_fields".
- "securityContext.domain" mappé sur "security_result.detection_fields".
- "securityContext.isp" mappé sur "security_result.detection_fields".
- "debugContext.debugData.risk.level" mappé sur "security_result.severity".
- "debugContext.debugData.risk.reasons" mappé sur "security_result.detection_fields".
2022-08-12
- Les journaux nouvellement ingérés ont été analysés et mappés aux champs suivants:
- "detail.uuid" mappé sur "metadata.product_log_id".
- "detail.eventType" mappé sur "metadata.product_event_type"
- "detail.actor.id" mappé sur "principal.user.product_object_id".
- if 'detail.actor.alternateId' mapped to 'principal.user.userid' else
- "detail.actor.alternateId" mappé sur "principal.user.email_addresses".
- "detail.actor.displayName" mappé sur "principal.user.user_display_name".
- "detail.actor.type" mappé sur ".principal.user.attribute.roles".
- "detail.client.ipChain.0.ip" mappé sur "principal.ip".
- "detail.client.ipChain.0.geographicalContext.state" mappé sur "principal.location.state".
- "detail.client.ipChain.0.geographicalContext.city" mappé sur "principal.location.city".
- "detail.client.ipChain.0.geographicalContext.country" mappé sur "principal.location.country_or_region".
- "detail.debugContext.debugData.requestUri" mappé sur "target.url".
- "detail.target.0.type" mappé sur "target.resource.resource_subtype".
- "detail.target.0.id" mappé sur "target.resource.resource.product_object_id".
- "detail.target.0.displayName" mappé sur "target.resource.resource_subtype".
- "detail.target.0.detailEntry.policyType" mappé sur "target.resource_ancestors.attribute.labels".
- "detail.outcome.reason" mappé sur "security_result.category_details".
- "detail.debugContext.debugData.threatSuspected" mappé sur "security_result.detection_fields".
- "detail.displayMessage" mappé sur "security_result.summary".
- "detail.outcome.result" mappé sur "security_result.action".
- "detail.severity" mappé sur "security_result.severity".
- "detail.transaction.id" mappé sur "network.session_id".
- "detail.debugContext.debugData.requestUri" mappé sur "extensions.auth.auth_details".
2022-07-08
- Modification du mappage de "actor.type" de "principal.user.role_name" à "principal.user.attribute.roles".
- Modification du mappage de "target.0.type" de "target.user.role_name" à "target.user.attribute.roles".
- Modification de la mise en correspondance de "target.1.type" de "target.user.role_name" à "target.user.attribute.roles".
2022-06-15
- Enhancement-
- pour "target.0.type" == "Token".
- Mappage de "target.0.detailEntry.clientAppId" sur "target.asset_id".
- Ajout d'une vérification conditionnelle pour le champ "transaction.id" mappé sur le champ UDM "network.session_id".
2022-06-03
- Enhancement-
- Mappage de debugContext.debugData.privilegeGranted sur target.user.attribute.roles.name en plus.
- Mappage de debugContext.debugData.requestUri sur extensions.auth.auth_details.
- Correspondance de debugContext.debugData.suspiciousActivityEventId, debugContext.debugData.threatDetections et debugContext.debugData.threatSuspected avec security_result.detection_fields.
2022-03-22
- Enhancement-
- debugContext.debugData.behaviors mappé sur security_result.description.
- debugContext.debugData.threatSuspected mappé sur security_result.threat_status.
- debugContext.debugData.risk mappé sur security_result.severity.