Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Unir dos tablas — join para correlacionar

4 tareas · 35 min · Principiante

En la primera sala del módulo correlacionaste a ojo dos eventos de fuentes distintas. Con dos eventos se puede; con miles, no. join hace esa correlación dentro de la consulta: junta las filas de dos tablas que comparten un valor. Aquí unes los inicios de sesión de Delta Cargo con la auditoría de los buzones de correo para responder la pregunta que sigue a toda sesión sospechosa —qué hizo quien entró— y aprendes las dos trampas de join que más se repiten.

0 de 4 · 0%

Objetivo de la sala

En la primera sala del módulo correlacionaste a ojo dos eventos de fuentes distintas. Con dos eventos se puede; con miles, no. join hace esa correlación dentro de la consulta: junta las filas de dos tablas que comparten un valor. Aquí unes los inicios de sesión de Delta Cargo con la auditoría de los buzones de correo para responder la pregunta que sigue a toda sesión sospechosa —qué hizo quien entró— y aprendes las dos trampas de join que más se repiten.

Cada fuente del SIEM responde una parte de la pregunta. El proveedor de identidad sabe desde dónde entró una cuenta, pero no qué hizo después. La auditoría de buzones sabe qué cambió en un buzón, pero muchas veces no guarda desde qué dirección. join junta las dos: para cada fila de la tabla de la izquierda busca las filas de la derecha que tienen el mismo valor en la columna que indicas detrás de on, y devuelve las parejas.

inicios
| where resultado == "correcto" and ip_origen == "198.51.100.23"
| join kind=inner (buzones) on cuenta

Dos costumbres hacen que un join sea legible y rápido. Se filtra antes de unir, para que la tabla de la izquierda llegue pequeña: unir la noche entera de inicios con todos los buzones produce miles de parejas que nadie va a leer. Y la tabla de la derecha va entre paréntesis, porque puede ser una consulta entera con sus propios filtros.

Esta tarea se hace en el laboratorio

Una consola para consultar la base de datos, aquí en la página. No instalas nada y no puedes romper nada.

Conectando con la base…

Responde para continuar

Tienes una sesión sospechosa en el registro de identidad y quieres saber qué cambió esa cuenta en su buzón. ¿Qué hace el join por ti?

Ver pista de ayuda

La columna de detrás de on es la que tiene que coincidir en las dos tablas.

kind decide qué filas sobreviven. inner deja solo las que encuentran pareja en los dos lados: sesiones que tienen eventos de buzón. leftouter deja todas las de la izquierda, tengan pareja o no, y rellena con vacíos lo que falta: sirve cuando también te interesa la sesión que no hizo nada. leftanti deja las de la izquierda que no tienen pareja: «cuentas que iniciaron sesión desde otro país y no están en la lista de personas de viaje», «equipos del inventario que no mandaron ningún evento hoy».

Si no escribes kind, KQL no usa inner: usa una variante que se queda con una sola fila por cada valor de la izquierda antes de unir. Con una sesión por cuenta no se nota; con varias sesiones de la misma cuenta, algunas desaparecen del resultado sin ningún aviso. Por eso en una consulta de investigación el tipo se escribe siempre, aunque sea el que querías.

Esta tarea se hace en el laboratorio

Una consola para consultar la base de datos, aquí en la página. No instalas nada y no puedes romper nada.

Conectando con la base…

Responde para continuar

Necesitas las cuentas que iniciaron sesión desde fuera y que no tienen ningún evento en la auditoría de buzones. ¿Qué tipo de unión usas?

Ver pista de ayuda

Buscas lo que está a la izquierda y falta a la derecha.

Unir por la cuenta trae todo lo que esa cuenta hizo en la tabla de la derecha, también lo de ayer y lo de la semana pasada. Si la sesión sospechosa es de las 03:41 y la cuenta mandó un correo normal la tarde anterior, el join devuelve los dos eventos de buzón pegados a la misma sesión, y un vistazo rápido los mezcla en la misma historia. La condición que falta es de tiempo: después del join, where hora1 > hora deja solo lo que pasó después de entrar.

Ese hora1 no es un error. Cuando las dos tablas tienen una columna con el mismo nombre, el resultado conserva las dos y a la de la derecha le añade un 1 al final: hora es la del inicio de sesión y hora1 la del evento de buzón; cuenta y cuenta1, lo mismo. Al terminar, un project con las columnas que cuentan la historia deja el resultado listo para el reporte.

Esta tarea se hace en el laboratorio

Una consola para consultar la base de datos, aquí en la página. No instalas nada y no puedes romper nada.

Conectando con la base…

Responde para continuar

El join de una sesión de madrugada con los buzones devuelve también un evento de la tarde anterior. ¿Cómo lo corriges?

Ver pista de ayuda

La unión empareja por la cuenta; el orden en el tiempo lo tienes que pedir tú.

La sesión correcta desde la dirección del rociado abrió el correo web de una cuenta de Delta Cargo de madrugada. Une esa sesión con la auditoría de buzones, quédate con lo que pasó después de entrar y lee la regla que se creó.

Esta tarea se hace en el laboratorio

Una consola para consultar la base de datos, aquí en la página. No instalas nada y no puedes romper nada.

Conectando con la base…

Responde para continuar

Escribe la dirección de correo externa a la que reenvía la regla creada después de la sesión de madrugada.

Ver pista de ayuda

Ejecuta `inicios | where resultado == "correcto" and ip_origen == "198.51.100.23" | join kind=inner (buzones) on cuenta | where hora1 > hora | project hora, hora1, cuenta, operacion, detalle` y lee la columna «detalle» de la regla.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Conectando con la base…

SIEM · Delta Cargo — identidad y auditoría de buzones
KQL · consultas previstas

Tablas

inicios

  • hora
  • cuenta
  • aplicacion
  • ip_origen
  • resultado
  • motivo

buzones

  • hora
  • cuenta
  • operacion
  • detalle
  • cliente
Ctrl + Enter
Consola de consultas v1.0 · build e42b80

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad