Recopila registros del contexto del usuario de Duo

Compatible con:

En este documento, se explica cómo transferir registros de contexto de usuarios de Duo a Operaciones de seguridad de Google a través de una API. El analizador procesa los datos JSON, asigna la información del usuario (incluidos los alias de los nombres de usuario a las direcciones de correo electrónico, los grupos, los números de teléfono y los detalles del dispositivo) al UDM y captura el estado de la cuenta del usuario. También controla las estructuras de datos anidadas y realiza varias transformaciones y combinaciones de datos para crear el evento final del UDM.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

Configura la aplicación de la API de Admin y obtén las claves

  1. Accede al Panel de administración de Duo como administrador.
  2. En la barra lateral izquierda, haz clic en Aplicaciones > Administrar aplicaciones.
  3. Presiona el botón Add Application.
  4. En el campo de búsqueda, escribe Admin API y haz clic en Agregar junto a Duo Admin API.
  5. En la siguiente pantalla, se muestra la siguiente información:
    • Clave de integración: (una cadena como DIYYYYYYYYYYYYYY)
    • Clave secreta: Es una cadena de 40 caracteres.
    • Nombre de host de la API: Por ejemplo, api-abcd1234.duosecurity.com.
  6. Copia y guarda la clave de integración, la clave secreta y el nombre de host de la API en una ubicación segura.
  7. Desplázate hasta Configuración y establece Permisos en Otorgar permiso de lectura del recurso.
  8. Haz clic en Guardar cambios.

Configura feeds

  1. Ve a SIEM Settings > Feeds.
  2. Haz clic en + Agregar feed nuevo.
  3. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Duo Users Logs).
  4. Selecciona API de terceros como el Tipo de origen.
  5. Selecciona el tipo de registro Contexto del usuario de Duo.
  6. Haz clic en Siguiente.
  7. Especifica valores para los siguientes parámetros de entrada:
    • Nombre de usuario: Ingresa la clave de integración que copiaste antes.
    • Secret: Ingresa la clave secreta que copiaste antes.
    • Nombre de host de la API: Proporciona la URL del servidor de la API de Duo (por ejemplo, api-abcd1234.duosecurity.com).
    • Espacio de nombres del recurso: Es el espacio de nombres del recurso.
    • 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
