Enviado por admin el
Snort es un programa Open Source desarrollado para prevenir y detectar intrusiones en una red. De ahí los acrónimos IDS (intrusion detection system) y IPS (intrusion prevention system).
¿Cómo funciona?
Analiza todos los paquetes que salen/entran en la red monitoreada, los decodifica, aplica las reglas definidas en su configuración y devuelve los resultados/alertas.
Visto gráficamente:
Esta instalación se ha efectuado en un Linux CentOS 6.3 versión minimal. Primero se actualiza el sistema:
yum update
Se reinicia:
reboot
Se instalan los paquetes de desarrollo (para compilar las fuentes):
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/li...
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://www.snort.org/dl/snort-current/daq-2.0.0.tar.gz -O 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
,,_ -*> Snort! <*-
o" )~ Version 2.9.4 GRE (Build 40)
'''' By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team
Copyright (C) 1998-2012 Sourcefire, Inc., et al.
Using libpcap version 1.0.0
Using PCRE version: 7.8 2008-09-05
Using ZLIB version: 1.2.3
Se crean las carpetas utilizadas para la configuración:
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 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:
wget http://www.snort.org/sub-rules/<filename>/<oinkcode-here> -O <output-filename>
Suponiendo que el oinkcode sea: caa1498ca806ff92ef816ab0808cb6e9f6
Se descargarán de la siguiente forma:
wget http://www.snort.org/sub-rules/snortrules-snapshot-2940.tar.gz/caa1498ca... -O snortrules-snapshot-2940.tar.gz
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/i386/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 en 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:
- el rango de 0 a 99 es reservado para uso futuro
- 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.
Anexo el manual de Snort.
¿Consejos?
Adjunto | Tamaño |
---|---|
snort_manual.pdf | 1.36 MB |
2 comentarios
Actulizacion del archivo snort 2.9.4
Enviado por Michael Borjas (no verificado) el
Se ha retirado de los archivos de la web oficinal snort , el archivo tar presente en esta edicion agradecere que suban el arhivo porfavor
Muy buena guía, he seguido
Enviado por Hemagome (no verificado) el
Muy buena guía, he seguido otras, pero siempre omiten la parte de la creación de las carpetas o no lo explican muy bien, de manera que al ejecutar el Snort me daba error. Para instalarlo actualmente no más hay que cambiar las versiones de Snort, daq y libdnet por las últimas. Deberias hacer una guia para el Snorby o el Base