Collecter les journaux Okta

Compatible avec:

Ce document explique comment ingérer les journaux Okta dans Google Security Operations à l'aide de l'API Okta. L'analyseur extrait les journaux système, traitant à la fois les événements uniques et les événements groupés dans un tableau JSON. Il normalise les données au format UDM, mappe les champs Okta sur les équivalents UDM, enrichit les données avec des agents utilisateur analysés, des informations géographiques et des informations d'authentification, et génère des événements de résultats de sécurité en fonction des résultats et des informations sur les risques.

Avant de commencer

  • Assurez-vous de disposer d'une instance Google SecOps.
  • Assurez-vous de disposer d'un accès privilégié à Okta.

Configurer Okta

Pour configurer l'authentification unique Okta, effectuez les tâches suivantes:

Créer un utilisateur administrateur Okta avec des droits en lecture seule

  1. Connectez-vous à la console d'administration Okta.
  2. Créez un utilisateur avec des droits standards.

    • Accédez à Annuaire > Personnes.
    • Cliquez sur Ajouter une personne et remplissez les champs obligatoires.
  3. Sélectionnez Sécurité > Administrateurs.

  4. Cliquez sur Ajouter un administrateur.

  5. Dans le champ Attribution par l'administrateur, recherchez l'utilisateur standard.

  6. Dans la section Rôles, sélectionnez Administrateur en lecture seule dans la liste.

  7. Déconnectez-vous du compte administrateur.

Obtenir une clé API

  1. Connectez-vous à la console d'administration Okta avec l'utilisateur administrateur en lecture seule.
  2. Accédez à Sécurité > API > Jetons.
  3. Cliquez sur Créer un jeton.
  4. Attribuez un nom explicite au jeton.
  5. Indiquez la zone IP dans laquelle l'API sera utilisée (vous pouvez sélectionner n'importe quelle adresse IP si vous n'êtes pas sûr).
  6. Cliquez sur Créer un jeton.
  7. Copiez la clé API.
  8. Cliquez sur OK, j'ai compris.

Configurer un flux dans Google SecOps pour ingérer les journaux Okta

  1. Accédez à SIEM Settings > Feeds (Paramètres du SIEM > Flux).
  2. Cliquez sur Ajouter.
  3. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux Okta).
  4. Sélectionnez API tierce comme type de source.
  5. Sélectionnez Okta comme type de journal.
  6. Cliquez sur Suivant.
  7. Spécifiez les valeurs des paramètres d'entrée suivants :
    • En-tête HTTP d'authentification: saisissez la clé API Okta au format suivant: Authorization:<API_KEY>.
    • Nom d'hôte de l'API: spécifiez le nom de domaine de votre hôte Okta (par exemple, <your-domain>.okta.com).
    • Espace de noms des éléments: espace de noms des éléments.
    • Libellés d'ingestion: libellé appliqué aux événements de ce flux.
  8. Cliquez sur Suivant.
  9. Vérifiez la configuration du flux dans l'écran Finaliser, puis cliquez sur Envoyer.

Tableau de mappage UDM

