Parte: 1 — Redes y seguridad de redes · Fuente: Documentación de Zeek; Applied NSM, Sanders & Smith ⏱️ Duración estimada: 130 min · Nivel: Avanzado
Dominar Zeek (antes Bro), el motor de análisis de red que convierte el tráfico en logs de transacción ricos y permite escribir lógica de detección personalizada. El alumno aprenderá a procesar pcaps y tráfico en vivo, a leer los logs de Zeek, a extraer artefactos y a escribir scripts de detección en el lenguaje de Zeek.
Al finalizar, el alumno podrá:
conn, dns, http, ssl, files, notice).zeek-cut y herramientas de línea de comandos.| # | Tema | Por qué importa |
|---|---|---|
| 1 | Arquitectura de Zeek (eventos) | Modelo mental del motor |
| 2 | Logs de Zeek y sus campos | Fuente de datos de transacción |
| 3 | zeek-cut y análisis por CLI |
Consultar sin base de datos |
| 4 | Extracción de archivos | Recuperar artefactos |
| 5 | Zeek scripting y eventos | Detección a medida |
| 6 | Notices y framework de detección | Alertas propias |
| 7 | Zeek en producción (clusters) | Escala real |
dns.log, http.log, ssl.log, files.log, etc.; describen la actividad a nivel de aplicación.zeek-cut: utilidad para extraer columnas específicas de los logs (con cabeceras) desde la línea de comandos.http_request) al que un script puede reaccionar con lógica propia.apt install zeek (repos de OpenSUSE OBS) / compilación.zeek-cut viene con Zeek; jq si usas la salida JSON.⚠️ Nota ética: Zeek registra metadatos y puede extraer archivos del tráfico, lo que implica manejo de datos potencialmente sensibles. Úsalo sobre redes propias o autorizadas y protege los logs y artefactos extraídos. En laboratorio, usa tu propio tráfico.
bash
mkdir zeek-out && cd zeek-out
zeek -r /tmp/lab027.pcapng
ls # conn.log dns.log http.log ssl.log files.log ...
zeek-cut:bash
cat conn.log | zeek-cut id.orig_h id.resp_h id.resp_p proto service duration orig_bytes resp_bytes
bash
cat dns.log | zeek-cut query qtype_name answers | sort | uniq -c | sort -rn | head
bash
cat http.log | zeek-cut host uri method status_code | head
bash
zeek -r /tmp/lab027.pcapng /opt/zeek/share/zeek/policy/frameworks/files/extract-all-files.zeek
ls extract_files/
deteccion.zeek que emita un notice ante user-agents sospechosos:```zeek @load base/protocols/http
redef enum Notice::Type += { Suspicious_UA };
# Inspecciona la cabecera User-Agent cuando Zeek ya la ha parseado # (en http_request el valor aún no existe: c$http$user_agent estaría sin asignar). event http_header(c: connection, is_orig: bool, name: string, value: string) { if ( is_orig && name == "USER-AGENT" && /sqlmap|nikto|[Nn]map/ in value ) NOTICE([$note=Suspicious_UA, $msg="User-Agent de herramienta ofensiva detectado", $conn=c]); } ```
Ejecútalo:
bash
zeek -r /tmp/lab027.pcapng ./deteccion.zeek
cat notice.log | zeek-cut msg
bash
sudo zeek -i eth0
zeek-cut, lista las 10 conexiones que más bytes transfirieron.ssl.log los certificados con validez sospechosa o autofirmados.conn.log y dns.log para detectar posible beaconing (conexiones regulares a un dominio).Procesa con Zeek una captura de tu laboratorio que incluya actividad web y DNS, y entrega: (a) un resumen de las conexiones top por bytes con zeek-cut, (b) al menos un archivo extraído del tráfico con su hash, y (c) un script .zeek propio que genere un notice para una condición de detección que definas (user-agent, volumen o dominio). Incluye la salida de notice.log.
Criterio de aceptación: los logs se generan correctamente, el archivo extraído coincide (hash) con el transferido, y tu script produce el notice esperado al procesar la captura, sin falsos positivos sobre el tráfico legítimo.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
zeek: command not found |
Zeek no está en el PATH; usa la ruta completa (/opt/zeek/bin/zeek) o ajusta el PATH |
zeek-cut muestra nombres de campo raros |
Estás mirando el log equivocado; consulta la referencia de campos por log |
| No se extraen archivos | No cargaste el script de extracción; añade el policy extract-all-files.zeek |
| Script no reacciona | Falta @load del protocolo o el evento es incorrecto; revisa el nombre del evento |
| Logs en JSON ilegibles con zeek-cut | La salida está en JSON; usa jq o cambia a formato TSV |
❓ ¿Zeek es un IDS? No en el sentido clásico. Suricata/Snort detectan por firmas; Zeek es un motor de análisis que registra transacciones y ejecuta lógica propia. Se complementan: Suricata alerta, Zeek contextualiza.
❓ ¿Qué log uso para empezar una investigación?
Casi siempre conn.log: te da todas las conexiones y sirve de índice para pivotar a los logs de aplicación (dns, http, ssl).
❓ ¿Puedo escribir mis propias detecciones? Sí, ese es el gran valor de Zeek. Su lenguaje de scripting permite reaccionar a eventos de red y emitir notices con lógica arbitraria.
❓ ¿Zeek escala a redes grandes? Sí, con despliegues en clúster (un manager y varios workers) puede analizar enlaces de alta velocidad, que es como se usa en producción.
Clase 043 — Network Security Monitoring (NSM): fundamentos