miércoles, 16 de marzo de 2011

Snort 2.9.0.4 en Debian Wheezy con Barnyard2



Vamos con la instalacion de un IDS famoso "Snort", con barnyard en base de datos mysql.

Actualizamos
# aptitude update
# aptitude upgrade

Instalamos las dependecias

# aptitude 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

Instalamos los prerequisitos

libpcap, libdnet, and DAQ.

Install libpcap:
# cd /usr/src
# wget http://www.tcpdump.org/release/libpcap-1.1.1.tar.gz
# tar -zxf libpcap-1.1.1.tar.gz && cd libpcap-1.1.1
# ./configure --prefix=/usr --enable-shared
# make && make install

Install libdnet:
# cd /usr/src
# wget http://libdnet.googlecode.com/files/libdnet-1.12.tgz
# tar -zxf libdnet-1.12.tgz && cd libdnet-1.12
# ./configure --prefix=/usr --enable-shared
# make && make install

Install DAQ:

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

DAQ necesita ser parchado para reconocer el parametro "buffer_size".

# vi /usr/src/daq-0.5/os-daq-modules/daq_pcap.c
En la linea line 219 reemplazar:

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

# ./configure
# make && make install

Actualizamos la ruta del "shared library"
# echo >> /etc/ld.so.conf /usr/lib && ldconfig

Bajamos e instalamos el snort
# wget http://www.snort.org/dl/snort-current/snort-2.9.0.4.tar.gz -O snort-2.9.0.4.tar.gz
# tar -zxf snort-2.9.0.4.tar.gz && cd snort-2.9.0.4
# ./configure --with-mysql --enable-dynamicplugin --enable-perfprofiling --enable-ipv6 --enable-zlib --enable-reload
# make && make install

Creamos las carpetas
# mkdir /etc/snort /etc/snort/rules /var/log/snort /var/log/barnyard2 /usr/local/lib/snort_dynamicrules

Buscamos la regla para usuarios registrados
https://www.snort.org/snort-rules/?#rules

Descomprimimos las reglas en el directorio de snort
# tar xvfz snortrules-snapshot-2903.tar.gz -C /etc/snort

agregamos el usuario y grupo snort, configuramos permisos y copiamos archivos
# groupadd snort && useradd -g snort snort
# chown snort:snort /var/log/snort /var/log/barnyard2
# cp /usr/src/snort-2.9.0.4/etc/*.conf* /etc/snort
# cp /usr/src/snort-2.9.0.4/etc/*.map /etc/snort

Nota: No encontre con el snort el archivo "sid-msg.map" para configurar el barnyard2 por lo que me baje el archivo de
wget http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
Luego fui a la carpeta rules y copie el archivo.
cp sid-msg.map /etc/snort/

Creamos un acceso directo del snort
#ln -s /usr/local/bin/snort /usr/sbin/snort

Configuracion del archivo snort.conf

# nano /etc/snort/snort.conf

Buscamos “RULE_PATH ../rules” y lo reemplazamos por:
var RULE_PATH /etc/snort/rules
Seguimos buscamos por “PREPROC_RULE_PATH ../preproc_rules”, y reemplazar por:
PREPROC_RULE_PATH /etc/snort/preproc_rules

Como vamos a usar el barnyard2 adicionamos en el archivo
output unified2: filename snort.log, limit 128

Buscamos:
# include $PREPROC_RULE_PATH/preprocessor.rules
# include $PREPROC_RULE_PATH/decoder.rules
Y lo descomentamos

Buscamos y lo comentamos quedando
#preprocessor normalize_ip4
#preprocessor normalize_tcp: ips ecn stream
#preprocessor normalize_icmp4
#preprocessor normalize_ip6
#preprocessor normalize_icmp6

Coonfiguramos el MySQL

# mysql -u root -p #Pones el password
mysql> create database snort;
mysql> create user 'snortuser'@'localhost' IDENTIFIED BY 'pass';
mysql> grant all privileges on snort.* to 'snortuser'@'localhost' with grant option;
mysql> flush privileges;
mysql> exit;

Ahora vamos a importar el esquema de la base de datos:
Vamos a la carpeta schema del directorio donde descomprimimos el snort
# cd schemas/
# mysql -p -u snortuser snort < create_mysql
Enter password:

# mysql -u root -p
Enter password:

