Introducción a Snort IDS

CiberseguridadBeginner
Practicar Ahora

Introducción

Bienvenido al laboratorio de Introducción a Snort IDS.

Snort es un sistema de prevención de intrusiones en red (NIPS) y un sistema de detección de intrusiones en red (NIDS) de código abierto, capaz de realizar análisis de tráfico y registro de paquetes en tiempo real en redes IP. Puede realizar análisis de protocolos, búsqueda de contenido y coincidencia de patrones; se utiliza comúnmente para bloquear activamente o detectar de forma pasiva una variedad de ataques y sondeos, como desbordamientos de búfer, escaneos de puertos sigilosos, ataques a aplicaciones web y más.

A grandes rasgos, un IDS responde a una pregunta diferente a la de un sniffer de paquetes. Un sniffer te ayuda a observar el tráfico. Un IDS intenta decidir si parte de ese tráfico merece atención. Snort logra esto combinando la inspección de paquetes con un lenguaje de reglas. En otras palabras, convierte el tráfico bruto en eventos relevantes para la seguridad.

En este laboratorio, aprenderás los conceptos básicos de Snort. Explorarás su archivo de configuración, aprenderás a validar la sintaxis de la configuración y ejecutarás Snort en dos de sus modos operativos principales: modo Sniffer y modo Registrador de paquetes (Packet Logger).

Inspeccionar el archivo de configuración de Snort

En este paso, explorarás el archivo de configuración principal utilizado por Snort. Comprender este archivo es esencial porque dicta cómo se comporta Snort, qué red protege y qué reglas aplica.

La configuración es importante porque la calidad de la detección depende en gran medida del contexto. Un IDS que no sabe qué direcciones pertenecen a tu entorno no puede razonar bien sobre el tráfico entrante frente al interno. Por lo tanto, variables como HOME_NET no son ajustes cosméticos. Son parte de cómo Snort modela la red que está defendiendo.

El archivo de configuración principal de Snort se encuentra en /etc/snort/snort.conf. Este archivo contiene varios ajustes, incluyendo variables de red, rutas a archivos de reglas y configuraciones de preprocesadores.

Comencemos navegando a tu directorio de proyecto, que es tu espacio de trabajo predeterminado.

cd ~/project

Una de las variables más importantes en el archivo de configuración de Snort es HOME_NET. Esta variable define la red interna que Snort debe proteger. De forma predeterminada, a menudo se establece en any, lo que significa que Snort monitoreará todo el tráfico de red.

Puedes usar el comando grep para buscar la variable HOME_NET dentro del archivo de configuración. El comando grep es una herramienta poderosa en Linux utilizada para buscar patrones de texto específicos dentro de archivos. Debido a que el archivo de configuración está protegido, necesitamos usar sudo para ejecutar el comando con privilegios administrativos.

sudo grep "ipvar HOME_NET" /etc/snort/snort.conf

Deberías ver una salida similar a esta:

ipvar HOME_NET any

Esta salida confirma que la variable HOME_NET está configurada actualmente como any. En un entorno de producción real, normalmente cambiarías esto para que coincida con tu subred IP interna específica (por ejemplo, 192.168.1.0/24) para reducir los falsos positivos y mejorar el rendimiento.

También puedes ver el archivo de configuración completo usando el comando less si deseas explorar más, aunque es bastante largo. Por ahora, saber dónde está el archivo y cómo encontrar las variables clave es suficiente.

Probar la sintaxis de configuración

En este paso, aprenderás a probar el archivo de configuración de Snort en busca de errores de sintaxis.

La validación antes de la implementación es una práctica operativa crítica. Una regla de detección o un archivo de configuración solo es útil si el motor realmente puede cargarlo. La prueba de sintaxis es el equivalente en IDS a compilar código antes de su lanzamiento: detecta cambios erróneos a tiempo y evita puntos ciegos en producción.

Siempre que realices cambios en el archivo snort.conf, se recomienda encarecidamente probar la configuración antes de iniciar o reiniciar el servicio de Snort. Si hay un error tipográfico o una configuración incorrecta, Snort no se iniciará, lo que podría dejar tu red sin monitoreo.

Snort proporciona un modo de prueba integrado. Puedes usar el flag -T para decirle a Snort que pruebe la configuración y el flag -c para especificar la ruta al archivo de configuración que deseas probar.

Ejecuta el siguiente comando para probar la configuración predeterminada:

sudo snort -T -c /etc/snort/snort.conf

Debido a que Snort necesita acceder a las interfaces de red y a los archivos del sistema, debes ejecutarlo con sudo para otorgarle privilegios administrativos.

A medida que se ejecuta el comando, Snort enviará mucha información a la terminal. Está inicializando preprocesadores, cargando reglas y validando la sintaxis.

