Inicio > Hacking, Services - Software > Instalación y Configuración básica de Snort IDS con BASE (Basic Analysis and Security Engine)

Instalación y Configuración básica de Snort IDS con BASE (Basic Analysis and Security Engine)


Snort es un potente IDS/IPS (Intrusion Detection System/Intrusion Prevention System) que se ha convertido en un estándar en el campo de la seguridad de sistemas informáticos. Es una herramienta que utiliza una filosofía muy similar a IPTables, ya que utiliza reglas sobre los paquetes que viajan en una red, sin embargo, dependiendo del modo de ejecución va un poco mas allá, permitiendo tomar decisiones sobre la información intercambiada y la detección de posibles ataques sobre peticiones que aunque aparentemente son legitimas, pueden encajar en algún patrón de ataque.

Antes de profundizar sobre los modos y configuración de Snort es necesario conocer el procedimiento de instalación, que en algunos casos no resulta tan sencillo como se espera, de hecho es un poco complejo principalmente por la cantidad de paquetes que se deben instalar, sin embargo se intenta indicar las pautas generales para conseguir instalar Snort en plataformas Debian (Lenny, Squeeze).

PROCESO DE INSTALACION BAJO SISTEMAS BASADOS EN DEBIAN

En primera instancia se deben insertar los siguientes repositorios para que APT pueda utilizar paquetes dependientes allí incluidos, para esto es necesario editar el fichero /etc/apt/sources.list (En este caso se trata de Debian Squeeze, si es Debian Lenny, cambiar este valor por “lenny”)

deb http://packages.dotdeb.org squeeze all deb-src http://packages.dotdeb.org squeeze all

 Ahora con los repositorios indicados se puede instalar la clave GPG necesaria, para esto, ubicarse en el directorio /usr/src desde una consola, obtener la clave e instalarla

/usr/src# wget http://www.dotdeb.org/dotdeb.gpg
–2011-06-13 22:32:49– http://www.dotdeb.org/dotdeb.gpgResolviendo http://www.dotdeb.org…; 88.190.17.153

Connecting to http://www.dotdeb.org|88.190.17.153|:80… conectado.

Petición HTTP enviada, esperando respuesta… 200 OK

Longitud: 5299 (5,2K) [application/octet-stream]

Saving to: `dotdeb.gpg’

100%[======================================>] 5.299 –.-K/s in 0,004s

2011-06-13 22:32:49 (1,23 MB/s) – `dotdeb.gpg’ saved [5299/5299]

/usr/src# cat dotdeb.gpg | apt-key add –

OK

Por otro lado, para que Snort funcione correctamente es necesario tener por un lado, algunas librerías instaladas en la maquina y por otro lado algunas herramientas y software del que depende Snort para su instalación y posterior configuración, en concreto se requiere, Apache, MySQL, gcc, libssl, flex, entre otras. Se puede ejecutar el siguiente comando APT para cumplir con todas las dependencias e instalar el software necesario, (Para MySQL se solicitará la contraseña del usuario Root, será necesario ingresarla para que posteriormente se pueda ingresar en la base de datos)

> apt-get update && apt-get install apache2 libapache2-mod-php5 libwww-perl mysql-server mysql-common mysql-client php5-mysql libnet1 libnet1-dev libpcre3 libpcre3-dev autoconf libcrypt-ssleay-perl libmysqlclient-dev php5-gd php-pear libphp-adodb php5-cli libtool libssl-dev gcc-4.4 g++ automake gcc make flex bison apache2-doc ca-certificates vim

 Cabe anotar, que si ya se dispone de un servidor Apache configurado con MySQL y PHP los paquetes correspondientes a dicho software pueden ser omitidos.

Posteriormente se procede a instalar otras librerías que no se encuentran incluidas en los repositorios y que hay que instalar de forma manual, en concreto, dichas librerías son: DAQ, libpcap, libdnet.

En todos los casos el directorio donde se encontrará posicionada la consola será /usr/src/

DAQ:
/usr/src# wget http://www.snort.org/dl/snort-current/daq-0.5.tar.gz /usr/src# tar -zxf daq-0.5.tar.gz && cd daq-0.5

NOTA IMPORTANTE:
En sistemas en Debian 6.0 (squeeze), es necesario parchear manualmente el fichero

/usr/src/daq-0.5/os-daq-modules/daq_pcap.c

Cambiando la linea:

context->buffer_size = strtol(entry->key, NULL, 10);

