Lo primero que hago sin conocimientos previos de instalación de snort es ir al sitio web oficial:
https://snort.org/
Ahora me fijo en la descarga que dice tener diferentes verisones para diferentes distribuciones mas el código fuente... en mi caso uso CentOS para mis servidores, especificamente centOS 6, pero la descarga de snort solo está disponible para CentOS 7, y bueno, no quiero instalar una versión obsoleta de snort o antigua ya que si lo voy a comenzar a usar no quiero tener que migrar todo denuevo en el corto plazo asi que... me dije... tengo dos opciones, o formateo todos los servidores e instalo centos 7 o lo instalo desde el código fuente, y bueno, preferí instalar centos 7 ya que no me gusta la idea de tener que estar migrando cuando algo queda obsoleto o sin soporte (pero ojo, aun no formateo nada, aun sigo usando centos 6).
Asi que con estas conclusiones instalé en mi pc vmware e instalé centos 6 y centos 7 para hacer las pruebas correspondientes.
En centos 7 no tuve ningún problema con la instalación, tuve que instalar daq y luego snort y mucho ojo, porque instalar snort a traves de las instrucciones oficiales arroja un problema conocido, por ejemplo donde dice:
Código:
yum install https://snort.org/downloads/snort/snort-2.9.7.2-1.centos7.x86_64.rpm
Arroja un error de unas dependencias raras o paquete corrupto, lo que si funciona es descargarlo con wget y luego instalar con yum install *.rpm
En fin, pero eso no es problema. Intalé las reglas corretamente sin utilizar pulledpork (porque prefiero hacerlo manualmente con un cron y wget).
Primer problema
El primer problema lo tuve al intentar crear una regla en expresión regular para solicitudes peligrosas via http_uri:
Código:
alert tcp any any -> $HOME_NET any ( \
msg:"SQLI"; \
content:"/"; http_raw_uri; pcre:"/union(.*)select/"; \
classtype:web-application-attack; \
sid:3000007; \
rev:1; \
)
Y hecho a correr snort:
Código:
# snort -i eno16777736 -u snort -g snort -c /etc/snort/snort.conf
y reviso el log:
Código:
# tail -f /var/log/snort/alert
Ahora hago la famosa solicitud peligrosa:
http://192.168.120.137/?test=' union select 1,2,3,4,5 -- +
Y el log de alertas no arroja nada
Pero bueno, de todas maneras tiene un sin fin de reglas muy buenas aunque entiendo que snort no cuenta con buenas reglas de prevención contra ataques vía http como un xsrf, xss, sqli, etc, asi que de todas maneras quise instalarlo en mis semás servidores pero quise intentar hacer la instalación en centos 6 para no tener que formatear todos mis servidores y hacerlo de manera progresiva, asi que hice la prueba en el servidor virtual con centos 6.
Ya me di cuenta que snort oficialmente está disponible unicamente para centos 7 asi que de todas maneras hice el mismo proceso que centos 7 y me arrojó mil y un problemas de dependencias, especificamente porque necesitaba librerias mas actualizadas que las que proporciona centos 6, asi que decidí hacer la instalación manualmente desde el código fuente, asi que descargé el tag zg de libdnet, daq y snort e instalé todo en ese mismo orden. Lamentablemente libdnet es una dependencia critica para snort y es la que da mas problemas tanto de compatibilidad como de disponibilidad ya que solo está en googlecode y googlecode cerrará sus puertas pronto (asi que me bajé una copia de respaldo).
Segundo problema
Hasta acá todo bien, config... make, make install y ya... ahora voy a ejecutar snort y me arroja un error que falta libdnet D: asi que vuelvo a compilar libdnet y ahi funciona y voy a buscar el directorio directorio /etc/snort y no existe D: asi que no puedo instalar las reglas y no se si creando el directorio /etc/snort sea suficiente ya que me faltarian los archivos de configuracion y quien sabe que otras cosas mas.
El tema es que no puedo llevar a un servidor en producción un snort a medio instalar, en el camino se me han presentado muchos otros problemas que ya he solucionado como problemas de versión y link de la famosa libreria libdnet (que ya estoy comenzando a odiar) pero ya lo tengo bajo control.
El tema es el siguiente...
1. Como hago una regla para que me filtre una solicitud uri en expresión regular? ya que actualmente uso un script en php para mi web con muchas reglas y basta con procesarlas con preg_match() y $_SERVER["REQUEST_URI"] mas $_GET[] pero en snort parece un poco mas complicado y tengo otras reglas que arrojan error de sintaxis, etc.
2. Como hago la instalación de la última versión de snort en centos 6?
De verdad que hacer la instalación en centos 6 no me quita el sueño porque de todas maneras en algun momento voy a tener que migrar a centos 7 pero sin reglas no hay filtros y sin filtros no hay snort