mysql> use snort;
mysql> show tables; # deberiamos ver las tablas que importamos.
mysql> exit;

Instalacion y configuracion del barnyard2

# cd /usr/src
# wget http://www.securixlive.com/download/barnyard2/barnyard2-1.9.tar.gz
# tar -zxf barnyard2-1.9.tar.gz && cd barnyard2-1.9
# ./configure --with-mysql
# make && make install
# mv /usr/local/etc/barnyard2.conf /etc/snort
# nano /etc/snort/barnyard2.conf
Buscamos la linea #215 y lo cambiamos por: output alert_fast
Al final del archivo agregamos la conexion al mysql
output database: log, mysql, user=snortuser password=pass dbname=snort host=localhost

La prueba de fuego

Ejecutamos el snort
# /usr/local/bin/snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0

Ejecutamos el barnard2
# /usr/local/bin/barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w /etc/snort/bylog.waldo -G /etc/snort/gen-msg.map -S /etc/snort/sid-msg.map -C /etc/snort/classification.config

Si todo sale bien con el barnyard tendran una imagen similar a esta:



Vemos que los datos estan siendo insertados en la base de datos

# mysql -u root -p -D snort -e "select count(*) from event"

Script de inicio de snort y barnayard2

# nano /etc/init.d/snortbarn
y copiamos el contenido

--------------------------------------------------------------------------------------
#! /bin/sh
#
### BEGIN INIT INFO
# Provides: snortbarn
# Required-Start: $remote_fs $syslog mysql
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Start Snort and Barnyard
### END INIT INFO
. /lib/init/vars.sh
. /lib/lsb/init-functions
mysqld_get_param() {
/usr/sbin/mysqld --print-defaults \
| tr " " "\n" \
| grep -- "--$1" \
| tail -n 1 \
| cut -d= -f2
}
do_start()
{
log_daemon_msg "Starting Snort and Barnyard" ""
# Make sure mysql has finished starting
ps_alive=0
while [ $ps_alive -lt 1 ];
do
pidfile=`mysqld_get_param pid-file`
if [ -f "$pidfile" ] && ps `cat $pidfile` >/dev/null 2>&1; then ps_alive=1; fi
sleep 1
done
/sbin/ifconfig eth1 up
/usr/local/bin/snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth1 &
/usr/local/bin/barnyard2 -q -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w /etc/snort/bylog.waldo \
-G /etc/snort/gen-msg.map -S /etc/snort/sid-msg.map -C /etc/snort/classification.config 2> /dev/nul &
log_end_msg 0
return 0
}
do_stop()
{
log_daemon_msg "Stopping Snort and Barnyard" ""
kill $(pidof snort) 2> /dev/nul
kill $(pidof barnyard2) 2> /dev/nul
log_end_msg 0
return 0
}
case "$1" in
start)
do_start
;;
stop)
do_stop
;;
restart)
do_stop
do_start
;;
*)
echo "Usage: snort-barn {start|stop|restart}" >&2
exit 3
;;
esac
exit 0
--------------------------------------------------------------------------------------

Lo hacemos ejecutable
# chmod +x /etc/init.d/snortbarn
# insserv -f -v snortbarn

Snort y Barnyard2 empezara autmaticamente al bootear

Nota: para hacerlo funcionar con el snorby, bastaria obviar la creacion de bd hecho en este jautu, porque con el snorby tambien lo creas.

Los datos de usuario y base de datos lo sacamos del archivo barnyard2.conf esos datos deben coincidir con los datos del archivo de snorby database.yml

Una vez echo eso e iniciar el worker, veras los datos procesados en el snorby



Fuente:

http://www.snort.org/docs

3 comentarios:

magnux dijo...

hola hola yo estoy atorado al ingresar el comando


# /usr/local/bin/snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0
me sale este error

ERROR: /etc/snort/snort.conf(135) Invalid argument to 'search-method': ac-split.
Fatal Error, Quitting..

magnux dijo...

hola hola yo estoy atorado al ingresar el comando

# /usr/local/bin/snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0

me sale este error

ERROR: /etc/snort/snort.conf(135) Invalid argument to 'search-method': ac-split.
Fatal Error, Quitting..

guillo78 dijo...

hola que tal ./configure --with-mysql me sale configure :error: no acceptable C compiler found in $PATH y despues pongo make && make install
bash: make: no se encontro la orden
alguien me puede dar una mano.gracias