Snort Desde 0

Post on 31-Dec-2015

82 views 1 download

Transcript of Snort Desde 0

SNORT DESDE 0

Esta instalación se ha efectuado en un Linux CentOS 6.3 versión minimal. Primero se actualiza el sistema:

yum update

Aceptamos

Se reinicia:

reboot

Se instalan los paquetes de desarrollo

yum groupinstall "Development Tools"

Se instalan la dependencias para la compilación de Snort:

 yum install libpcap libpcap-devel pcre pcre-devel tcpdump zlib-devel wget nano

Antes de compilar Snort, hay que instalar desde las fuentes:

llibdnet – una librería que permite efectuar toda una serie de operaciones de bajo nivel en

los paquetes de red

DAQ - Data Acquisition library que viene utilizada desde la versión 2.9.0 de Snort para la

captura de los datos

Se inicia con libdnet:

cd /usr/src

wget http://downloads.sourceforge.net/project/libdnet/libdnet/libdnet-1.11/libdnet-

1.11.tar.gz

tar -xf libdnet-1.11.tar.gz

cd libdnet-1.11

./configure --prefix=/usr 

make 

make install

Se continua con DAQ:

cd /usr/src

wget http://en.sourceforge.jp/projects/sfnet_snort.mirror/downloads/Snort%202.9.4/daq-

2.0.0.tar.gz/ tar -xf daq-2.0.0.tar.gz

tar -xf daq-2.0.0.tar.gz

cd daq-2.0.0

./configure 

make 

make install

Se termina esta parte con la instalación de la ultima versión de Snort disponible:

cd /usr/src

wget http://www.snort.org/dl/snort-current/snort-2.9.4.tar.gz   -O snort-2.9.4.tar.gz

tar -xf snort-2.9.4.tar.gz

cd snort-2.9.4

./configure --enable-zlib --enable-sourcefire 

make 

make install

Se mira la versión de Snort instalada:

snort --version

Si obtienes un error

“snort: error while loading shared libraries: libdnet.1: cannot open shared object

file: No such file or directory”

Copias todas las libdnet de origen /usr/src/ “archivos libdnet” hacia el directorio

/usr/local/lib/ “pegas aquí” :….Usar WINSCP

Se mira la versión de Snort instalada:

snort --version

Se crean las carpetas utilizadas para la configuración: (en caso no existan)

mkdir /etc/snort 

mkdir /etc/snort/rules 

mkdir /etc/snort/preproc_rules 

mkdir /etc/snort/so_rules 

mkdir /usr/local/lib/snort_dynamicrules 

mkdir /var/log/snort

Para iniciar Snort como servicio, se instala el script de arranque:

# cd /usr/src/snort-2.9.4/rpm/

cp snortd /etc/init.d/ 

chmod +x /etc/init.d/snortd 

chkconfig --add snortd 

cp snort.sysconfig /etc/sysconfig/snort

Como el script lo inicia el usuario snort, se crea ese usuario en el sistema:

groupadd -g 40000 snort 

useradd snort -d /var/log/snort -s /sbin/nologin -c SNORT_IDS –g snort

useradd: warning: the home directory already exists. 

Not copying any file from skel directory into it.

Como el script busca el binario de Snort en la carpeta /usr/sbin, se crea un enlace simbólico:

ln -s /usr/local/bin/snort /usr/sbin/snort

Ahora se pueden descargar las reglas brindadas por los desarrolladores de Snort Para

hacerlo, hay que registrarse en la sitio web: https://www.snort.org/signup

Una vez creada la cuenta se accede y en la pagina que aparece se selecciona la imagen “Get

Rules”. En la nueva pagina se selecciona el enlace “Download from the command line” y

luego el enlace “Get a Oinkcode”. En la nueva pagina aparecerá el código asignado. Se crea

la carpeta donde descargar las reglas:

cd /usr/src

mkdir snortrules

cd snortrules

y se descarga utilizando la siguiente sintaxis:

Suponiendo que el oinkcode sea: be11a4dde5e407b460137e9bb1dda28116fb483d

