img

Introducción:

Snort es una herramienta de seguridad informática diseñada para detectar y prevenir posibles amenazas en redes. Actúa como un sistema de detección de intrusos (IDS) y puede identificar actividades sospechosas, como intentos de ataques o accesos no autorizados, analizando el tráfico de red en tiempo real.

Además, ofrece la capacidad de bloquear o alertar sobre eventos sospechosos, lo que ayuda a proteger la red frente a ataques malintencionados.

Objetivo:

Para este artículo, voy a instalar y configurar Snort , de manera que me avise de posibles amenazas como por ejemplo, prevenir un ataque de denegación de servicio (DOS), o incluso evitar un ataque de fuerza bruta a una máquina mediante Hydra por el protocolo SSH.

Instalación:

Partiendo de una máquina Kali Linux , para poder instalar esta herramienta de manera correcta, primero hay que editar el fichero /etc/apt/sources.list y añadir los repositorios de Debian 11, ya que en el momento de realizar esto, no esta en los repositorios de Kali Linux base:

sudo nano /etc/apt/sources.list

Añadiendo:

deb http://deb.debian.org/debian bullseye main
deb-src http://deb.debian.org/debian bullseye main

deb http://deb.debian.org/debian-security/ bullseye-security main
deb-src http://deb.debian.org/debian-security/ bullseye-security main

deb http://deb.debian.org/debian bullseye-updates main
deb-src http://deb.debian.org/debian bullseye-updates main

Hecho esto, actualizo los repositorios posteriormente con:

sudo apt update

Con los repositorios actualizados, ahora sí, instalo snort con:

sudo apt install snort
  • Durante la instalación, pedirá una red por lo que hay que introducir la red en la que se encuentra la máquina. Por ejemplo si tiene la ip 192.168.1.10/24 significa que su red es la 192.168.1.0/24.

Una vez instalado, hay que crear un fichero para poder añadir reglas personalizadas, y para ello hay que ir a /etc/snort/rules/ y crear un archivo llamado custom.rules

sudo nano /etc/snort/rules/custom.rules
  • De momento dejaré este archivo en blanco.

El siguiente paso, es crear el directorio donde se van a guardar los logs donde snort irá añadiendo las notificaciónes (logs o eventos del sistema). Este directorio será /etc/snort/log

mkdir -p /etc/snort/log

Por otro lado, hay que configurar snort, y definir cual red o redes serán la interna o externa, en este caso, le indico que toda red que no pertenezca a la HOME_NET o propia red, sea considerada como externa. Y para ello hay que modificar su archivo de configuración que es /etc/snort/snort.conf

sudo nano /etc/snort/snort.conf

Añadiendo:

ipvar HOME_NET mi_red
ipvar EXTERNAL_NET !$HOME_NET 
  • Donde mi red, no es una variable, es la dirección de red de la máquina.

Ahora, vuelvo al fichero que cree antes y lo dejé en blanco, para añadir una regla que notifique si entra tráfico por el puerto 22 por medio de SSH, y para ello:

sudo nano /etc/snort/rules/custom.rules

Añadiendo:

alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:”Incoming SSH trafic”; flags:S; sid:1000000;) 
  • Así notificará de todo el trafico tcp que venga desde la red externa de cualquier puerto y que intente comunicarse con la red home por el puerto 22 ssh con bandera, sin primera comunicacion y con identificador que quiera.

Para que tome en cuenta esta nueva regla:

sudo nano /etc/snort/snort.conf

Hay que añadir al final del archivo:

include $RULE_PATH/custom.rules

Si quiero que la alerta sea por consola, en vez de por logs, hay que modificar el archivo de configuración de nuevo así:

output alert_fast: alert
  • Si queremos que notifique por logs, hay que ignorar el paso anterior.

Hecho esto hay que reiniciar snort:

sudo systemctl restart snort

Y para comprobar si hay alertas, hay que ir al directorio que cree al principio en /etc/snort/log.

Para ver si hay errores en el configuración:

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

Reglas en Snort:

Las reglas en Snort son directrices que definen cómo detectar actividades maliciosas o sospechosas en la red. Cada regla especifica un patrón de tráfico, como una firma de ataque o comportamiento anómalo, y determina cómo debe alertarse o registrarse cuando se detecta ese patrón.

Reglas por Defecto:

Las reglas por defecto en Snort son firmas predefinidas que ayudan a detectar comportamientos maliciosos en la red. Estas reglas cubren amenazas comunes como escaneos de puertos, ataques DDoS y tráfico malicioso.

Están organizadas en categorías como ataques web y tráfico asociado a malware, proporcionando una capa inicial de protección para los sistemas de red.

Las reglas por defecto de Snort se encuentran en el directorio de reglas. Su ubicación es:

ls /etc/snort/rules/

