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.