Recoger registros de contexto de usuario de Duo

Disponible en:

En este documento se explica cómo ingerir registros de contexto de usuario de Duo en Google Security Operations mediante una API. El analizador procesa los datos JSON, asigna la información del usuario (incluidos los nombres de usuario alternativos a las direcciones de correo electrónico, los grupos, los números de teléfono y los detalles del dispositivo) al UDM y registra el estado de la cuenta de usuario. También gestiona estructuras de datos anidadas y realiza varias transformaciones y combinaciones de datos para crear el evento de UDM final.

Antes de empezar

Asegúrate de que cumples los siguientes requisitos previos:

Configurar la aplicación de la API Admin y obtener las claves

  1. Inicia sesión en el panel de administración de Duo como administrador.
  2. En la barra lateral de la izquierda, haz clic en Aplicaciones > Gestionar aplicaciones.
  3. Pulsa el botón Añadir aplicación.
  4. En el campo de búsqueda, escribe API Admin y haz clic en Añadir junto a API Admin de Duo.
  5. En la siguiente pantalla, se muestra la siguiente información:
    • Clave de integración: una cadena como DIYYYYYYYYYYYYYY.
    • Clave secreta: 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 asigna el valor Conceder lectura de recursos a Permisos.
  8. Haz clic en Guardar cambios.

Configurar feeds

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en + Añadir nuevo feed.
  3. En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo, Duo Users Logs).
  4. Seleccione API de terceros como Tipo de fuente.
  5. Seleccione el tipo de registro Contexto de usuario de Duo.
  6. Haz clic en Siguiente.
  7. Especifique valores para los siguientes parámetros de entrada:
    • Nombre de usuario: introduce la clave de integración que has copiado antes.
    • Secreto: introduce la clave secreta que has copiado antes.
    • Nombre de host de la API: proporcione la URL del servidor de la API de Duo (por ejemplo, api-abcd1234.duosecurity.com).
    • Espacio de nombres de recursos: el espacio de nombres de recursos.
    • Etiquetas de ingestión: la etiqueta aplicada a los eventos de este feed.
  8. Haz clic en Siguiente.
  9. Revise la configuración del feed en la pantalla Finalizar y, a continuación, haga 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 de surfaced_auth.access_device.browser si el primero está vacío. La clave es "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 de surfaced_auth.access_device.browser_version si el primero está vacío. La clave es "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 de 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 de 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 de 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 de 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 entre mayúsculas y minúsculas) con "ios" o "mac", el campo UDM se define como "MAC". Si coincide con "windows", el campo UDM se define como "WINDOWS". Si coincide con "linux", el campo de UDM se define como "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 de 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 es "action_name".
activity_id event.idm.entity.sec_result.detection_fields.value El valor se toma directamente del campo. La clave es "activity_id".
actor.details.created event.idm.entity.entity.user.attribute.labels.value El valor se toma directamente del campo. La clave se define como "created".
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 es "last_login".
actor.details.status event.idm.entity.entity.user.attribute.labels.value El valor se toma directamente del campo. La clave se ha definido como "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 de surfaced_auth.user.name si el campo está vacío.
actor.type event.idm.entity.entity.user.attribute.labels.value El valor se toma directamente del campo. La clave es "actor type".
akey event.idm.entity.metadata.product_entity_id El valor se toma directamente del campo o 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 Se usa el valor mayor de collection_time.seconds y create_time.seconds tanto para collected_timestamp.seconds como para timestamp.seconds de nivel superior.
collection_time.nanos, create_time.nanos event.idm.entity.metadata.collected_timestamp.nanos, event.timestamp.nanos El valor de nanosegundos correspondiente al mayor de collection_time.seconds y create_time.seconds se usa tanto para collected_timestamp.nanos como para 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 de cada objeto de la matriz explanations se convierten en etiquetas. La clave de cada etiqueta va precedida de "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 ha definido como "from_common_netblock".
from_new_user event.idm.entity.entity.resource.attribute.labels.value El valor se toma directamente del campo. La clave es "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 es "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 es "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 es "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 es "status". El valor también se usa para determinar el user_authentication_status. "active" y "bypass" se corresponden con "ACTIVE", "disabled" y "pending deletion" se corresponden con "SUSPENDED", y "locked out" se corresponde con "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 define como "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 es "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 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 es "biometrics_status".
target.details.country_code event.idm.entity.entity.asset.attribute.labels.value El valor se toma directamente del campo. La clave es "country_code".
target.details.extension event.idm.entity.entity.asset.attribute.labels.value El valor se toma directamente del campo. La clave es "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 es "passcode_status".
target.details.tampered_status event.idm.entity.entity.asset.attribute.labels.value El valor se toma directamente del campo. La clave es "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 es "name".
target.type event.idm.entity.entity.asset.attribute.labels.value El valor se toma directamente del campo. La clave es "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 es "triaged_as_interesting".
ts event.timestamp.seconds, event.idm.entity.metadata.collected_timestamp.seconds La marca de tiempo se analiza a partir de este campo, si está presente, con el formato ISO8601 o RFC 3339. Los segundos y nanosegundos extraídos se usan tanto para timestamp de nivel superior como para collected_timestamp.
type event.idm.entity.entity.resource.attribute.labels.value El valor se toma directamente del campo. La clave es "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 surfaced_auth.user.key si username está vacío.
(Lógica del analizador) event.idm.entity.metadata.vendor_name Codificado como "Duo".
(Lógica del analizador) event.idm.entity.metadata.product_name Codificado como "Contexto de 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 true, se le asigna el valor "USER". Si asset_mid_present es true, se le asigna el valor "ASSET". Si ip_present es true, se le asigna el valor "IP_ADDRESS". Si resource_present es true, se le asigna el valor "RESOURCE". De lo contrario, se le asigna el valor "UNKNOWN_ENTITYTYPE".
(Lógica del analizador) event.idm.entity.relations.entity_type Se asigna el valor "ASSET" si phones[0] no está vacío.
(Lógica del analizador) event.idm.entity.relations.relationship Asigna el valor "OWNS" si phones[0] no está vacío.
(Lógica del analizador) event.idm.entity.relations.entity.asset.type Se define como "MOBILE" si phones[0] no está vacío.

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.