Algunas de las cuales son:

  • attack-responses.rules - Reglas para detectar respuestas a ataques.
  • backdoor.rules - Reglas para detectar tráfico asociado a puertas traseras.
  • bad-traffic.rules - Reglas para detectar tráfico malicioso o anómalo.
  • chat.rules - Reglas para detectar tráfico de chat.
  • ddos.rules - Reglas para detectar ataques de denegación de servicio (DDoS).
  • deleted.rules - Reglas que se han eliminado y no se utilizan.
  • dns.rules - Reglas para detectar tráfico DNS malicioso.
  • dos.rules - Reglas para detectar ataques de denegación de servicio (DoS).
  • experimental.rules - Reglas experimentales para detección de ataques.
  • exploit.rules - Reglas para detectar intentos de explotación de vulnerabilidades.
  • finger.rules - Reglas para detectar tráfico del servicio Finger.
  • ftp.rules - Reglas para detectar tráfico FTP malicioso.
  • icmp-info.rules - Reglas para detectar tráfico ICMP informativo.
  • icmp.rules - Reglas para detectar tráfico ICMP.
  • imap.rules - Reglas para detectar tráfico IMAP.
  • info.rules - Reglas informativas.
  • local.rules - Reglas locales específicas del entorno.
  • misc.rules - Reglas varias para detectar tráfico anómalo.
  • multimedia.rules - Reglas para detectar tráfico multimedia malicioso.
  • mysql.rules - Reglas para detectar tráfico MySQL malicioso.
  • netbios.rules - Reglas para detectar tráfico NetBIOS malicioso.
  • nntp.rules - Reglas para detectar tráfico NNTP.
  • oracle.rules - Reglas para detectar tráfico Oracle malicioso.
  • other-ids.rules - Otras reglas de detección de intrusiones.
  • p2p.rules - Reglas para detectar tráfico de redes P2P.
  • policy.rules - Reglas relacionadas con políticas de seguridad.
  • pop2.rules - Reglas para detectar tráfico POP2.
  • pop3.rules - Reglas para detectar tráfico POP3.
  • porn.rules - Reglas para detectar contenido para adultos.
  • rpc.rules - Reglas para detectar tráfico RPC malicioso.
  • rservices.rules - Reglas para detectar servicios de red.
  • scan.rules - Reglas para detectar escaneo de puertos y servicios.
  • shellcode.rules - Reglas para detectar shellcode malicioso.
  • smtp.rules - Reglas para detectar tráfico SMTP malicioso.
  • snmp.rules - Reglas para detectar tráfico SNMP malicioso.
  • sql.rules - Reglas para detectar ataques de inyección SQL.
  • telnet.rules - Reglas para detectar tráfico Telnet malicioso.
  • tftp.rules - Reglas para detectar tráfico TFTP.
  • virus.rules - Reglas para detectar tráfico relacionado con virus.
  • web-attacks.rules - Reglas para detectar ataques web.
  • web-cgi.rules - Reglas para detectar ataques a aplicaciones web CGI.
  • web-client.rules - Reglas para detectar tráfico de clientes web maliciosos.
  • web-coldfusion.rules - Reglas para detectar ataques a aplicaciones web ColdFusion.
  • web-frontpage.rules - Reglas para detectar ataques a aplicaciones web FrontPage.
  • web-iis.rules - Reglas para detectar ataques a servidores web IIS.
  • web-misc.rules - Reglas varias para detectar ataques web.
  • web-php.rules - Reglas para detectar ataques a aplicaciones web PHP.
  • x11.rules - Reglas para detectar tráfico X11.

Reglas de Reconocimiento de Puertos:

Snort viene preconfigurado con reglas listas para usar que permiten detectar diversos tipos de actividad sospechosa en nuestra red. Entre ellas, encontramos reglas específicas para alertar sobre escáneres de puertos y de red. Estas reglas están almacenadas en el archivo /etc/snort/rules/scan.rules.

Si queremos activar las alertas relacionadas con escáneres de puertos, podemos ejecutar desde otra máquina el siguiente comando:

sudo nmap -sS ip
  • Donde la ip, es la de la máquina víctima, que tiene instalado snort.

  • Usando nmap para hacer un escaneo de puertos de la máquina donde se aloja snort, desde otra máquina atacante.

Reglas de Tráfico Web:

Las reglas de tráfico web protegen aplicaciones web y detectar ataques dirigidos a servicios web.