Se descargarán de la siguiente forma:

wget http://www.snort.org/sub-rules/snortrules-snapshot-2940.tar.gz/”codigo” -O

snortrules-snapshot-2940.tar.gz

Suponiendo que el oinkcode sea: caa1498ca806ff92ef816ab0808cb6e9f6

Se descargarán de la siguiente forma:

Se descomprime el archivo:

tar -xf snortrules-snapshot-2940.tar.gz

Se copian los archivos de configuración de Snort en la carpeta creada anteriormente:

cp etc/* /etc/snort/

cp ../snort-2.9.4/etc/attribute_table.dtd /etc/snort/

Se copian las reglas en las respectivas carpetas:

cp rules/* /etc/snort/rules/

cp preproc_rules/* /etc/snort/preproc_rules/

Se copian los objetos precompilados para la versión 6.X de CentOS en la respectiva carpeta:

cp so_rules/precompiled/RHEL-6-0/x86-64/2.9.4.0/* /usr/local/lib/snort_dynamicrules/

Se crean los archivos para las reglas definidas localmente:

touch /etc/snort/rules/white_list.rules

touch /etc/snort/rules/black_list.rules

touch /etc/snort/rules/local.rules

Se cambian los permisos para las carpetas a las que debe acceder el usuario snort creado:

cd /etc

chown -Rf snort:snort snort

chown -Rf snort:snort /var/log/snort

Configuración de Snort

Para la configuración de Snort el archivo que hay que modificar es snort.conf que se

encuentra en la carpeta /etc/snort. Se abre:

nano /etc/snort/snort.conf

La primera línea que hay que modificar es:

ipvar HOME_NET any

En esta línea se indica el rango de IP locales que serán protegidas por snort. En el caso que el

rango de nuestra red local sea: 192.168.1.1/192.168.1.255, se pone:

ipvar HOME_NET 192.168.1.1/24

La segunda línea que hay que modificar es:

ipvar EXTERNAL_NET any

Donde se pone:

ipvar EXTERNAL_NET !$HOME_NET

Que significa: cualquier IP que no sean las locales. Luego se modifican las líneas relacionadas

con los archivos y carpetas de configuración:

var RULE_PATH ../rules

var SO_RULE_PATH ../so_rules

var PREPROC_RULE_PATH ../preproc_rules

var WHITE_LIST_PATH ../rules

var BLACK_LIST_PATH ../rules

Para que queden:

var RULE_PATH rules

var SO_RULE_PATH so_rules

var PREPROC_RULE_PATH preproc_rules

var WHITE_LIST_PATH rules

var BLACK_LIST_PATH rules

En el bloque 6 se configura el tipo de salida para los registros. Después de esta línea:

# output unified2: filename merged.log, limit 128, nostamp, mpls_event_types,

vlan_event_types

Se añade:

output unified2: filename snort.log, limit 128

Para terminar, en el bloque 8, se modifican las siguientes líneas:

# include $PREPROC_RULE_PATH/preprocessor.rules

# include $PREPROC_RULE_PATH/decoder.rules

# include $PREPROC_RULE_PATH/sensitive-data.rules

Para que queden:

include $PREPROC_RULE_PATH/preprocessor.rules

include $PREPROC_RULE_PATH/decoder.rules

include $PREPROC_RULE_PATH/sensitive-data.rules

Se guardan los cambios y se "compilan" las reglas para las "Shared Objet Rules":

cd /usr/local/bin

snort -c /etc/snort/snort.conf --dump-dynamic-rules=/etc/snort/so_rules

Se cambian los permisos en los archivo creados en la carpeta so_rules:

chown -Rf snort:snort /etc/snort/so_rules/*

Se abre nuevamente el archivo de configuración de Snort:

nano /etc/snort/snort.conf

y al final del archivo, se modifica este bloque:

# include $SO_RULE_PATH/bad-traffic.rules

# include $SO_RULE_PATH/chat.rules

# include $SO_RULE_PATH/dos.rules

# include $SO_RULE_PATH/exploit.rules

# include $SO_RULE_PATH/icmp.rules

# include $SO_RULE_PATH/imap.rules

# include $SO_RULE_PATH/misc.rules

# include $SO_RULE_PATH/multimedia.rules

# include $SO_RULE_PATH/netbios.rules

# include $SO_RULE_PATH/nntp.rules

# include $SO_RULE_PATH/p2p.rules

# include $SO_RULE_PATH/smtp.rules

# include $SO_RULE_PATH/snmp.rules

# include $SO_RULE_PATH/specific-threats.rules

# include $SO_RULE_PATH/web-activex.rules

# include $SO_RULE_PATH/web-client.rules

# include $SO_RULE_PATH/web-iis.rules

#include $SO_RULE_PATH/web-misc.rules

para que quede:

include $SO_RULE_PATH/bad-traffic.rules

include $SO_RULE_PATH/chat.rules

include $SO_RULE_PATH/dos.rules

include $SO_RULE_PATH/exploit.rules

include $SO_RULE_PATH/icmp.rules

include $SO_RULE_PATH/imap.rules

include $SO_RULE_PATH/misc.rules

include $SO_RULE_PATH/multimedia.rules

include $SO_RULE_PATH/netbios.rules

include $SO_RULE_PATH/nntp.rules

include $SO_RULE_PATH/p2p.rules

include $SO_RULE_PATH/smtp.rules

include $SO_RULE_PATH/snmp.rules

include $SO_RULE_PATH/specific-threats.rules

include $SO_RULE_PATH/web-activex.rules

include $SO_RULE_PATH/web-client.rules

include $SO_RULE_PATH/web-iis.rules

include $SO_RULE_PATH/web-misc.rules

Se guardan los cambios y se efectúa una primera prueba para averiguar que la configuración

esté bien:

snort -c /etc/snort/snort.conf -T

Si el mensaje final es:

Snort successfully validated the configuration!

Snort exiting

Todo está bien.

¿Cómo se puede probar el programa para saber si efectivamente está detectando los

paquetes definidos en las reglas?

Escribiendo una de prueba. La sintaxis para escribir una regla es:

acción protocolo IPorigen puertorigen dirección IPdestino puertodestino Opción1

Valor1 Opción2 Valor2 OpciónN ValorN sid revisión

un ejemplo:

nano /etc/snort/rules/local.rules

Al final del archivo ponemos:

alert icmp any any -> any any (msg:"ICMP Testing Rule"; sid:1000001; rev:1;)

Guardamos los cambios. Esta regla nos alertará cada vez que el sistema capturará un

paquete de Ping (Protocolo ICMP).

Las partes importantes:

acción = alert El sistema nos alertará

Protocolo = ICMP

any Cualquier IP de origen

any Cualquier Puerto de origen

-> dirección

any Cualquier IP de destino

any Cualquier puerto de destino

msg:"ICMP Testing Rule"; Opción y valor

sid = 1000001 Un identificativo único de la regla. Hay que utilizar números mayores a un

millón ya que:

o el rango de 0 a 99 es reservado para uso futuro

o el rango de 100 a 1000000 es reservado a las reglas distribuidas por los desarrolladores de

Snort

rev =1 Indica que es la primera versión de la regla que estamos escribiendo

Para probar la regla iniciamos Snort de manera que envíe las alertas a la consola del terminal

Linux:

snort -c /etc/snort/snort.conf -A console

Ahora desde otra ventana terminal efectuamos un ping a una dirección cualquiera:

ping google.com

Aparecerá:

En la ventana de Snort:

Para salir del modo consola: CTRL-C

Ya podemos iniciar Snort como servicio:

service snortd start

En este caso las alertas se guardarán en el archivo /var/log/snort/alert:

tail -f /var/log/snort/alert

En otra ventana terminal, ejecutamos nuevamente el comando de ping:

ping google.com

En la ventana del log de alerta de Snort, volverán a aparecer los mensajes.

Terminada esta prueba, quitamos la regla de local.rules y reiniciamos Snort.