¿Qué es un IDS?
IDS son las siglas de Intrusion Detection System o un sistema de detección de intrusos, este suele ser un programa que actúa como un sensor o sniffer conectado a la red informática privada de una empresa o incluso en un servidor publico de internet, se encarga de capturar todo el trafico de la red en la que se encuentra, aunque este trafico no vaya dirigido a el igualmente lo va a capturar. Una vez capturado todo este trafico de red el IDS se encarga de analizar si existen anomalías o indicios de un ataque.
Existen varios IDS libres y de código abierto, uno de ellos y quizás el mas conocido es Snort, este sniffer de paquetes o más conocido como detector de intrusos, después de capturar el trafico de red lo compara con unas reglas preestablecidas, es decir, Snort contiene una base de datos con ataques conocidos y si Snort detecta un paquete de trafico de red que corresponde a una de las reglas, este nos va a avisar según la gravedad del mismo.
¿Que trafico que podemos capturar con un IDS?
Capturando todo el trafico entre internet y nuestra red
Situando Snort entre el router y el firewall se consigue capturar todo el trafico que proviene de internet antes de ser filtrado por el firewall además del que sale de nuestra red hacia internet. Se recomienda este método cuando se pretende analizar todos los ataques que provienen de internet y verificar hasta que punto el firewall esta siendo efectivo.
Capturando todo el trafico interno de nuestra red
Situando Snort detrás del firewall, se consigue capturar todo el trafico interno de la red además de todo el trafico ya filtrado por el Firewall que entra y sale de internet. Este es el mejor método si lo que queremos es detectar malware y posibles infecciones en los equipos de la red, incluso detectar fugas de información hacia internet.
El modo promiscuo
El modo promiscuo captura todo el trafico que circula por la red en la que el Snifer esta conectado, sin importar si ese trafico va dirigido a el o no, para que Snort funcione como en estos dos ejemplos se debe configurar con una interfaz de red en modo promiscuo y además los componentes de networking tanto si es un HUB o un Switch soporten este modo.
Instalando un IDS con Snort y Snorby
En este articulo voy a explicar como poner en marcha tu propio IDS, esta guía sirve para los dos ejemplos anteriores, para poner en marcha el IDS vamos a usar Linux Debian 7.7 minimal en este mismo blog encontraras una guía de como instalar Linux Debian netinst. Para seguir este manual asumimos que usamos Debian en 64 bits.
Instalar Snorby
En primer lugar vamos a instalar todos los paquetes necesarios para que pueda ser compilado e instalado, además de los servicios adicionales que requiere Snorby.
apt-get install git ruby ruby-dev mysql-server libmysqlclient-dev libmysql++-dev imagemagick libmagickwand-dev wkhtmltopdf gcc g++ build-essential linux-headers-amd64 libssl-dev libreadline-gplv2-dev zlib1g-dev libsqlite3-dev libxslt1-dev libxml2-dev -y
Durante la instalación deberemos indicar una contraseña para el usuario root de MySQL:
El asistente nos pide que volvamos a escribir la contraseña:
Una vez instalados todos los paquetes procedemos a instalar Snorby, primero de todo vamos a descargar una copia de Snorby de http://github.com/Snorby/.
git clone http://github.com/Snorby/snorby.git
Nos situamos en el directorio Snorby
cd snorby
E iniciamos la instalación de bundler, el gestor de gemas para dependencias de aplicaciones Rails.
gem install bundler
Deberemos instalar todas las gemas de bundle con:
bundle install
Deberemos renombrar el fichero situado en config/database.yml.exemple a config/database.yml
cp config/database.yml.example config/database.yml
Una vez renombrado editamos el fichero con nano y le añadimos la contraseña de root para MySQL.
nano config/database.yml
Para guardar los cambios en nano pulsamos CTRL+o y CTRL+x para salir.
A continuación renombramos el fichero situado en config/snorby_config.yml.example a config/snorby_config.yml
cp config/snorby_config.yml.example config/snorby_config.yml
Una vez configurado ya podemos iniciar la instalación de Snorby:
bundle exec rake snorby:setup
Cuando finalice la instalación podemos comprobar si se han creado todas las tablas en MySQL correctamente:
mysql –user=root -p -D snorby
mysql> show tables;
Si todo ha ido bien podemos ejecutar Snorby:
bundle exec rails server -e production
Si se ha ejecutado con éxito se puede acceder mediante la URL http://ip-del-servidor:3000 con el usuario snorby@example.com y la contraseña snorby, estos vienen por defecto.
Una vez accedemos por primera vez cambiamos la contraseña por defecto, para ello vamos a «Settings» y modificamos los datos de acceso también cambiamos nuestro correo electrónico y la zona horaria.
Ahora ya esta Snorby instalado, configurado y funcionando, pero no recibe ningún dato ya que Snort no esta instalado y por lo tanto no hay captura de trafico.
Instalar Snort
Anteriormente al instalar Snorby, creamos una base de datos donde Snort deberá volcar todo el trafico capturado, para ello vamos a instalar snort-mysql además de las reglas por defecto para que Snort funcione:
apt-get install snort-mysql snort-rules-default -y
Durante la instalación se mostrara un asistente en donde deberemos realizar algunos cambios, en primer lugar debemos elegir el intervalo de nuestra dirección de red local, en mi caso es 192.168.1.0/24 consulta la configuración de tu red local antes de modificar este valor.
En el siguiente paso nos advierte de que no tenemos ninguna base de datos configurada para Snort y que deberemos ejecutar mas adelante un asistente para volcar estos datos.
Cuando nos pregunte si queremos configurar una base de datos para que Snort envie los registros le decimos que Sí.
En el ultimo paso nos advierte que para que los datos sean volcados en MySQL deberemos configurar la base de datos a partir de una plantilla ya predefinida, en nuestro caso ya tenemos la base de datos creada por Snorby, por lo que aceptamos y mas adelante configuraremos Snort para que se conecte a ella.
snort-mysql seguirá la instalación de los paquetes necesarios…
Una vez finalizada la instalación ya podemos configurar Snort para que se conecte a la base de datos creada por Snorby en MySQL, para iniciar el asistente de configuración ejecutamos:
dpkg-reconfigure –force snort-mysql
En el primer paso del asistente nos pide como queremos que se inicie Snort, le vamos a decir que al «arranque» con esta selección Snort va arrancar automáticamente al iniciar el equipo.
En el siguiente paso nos advierte de que si no estamos usando un entorno con conexión permanente, deberemos elegir el valor apropiado para ello, en nuestro caso bastara con elegir eth0 como interfaz predeterminada que Snort usara para esnifar el trafico.
En el siguiente paso elegimos la interfaz que Snort escuchara:
De nuevo nos va a pedir el intervalo de nuestra red, lo dejamos como antes.
Como explique antes, para que Snort pueda escuchar todo el trafico de la red es necesario que se configure en modo promiscuo, por lo que le decimos que no deseamos desactivarlo, si lo desactivamos Snort solo va a capturar el trafico que vaya dirigido únicamente a el.
Dejaremos en blanco las opciones adicionales:
Indicamos a Snort que no queremos que nos envíe resúmenes diarios de sus registros, ya que los consultaremos desde la interfaz de Snorby.
Snort advierte que no esta configurada ninguna base de datos por lo que se va a ejecutar el asistente para conectar Snort a una base de datos MySQL:
Nos pregunta si queremos usar una base de datos MySQL, le indicamos que Sí.
En el nombre de servidor ponemos: localhost
En el nombre de base de datos ponemos: snorby
Como nombre de usuario ponemos: root
Y por ultimo la contraseña que configuramos cuando instalamos MySQL:
El siguiente paso simplemente nos advierte que deberemos crear la estructura de la base de datos a partir de una plantilla, en nuestro caso no será necesario ya que Snorby ya ha creado esta estructura.
Por ultimo eliminamos el fichero /etc/snort/db-pending-config para que Snort interprete que ya se a ha realizado la configuración de la base de datos.
rm /etc/snort/db-pending-config
Ya podemos iniciar Snort por primera vez:
/etc/init.d/snort start
¿Como funciona?
Para comprobar si Snort funciona correctamente consultamos la tabla event de la base de datos snorby.
mysql –user=root -p -D snorby
mysql> select * from event;
Lo mas posible que no nos salga ningún resultado:
Esto significa que Snort no ha capturado ningún trafico aun, por lo que desde otra maquina Linux podemos ejecutar nmap hacia el servidor de Snort para que este capture trafico y comprobar si funciona.
nmap – A -T5 ip-del-snort
Una vez inyectado el trafico realizando un nmap volvemos a consultar la tabla event para ver si hay nuevos registros.
mysql> select * from event;
Esta vez si hay registros de actividad, en total se muestran 14 registros, por lo que Snort esta capturando el trafico y volcando los resultaros a MySQL:
Ahora ya podemos acceder a Snorby por web mediante http://ip-del-servidor:3000 para consultar la actividad de Snort y vamos a ver que efectivamente hay 14 actividades, 4 clasificadas como severidad media y 10 de baja severidad.
Si accedemos a «Medium Severity» podemos ver un resumen de la actividad y desplegar todos los detalles de cada una de ellas.
Conclusiones
Gracias a Snorby y Snort vamos a disponer de un servidor monitorizando todo el trafico de nuestra red 24 horas al día, durante todos los días. Todo este trafico queda registrado en la base de datos por lo que vamos a disponer de un histórico de todo lo que ha ocurrido en nuestra red desde la puesta en marcha de Snort y mas adelante realizar auditorias en el caso de detectar trafico inapropiado en la red, pudiendo consultar el origen, destino, puertos y protocolos usados de todo el trafico sospechoso.
Adicionalmente Snort permite crear tus propias reglas para el filtrado de trafico y que este nos advierta según las condiciones de las reglas, pudiendo clasificar la severidad de la detección.
Juan dice
Joan, eres un campeón, en el mudo hacen falta más personas como tu.
Muchas gracias por tu aporte.
Joan dice
Muchas gracias por tus palabras, con gente como tu da gusto seguir con este blog. Un saludo!
Jose Martinez dice
Hola Joan disculpa de casualidad sabes si hay alguna configuración o regla en snorby que sirva para saber si alguien esta ejecutando un escaneo de vulnerabilidades en una web?
Saludos.
Joan dice
Hola Jose, SNORT por defecto solo escanea servicios y de por si solo no es capaz de escanear en la capa de aplicación, quizás lo que estas buscando se acerca mas a un WAF (Web Application Firewall) que si son capaces de detectar un escaneo a ese nivel. Para Apache, por ejemplo tienes el Mod Security. Espero haberte ayudado, un saludo.
Humberto Magro dice
Buen dia amigo, sabes que he realizo lo que dices, estoy en el punto de entrar en snorby via web, introduzco el usuario y contraseña y solo dice: Submitting Credentials, Please Wait…
Y en la terminal me muestra este mensaje: can’t convert Fixnum into String
Completed 500 Internal Server Error in 122ms
TypeError (can’t convert Fixnum into String):
app/controllers/application_controller.rb:37:in `user_setup’
He intento resolverlo pero no sé que pasa, podrías ayudarme por favor.
Maravento dice
Excelente tutorial. Felicitaciones. PD: Deberían sacar uno para Ubuntu
ac dice
Buenas. ¿Por que no publican un script de instalación?
ac dice
quería agregar que encontre por casualidad esta serie de scripts y me gustaría saber su opinión
https://github.com/da667/Autosnort
Emilio Castellano dice
un pequeño apunte. El usuario por defecto una vez que se consigue rematar la instalación es
snorby@example.com
Antonio Mantilla dice
Eres un capo, he seguido otros tutoriales en ingles y no lo he conseguido, con tu tutorial le logrado muchas gracias saludos
Carlos dice
Amigo tengo problemas para poder ingresar a la interfaz de snorby, el usuario que tu indicas que viene por defecto me da error, sabes como poder solventarlo ?
Joan dice
Muchas gracias Emilio, lo corrijo, parece que Snorby lo ha cambiado desde que realice la guía, un saludo.
Joan dice
Muchas gracias Antonio, me alegro que te sirva de ayuda.
godotux dice
Hola Joan, te felizito por muy buen trabajo, me ha funcionado desde el primer intento.
Una consulta como puedo hacer para que cuando se reincie el servidor se ejecute automáticamente la siguiente instrucción:
bundle exec rails server -e production
godotux dice
Ya lo encontre esta sencillo espero les sea útil tanto como a mi.
nohup bundle exec rails server -e production > /dev/null &
Chistian dice
Hola buenos dias, por que no me muestra las graficas en la interfaz web de snorby.
MariaDB [snorby]> select * from event;
Empty set (0.00 sec)
Tampoco muestra en la interfaz web.
Gracias por su apoyo.
Joan dice
Hola Chistian, prueba con ejecutar un nmap: nmap – A -T5 tu-ip-de-snorby y luego vuelve a ejecutar la función mysql> select * from event; y por otro lado ¿Has mirado si tu versión de MariaDB es compatible con SNORBY? Un saludo.