Desplázate hasta el final de la salida. Estás buscando un mensaje de éxito específico que se ve así:

        --== Initialization Complete ==--

   ,,_     -*> Snort! <*-
  o"  )~   Version 2.9.15.1 GRE (Build 68)
   ''''    By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
           Copyright (C) 2014-2019 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using libpcap version 1.10.1 (with TPACKET_V3)
           Using PCRE version: 8.39 2016-06-14
           Using ZLIB version: 1.2.11

           Rules Engine: SF_SNORT_DETECTION_ENGINE  Version 3.0  <Build 1>
           Preprocessor Object: SF_GTP  Version 1.1  <Build 4>
           Preprocessor Object: SF_CORVUS  Version 1.1  <Build 4>
           ...

Snort successfully validated the configuration!
Snort exiting

La frase clave aquí es Snort successfully validated the configuration!. Esto significa que tu archivo snort.conf es sintácticamente correcto y está listo para ser utilizado.

Ejecutar Snort en modo Sniffer

En este paso, ejecutarás Snort en modo Sniffer.

El modo Sniffer es la forma más básica de usar Snort. En este modo, Snort simplemente lee los paquetes que fluyen a través de la red y los muestra en la consola en un flujo continuo. Actúa de manera muy similar a la popular utilidad tcpdump.

Esto es útil pedagógicamente porque demuestra que la tecnología IDS todavía comienza con los paquetes. Antes de que Snort pueda alertar sobre el tráfico, tiene que capturar y decodificar ese tráfico correctamente. Aprender primero el modo Sniffer mantiene visible la base a nivel de paquete en lugar de tratar las alertas como algo mágico.

Para ejecutar Snort en modo sniffer, utiliza el flag -v (verbose). Esto le dice a Snort que imprima los encabezados de los paquetes TCP/IP en la pantalla.

Dado que el tráfico de red puede ser abrumador e inundar tu terminal, también usaremos el flag -n seguido de un número. Esto le dice a Snort que capture solo un número específico de paquetes y luego se cierre automáticamente.

Ejecuta el siguiente comando para capturar y mostrar 5 paquetes:

sudo snort -v -n 5

Verás una salida similar a la siguiente, mostrando los encabezados de los paquetes:

Running in packet dump mode

        --== Initializing Snort ==--
Initializing Output Plugins!
pcap DAQ configured to passive.
Acquiring network traffic from "eth0".
...
05/18-14:32:10.123456 192.168.1.10:54321 -> 8.8.8.8:53
UDP TTL:64 TOS:0x0 ID:12345 IpLen:20 DgmLen:63
Len: 35
...
===============================================================================
Snort exiting

Si deseas ver aún más detalles, puedes combinar flags. Por ejemplo, añadir -d muestra los datos de la aplicación (payload) del paquete, y -e muestra los encabezados de la capa de enlace (dirección MAC).

Intentemos capturar 2 paquetes con detalles completos (encabezados, datos e información de la capa de enlace):

sudo snort -vde -n 2

Este modo es increíblemente útil para solucionar problemas de conectividad de red o para inspeccionar rápidamente qué tipo de tráfico está atravesando actualmente tu interfaz de red.

Ejecutar Snort en modo Registrador de paquetes

En este paso, aprenderás a ejecutar Snort en modo Registrador de paquetes (Packet Logger).

Si bien el modo Sniffer es excelente para la visualización en tiempo real, no es práctico para el monitoreo a largo plazo o el análisis detallado. El modo Registrador de paquetes resuelve esto guardando los paquetes capturados en el disco en un formato que puede analizarse más tarde utilizando herramientas como Wireshark o el propio Snort.

La evidencia de paquetes guardada es importante porque las alertas y los paquetes se complementan entre sí. Una alerta te dice que una regla se activó. El registro del paquete te permite confirmar lo que realmente sucedió e investigar detalles que el resumen de la alerta puede no incluir. Las pilas de monitoreo maduras a menudo conservan ambos.

Primero, debes crear un directorio para almacenar los archivos de registro. Creemos un directorio llamado snort_logs dentro de tu carpeta de proyecto.

mkdir -p ~/project/snort_logs

Para ejecutar Snort en modo Registrador de paquetes, utiliza el flag -l seguido de la ruta a tu directorio de registro. También usaremos -dev para capturar los detalles completos del paquete y -n 10 para capturar exactamente 10 paquetes antes de salir.

Ejecuta el siguiente comando:

sudo snort -dev -l ~/project/snort_logs -n 10

Snort capturará 10 paquetes y los escribirá en el directorio que especificaste. Esta vez no verás los paquetes impresos en la pantalla, pero verás los resúmenes de inicialización y salida.

Una vez que Snort haya terminado de ejecutarse, puedes verificar que el archivo de registro se creó listando el contenido del directorio snort_logs:

ls -l ~/project/snort_logs

Deberías ver un archivo llamado snort.log. seguido de una marca de tiempo, similar a esto:

total 4
-rw------- 1 root root 1234 May 18 14:45 snort.log.1684421100

Este archivo se guarda en un formato binario (pcap). No puedes leerlo directamente con un editor de texto como nano o cat. En su lugar, normalmente usarías una herramienta como tcpdump o lo leerías de nuevo en Snort usando el flag -r (read) para un análisis posterior.

Resumen

¡Felicidades! Has completado con éxito el laboratorio de Introducción a Snort IDS.

En este laboratorio, aprendiste los conceptos fundamentales de Snort. Exploraste el archivo de configuración principal (snort.conf) y aprendiste a validar su sintaxis usando el flag -T para evitar errores de inicio. También practicaste la ejecución de Snort en modo Sniffer para ver el tráfico de red en vivo en tu terminal, y en modo Registrador de paquetes para guardar los paquetes capturados en un directorio para su análisis futuro. Estas habilidades fundamentales son esenciales para cualquiera que busque utilizar Snort para el monitoreo de seguridad de red y la detección de intrusiones.