Recopila registros de Okta

Compatible con:

En este documento, se explica cómo transferir registros de Okta a Google Security Operations con la API de Okta. El analizador extrae registros del sistema y controla eventos individuales y por lotes dentro de un array JSON. Normaliza los datos en el formato UDM, asigna campos de Okta a equivalentes de UDM, enriquece los datos con agentes de usuario analizados, información geográfica y detalles de autenticación, y genera eventos de resultados de seguridad en función de los resultados y la información de riesgo.

Antes de comenzar

  • Asegúrate de tener una instancia de Google SecOps.
  • Asegúrate de tener acceso con privilegios a Okta.

Configura Okta

Para configurar el SSO de Okta, completa las siguientes tareas:

Crea un usuario administrador de Okta con privilegios de solo lectura

  1. Accede a la consola de administración de Okta.
  2. Crea un usuario estándar.

    • Ve a Directorio > Personas.
    • Haz clic en Agregar a una persona y completa los campos obligatorios.
  3. Selecciona Seguridad > Administradores.

  4. Haz clic en Agregar administrador.

  5. En el campo Asignación de administrador por administrador, busca el usuario estándar.

  6. En la sección roles, selecciona Administrador de solo lectura en la lista.

  7. Sal de la cuenta de administrador.

Obtén una clave de API

  1. Accede a la Consola del administrador de Okta con el usuario administrador de solo lectura.
  2. Ve a Seguridad > API > Tokens.
  3. Haz clic en Create Token.
  4. Proporciona un nombre significativo para el token.
  5. Proporciona la zona de IP en la que se usará la API (puedes seleccionar cualquier IP si no lo sabes).
  6. Haz clic en Create Token.
  7. Copie la clave de API.
  8. Haz clic en Entendido.

Configura un feed en Google SecOps para transferir registros de Okta

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar nueva.
  3. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de Okta).
  4. Selecciona API de terceros como el Tipo de origen.
  5. Selecciona Okta como el Tipo de registro.
  6. Haz clic en Siguiente.
  7. Especifica valores para los siguientes parámetros de entrada:
    • Encabezado HTTP de autenticación: Ingresa la clave de API de Okta en el siguiente formato: Authorization:<API_KEY>.
    • Nombre de host de la API: Especifica el nombre de dominio de tu host de Okta (por ejemplo, <your-domain>.okta.com).
    • Espacio de nombres de recursos: Es el espacio de nombres de recursos.
    • Etiquetas de transferencia: Es la etiqueta que se aplica a los eventos de este feed.
  8. Haz clic en Siguiente.
  9. Revisa la configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