Algunas de las principales categorías de reglas para tráfico web incluyen:

  • web-attacks.rules: Detecta una amplia gama de ataques web, como inyecciones SQL, ataques de cross-site scripting (XSS), y otros intentos de explotación de vulnerabilidades en aplicaciones web.

  • web-cgi.rules: Focaliza en ataques dirigidos a scripts CGI (Common Gateway Interface) en servidores web, que pueden ser utilizados para explotar vulnerabilidades y ejecutar comandos maliciosos.

  • web-client.rules: Monitorea el tráfico proveniente de clientes web para identificar comportamientos maliciosos o anómalos que podrían indicar intentos de explotación.

  • web-coldfusion.rules: Detecta ataques específicos contra aplicaciones web basadas en ColdFusion, una plataforma de desarrollo web que puede tener vulnerabilidades explotables.

  • web-frontpage.rules: Se enfoca en proteger servidores web que utilizan Microsoft FrontPage, detectando posibles intentos de explotación y ataques dirigidos a este software.

  • web-iis.rules: Proporciona protección para servidores web que utilizan Internet Information Services (IIS) de Microsoft, identificando ataques específicos dirigidos a esta plataforma.

  • web-misc.rules: Contiene reglas varias para detectar amenazas y comportamientos sospechosos en tráfico web que no encajan específicamente en las categorías anteriores.

  • web-php.rules: Monitorea ataques y actividades maliciosas dirigidas a aplicaciones web desarrolladas en PHP, un lenguaje de programación ampliamente utilizado en la web.

Reglas Mysql:

Estas reglas ayudan a identificar intentos de explotación , como ataques de inyección SQL, accesos no autorizados, y otros comportamientos que podrían comprometer la seguridad de las bases de datos.

Se encuentran en la ruta /etc/snort/rules/mysql.rules.

Esta nos avisara si hay un login con el usuario root a remotamente a la base de datos o si intentan listar las bases de datos entre otras.

Alertas por correo:

Snort da la posibilidad de enviar las notificaciones mediante correo electrónico, algo muy útil por si ocurre algún incidente mientras que la máquina no este siendo atendida, logrando una mayor efectividad.

Para lograr esto el primer paso es ir al archivo de configuración:

sudo nano /etc/snort/snort.conf

Y descomentar la linea:

output alert_syslog: LOG_AUTH LOG_ALERT

Instalación de Postfix:

Para este escenario, voy a dejar brevemente los pasos fundamentales para instalar un servidor de correos, usando Postfix , más adelante en la sección Servicios de Red e Internet, realizaremos una instalación más profunda y personalizada.

Para instalar Postfix:

sudo apt install postfix mailutils 
  • Durante la instalación pedirá una breve configuración, hay que indicarle:
internet site (sitio de internet)
[smtp.gmail.com]:587 (system mail name)

Una vez instalado postfix, hay que modificar su archivo de configuración:

sudo nano `/etc/postfix/main.cf

Y comentar la linea casi al final:

relayhost= 
  • Se encuentra casi al final, hay que comentarla o no funcionará.

Y luego añadir al final del archivo:

##### gmail
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

El siguiente paso es crear un fichero llamado sasl_passwd como el indicado arriba:

sudo nano /etc/postfix/sasl_passwd

A este fichero se le añade el siguiente contenido:

[smtp.gmail.com]:587 correo@gmail.com:contraseña
  • Ese correo es un ejemplo, la contraseña hay que generarla desde la configuración de la cuenta de google, en seguridad, verificacion en 2 pasos tiene que estar activa, y luego abajo en la parte de contraseña de aplicaciones, hay que generar una y copiar ese codigo donde pone contraseña.

Luego, opcionalmente se puede modificar los privilegios para protegerla:

chmod 600 /etc/postfix/sasl_passwd

Actualizo la base de datos de postfix:

sudo postmap /etc/postfix/sasl_passwd

Y reinicio Postfix para aplicar cambios:

service postfix restart

Para probar el servidor de correos:

echo “Mensaje de prueba” | mail -s “Prueba” correo@gmail.com
  • Con el comando de arriba, se envian los correos. A veces puede tardar un poco, pero por lo general es rápido.

Demostración de Uso:

Evitar un Ataque de Denegación de Servicio (DoS):

Un DoS (Denial of Service) es un tipo de ataque cibernético que busca hacer que un servicio, servidor o red deje de estar disponible al saturarlo con un gran volumen de solicitudes o consumiendo sus recursos, impidiendo que los usuarios legítimos accedan a él.

Para evitar esto, usaré Swatchdog, para monitorear el fichero de logs, para detectar cualquier evento malicioso.

sudo swatchdog -c /etc/swatcrc -t /var/log/auth.log --daemon

Y modifico Snort para entrar en el modo silencioso, para poder monitorear el tráfico en la interfaz , que en este caso es eth0:

sudo snort -s -q -c /etc/snort/snort.conf -i eth0

img

En este caso, la ip de la máquina víctima donde esta instalado Snort, es 192.168.122.4.

img

Ahora para poner a prueba la máquina de Snort, voy a hacer un ataque de denegación de servicio mediante hping3 , desde otra máquina Debian atacante:

sudo hping3 -p 80 -S --flood 192.168.122.4
  • Hay que cancelarlo rápido o petará el gmail de correos de aviso.

img

  • En la imagen se puede apreciar como se han enviado 948.628 paquetes, aunque indique que no se han entregado, en el Uso de CPU de Virt Manager se puede comprobar que sí.

Realizado esto, si comprobamos nuestra bandeja de entrada del correo, se verá como han llegado las notificaciones.