access_device.browser event.idm.entity.entity.resource.attribute.labels.value El valor se toma directamente del campo access_device.browser o surfaced_auth.access_device.browser si el primero está vacío. La clave se establece en "access_device browser".
access_device.browser_version event.idm.entity.entity.resource.attribute.labels.value El valor se toma directamente del campo access_device.browser_version o surfaced_auth.access_device.browser_version si el primero está vacío. La clave se establece en "access_device browser_version".
access_device.ip.address event.idm.entity.entity.ip El valor se toma directamente del campo access_device.ip.address o surfaced_auth.access_device.ip si el primero está vacío.
access_device.location.city event.idm.entity.entity.location.city El valor se toma directamente del campo access_device.location.city o surfaced_auth.access_device.location.city si el primero está vacío.
access_device.location.country event.idm.entity.entity.location.country_or_region El valor se toma directamente del campo access_device.location.country o surfaced_auth.access_device.location.country si el primero está vacío.
access_device.location.state event.idm.entity.entity.location.state El valor se toma directamente del campo access_device.location.state o surfaced_auth.access_device.location.state si el primero está vacío.
access_device.os event.idm.entity.entity.asset.platform_software.platform El valor se deriva del campo access_device.os o surfaced_auth.access_device.os si el primero está vacío. Si el valor coincide (sin distinguir mayúsculas de minúsculas) con "ios" o "mac", el campo de UDM se establece en "MAC". Si coincide con "windows", el campo de UDM se establece en "WINDOWS". Si coincide con "linux", el campo UDM se establece en "LINUX".
access_device.os_version event.idm.entity.entity.asset.platform_software.platform_version El valor se toma directamente del campo access_device.os_version o surfaced_auth.access_device.os_version si el primero está vacío.
action.details event.idm.entity.sec_result.action_details El valor se toma de este campo si action está vacío.
action.name event.idm.entity.sec_result.detection_fields.value El valor se toma directamente del campo. La clave se establece en "action_name".
activity_id event.idm.entity.sec_result.detection_fields.value El valor se toma directamente del campo. La clave se establece en "activity_id".
actor.details.created event.idm.entity.entity.user.attribute.labels.value El valor se toma directamente del campo. La clave se establece como "creada".
actor.details.email event.idm.entity.entity.user.email_addresses El valor se toma directamente del campo.
actor.details.groups.key event.idm.entity.entity.user.group_identifiers El valor se toma directamente del campo.
actor.details.groups.name event.idm.entity.entity.user.group_identifiers El valor se toma directamente del campo.
actor.details.last_login event.idm.entity.entity.user.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "last_login".
actor.details.status event.idm.entity.entity.user.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "status".
actor.key event.idm.entity.entity.resource.product_object_id El valor se toma directamente del campo.
actor.name event.idm.entity.entity.user.user_display_name El valor se toma directamente del campo o surfaced_auth.user.name si el primero está vacío.
actor.type event.idm.entity.entity.user.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "actor type".
akey event.idm.entity.metadata.product_entity_id El valor se toma directamente del campo o es sekey si akey está vacío.
application event.idm.entity.entity.application El valor se toma directamente del campo.
collection_time.seconds, create_time.seconds event.idm.entity.metadata.collected_timestamp.seconds, event.timestamp.seconds El valor más alto de collection_time.seconds y create_time.seconds se usa para collected_timestamp.seconds y para el timestamp.seconds de nivel superior.
collection_time.nanos, create_time.nanos event.idm.entity.metadata.collected_timestamp.nanos, event.timestamp.nanos El valor en nanosegundos correspondiente al mayor de collection_time.seconds y create_time.seconds se usa para collected_timestamp.nanos y el timestamp.nanos de nivel superior.
email event.idm.entity.entity.user.email_addresses El valor se toma directamente del campo.
explanations event.idm.entity.entity.resource.attribute.labels Los pares clave-valor dentro de cada objeto del array explanations se convierten en etiquetas. La clave de cada etiqueta comienza con "explanation ".
firstname event.idm.entity.entity.user.first_name El valor se toma directamente del campo.
from_common_netblock event.idm.entity.entity.resource.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "from_common_netblock".
from_new_user event.idm.entity.entity.resource.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "from_new_user".
groups.N.name (N=0..10) event.idm.entity.entity.user.group_identifiers El valor se toma directamente del campo.
lastname event.idm.entity.entity.user.last_name El valor se toma directamente del campo.
low_risk_ip event.idm.entity.entity.resource.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "low_risk_ip".
phones.0.model event.idm.entity.relations.entity.asset.hardware.model El valor se toma directamente del campo.
phones.0.number event.idm.entity.entity.user.phone_numbers El valor se toma directamente del campo.
phones.0.phone_id event.idm.entity.relations.entity.asset.product_object_id El valor se toma directamente del campo.
phones.0.platform event.idm.entity.relations.entity.asset.hardware.manufacturer El valor se toma directamente del campo.
priority_event event.idm.entity.entity.resource.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "priority_event".
realname event.idm.entity.entity.user.user_display_name El valor se toma directamente del campo.
sekey event.idm.entity.metadata.product_entity_id El valor se toma directamente del campo si akey está vacío.
state event.idm.entity.entity.resource.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "state".
status event.idm.entity.entity.user.attribute.labels.value, event.idm.entity.entity.user.user_authentication_status El valor se toma directamente del campo. La clave de la etiqueta se establece en "status". El valor también se usa para determinar el user_authentication_status. "active" y "bypass" se asignan a "ACTIVE", "disabled" y "pending deletion" se asignan a "SUSPENDED", y "locked out" se asigna a "NO_ACTIVE_CREDENTIALS".
surfaced_auth.access_device.browser event.idm.entity.entity.resource.attribute.labels.value El valor se toma de este campo si access_device.browser está vacío. La clave se establece en "surfaced_auth access_device browser".
surfaced_auth.access_device.browser_version event.idm.entity.entity.resource.attribute.labels.value El valor se toma de este campo si access_device.browser_version está vacío. La clave se establece en "surfaced_auth access_device browser_version".
surfaced_auth.access_device.ip event.idm.entity.entity.ip El valor se toma de este campo si access_device.ip.address está vacío.
surfaced_auth.access_device.location.city event.idm.entity.entity.location.city El valor se toma de este campo si access_device.location.city está vacío.
surfaced_auth.access_device.location.country event.idm.entity.entity.location.country_or_region El valor se toma de este campo si access_device.location.country está vacío.
surfaced_auth.access_device.location.state event.idm.entity.entity.location.state El valor se toma de este campo si access_device.location.state está vacío.
surfaced_auth.access_device.os event.idm.entity.entity.asset.platform_software.platform El valor se toma de este campo si access_device.os está vacío. La lógica para asignar el campo al UDM es la misma que para access_device.os.
surfaced_auth.access_device.os_version event.idm.entity.entity.asset.platform_software.platform_version El valor se toma de este campo si access_device.os_version está vacío.
surfaced_auth.user.key event.idm.entity.entity.user.userid El valor se toma de este campo si username está vacío.
surfaced_auth.user.name event.idm.entity.entity.user.user_display_name El valor se toma de este campo si actor.name está vacío.
target.details.biometrics_status event.idm.entity.entity.asset.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "biometrics_status".
target.details.country_code event.idm.entity.entity.asset.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "country_code".
target.details.extension event.idm.entity.entity.asset.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "extension".
target.details.manufacturer event.idm.entity.entity.asset.hardware.manufacturer El valor se toma directamente del campo.
target.details.model event.idm.entity.entity.asset.hardware.model El valor se toma directamente del campo.
target.details.number event.idm.entity.entity.user.phone_numbers El valor se toma directamente del campo.
target.details.os event.idm.entity.entity.asset.software.name El valor se toma directamente del campo.
target.details.os_version event.idm.entity.entity.asset.software.version El valor se toma directamente del campo.
target.details.passcode_status event.idm.entity.entity.asset.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "passcode_status".
target.details.tampered_status event.idm.entity.entity.asset.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "tampered_status".
target.key event.idm.entity.entity.asset.asset_id El valor se toma directamente del campo.
target.name event.idm.entity.entity.asset.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "name".
target.type event.idm.entity.entity.asset.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "type".
triage_event_uri event.idm.entity.entity.url El valor se toma directamente del campo.
triaged_as_interesting event.idm.entity.entity.resource.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "triaged_as_interesting".
ts event.timestamp.seconds, event.idm.entity.metadata.collected_timestamp.seconds Si está presente, la marca de tiempo se analiza a partir de este campo con el formato ISO8601 o RFC 3339. Los segundos y nanosegundos extraídos se usan tanto para el campo timestamp de nivel superior como para el campo collected_timestamp.
type event.idm.entity.entity.resource.attribute.labels.value El valor se toma directamente del campo. La clave se establece en "type".
user_id event.idm.entity.metadata.product_entity_id El valor se toma directamente del campo.
username event.idm.entity.entity.user.userid El valor se toma directamente del campo o es surfaced_auth.user.key si username está vacío.
(Lógica del analizador) event.idm.entity.metadata.vendor_name Se codificó como "Duo".
(Lógica del analizador) event.idm.entity.metadata.product_name Está codificado como "Contexto del usuario de Duo".
(Lógica del analizador) event.idm.entity.metadata.entity_type Se determina en función de la presencia de otros campos. Si user_present es verdadero, se establece en "USER". Si asset_mid_present es verdadero, se establece en "ASSET". Si ip_present es verdadero, se establece en "IP_ADDRESS". Si resource_present es verdadero, se establece en "RESOURCE". De lo contrario, se establece como "UNKNOWN_ENTITYTYPE".
(Lógica del analizador) event.idm.entity.relations.entity_type Se establece en "ASSET" si phones[0] no está vacío.
(Lógica del analizador) event.idm.entity.relations.relationship Se establece en "OWNS" si phones[0] no está vacío.
(Lógica del analizador) event.idm.entity.relations.entity.asset.type Se establece en "MOBILE" si phones[0] no está vacío.

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