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: /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: /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
-
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 -pchecking 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: stdoutpor
output alert_fast
Al final del archivo declarar la siguiente linea:
output database: log, mysql, user=snort password=snort dbname=snort host=localhost
- 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). - 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;) - 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.
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
Me gustaMe gusta
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!
Me gustaMe gusta
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
Me gustaMe gusta
Hola de nuevo,
Traté de escribir Oinkmaster.pl
Pueden reirse mucho, pero solo fue una equivocación.
Saludos,
Me gustaMe gusta
Hola, Sobre el script Oinkmaster.pl y las reglas Bleeding Edge de Snort, los articulos que he escrito sobre el tema son:
https://thehackerway.wordpress.com/2011/07/20/utilizando-rulesets-en-snort-para-deteccion-de-amenazas-y-generacion-de-alarmas-parte-i/
https://thehackerway.wordpress.com/2011/07/22/utilizando-rulesets-en-snort-para-deteccion-de-amenazas-y-generacion-de-alarmas-%e2%80%93-parte%c2%a0ii/
https://thehackerway.wordpress.com/2011/07/25/utilizando-reglas-libres-de-snort-para-deteccion-de-amenazas-y-generacion-de-alarmas/
Luego, el Script Oinkmaster se encuentra disponible en:
http://oinkmaster.sourceforge.net/download.shtml
Un Saludo.
Me gustaMe gusta
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
Me gustaMe gusta
Tiene pinta de ser un problema de permisos, inténtalo nuevamente utilizando el usuario «root» de tu sistema.
Me gustaMe gusta
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?
Me gustaMe gusta
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.
Me gustaMe gusta
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?
Me gustaMe gusta
has intentado parchear el fichero daq_pcap.c?
Me gustaMe gusta
Hola ¿existen muchas diferencias para la instalación en Ubuntu 11.04 por ejemplo? o como hago la instalación
Me gustaMe gusta
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.
Me gustaMe gusta
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.
Me gustaMe gusta
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#
Me gustaMe gusta
/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’.
Me gustaMe gusta
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
Me gustaMe gusta
Estimado, conozco poco sobre snort, esta para windows?
Me gustaMe gusta
Si, también está para windows.
Me gustaMe gusta
hola alguien me ayuda no puedo instalar snor 2.9.8.2 en el s. o. windows
me sale the DAQ no soporta la recargade la version
Me gustaMe gusta