Champ de journal Mappage UDM Logique
actor.alternateId principal.user.email_addresses Extrait de actor.alternateId s'il s'agit d'une adresse e-mail. Si ce n'est pas une adresse e-mail, utilisé comme 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 Mappage direct, avec la clé authenticationProvider.
authenticationContext.credentialProvider security_result.detection_fields.value Mappage direct, avec la clé credentialProvider.
authenticationContext.credentialType extensions.auth.mechanism Permet d'extraire le mécanisme d'authentification (OTP, USERNAME_PASSWORD, LOCAL).
authenticationContext.externalSessionId network.parent_session_id Mappage direct.
client.device principal.asset.type/additional.fields.value.string_value Mappé sur principal.asset.type (WORKSTATION, MOBILE, ROLE_UNSPECIFIED) en fonction de la valeur. Également mappé en tant que valeur de chaîne avec la clé device dans additional.fields.
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 Mappé directement en tant que valeur de chaîne avec la clé Postal code dans additional.fields.
client.geographicalContext.state principal.location.state Mappage direct.
client.ipAddress principal.ip, principal.asset.ip Mappage direct.
client.userAgent.browser target.resource.attribute.labels.value Mappage direct, avec la clé Browser.
client.userAgent.os principal.platform Mappé sur la plate-forme (LINUX, WINDOWS, MAC) en fonction de la valeur.
client.userAgent.rawUserAgent network.http.user_agent, network.http.parsed_user_agent Mappage et analyse directs.
client.zone additional.fields.value.string_value Mappé directement en tant que valeur de chaîne avec la clé zone dans additional.fields.
debugContext.debugData.behaviors security_result.description, security_result.detection_fields Mappé directement sur la description. Les comportements individuels sont extraits et ajoutés en tant que champs de détection.
debugContext.debugData.changedAttributes security_result.detection_fields.value Mappage direct, avec la clé changedAttributes.
debugContext.debugData.clientAddress principal.ip, principal.asset.ip Mappé directement si request.ipChain et client.ipAddress sont manquants.
debugContext.debugData.deviceFingerprint target.asset.asset_id Mappé directement, avec le préfixe device_finger_print:.
debugContext.debugData.dtHash security_result.detection_fields.value Mappage direct, avec la clé dtHash.
debugContext.debugData.factor security_result.detection_fields.value Mappage direct, avec la clé factor.
debugContext.debugData.factorIntent security_result.detection_fields.value Mappage direct, avec la clé factorIntent.
debugContext.debugData.logOnlySecurityData.risk.reasons security_result.detection_fields.value Mappage direct, avec la clé Risk Reasons.
debugContext.debugData.privilegeGranted target.user.attribute.roles Ils ont été divisés en droits individuels et ajoutés en tant que rôles avec un nom et une description.
debugContext.debugData.pushOnlyResponseType security_result.detection_fields.value Mappage direct, avec la clé pushOnlyResponseType.
debugContext.debugData.pushWithNumberChallengeResponseType security_result.detection_fields.value Mappage direct, avec la clé pushWithNumberChallengeResponseType.
debugContext.debugData.requestUri extensions.auth.auth_details Mappage direct.
debugContext.debugData.suspiciousActivityEventId security_result.detection_fields.value Mappage direct, avec la clé suspiciousActivityEventId.
debugContext.debugData.suspiciousActivityEventType security_result.detection_fields.value Mappage direct, avec la clé suspiciousActivityEventType.
debugContext.debugData.threatDetections security_result.detection_fields.value Mappage direct, avec la clé threatDetections.
debugContext.debugData.threatSuspected security_result.detection_fields.value, security_result.threat_status Mappé en tant que champ de détection avec la clé threatSuspected. Permet d'obtenir l'état de la menace (ACTIVE ou FALSE_POSITIVE).
debugContext.debugData.url target.url Mappage direct.
displayMessage security_result.summary Mappage direct.
eventType metadata.product_event_type, metadata.event_type Mappé directement sur product_event_type. Utilisé pour dériver event_type (USER_LOGIN, USER_LOGOUT, USER_CHANGE_PASSWORD, USER_CHANGE_PERMISSIONS, USER_DELETION, GROUP_MODIFICATION, SETTING_MODIFICATION, SCHEDULED_TASK_ENABLE, RESOURCE_CREATION, USER_UNCATEGORIZED).
legacyEventType security_result.detection_fields.value Mappage direct, avec la clé legacyEventType.
outcome.reason security_result.category_details Mappage direct.
outcome.result security_result.action Mappé sur une action (ALLOW, CHALLENGE, BLOCK) en fonction de la valeur.
published metadata.event_timestamp Analysé en code temporel.
request.ipChain.n.geographicalContext intermediary.location Contexte géographique des adresses IP intermédiaires dans la chaîne de requêtes.
request.ipChain.n.ip intermediary.ip Adresses IP des intermédiaires de la chaîne de requêtes.
securityContext.asNumber security_result.detection_fields.value Mappage direct, avec la clé asNumber.
securityContext.asOrg security_result.detection_fields.value Mappage direct, avec la clé asOrg.
securityContext.domain security_result.detection_fields.value Mappage direct, avec la clé domain.
securityContext.isp security_result.detection_fields.value Mappage direct, avec la clé isp.
securityContext.isProxy security_result.detection_fields.value Mappage direct, avec la clé anonymized IP.
target.n.alternateId target.user.email_addresses/target.user.userid S'il s'agit d'une adresse e-mail, elle est mappée sur target.user.email_addresses. Si ce n'est pas une adresse e-mail, utilisé comme target.user.userid.
target.n.detailEntry.clientAppId target.asset_id Mappées directement, précédées du préfixe Client_app_id:.
target.n.detailEntry.methodTypeUsed target.resource_ancestors.attribute.labels.value Mappage direct, avec la clé methodTypeUsed lorsque le type de cible est "Enregistrement dans l'Authentificateur".
target.n.detailEntry.methodUsedVerifiedProperties target.resource_ancestors.attribute.labels.value Mappage direct, avec la clé methodUsedVerifiedProperties lorsque le type de cible est "Enregistrement dans l'Authentificateur".
target.n.detailEntry.policyType target.resource_ancestors.attribute.labels.value Mappage direct, avec la clé Policy Type.
target.n.detailEntry.signOnModeType security_result.detection_fields.value Mappage direct, avec la clé signOnModeType.
target.n.displayName target.user.user_display_name / target.application / target.resource.name Mappage basé sur le type de cible.
target.n.id target.user.product_object_id / target.resource.product_object_id / target.resource_ancestors.product_object_id Mappage basé sur le type de cible.
target.n.type target.user.attribute.roles.name / target.resource.resource_subtype / target.resource_ancestors.resource_subtype Mappage basé sur le type de cible.
transaction.id network.session_id Mappage direct.
transaction.type additional.fields.value.string_value Mappé directement en tant que valeur de chaîne avec la clé type dans additional.fields.
uuid metadata.product_log_id Mappage direct.
N/A metadata.vendor_name Variable définie sur Okta.
N/A metadata.product_name Variable définie sur Okta.
N/A extensions.auth.type Variable définie sur SSO.
N/A is_alert Définissez cette valeur sur "true" pour les événements security.threat.detected et user.account.report_suspicious_activity_by_enduser.
N/A is_significant Définissez cette valeur sur "true" pour les événements security.threat.detected et user.account.report_suspicious_activity_by_enduser.