Por la linea:
context->buffer_size = strtol(entry->value, NULL, 10);

/usr/src/daq-0.5# ./configure

checking for a BSD-compatible install… /usr/bin/install -c

checking whether build environment is sane… yes

checking for a thread-safe mkdir -p… /bin/mkdir -p

checking for gawk… no

………………

/usr/src/daq-0.5# make && make install

Finalmente, actualizar el directorio de librerías compartidas.

/usr/src/daq-0.5# echo >> /etc/ld.so.conf /usr/lib && ldconfig

LIBPCAP:
/usr/src# wget http://www.tcpdump.org/release/libpcap-1.1.1.tar.gz /usr/src# tar -zxf libpcap-1.1.1.tar.gz && cd libpcap-1.1.1

/usr/src/libpcap-1.1.1# ./configure ——prefix=/usr –enable-shared

checking build system type… x86_64-unknown-linux-gnu

checking host system type… x86_64-unknown-linux-gnu

checking target system type… x86_64-unknown-linux-gnu

checking for gcc… gcc

checking for C compiler default output file name… a.out

………………

/usr/src/libpcap-1.1.1# make && make install

LIBDNET:
/usr/src# wget http://libdnet.googlecode.com/files/libdnet-1.12.tgz /usr/src# tar -zxf libdnet-1.12.tgz && cd libdnet-1.12

/usr/src/libdnet-1.12# ./configure ——prefix=/usr ——enable-shared

checking for a BSD-compatible install… /usr/bin/install -c

checking whether build environment is sane… yes

checking for gawk… no

checking for mawk… mawk

checking whether make sets $(MAKE)… yes

………………

/usr/src/libdnet-1.12# make && make install

Después de ejecutar todos los pasos anteriores se puede comenzar con la instalación de Snort en un sistema GNU/Linux basado en Debian, nuevamente desde el directorio /usr/src se ejecutan los siguientes comandos:

/usr/src# wget http://www.snort.org/dl/snort-current/snort-2.9.0.5.tar.gz -O snort-2.9.0.5.tar.gz /usr/src# tar -zxf snort-2.9.0.5.tar.gz && cd snort-2.9.0.5

/usr/src/snort-2.9.0.5#./configure ——with-mysql ——enable-dynamicplugin ——enable-perfprofiling ——enable-ipv6 ——enable-zlib ——enable-reload

checking for a BSD-compatible install… /usr/bin/install -c

checking whether build environment is sane… yes

checking for a thread-safe mkdir -p… /bin/mkdir -p

checking for gawk… no

checking for mawk… mawk

………………

/usr/src/snort-2.9.0.5# make && make install

Con los pasos anteriores se ha instalado correctamente Snort en el sistema, ahora se debe proceder a configurar el servicio para que pueda ser ejecutado fácilmente, para esto se ejecutan los siguientes comandos desde consola

/usr/src/snort-2.9.0.5# mkdir /etc/snort /etc/snort/rules /var/log/snort /var/log/barnyard2 /usr/local/lib/snort_dynamicrules/usr/src/snort-2.9.0.5# groupadd snort && useradd -g snort snort

/usr/src/snort-2.9.0.5# chown snort:snort /var/log/snort /var/log/barnyard2

/usr/src/snort-2.9.0.5# cp /usr/src/snort-2.9.0.5/etc/*.conf* /etc/snort

/usr/src/snort-2.9.0.5# cp /usr/src/snort-2.9.0.5/etc/*.map* /etc/snort

