Recopila registros del contexto del usuario de Duo
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:
- Instancia de Google SecOps
- Acceso con privilegios al Panel de administración de Duo
Configura la aplicación de la API de Admin y obtén las claves
- Accede al Panel de administración de Duo como administrador.
- En la barra lateral izquierda, haz clic en Aplicaciones > Administrar aplicaciones.
- Presiona el botón Add Application.
- En el campo de búsqueda, escribe Admin API y haz clic en Agregar junto a Duo Admin API.
- 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
.
- Clave de integración: (una cadena como
- Copia y guarda la clave de integración, la clave secreta y el nombre de host de la API en una ubicación segura.
- Desplázate hasta Configuración y establece Permisos en Otorgar permiso de lectura del recurso.
- Haz clic en Guardar cambios.
Configura feeds
- Ve a SIEM Settings > Feeds.
- Haz clic en + Agregar feed nuevo.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo,
Duo Users Logs
). - Selecciona API de terceros como el Tipo de origen.
- Selecciona el tipo de registro Contexto del usuario de Duo.
- Haz clic en Siguiente.
- 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.
- Haz clic en Siguiente.
- 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.