Modifications

2024-05-16

  • Si is_alert et is_significant sont définis 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, target.0.alternateId est mappé sur target.user.userid.
  • Lorsque target.1.type est User ou AppUser, target.1.alternateId est mappé 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 le paramétrage de metadata.event_type.

2023-06-28

  • La valeur complète de debugContext.debugData.suspiciousActivityEventType a été mappée 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é sur "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é à "security_result.detection_fields.key/value".
  • Le champ "client.userAgent.rawUserAgent" est mappé sur "network.http.user_agent".
  • Modification de la mise en correspondance 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 du mappage de security_result.threat_status vers ACTIVE lorsque debugContext.debugData.threatSuspected est true, sinon mappé sur FALSE_POSITIVE.

24/03/2023

  • Champs logOnlySecurityData mappés sur security_result.detection_fields.
  • De plus, nous avons résolu l'erreur d'analyse 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.
  • Mappage de target.displayName sur target.resource_ancestors.name.
  • Mappage de targetfield.detailEntry.methodTypeUsed sur target.resource_ancestors.attribute.labels.
  • Mappage de targetfield.detailEntry.methodUsedVerifiedProperties sur target.resource_ancestors.attribute.labels.

2023-02-20

  • metadata.event_type est passé de USER_LOGIN à 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é sur 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 vérifier correctement l'adresse e-mail du champ user_email.
  • Ajout de la vérification du champ Action1 qui n'est pas dans RATE_LIMIT.
  • Ajout d'une vérification de valeur nulle et inconnue pour actor.displayName.

2022-11-04

  • 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

  • Mappage de client.userAgent.os sur principal.platform.
  • Mappage de client.device sur principal.asset.type.
  • Mappage de anonymized IP (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

  • Mappage modifié pour actor.type de principal.user.role_name à principal.user.attribute.roles.
  • Mappage modifié pour target.0.type de target.user.role_name à target.user.attribute.roles.
  • Mappage modifié pour target.1.type de target.user.role_name à target.user.attribute.roles.

2022-06-15

Amélioration :

  • 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

Amélioration :

  • 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

Amélioration :

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

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.