Collecter les journaux Okta

Compatible avec:

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

  1. Connectez-vous à la console d'administration de l'authentification unique Okta en tant qu'administrateur.
  2. 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.
  3. Sélectionnez Sécurité > Administrateurs.
  4. Cliquez sur Ajouter un administrateur.
  5. Dans le champ Attribuer le rôle d'administrateur à, saisissez le nom d'utilisateur.
  6. Dans la section Rôles d'administrateur, cochez la case Administrateur en lecture seule.
  7. Déconnectez-vous du compte administrateur.

Obtenir une clé API

  1. Connectez-vous à la console d'administration du SSO Okta avec l'administrateur en lecture seule créé précédemment.
  2. Sélectionnez Sécurité > API.
  3. Cliquez sur Créer un jeton.
  4. Saisissez le nom du jeton, puis cliquez sur Créer un jeton. La valeur du jeton s'affiche.
  5. 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é.

  6. 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

  1. Accédez à Paramètres du SIEM > Flux.
  2. Cliquez sur Add New (Ajouter nouveau).
  3. Saisissez un nom unique dans le champ Nom du champ.
  4. Sélectionnez API tierce comme Type de source.
  5. Sélectionnez Surveillance de la détection CrowdStrike comme Type de journal.
  6. Cliquez sur Suivant.
  7. 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.
  8. 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.valuekey est "asNumber" Mappage direct en tant que champ de détection.
securityContext.asOrg security_result.detection_fields.valuekey 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.