Snort Desde 0

19
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

Transcript of Snort Desde 0

Page 1: 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

Page 2: Snort Desde 0

Se reinicia:

reboot

Se instalan los paquetes de desarrollo

yum groupinstall "Development Tools"

Page 3: Snort Desde 0

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

Page 4: Snort Desde 0

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

Page 5: Snort Desde 0

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

Page 6: Snort Desde 0

tar -xf snort-2.9.4.tar.gz

cd snort-2.9.4

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

make 

Page 7: Snort Desde 0

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

Page 8: Snort Desde 0

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

Page 9: Snort Desde 0

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

Page 10: Snort Desde 0

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

Page 11: Snort Desde 0

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

Page 12: Snort Desde 0

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

Page 13: Snort Desde 0

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

Page 14: Snort Desde 0

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

Page 15: Snort Desde 0

¿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).

Page 16: Snort Desde 0

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:

Page 17: Snort Desde 0

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.