Posteriormente es necesario establecer las opciones de configuración necesarias en el fichero /etc/snort/snort.conf

          1. Instalar BARNYARD con los siguientes pasos:

            /usr/src# wget http://www.securixlive.com/download/barnyard2/barnyard2-1.9.tar.gz

            /usr/src# tar -zxf barnyard2-1.9.tar.gz && cd barnyard2-1.9
            /usr/src/barnyard2-1.9# ./configure ——with-mysql
            checking for a BSD-compatible install… /usr/bin/install -cchecking whether build environment is sane… yeschecking for a thread-safe mkdir -p… /bin/mkdir -p

            checking for gawk… no

            checking for mawk… mawk

            checking whether make sets $(MAKE)… yes

            checking build system type…

            ……………

            /usr/src/barnyard2-1.9# make && make install

            /usr/src# mv /usr/local/etc/barnyard2.conf /etc/snort

            Editar el fichero /etc/snort/barnyard2.conf

            En la linea 215 cambiar:
            output alert_fast: stdout

            por

            output alert_fast

            Al final del archivo declarar la siguiente linea:

            output database: log, mysql, user=snort password=snort dbname=snort host=localhost

          2. Establecer las variables de configuración de Snort, (ver el fichero README para mayor información sobre las variables disponibles en Snort.
            Linea 39: ipvar HOME_NET 192.168.1.0/24
            Linea 42: ipvar EXTERNAL_NET !$HOME_NET
            Linea 80 var RULE_PATH ./rules(aquí se indica el directorio donde se encuentran ubicados los ficheros de reglas.Desde Linea 186 – 190 Comentar todas las entradas correspondientes a preprocessor normalize_*Linea 366: Configuración adicional sobre tipos de instalación, establecer la siguiente linea:
            output unified2: filename snort.log, limit 128Linea 393: A partir de esta linea se incluyen los ficheros de reglas para Snort, en este caso concreto se comentarán todas las inclusiones, dejando solamente la primera (local.rules).
          3. Crear una regla de pruebas para verificar el funcionamiento del sistema, crear y editar el fichero /etc/snort/rules/local.rules incluyendo las siguientes lineas:
            alert icmp any any -> $HOME_NET any (msg:”ICMP test”; sid:10000001;)
          4. Probar Snort.
            snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i eth0

Ahora se procede a configurar la base de datos MySQL y con esto en mente, la primera instrucción que se llevará a cabo será crear un usuario Snort con los privilegios necesarios.

/usr/local/bin/log# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 41
Server version: 5.1.57-1~dotdeb.1 (Debian)Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 licenseType ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> create database snort ;
Query OK, 1 row affected (0.00 sec)
mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE on snort.* to snort@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> SET PASSWORD FOR snort@localhost=PASSWORD(‘snort’);
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye

Ahora se procede a crear la base de datos partiendo del esquema existente en Snort tras su instalación, el nombre de esta base de datos será “snort”.

/usr/local/bin/log# mysql -u root -p < /usr/src/snort-2.9.0.5/schemas/create_mysql snort
Enter password:/usr/local/bin/log# mysql -u root -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 43

Server version: 5.1.57-1~dotdeb.1 (Debian)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

This software comes with ABSOLUTELY NO WARRANTY. This is free software,

and you are welcome to modify and redistribute it under the GPL v2 license

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> use snort

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> show tables ;

+——————+

| Tables_in_snort |

+——————+

| data |

| detail |

| encoding |

| event |

| icmphdr |

| iphdr |

| opt |

| reference |

| reference_system |

| schema |

| sensor |

| sig_class |

| sig_reference |

| signature |

| tcphdr |

| udphdr |

+——————+

16 rows in set (0.00 sec)

Por ultimo es necesario configurar el servidor Apache con PHP para que todo el “circuito” de configuración quede definido, para esto se ejecutan los siguientes comandos

Editar el fichero /etc/php5/apache2/php.ini y cambiar la variable error_reporting con el siguiente valor:error_reporting = E_ALL & ~E_NOTICE

/usr/src# cp /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled

/usr/src# a2enmod ssl

Enabling module ssl.

See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.

Run ‘/etc/init.d/apache2 restart’ to activate new configuration!

/usr/src# pear config-set preferred_state alpha

config-set succeeded

/usr/src# pear install Image_Color Image_Canvas Image_Graph

Did not download optional dependencies: pear/Numbers_Roman, pear/Numbers_Words, use –alldeps to download automatically

pear/Image_Graph can optionally use package “pear/Numbers_Roman”

pear/Image_Graph can optionally use package “pear/Numbers_Words”

downloading Image_Color-1.0.4.tgz …

Starting to download Image_Color-1.0.4.tgz (9,501 bytes)

…..done: 9,501 bytes

downloading Image_Canvas-0.3.3.tgz …

Starting to download Image_Canvas-0.3.3.tgz (54,470 bytes)

…done: 54,470 bytes

downloading Image_Graph-0.8.0.tgz …

Starting to download Image_Graph-0.8.0.tgz (367,646 bytes)

…done: 367,646 bytes

install ok: channel://pear.php.net/Image_Color-1.0.4

install ok: channel://pear.php.net/Image_Canvas-0.3.3

install ok: channel://pear.php.net/Image_Graph-0.8.0

/usr/src# /etc/init.d/apache2 restart

Restarting web server: apache2 … waiting .

Se procede a instalar BASE (Basic Analysis and Security Engine) se trata de una aplicación web que permite realizar el análisis de los paquetes capturados por snort.

/usr/src# wget http://sourceforge.net/projects/secureideas/files/BASE/base-1.4.5/base-1.4.5.tar.gz
/usr/src# tar -zxf base-1.4.5.tar.gz

/usr/src# cp -r base-1.4.5 /var/www/base root@debian:/usr/src# chmod 777 /var/www

Ahora desde el navegador web, apuntar a https://<DIRECCION_LOCAL>/base

Dado que se trata de la primera vez que se ejecuta la aplicación web, se procede a iniciar el proceso de configuración que consta de 5 pasos

Paso 1:

  • Seleccionar el lenguaje de la elección del usuario
  • Ruta de adodb: /usr/share/php/adodb

Paso 2:

  • Definir las características de conexión a la base de datos MySQL creada y configurada en pasos anteriores.

Paso 3:

  • Definir los valores de autenticación del sistema BASE, estos valores serán utilizados posteriormente para utilizar BASE.

Paso 4:

  • Creación de las tablas del sistema BASE, en este punto, las tablas que se van a crear van a permitir extender las funcionalidades de Snort empleado BASE. Presionar sobre “Create BASE AG”

Paso 5:

  • Si hasta este punto la configuración ha sido correcta, se debe enseñar la interfaz de autenticación de usuario.

Una vez finalizados los pasos anteriores se tiene Snort configurado y preparado para su ejecución con todas las dependencias necesarias.

Este solamente ha sido el primer paso, en próximas entradas se comenzará a indicar conceptos un poco mas profundos sobre Snort y su uso, como establecer una correcta configuración de Reglas y finalmente, se intentará abarcar algunos mecanismos de hacking sobre malas configuraciones.

Todo esto en las próximas entradas de este blog.

  1. julio 13, 2011 en 3:44 pm

    Hola Adastra,

    He seguido tus indicaciones y funciona a la perfección. Un gran aporte para quienes nos gusta Debian Squeeze. Es la primera vez que puedo hacer funcionar Snort con Base.

    Solo un comentario: Considerar dos giones antes de “prefix” para instalar libdcap y libdnet, en todo caso es muy menor comparado con el aporte.

    Jorge Almanza

    • julio 13, 2011 en 7:59 pm

      Tienes razón, corregido! si te gusto este post, probablemente te interesen los que estoy publicando por estos días, todos relacionados con configuración y optimización de Snort
      Un Saludo!

  2. julio 26, 2011 en 5:59 pm

    Hola Adastra,

    Muy buenos tus artículos sobre Snort, ellos me han permitido comprender como funciona, aunque todavia me falta mucho.

    Es posible que me re-envien el artículo donde se describe el scrip de okimaster.pl, pues yo no lo tengo y estoy muy interezado en instalar las reglas Bleeding Edge.

    Saludos y gracias por los aportes,

    Jorge Almanza
    jorge.almanza@hotmail.com

  3. julio 26, 2011 en 6:15 pm

    Hola de nuevo,

    Traté de escribir Oinkmaster.pl

    Pueden reirse mucho, pero solo fue una equivocación.

    Saludos,

  4. Werther
    febrero 10, 2012 en 3:34 pm

    disculpa me equivoque estoy trancado es en el paso 5. me da el siguiente error Can’t write base_conf.php file!
    Please copy the below info into your base_conf.php file

    • febrero 10, 2012 en 3:50 pm

      Tiene pinta de ser un problema de permisos, inténtalo nuevamente utilizando el usuario “root” de tu sistema.

  5. Werther
    febrero 13, 2012 en 3:19 pm

    tenias razon!! gracias! ahora bien… ya entre a la pag principal de BASE, pero no me detecta nada… es decir, le hago ping al servidor BASE y no lo detecta… todos los valores estan en 0… que debo hacer?

    • febrero 13, 2012 en 4:13 pm

      Tienes que crear reglas para que snort identifique los patrones que te interesan (en este caso por ejemplo, un ping a un servidor) lee las demas publicaciones relacionadas con este tema para que tengas una imagen global de como funciona Snort.

  6. marzo 3, 2012 en 6:42 pm

    Hola, tengo un problema con la librería daq_static, he seguido todos los pasos, en mi caso estoy utilizando ubuntu 11.10 y me da ese fallo a la hora de instalar snort:
    /usr/src/snort-2.9.0.5# make && make install
    ¿Alguna sugerencia?

  7. marzo 3, 2012 en 8:54 pm

    has intentado parchear el fichero daq_pcap.c?

  8. mayo 25, 2012 en 1:10 pm

    Hola ¿existen muchas diferencias para la instalación en Ubuntu 11.04 por ejemplo? o como hago la instalación

  9. LuisC
    agosto 15, 2012 en 2:59 pm

    hola, cuando estoy configurando el snort:
    ./configure –with-mysql –enable-dynamicplugin –enable-perfprofiling –enable-zlib –enable-reload

    me genera el siguiente error:
    ……..
    checking dnet.h usability… no
    checking dnet.h presence… no
    checking for dnet.h… no
    checking dumbnet.h usability… no
    checking dumbnet.h presence… no
    checking for dumbnet.h… no

    ERROR! dnet header not found, go get it from
    http://code.google.com/p/libdnet/ or use the –with-dnet-*
    options, if you have it installed in an unusual place

    Todo lo anterior se ha instalado correctamente, aún así se repite el error.
    Cualquier ayuda muchas gracias.

    • agosto 15, 2012 en 3:14 pm

      El error es bastante claro, tienes que instalar correctamente libdnet en tu ordenador o utilizar la opción –with-dnet para indicar la ruta de instalación.

  10. LuisC
    agosto 15, 2012 en 3:40 pm

    lo he vuelto a instalar y sale el mismo error, también utilizado la opcion –with-dnet pero persiste el error. nose si me falten algunas librerias o esté obviando un paso para /usr/src/snort-2.9.2.3#

  11. LuisC
    agosto 15, 2012 en 3:53 pm

    /usr/src/libdnet-1.12# make
    Making all in include
    make[1]: se ingresa al directorio `/usr/src/libdnet-1.12/include’
    make all-recursive
    make[2]: se ingresa al directorio `/usr/src/libdnet-1.12/include’
    Making all in dnet
    make[3]: se ingresa al directorio `/usr/src/libdnet-1.12/include/dnet’
    make[3]: No se hace nada para `all’.
    make[3]: se sale del directorio `/usr/src/libdnet-1.12/include/dnet’
    make[3]: se ingresa al directorio `/usr/src/libdnet-1.12/include’
    make[3]: se sale del directorio `/usr/src/libdnet-1.12/include’
    make[2]: se sale del directorio `/usr/src/libdnet-1.12/include’
    make[1]: se sale del directorio `/usr/src/libdnet-1.12/include’
    Making all in man
    make[1]: se ingresa al directorio `/usr/src/libdnet-1.12/man’
    make[1]: No se hace nada para `all’.
    make[1]: se sale del directorio `/usr/src/libdnet-1.12/man’
    Making all in src
    make[1]: se ingresa al directorio `/usr/src/libdnet-1.12/src’
    make[1]: No se hace nada para `all’.
    make[1]: se sale del directorio `/usr/src/libdnet-1.12/src’
    Making all in python
    make[1]: se ingresa al directorio `/usr/src/libdnet-1.12/python’
    make[1]: No se hace nada para `all’.
    make[1]: se sale del directorio `/usr/src/libdnet-1.12/python’
    Making all in test
    make[1]: se ingresa al directorio `/usr/src/libdnet-1.12/test’
    Making all in check
    make[2]: se ingresa al directorio `/usr/src/libdnet-1.12/test/check’
    make[2]: No se hace nada para `all’.
    make[2]: se sale del directorio `/usr/src/libdnet-1.12/test/check’
    Making all in dnet
    make[2]: se ingresa al directorio `/usr/src/libdnet-1.12/test/dnet’
    make[2]: No se hace nada para `all’.
    make[2]: se sale del directorio `/usr/src/libdnet-1.12/test/dnet’
    make[2]: se ingresa al directorio `/usr/src/libdnet-1.12/test’
    make[2]: No se hace nada para `all-am’.

  12. Juan Jose
    octubre 2, 2012 en 4:55 am

    Esta linea /usr/src/snort-2.9.0.5# cp /usr/src/snort-2.9.0.5/etc/*.conf* /etc/snort
    esta dos veces en la segunda colocar
    /usr/src/snort-2.9.0.5# cp /usr/src/snort-2.9.0.5/etc/*.map* /etc/snort
    cambiar .conf por .map si no da un error

  13. Andres
    mayo 9, 2013 en 7:51 pm

    Estimado, conozco poco sobre snort, esta para windows?

  1. octubre 7, 2012 en 6:52 am

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 1.120 seguidores

A %d blogueros les gusta esto: