Snort es el sistema de prevención/detección de intrusos de código abierto más importante del mundo. Snort utiliza una serie de reglas que permiten identificar actividades sospechosas en la red, utilizando estas reglas para buscar coincidencias con los paquetes encontrados en la red y generar alertas.
IDS, sistema de detección de intrusos, o por sus siglas en inglés Intrusion Detection System, es una solución de monitoreo pasivo para la detección de posibles acciones o patrones sospechosos, incidentes anormales y violaciones de políticas de seguridad. Este es responsable por la generación de alertas por cada evento sospechoso.
IPS, sistema de prevención de intrusos, o por sus siglas en inglés Intrusion Prevention System, es una solución de protección activa para la prevención de posibles acciones o patrones sospechosos, incidentes anormales y violaciones de políticas de seguridad. Este es responsable de detener/prevenir/terminar el evento sospechoso tan pronto se realiza la detección.
Para la instalación de Snort, tomaremos como referencia el sistema operativo Debian.
Instalación desde repositorio:
sudo apt install snort
Para iniciar Snort en modo sniffer (packet dump mode), y realizar el registro de los paquetes detectados, hacemos el llamado a Snort con las siguiente configuración.
Snort -i wlan0 -vde
Para iniciar Snort como un NIDS (Network Intrusion Detection System), debemos incluir el archivo de configuración y reglas al hacer nuestro llamado a Snort.
snort -vde -c /etc/snort/snort.conf
El archivo de configuración de Snort es usado para especificar la configuración que queremos usar al momento de ejecutar Snort, este esta ubicado en /etc/snort/snort.conf.
Podemos abrir y modificar este archivo mediante el editor de texto nano.
nano /etc/snort/snort.conf
Aquí puedes ver los 9 pasos para configurar Snort.
###################################################
# This file contains a sample snort configuration.
# You should take the following steps to create your own custom configuration:
#
# 1) Set the network variables.
# 2) Configure the decoder
# 3) Configure the base detection engine
# 4) Configure dynamic loaded libraries
# 5) Configure preprocessors
# 6) Configure output plugins
# 7) Customize your rule set
# 8) Customize preprocessor and decoder rule set
# 9) Customize shared object rule set
###################################################
En este documento solo mencionaremos algunos de estos pasos, buscando realizar una configuración básica de Snort.
ipvar HOME_NET any
La variable HOME_NET, representa la parte de nuestra red en la que confiamos y queremos proteger, esta variable puede ser solo una IP, una lista de IPs separadas por comas, una subnet en notación CIDR, o simplemente “any”.
La mejor práctica es asignar a la variable HOME_NET la subnet que estámos protegiendo en notación CIDR, en mi caso es la siguiente:
ipvar HOME_NET 192.168.0.0/24
ipvar EXTERNAL_NET any
Para la variable EXTERNEL_NET, podemos asignarle todo lo que no sea HOME_NET, y esto lo hacemos anteponiendo el símbolo ! a la variableHOME_NET de la siguiente manera:
ipvar EXTERNAL_NET !$HOME_NET
En esta sección podemos definir dónde y cómo se envían las alertas y registros (logs).
“output unified2”, esta línea es lo que Snort llama “unified logging”, este se encarga de registrar los paquetes completos y las alertas.
include $RULE_PATH/local.rules
Esta línea especifica la ruta de nuestras reglas personalizadas.
Para realizar una buena configuración y creación de reglas, es recomendable deshabilitar las reglas existentes, esto en parte porque pueden generar errores o ser una versión muy antigua que realmente no son muy efectivas contra los ataques actuales.
Posterior a comentar las reglas que vienen por defecto o en su defecto eliminarlas, procedemos a guardar los cambios en el archivo de configuración de Snort.
Para realizar la comprobación de la correcta configuración del archivo snort.conf, podemos hacer uno de la bandera “-T”, la cual nos permite especificar el archivo de configuración con la bandera “-c” y tan solo con estos parámetros obtendremos una respuesta de test de configuración.
snort -T -c /etc/snort/snort.conf
Para este capítulo, analizaremos unas de las reglas que se encuentran en el archivo scan.rules dentro de la carpeta de reglas de Snort /etc/snort/rules.
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"SCAN SYN FIN"; flow:stateless; flags:SF,12; reference:arachnids,198; classtype:attempted-recon; sid:624; rev:7;)
Para un mejor análisis de esta regla, vamos a dividirla en dos partes, rule header y rule options.
alert tcp $EXTERNAL_NET any -> $HOME_NET any
Nota: recuerda que puedes negar distintos parámetros, incluidos los puertos anteponiendo el símbolo “!”.
De esta forma con “!22”, quedará especificado que son todos los puertos excepto el puerto 22.
Esta segunda parte de la regla se puede diferenciar fácilmente ya que está encerrada dentro de paréntesis y está compuesta por una palabra clave, dos puntos y un argumento.
Ejemplo:
keyword:argument
Rule Option:
(msg:"SCAN SYN FIN"; flow:stateless; flags:SF,12; reference:arachnids,198; classtype:attempted-recon; sid:624; rev:7;)
En este caso la regla está buscando tráfico que contenga la bandera SYN y FIN (SF) y adicionalmente tiene los dos bits reservados (12) en la bandera.