Docly Child

3.6.2. Inicio rápido SNORT

Tabla de contenidos:

Introducción a SNORT

SNORT (https://www.snort.org/) es un software que puede configurarse como NIDS (Instrusion Detection System) y NIPS (Intrusion Prevention System) y está escrito en lenguaje C. Al ser open source es ideal para realizar pruebas de detección de intrusos en técnicas de escaneo de hosts y puertos. Puede instalarse para diferentes Sistemas Operativos y en diferentes dispositivos. Su funcionamiento está basado en la monitorización de paquetes de red y detección de intrusiones por firma de ataque. Se pueden incorporar reglas de detección estándares y gratuitas (comunitarias) o de pago, y también crear reglas simples para generar avisos o bloquear comunicaciones sospechosas, ya sea actuando en una red o en el dispositivo local, almacenando la información en logs.

Snort

Su instalación y configuración debe realizarse por pasos (se recomienda no instalar a través de la librería apt). En el siguiente ejemplo se va a instalar SNORT en una imagen del Sistema Operativo Debian11 en VirtualBox, resumiendo los pasos que se muestran en la web de SNORT y en otros sitios. Puede descargarse una imagen de Debian en su web (https://www.debian.org/distrib/) y seguir las instrucciones como en la virtualización de Kali Linux. Una vez realizada la virtualización, se recomienda instalar las Guest Additions para mejorar la experiencia de usuario con VirtualBox. Puede hacerse fácilmente con las siguientes indicaciones: https://linuxize.com/post/how-to-install-virtualbox-guest-additions-on-debian-10/

En entornos reales, se recomienda ejecutar SNORT con un usuario que no sea root. No obstante, para su instalación se puede hacer empleando el comando sudo o bien con su y posteriormente añadiendo la contraseña de root, obteniendo así una consola de comandos con privilegios de forma constante. A continuación los pasos para la instalación, configuración y ejecución de pruebas de funcionamiento.

3.6.2.1. Instalación de SNORT

La instalación de SNORT debe realizarse en dos partes: software SNORT y DAQ. La siglas de DAQ son en la traducción en español: Biblioteca de Adquisición de Datos para hacer llamadas abstractas a las bibliotecas de captura de paquetes, o lo que es lo mismo, una librería para sniffing de paquetes de red. Las siguientes líneas de comandos se pueden copiar y pegar en la consola para realizar de forma rápida la instalación, sin entrar en detalles:

1. Instalación de librerías generales y creación de directorio (~/snort_src) para la ubicación de ficheros de código fuente en directorio usuario:

				
					apt-get update
apt-get install -y gcc libpcre3-dev zlib1g-dev libluajit-5.1-dev libpcap-dev openssl libssl-dev libnghttp2-dev libdumbnet-dev bison flex libdnet autoconf libtool
mkdir ~/snort_src && cd ~/snort_src

				
			

2. DAQ (versión 2.0.7): Descarga de paquete de código fuente y descomprimir:

				
					wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
tar -xvzf daq-2.0.7.tar.gz
cd daq-2.0.7

				
			

3. DAQ: Paso de reconfiguración previa y compilación e instalación (desde fichero descomprimido daq-2.0.7):

				
					apt-get install autoconf libtool
autoreconf -f –i
./configure && make && sudo make install

				
			

4. SNORT (versión 2.9.20): Regreso a dependencia de ficheros de código, descarga, descomprimir e instalación:

				
					cd ~/snort_src
wget https://www.snort.org/downloads/snort/snort-2.9.20.tar.gz
tar -xvzf snort-2.9.20.tar.gz && cd snort-2.9.20
./configure --enable-sourcefire && make && sudo make install

				
			

3.6.2.2. Configuración de SNORT

Ahora la configuración de SNORT. Se pueden copiar directamente las líneas de comando en la consola:

1. (Optativo-Recomendable) Actualización de librería de funciones y creación de enlace simbólico entre directorios:

				
					ldconfig
sudo ln -s /usr/local/bin/snort /usr/sbin/snort

				
			

2. (Optativo-Recomendable) Crear grupo de usuarios para ejecución de SNORT y añadir usuario:

				
					groupadd snort
useradd snort -r -s /sbin/nologin -c d[USUARIO] -g snort

				
			

3. Creación de estructura de directorios para almacenar ficheros de configuración y logs, añadiendo permisos, creación de listas de reglas, copiar la configuración de SNORT desde repositorio de código:

Nota: El directorio que sigue a «etc» hay añadido un espacio adicional tanto delante como detrás. Recordar de adjuntar si se copian y pegan las instrucciones. 

				
					#mkdir -p / etc /snort/rules && mkdir /var/log/snort && mkdir /usr/local/lib/snort_dynamicrules

#chmod -R 5775 / etc /snort && chmod -R 5775 /var/log/snort && chmod -R 5775 usr/local/lib/snort_dynamicrules

chown -R snort:snort / etc /snort && chown -R snort:snort /var/log/snort && chown -R snort:snort /usr/local/lib/snort_dynamicrules

touch / etc /snort/rules/white_list.rules && touch / etc /snort/rules/black_list.rules && touch / etc /snort/rules/local.rules

cp ~/snort_src/snort-2.9.20/ etc /*.conf* / etc /snort

cp ~/snort_src/snort-2.9.20/  etc /*.map / etc /snort

				
			

4. Descarga e implementación de las reglas comunitarias:

				
					wget https://www.snort.org/rules/community -O ~/community.tar.gz
tar -xvf ~/community.tar.gz -C ~/
cp ~/community-rules/* / etc /snort/rules

				
			

5. (Recomendable) Descomentar reglas de forma general (Snort en Debian espera encontrar varios archivos de reglas diferentes que no están incluidos en las reglas de la comunidad):

				
					sed -i 's/include $RULE_PATH/#include $RULE_PATH/' / etc /snort/snort.conf
				
			

6. Comprobación de los parámetros del fichero de configuración general que se halla en / etc /snort/snort.conf (ir haciendo scroll para verlas). Modificar con algún software de edición de texto:

Fichero snort.conf
    • Parámetros de red: Incorporar el tipo de red para el cual se va a usar SNORT en notación CIDR donde se indica o el servidor a implementar SNORT (también añadiendo dato de máscara de red).
				
					ipvar HOME_NET [CIRD | SERVER_IP_PUBLIC]
				
			
Fichero snort.conf (2)
    • Configuración de estructura de directorios de reglas: De acuerdo a la instalación, dejar como se muestra:
				
					var RULE_PATH / etc /snort/rules
var SO_RULE_PATH / etc /snort/so_rules
var PREPROC_RULE_PATH / etc /snort/preproc_rules
var WHITE_LIST_PATH / etc /snort/rules
var BLACK_LIST_PATH / etc /snort/rules

				
			
Fichero snort.conf (3)
    • Configuración de formato de ficheros de log: De acuerdo a la instalación indicar como se muestra:
				
					output unified2: filename snort.log, limit 128
				
			
Fichero snort.conf (4)
    • Configuración de fichero de reglas equipo local y añadir línea uso de reglas comunitarias: Descomentar la regla para activar el uso de reglas en el dispositivo local (y así realizar pruebas) y añadir la siguiente línea como se muestra.
				
					include $RULE_PATH/local.rules
include $RULE_PATH/community.rules

				
			
Fichero snort.conf (5)

7. Para validar la configuración deberá ejecutarse la siguiente línea de comando. Al terminar, deberá salir un aviso de que todo es correcto.

				
					snort -T -c / etc /snort/snort.conf
				
			
Prueba correcta configuración de SNORT

3.6.2.3. Testing y prueba de funcionamiento SNORT

Una vez instalado y configurado SNORT, se debe realizar una prueba de funcionamiento. La típica prueba consiste en añadir una regla local para advertir de un PING contra el dispositivo.

1. Configuración de regla local en etc /snort/rules/local.rules con algún editor de texto. Añadir regla mostrada para comprobación de PING:

				
					alert icmp any any -> $HOME_NET any (msg:"ICMP test"; sid:10000001; rev:001;)
				
			
Incluir regla local en SNORT

Nota: Como se muestra, las reglas locales están compuestas por una línea con una determinada sintaxis. De forma resumida constaría de las siguientes partes:

  • Acción a realizar: alertar, bloqueo, etc. (alert).
  • Protocolo a monitorizar (icmp)
  • Dirección de red o IP y puerto a monitorizar externo (any any en el ejemplo para indicar cualquiera).
  • Dirección y puerto de destino configurado en variable en el fichero snort.conf ($HOME_NET any).
  • Log del mensaje (msg…).
  • Identificador único de regla. Para reglas locales debe ser superior a 1000001.
  • Versión de la regla (rev:001)

2. Activar el modo monitoreo con la siguiente línea de comando. Para el parámetro –i debe indicarse la interfaz de red activa. Si no se sabe, se puede emplear el comando ifconfig o ip addr tal y como se muestra en el ejemplo. Como se ve, el modo monitoreo invoca la configuración de SNORT del fichero (snort.conf):

				
					snort -A console -i [INTERFAZ_RED] -u snort -g snort -c / etc /snort/snort.conf
				
			
Modo monitoreo SNORT

3. Efectuar una prueba PING con otro equipo, comprobando que se registra correctamente la alerta y el mensaje:

Generación de alertas SNORT modo monitoreo

4. Por defecto, y de acuerdo a las reglas, la monitorización quedará almacenada como log en el directorio /var/log/snort en diferentes ficheros. Puede consultarse la información de los logs con el siguiente comando, donde log* indica el nombre del fichero:

				
					snort -r /var/log/snort/snort.log*
				
			
Visualización de logs SNORT

Ahora ya se pueden añadir otras reglas para efectuar comprobaciones de detección de intrusos en escaneo de puertos y hosts. Esto solo ha sido un primer paso para comprender el funcionamiento y configuración de SNORT, pero sin embargo es un software con muchas más posibilidades. En la página oficial del proyecto existe documentación al respecto. Comentar que también puede ejecutarse SNORT como servicio en segunda instancia, sin tener que poner en modo monitoreo (que al final resulta útil solo para realizar pruebas…).