Un Sistema de Detección de Intrusos (IDS) es como una cámara de seguridad para tu red. Escucha silenciosamente todo el tráfico que pasa por el cable y lo compara en tiempo real contra una base de datos de firmas maliciosas. Snort, creado originalmente por Martin Roesch y ahora mantenido por Cisco, es el motor IDS/IPS más desplegado a nivel mundial.
Snort es muy versátil y puede funcionar en tres modos distintos:
El corazón de Snort es su archivo de configuración. Aquí definimos cuáles son las IPs que consideramos "nuestras" y cuáles son "externas".
# /etc/snort/snort.conf
# 1. Definir la red local (HOME_NET)
# Es vital configurarlo bien para evitar falsos positivos
ipvar HOME_NET 192.168.1.0/24
# 2. Definir la red externa (EXTERNAL_NET)
# Normalmente es cualquier cosa que no sea HOME_NET
ipvar EXTERNAL_NET !$HOME_NET
# 3. Definir rutas de reglas
var RULE_PATH /etc/snort/rules
# 4. Incluir archivos de reglas (firmas)
include $RULE_PATH/local.rules
include $RULE_PATH/sql-injection.rules
Escribir reglas es la habilidad técnica más valiosa de un analista de red. Una regla de Snort se divide en dos partes principales: la Cabecera (Header) y las Opciones (Options).
Define quién, dónde y qué protocolo está involucrado.
[Acción] [Protocolo] [IP Origen] [Puerto Origen] -> [IP Destino] [Puerto Destino]
alert (generar alerta), log (solo registrar), drop (bloquear, si está en modo IPS).tcp, udp, icmp o ip.-> es unidireccional, <> es bidireccional.Define qué estamos buscando dentro del paquete y qué mensaje mostrar.
Inteligencia nos alerta de un ataque inminente por fuerza bruta hacia el servidor FTP interno utilizando el usuario "root". Escribe la regla de Snort exacta para interceptar y alertar sobre este patrón malicioso en la red.
>_ INICIAR RETO CTF 14Veamos cómo detectar diferentes vectores de ataque analizando el tráfico crudo:
Los atacantes a menudo inyectan la cadena ' OR 1=1 --. Como la web viaja por HTTP (TCP puerto 80/443), podemos atraparlo:
alert tcp $EXTERNAL_NET any -> $HOME_NET 80 (msg:"SQL Injection Attempt Detected"; content:"' OR 1=1"; nocase; sid:1000002; rev:1;)
Un escaneo XMAS enciende las flags FIN, PSH y URG del protocolo TCP. Es un comportamiento totalmente anómalo en una red sana.
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"Nmap XMAS Tree Scan Detected"; flags:F,P,U; sid:1000003; rev:1;)
Buscamos comandos nativos de Linux viajando dentro de peticiones HTTP, como /etc/passwd o ejecuciones de bash.
alert tcp $EXTERNAL_NET any -> $HOME_NET 80 (msg:"RCE Attempt - /etc/passwd Access"; content:"/etc/passwd"; http_uri; sid:1000004; rev:1;)
A veces los atacantes intentan ofuscar los datos o esconder malware. Podemos buscar bytes hexadecimales crudos rodeándolos con pipes (|).
# Buscar una firma hexadecimal específica de un troyano en cualquier puerto:
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"Malware XYZ C2 Beacon"; content:"|00 00 00 01 4A 5B|"; sid:1000005;)
Una vez escrita la regla en /etc/snort/rules/local.rules, debemos iniciar Snort apuntando a la interfaz de red correcta (por ejemplo, eth0).
# Probar si la configuración y las reglas tienen errores (Modo Test):
snort -T -c /etc/snort/snort.conf -i eth0
# Iniciar Snort imprimiendo alertas directamente en la consola (útil para debuggear):
snort -A console -q -c /etc/snort/snort.conf -i eth0
# Iniciar Snort en modo demonio (segundo plano) para producción:
snort -D -c /etc/snort/snort.conf -i eth0
# Leer los logs generados:
cat /var/log/snort/alert
Aunque Snort es el padre de los IDS, las infraestructuras modernas de 10Gbps+ suelen utilizar motores paralelos más nuevos. Suricata es un IDS/IPS multihilo que es 100% compatible con las reglas de Snort (puedes copiar y pegar tu local.rules y funcionará). Por otro lado, Zeek (antes Bro) no usa firmas, sino que se centra en el análisis de comportamiento a nivel de aplicación (creando logs hiperdetallados de DNS, HTTP, SSL).