• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar a la barra lateral principal

Joan Escorihuela

  • Inicio
  • Contacto

10 diciembre, 2014 by Joan 25 comentarios

Tu propio IDS con Snort y Snorby en Linux Debian 7

¿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.

snorby02

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

snorby03

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

snorby04

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

snorby05

Durante la instalación deberemos indicar una contraseña para el usuario root de MySQL:

snorby06

El asistente nos pide que volvamos a escribir la contraseña:

snorby07

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

snorby08

Nos situamos en el directorio Snorby

cd snorby

snorby09

E iniciamos la instalación de bundler, el gestor de gemas para dependencias de aplicaciones Rails.

gem install bundler

snorby10

Deberemos instalar todas las gemas de bundle con:

bundle install

snorby11

Deberemos renombrar el fichero situado en config/database.yml.exemple a config/database.yml

cp config/database.yml.example config/database.yml

snorby12

Una vez renombrado editamos el fichero con nano y le añadimos la contraseña de root para MySQL.

nano config/database.yml

snorby13

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

snorby14

Una vez configurado ya podemos iniciar la instalación de Snorby:

bundle exec rake snorby:setup

snorby15

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;

Vamos a ver algo como esto:
snorby16

Si todo ha ido bien podemos ejecutar Snorby:

bundle exec rails server -e production

snorby17

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.

snorby19

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

snorby20

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.

snorby21

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.

snorby22

Cuando nos pregunte si queremos configurar una base de datos para que Snort envie los registros le decimos que Sí.

snorby23

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.

snorby24

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

snorby25

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.

snorby26

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.

snorby27

En el siguiente paso elegimos la interfaz que Snort escuchara:

snorby28

De nuevo nos va a pedir el intervalo de nuestra red, lo dejamos como antes.

snorby29

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.

snorby30

Dejaremos en blanco las opciones adicionales:

snorby31

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.

snorby32

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:

snorby33

Nos pregunta si queremos usar una base de datos MySQL, le indicamos que Sí.

snorby34

En el nombre de servidor ponemos: localhost

snorby35

En el nombre de base de datos ponemos: snorby

snorby36

Como nombre de usuario ponemos: root

snorby37

Y por ultimo la contraseña que configuramos cuando instalamos MySQL:

snorby38

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.

snorby39

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

snorby40

Ya podemos iniciar Snort por primera vez:

/etc/init.d/snort start

snorby41

¿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:

snorby42

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

snorby43

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:

snorby44

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.

snorby45

Si accedemos a «Medium Severity» podemos ver un resumen de la actividad y desplegar todos los detalles de cada una de ellas.

snorby46

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.

Publicado en: Linux, Redes, Seguridad

Interacciones con los lectores

Comentarios

  1. Juan dice

    23 abril, 2015 a las 2:26 am

    Joan, eres un campeón, en el mudo hacen falta más personas como tu.
    Muchas gracias por tu aporte.

    Responder
    • Joan dice

      15 octubre, 2017 a las 9:03 am

      Muchas gracias por tus palabras, con gente como tu da gusto seguir con este blog. Un saludo!

      Responder
  2. Jose Martinez dice

    11 mayo, 2015 a las 6:34 pm

    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.

    Responder
    • Joan dice

      15 octubre, 2017 a las 9:03 am

      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.

      Responder
  3. Humberto Magro dice

    27 junio, 2015 a las 11:51 pm

    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.

    Responder
  4. Maravento dice

    16 julio, 2015 a las 3:06 pm

    Excelente tutorial. Felicitaciones. PD: Deberían sacar uno para Ubuntu

    Responder
  5. ac dice

    13 agosto, 2015 a las 3:00 pm

    Buenas. ¿Por que no publican un script de instalación?

    Responder
  6. ac dice

    20 agosto, 2015 a las 1:02 am

    quería agregar que encontre por casualidad esta serie de scripts y me gustaría saber su opinión
    https://github.com/da667/Autosnort

    Responder
  7. Emilio Castellano dice

    6 octubre, 2015 a las 3:48 pm

    un pequeño apunte. El usuario por defecto una vez que se consigue rematar la instalación es
    snorby@example.com

    Responder
  8. Antonio Mantilla dice

    6 octubre, 2015 a las 6:55 pm

    Eres un capo, he seguido otros tutoriales en ingles y no lo he conseguido, con tu tutorial le logrado muchas gracias saludos

    Responder
  9. Carlos dice

    13 octubre, 2015 a las 6:57 am

    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 ?

    Responder
  10. Joan dice

    15 octubre, 2015 a las 8:57 am

    Muchas gracias Emilio, lo corrijo, parece que Snorby lo ha cambiado desde que realice la guía, un saludo.

    Responder
  11. Joan dice

    15 octubre, 2015 a las 9:00 am

    Muchas gracias Antonio, me alegro que te sirva de ayuda.

    Responder
  12. godotux dice

    17 noviembre, 2015 a las 1:18 am

    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

    Responder
  13. godotux dice

    17 noviembre, 2015 a las 1:50 am

    Ya lo encontre esta sencillo espero les sea útil tanto como a mi.

    nohup bundle exec rails server -e production > /dev/null &

    Responder
  14. Chistian dice

    28 septiembre, 2017 a las 5:33 pm

    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.

    Responder
    • Joan dice

      12 octubre, 2017 a las 8:28 am

      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.

      Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

sidebar

sidebar-alt

Joan Escorihuela ·
  • Política de cookies
  • Aviso legal
  • Contacto