Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

En el SIEM y en la línea de comandos

5 tareas · 40 min · Principiante

Las expresiones regulares no son una sola cosa. SPL, KQL y la herramienta de búsqueda de una terminal comparten la idea y difieren en detalles, y un patrón copiado de un sitio a otro a veces funciona y a veces casi funciona. Además cuestan: dos patrones que devuelven lo mismo pueden tardar tiempos muy distintos sobre un mes de registros, y uno mal escrito puede no terminar nunca. En esta sala ves qué cambia entre un motor y otro, cómo se usa un patrón en una línea de comandos para sacar y contar valores, y lees la auditoría de búsquedas de Curtiembres del Atrato para ver qué patrón fue el caro. Todo es lectura; no se ejecuta nada.

0 de 5 · 0%

Objetivo de la sala

Las expresiones regulares no son una sola cosa. SPL, KQL y la herramienta de búsqueda de una terminal comparten la idea y difieren en detalles, y un patrón copiado de un sitio a otro a veces funciona y a veces casi funciona. Además cuestan: dos patrones que devuelven lo mismo pueden tardar tiempos muy distintos sobre un mes de registros, y uno mal escrito puede no terminar nunca. En esta sala ves qué cambia entre un motor y otro, cómo se usa un patrón en una línea de comandos para sacar y contar valores, y lees la auditoría de búsquedas de Curtiembres del Atrato para ver qué patrón fue el caro. Todo es lectura; no se ejecuta nada.

Tres lugares donde un analista escribe patrones, tres sintaxis parecidas:

Dónde Cómo se escribe Qué recordar
SPL rex "…" y regex _raw="…" los grupos con nombre son (?<campo>…); las comillas dobles dentro se escapan
KQL matches regex @"…" y extract(@"…", n, texto) la @ evita duplicar las barras; la lista de sintaxis admitida está en la documentación de KQL
Terminal grep -E 'patrón', grep -P 'patrón' -E usa la sintaxis extendida de POSIX; -P la de Perl; el patrón va entre comillas simples

grep -E no reconoce \d: la documentación de GNU grep dice que no forma parte de la sintaxis extendida, y para un dígito hay que escribir [0-9] o [[:digit:]]. Con grep -P sí funciona. Es el tipo de diferencia que hace que un patrón copiado del SIEM a la terminal no encuentre nada y no avise.

Responde para continuar

Un patrón con \d{1,3} funciona en el SIEM y lo pegas en `grep -E` y no encuentra nada. ¿Qué haces?

Ver pista de ayuda

Piensa en qué sintaxis usa cada opción de grep, y en cómo se escribe un dígito sin \d.

En una terminal, la tubería convierte un patrón en un informe. grep -o imprime solo el trozo que casó, no la línea entera; sort ordena; uniq -c cuenta repeticiones consecutivas; y un segundo sort -rn pone arriba el mayor.

La tubería completa es grep -oE 'from [0-9]{1,3}(\.[0-9]{1,3}){3}' auth.log | sort | uniq -c | sort -rn. Esa línea saca cada dirección que sigue a from, las ordena para que las repetidas queden juntas, las cuenta y las lista de la que más aparece a la que menos. Es una pregunta del tipo «¿qué origen intentó más?» sin una herramienta de análisis. Y recuerda: el patrón de IP describe la forma; no comprueba que el valor sea una dirección.

Responde para continuar

Quieres la lista de direcciones origen de un registro, con cuántas veces aparece cada una, de más a menos. ¿Qué tubería usas?

Ver pista de ayuda

-c cuenta líneas, -v las invierte y -o imprime solo el trozo que casó. ¿Cuál de las tres saca valores?

Un patrón mal escrito puede ser caro y, en el peor caso, no terminar. Si un grupo se repite y dentro del grupo hay otro cuantificador, como en (\w+\s?)+, el motor puede probar un número de combinaciones que crece de forma explosiva con el largo de la línea. Se llama retroceso catastrófico, y es una de las maneras en que una búsqueda con patrón deja ocupado un SIEM hasta que el sistema la corta.

La auditoría de búsquedas de este escenario anota, para cinco patrones sobre el mismo mes de autenticación, cuánto leyeron, cuánto tardaron y cómo terminaron. Los tiempos son los de este laboratorio, no una medida general.

busquedas_siem
| where estado != "completada"

Responde para continuar

Escribe el identificador de la búsqueda que el SIEM tuvo que cancelar por tiempo límite.

Ver pista de ayuda

Ejecuta `busquedas_siem | where estado != "completada"` y lee la columna id.

Tres de las búsquedas devuelven exactamente las mismas 120514 líneas. Una empieza con el literal de lo que busca; otra lo rodea de .* por los dos lados, que obliga al motor a probar el patrón en cada posición de cada línea; la tercera usa una clase negada. Las tres son equivalentes en el resultado y no en el costo. Cuando un literal conocido está disponible, ponerlo al principio le permite al motor descartar rápido las líneas que no lo contienen.

busquedas_siem
| where coincidencias == 120514
| sort by segundos asc

Responde para continuar

Escribe cuántos segundos más tardó la versión con .* a los dos lados que la del literal solo.

Ver pista de ayuda

Ejecuta la consulta de arriba y resta el tiempo de BUS-301, el patrón con el literal solo, al de BUS-302.

El patrón que no terminó no se arregla subiendo el tiempo límite ni cortando datos: se reescribe. Las reglas que más se repiten son las mismas que se vieron en las salas anteriores: empezar por un literal, anclar cuando se sepa dónde está lo buscado, usar clases negadas en vez de .*, y no meter un cuantificador dentro de un grupo que ya se repite. Y antes de dejarlo como regla permanente, se prueba contra el mes de datos con el tiempo anotado.

Responde para continuar

Un patrón con un grupo repetido y un cuantificador dentro fue cancelado por tiempo límite. ¿Qué haces con él?

Ver pista de ayuda

Un tiempo límite mayor oculta el problema; lo que lo causa es la forma del patrón.

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

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