actor.alternateId principal.user.email_addresses Se extrae de actor.alternateId si es una dirección de correo electrónico. Si no es una dirección de correo electrónico, se usa como principal.user.userid.
actor.displayName principal.user.user_display_name Se asignan directamente.
actor.id principal.user.product_object_id Se asignan directamente.
actor.type principal.user.attribute.roles.name Se asignan directamente.
authenticationContext.authenticationProvider security_result.detection_fields.value Se asignan directamente, con la clave authenticationProvider.
authenticationContext.credentialProvider security_result.detection_fields.value Se asignan directamente, con la clave credentialProvider.
authenticationContext.credentialType extensions.auth.mechanism Se usa para derivar el mecanismo de autenticación (OTP, USERNAME_PASSWORD, LOCAL).
authenticationContext.externalSessionId network.parent_session_id Se asignan directamente.
client.device principal.asset.type/additional.fields.value.string_value Se asigna a principal.asset.type (WORKSTATION, MOBILE, ROLE_UNSPECIFIED) según el valor. También se asigna como valor de cadena con la clave device en additional.fields.
client.geographicalContext.city principal.location.city Se asignan directamente.
client.geographicalContext.country principal.location.country_or_region Se asignan directamente.
client.geographicalContext.geolocation.lat principal.location.region_latitude Se asignan directamente.
client.geographicalContext.geolocation.lon principal.location.region_longitude Se asignan directamente.
client.geographicalContext.postalCode additional.fields.value.string_value Se asigna directamente como valor de cadena con la clave Postal code en additional.fields.
client.geographicalContext.state principal.location.state Se asignan directamente.
client.ipAddress principal.ip, principal.asset.ip Se asignan directamente.
client.userAgent.browser target.resource.attribute.labels.value Se asignan directamente, con la clave Browser.
client.userAgent.os principal.platform Se asignan a la plataforma (LINUX, WINDOWS, MAC) según el valor.
client.userAgent.rawUserAgent network.http.user_agent, network.http.parsed_user_agent Se asignan y analizan directamente.
client.zone additional.fields.value.string_value Se asigna directamente como valor de cadena con la clave zone en additional.fields.
debugContext.debugData.behaviors security_result.description, security_result.detection_fields Se asignan directamente a la descripción. Los comportamientos individuales se extraen y se agregan como campos de detección.
debugContext.debugData.changedAttributes security_result.detection_fields.value Se asignan directamente, con la clave changedAttributes.
debugContext.debugData.clientAddress principal.ip, principal.asset.ip Se asigna directamente si faltan request.ipChain y client.ipAddress.
debugContext.debugData.deviceFingerprint target.asset.asset_id Se asignan directamente y tienen el prefijo device_finger_print:.
debugContext.debugData.dtHash security_result.detection_fields.value Se asignan directamente, con la clave dtHash.
debugContext.debugData.factor security_result.detection_fields.value Se asignan directamente, con la clave factor.
debugContext.debugData.factorIntent security_result.detection_fields.value Se asignan directamente, con la clave factorIntent.
debugContext.debugData.logOnlySecurityData.risk.reasons security_result.detection_fields.value Se asignan directamente, con la clave Risk Reasons.
debugContext.debugData.privilegeGranted target.user.attribute.roles Se dividieron en privilegios individuales y se agregaron como roles con nombre y descripción.
debugContext.debugData.pushOnlyResponseType security_result.detection_fields.value Se asignan directamente, con la clave pushOnlyResponseType.
debugContext.debugData.pushWithNumberChallengeResponseType security_result.detection_fields.value Se asignan directamente, con la clave pushWithNumberChallengeResponseType.
debugContext.debugData.requestUri extensions.auth.auth_details Se asignan directamente.
debugContext.debugData.suspiciousActivityEventId security_result.detection_fields.value Se asignan directamente, con la clave suspiciousActivityEventId.
debugContext.debugData.suspiciousActivityEventType security_result.detection_fields.value Se asignan directamente, con la clave suspiciousActivityEventType.
debugContext.debugData.threatDetections security_result.detection_fields.value Se asignan directamente, con la clave threatDetections.
debugContext.debugData.threatSuspected security_result.detection_fields.value, security_result.threat_status Se asigna como un campo de detección con la clave threatSuspected. Se usa para obtener el estado de amenaza (ACTIVE o FALSE_POSITIVE).
debugContext.debugData.url target.url Se asignan directamente.
displayMessage security_result.summary Se asignan directamente.
eventType metadata.product_event_type, metadata.event_type Se asignan directamente a product_event_type. Se usa para derivar 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 Se asignan directamente, con la clave legacyEventType.
outcome.reason security_result.category_details Se asignan directamente.
outcome.result security_result.action Se asignan a una acción (ALLOW, CHALLENGE, BLOCK) según el valor.
published metadata.event_timestamp Se analizó en una marca de tiempo.
request.ipChain.n.geographicalContext intermediary.location Es el contexto geográfico de las IP intermediarias en la cadena de solicitudes.
request.ipChain.n.ip intermediary.ip Direcciones IP de los intermediarios en la cadena de solicitudes
securityContext.asNumber security_result.detection_fields.value Se asignan directamente, con la clave asNumber.
securityContext.asOrg security_result.detection_fields.value Se asignan directamente, con la clave asOrg.
securityContext.domain security_result.detection_fields.value Se asignan directamente, con la clave domain.
securityContext.isp security_result.detection_fields.value Se asignan directamente, con la clave isp.
securityContext.isProxy security_result.detection_fields.value Se asignan directamente, con la clave anonymized IP.
target.n.alternateId target.user.email_addresses/target.user.userid Si es una dirección de correo electrónico, se asigna a target.user.email_addresses. Si no es una dirección de correo electrónico, se usa como target.user.userid.
target.n.detailEntry.clientAppId target.asset_id Se asignan directamente y tienen el prefijo Client_app_id:.
target.n.detailEntry.methodTypeUsed target.resource_ancestors.attribute.labels.value Se asigna directamente, con la clave methodTypeUsed cuando el tipo de destino es AuthenticatorEnrollment.
target.n.detailEntry.methodUsedVerifiedProperties target.resource_ancestors.attribute.labels.value Se asigna directamente, con la clave methodUsedVerifiedProperties cuando el tipo de destino es AuthenticatorEnrollment.
target.n.detailEntry.policyType target.resource_ancestors.attribute.labels.value Se asignan directamente, con la clave Policy Type.
target.n.detailEntry.signOnModeType security_result.detection_fields.value Se asignan directamente, con la clave signOnModeType.
target.n.displayName target.user.user_display_name / target.application / target.resource.name Se asignan según el tipo de objetivo.
target.n.id target.user.product_object_id / target.resource.product_object_id / target.resource_ancestors.product_object_id Se asignan según el tipo de objetivo.
target.n.type target.user.attribute.roles.name / target.resource.resource_subtype / target.resource_ancestors.resource_subtype Se asignan según el tipo de objetivo.
transaction.id network.session_id Se asignan directamente.
transaction.type additional.fields.value.string_value Se asigna directamente como valor de cadena con la clave type en additional.fields.
uuid metadata.product_log_id Se asignan directamente.
N/A metadata.vendor_name Se define en Okta.
N/A metadata.product_name Se define en Okta.
N/A extensions.auth.type Se define en SSO.
N/A is_alert Se establece como verdadero para los eventos security.threat.detected y user.account.report_suspicious_activity_by_enduser.
N/A is_significant Se establece como verdadero para los eventos security.threat.detected y user.account.report_suspicious_activity_by_enduser.

Cambios

16 de mayo de 2024

  • Si is_alert es verdadero y is_significant es verdadero, establece security_result.alert_state como ALERTING.

2024-03-05

  • Se actualizó el campo security_result.action para reflejar si se permitió o bloqueó el tráfico.

2024-02-16

Corrección de errores:

  • Cuando target.0.type es User o AppUser, se asigna target.0.alternateId a target.user.userid.
  • Cuando target.1.type es User o AppUser, se asigna target.1.alternateId a target.user.userid.

2023-12-14

  • Se asignó securityContext.asNumber a security_result.detection_fields.
  • Se asignó legacyEventType a security_result.detection_fields.
  • Se agregó conditional_check antes de configurar metadata.event_type.

2023-06-28

  • Se asignó el valor completo de debugContext.debugData.suspiciousActivityEventType a security_result.detection_fields.
  • Se asignó el valor completo de debugContext.debugData.logOnlySecurityData.behaviors.New Device a security_result.detection_fields.

2023-06-09

  • El campo debugContext.debugData.deviceFingerprint se asigna a target.asset.asset_id.
  • Se asignó el valor completo de debugContext.debugData.risk.reasons a security_result.detection_fields.

2023-05-17

  • El campo "authenticationContext.externalSessionId" se asigna a "network.parent_session_id".
  • El campo "debugContext.debugData.pushOnlyResponseType" se asigna a "security_result.detection_fields.key/value".
  • El campo "debugContext.debugData.factor" se asigna a "security_result.detection_fields.key/value".
  • El campo "debugContext.debugData.factorIntent" se asigna a "security_result.detection_fields.key/value".
  • El campo "debugContext.debugData.pushWithNumberChallengeResponseType" se asigna a "security_result.detection_fields.key/value".
  • El campo "debugContext.debugData.dtHash" se asigna a "security_result.detection_fields.key/value".
  • El campo "client.userAgent.rawUserAgent" se asigna a "network.http.user_agent".
  • Se cambió la asignación de "ALLOW_WITH_MODIFICATION" al valor de enumeración "CHALLENGE" en "security_result.action".
  • Para el eventType "system.api_token.create", se cambió metadata.event_type de "USER_UNCATEGORIZED" a "RESOURCE_CREATION".

2023-04-28

Corrección de errores:

  • Se modificó la asignación de security_result.threat_status a ACTIVE cuando debugContext.debugData.threatSuspected es true, de lo contrario, se asigna a FALSE_POSITIVE.

24-3-2023

  • Se asignaron campos logOnlySecurityData a security_result.detection_fields.
  • Además, se resolvió el error de análisis agregando DEFERRED a la lista de acciones.

2023-04-11

  • Se volvieron a asignar los campos que se asignaron a http.user_agent a http.parsed_user_agent.
  • Se asignó target.displayName a target.resource_ancestors.name.
  • Se asignó targetfield.detailEntry.methodTypeUsed a target.resource_ancestors.attribute.labels.
  • Se asignó targetfield.detailEntry.methodUsedVerifiedProperties a target.resource_ancestors.attribute.labels.

2023-02-20

  • Se cambió metadata.event_type de USER_LOGIN a STATUS_UPDATE, donde eventType es user.authentication.auth_via_AD_agent

2022-12-14

  • Se asignó debugContext.debugData.changedAttributes a security_result.detection_fields.
  • Se agregó la verificación de nulos para detail.actor.alternateId.

2022-11-17

  • El campo target[n].alternateId se asigna a target.resource.attribute.labels.
  • El campo detail.target.0.alternateId se asigna a target.resource.attribute.labels.

2022-11-08

Corrección de errores:

  • Se agregó una condición para realizar una verificación de correo electrónico adecuada en el campo user_email.
  • Se agregó la comprobación de que el campo Action1 no esté en RATE_LIMIT.
  • Se agregó una verificación nula y desconocida para actor.displayName.

