Mostrando las entradas con la etiqueta snort. Mostrar todas las entradas
Mostrando las entradas con la etiqueta snort. Mostrar todas las entradas

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