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.