2022-11-04

  • Se agregó compatibilidad con registros que tienen varios eventos.

2022-10-15

  • signOnModeType se asignó a security_result.detection_fields.
  • authenticationProvider se asignó a security_result.detection_fields.
  • credentialProvider se asignó a security_result.detection_fields.
  • device se asignó a additional.fields.
  • zone se asignó a additional.fields.
  • type se asignó a additional.fields.

2022-10-14

Corrección de errores:

  • Se agregó la verificación condicional para "principal.user.email_addresses" y "target.user.email_addresses".
  • Se agregó grok para verificar si hay una ip_address válida para el campo "request.ipChain.0.ip" asignado a "principal.ip".
  • Se agregó la condición on_error para el campo "debugContext.debugData.url" asignado a "target.url".

2022-10-03

  • Se asignó client.userAgent.os a principal.platform.
  • Se asignó client.device a principal.asset.type.
  • Se asignó anonymized IP (cadena codificada) a security_result.detection_fields.key, donde el valor de "securityContext.isProxy" es security_result.detection_fields.value correspondiente.

2022-09-16

  • "securityContext.asOrg" se asignó a "security_result.category_details".
  • "securityContext.isProxy" se asignó a "security_result.detection_fields".
  • "securityContext.domain" asignado a "security_result.detection_fields".
  • "securityContext.isp" se asignó a "security_result.detection_fields".
  • "debugContext.debugData.risk.level" se asignó a "security_result.severity".
  • 'debugContext.debugData.risk.reasons' se asignó a 'security_result.detection_fields'.

2022-08-12

  • Los registros recién transferidos se analizaron y se asignaron a los siguientes campos:
  • "detail.uuid" se asignó a "metadata.product_log_id".
  • 'detail.eventType' asignado a 'metadata.product_event_type'
  • "detail.actor.id" asignado a "principal.user.product_object_id".
  • if 'detail.actor.alternateId' mapped to 'principal.user.userid' else
  • "detail.actor.alternateId" asignado a "principal.user.email_addresses".
  • "detail.actor.displayName" asignado a "principal.user.user_display_name".
  • "detail.actor.type" asignado a ".principal.user.attribute.roles"
  • 'detail.client.ipChain.0.ip' asignado a 'principal.ip'
  • 'detail.client.ipChain.0.geographicalContext.state' asignado a 'principal.location.state'.
  • 'detail.client.ipChain.0.geographicalContext.city' asignado a 'principal.location.city'.
  • "detail.client.ipChain.0.geographicalContext.country" asignado a "principal.location.country_or_region"
  • "detail.debugContext.debugData.requestUri" asignado a "target.url".
  • "detail.target.0.type" asignado a "target.resource.resource_subtype"
  • 'detail.target.0.id' asignado a 'target.resource.resource.product_object_id'.
  • "detail.target.0.displayName" asignado a "target.resource.resource_subtype".
  • "detail.target.0.detailEntry.policyType" asignado a "target.resource_ancestors.attribute.labels".
  • "detail.outcome.reason" se asignó a "security_result.category_details".
  • "detail.debugContext.debugData.threatSuspected" se asignó a "security_result.detection_fields".
  • "detail.displayMessage" se asignó a "security_result.summary".
  • "detail.outcome.result" se asignó a "security_result.action".
  • "detail.severity" se asignó a "security_result.severity".
  • 'detail.transaction.id' asignado a 'network.session_id'
  • 'detail.debugContext.debugData.requestUri' se asignó a 'extensions.auth.auth_details'.

2022-07-08

  • Se modificó la asignación de actor.type de principal.user.role_name a principal.user.attribute.roles.
  • Se modificó la asignación de target.0.type de target.user.role_name a target.user.attribute.roles.
  • Se modificó la asignación de target.1.type de target.user.role_name a target.user.attribute.roles.

2022-06-15

Mejora:

  • para target.0.type == Token.
  • Se asignó target.0.detailEntry.clientAppId a target.asset_id.
  • Se agregó una verificación condicional para el campo "transaction.id" asignado al campo "network.session_id" de la AUA.

2022-06-03

Mejora:

  • Se asignó debugContext.debugData.privilegeGranted a target.user.attribute.roles.name además.
  • Se asignó debugContext.debugData.requestUri a extensions.auth.auth_details.
  • Se asignaron debugContext.debugData.suspiciousActivityEventId, debugContext.debugData.threatDetections y debugContext.debugData.threatSuspected a security_result.detection_fields.

2022-03-22

Mejora:

  • debugContext.debugData.behaviors asignado a security_result.description.
  • debugContext.debugData.threatSuspected se asigna a security_result.threat_status.
  • debugContext.debugData.risk se asignó a security_result.severity.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.