Instalación de Snort 2.9.2 en Ubuntu 10.04
Para poder hacer pruebas con un IDS en tu propia casa no es necesario disponer de un fortigate. Existen soluciones de software libre que podemos instalar en equipos tanto Windows como Linux. Googleando encontré que uno de los más conocidos es Snort, así que me puse a ojear el manual oficial de instalación en Ubuntu. La topología que ellos recomienda para el uso de ésta herramienta la podemos ver en la Figura 1.
Figura 1: topología recomendada. |
La topología que yo he montado la podemos ver en la figura 2. El snort lo he montado en una máquina virtual en VMWare Workstation. Para poder monitorear el tráfico con snort necesitaremos un switch que soporte port mirroring o span (como lo llama Cisco Switched Port Analyzer). Yo he utilizado un switch cisco de la serie 2900XL. Las configuraciones de la máquina vitural y del switch las comentaré más adelante.
Figura 2: topología implementada. |
Nota: el puerto espejo o port mirroring es utilizado con un switch de red para enviar copias de paquetes de red vistos en un puerto del switch (o una VLAN entera) a una conexión de red monitoreada en otro puerto del switch. Esto es comunmente utilizado para aplicaciones de red que requieren monitorear el tráfico de la red, tal como una intrución-detección al sistema.
Configurar la máquina virtual.
Configuramos en VMWare una red de tipo bridge con conexión externa a la tarjeta de red y desactivamos la configuración del DHCP (lo podemos ver en la figura 3). Esto lo hacemos en el menú "Edit/Virtual Network Editor".
Figura 3: configuración de red tipo bridge. |
La conexión de red de la tarjeta de la máquina virtual debe ser "Custom: specific virtual network/ VMnet1" (figura 4).
Figura 4: configuración del adaptador de red. |
Yo he realizado una instalación de ubuntu nueva. Ahora explicaré los pasos que he seguido para instalar snort ( pasos del manual oficial de la página de snort).
Instalación de paquetes necesarios
Necesitamos instalar los siguientes paquetes: nmap, nbtscan (escaner de red), apache2, php5, php5-mysql, php5-gd, libpcap0.8-dev, libpcre3-dev, g++, bison, flex, libpcap-ruby. Las instrucciones que debemos ejecutar son las siguientes:
sudo apt-get install nmap sudo apt-get install nbtscan sudo apt-get install apache2 sudo apt-get install php5 sudo apt-get install php5-mysql sudo apt-get install php5-gd sudo apt-get install libpcap0.8-dev sudo apt-get install libpcre3-dev sudo apt-get install g++ sudo apt-get install bison sudo apt-get install flex sudo apt-get install libpcap-ruby |
La instalación de estos paquetes no es complicada, sólo hay que ejecutarlas y pulsar la tecla "Y" en el caso de que nos pida confirmación. Una vez que hemos teminado la instalación procederemos a realizar la instalación del servidor de bases de datos, que para nuestro caso es el mysql.
sudo apt-get install mysql-server sudo apt-get install libmysqlclient16-dev |
Cuando ejecutamos la primera instrucción " sudo apt-get install mysql-server " nos pedirá que introduzcamos la contraseña que utilizará el administrador para conectarse a mysql (figura 5).
Figura 5: contraseña de acceso para el administrador en mysql. |
Nos pedirá la confirmación de la contraseña para comprobar que no se ha producido un error en la escritura de la misma (figura 6). La ejecución de la segunda instrucción no necesitará ningún tipo de configuración.
Figura 6: repetir la contraseña del administrador. |
Después de esto nos aseguramos que ubuntu tiene las últimas actualizaciones, para ello ejecutamos las siguientes intrucciones:
sudo apt-get update sudo apt-get upgrade |
Instalación del Snort Report
Snort report nos va a proporcionar una interfaz web para poder visualizar las alertas de seguridad que se han prouducico en nuestra red. Tambien nos mostrará un diagrama en forma de queso mostrandonos los porcentajes de los tipos de ataque.
JPgraph
Para que en la interfaz web se muestre el diagrama en forma de queso necesitamos instalar la librería jpgraph. Puede que haya algún tipo de incompatibilidad si descargamos otra version. La que yo he utilizado es la 1.27.1 que la podemos descargar de aquí. Las instrucciones necesarias para la descarga, descompresión e instalacion de esta librería son las siguientes:
sudo wget http://hem.bredband.net/jpgraph/jpgraph-1.27.1.tar.gz sudo mkdir /var/www/jpgraph sudo tar zxvf jpgraph-1.27.1.tar.gz sudo cp -r jpgraph-1.27.1/src /var/www/jpgraph/ |
Snort Report
El siguiente paso es descargar y configurar snort report. La versión que yo he utilizado es la 1.3.3, para descargarla iremos a ésta página y pulsaremos en la sección "Downloads" y allí encontraremos el enlace (figura 7).
Figura 7: descarga de snort report. |
Por defecto en ubuntu los archivos descargados se almacenan en la ruta "/home/usuario/Downloads", así que procedemos a descomprimirlo con la siguiente intrucción:
sudo tar zxvf snortreport-1.3.3.tar.gz -C /var/www/ |
Una vez descomprimido necesitamos editar el fichero srconf.php para configurar los datos de conexión a mysql así como la ruta a la librería jpgraph (que se introducirá de forma relativa al directorio donde está instalado snort report, como snort-report está en la carpeta /var/www/snortreport-1.3.3 y jpgraph también la ruta relativa será "../jpgraph" como podemos ver en la figura 8). Los datos de conexión a la base de datos serán: server, user, pass y dbname. Como nombre de usuario y nombre de la base de datos pondremos snort (aunque todavía no existen los pondremos porque lo crearemos más adelante), la contraseña que pondremos será "123456" y en server pondremos "localhost" (Figura 9). Se pueden utilizar los datos que quieras yo he optado por estos en el post para que sea todo más claro.
Para la edición del fichero he utilizado vi, para poder editar el fichero con este editor utilizamos la siguiente instrucción:
Para la edición del fichero he utilizado vi, para poder editar el fichero con este editor utilizamos la siguiente instrucción:
sudo vi /var/www/snortreport-1.3.3/srconf.php |
Figura 8: ruta a la librería jpgraph. |
Figura 9: datos para la conexión a mysql. |
Instalación y configuración de Snort
Antes de instalar snort vamos a necesitar instalar una API que se utiliza desde la versión 2.9.0 para obtener los datos (Data Acquisition API). La versión que he utilizado es la 0.6.2 que la podemos descargar desde aquí.
Por defecto en ubuntu los archivos descargados se almacenan en la ruta "/home/usuario/Downloads", así que procedemos a descomprimirlo con la siguiente intrucción:
sudo tar zxvf daq-0.6.2.tar.gz |
Para compilarla y configurala ejecutaremos las siguientes instrucciones:
cd daq-0.6.2 sudo ./configure sudo make sudo make install |
Instalación de libdnet
Libdnet ofrece una interfaz simplificada, portátil con varias rutinas de red de bajo nivel. La versión que he utilizado es la 1.12 y la podemos descargar desde aquí. Las instrucciones para descomprimirlo, compilarlo e instalarlo son las siguientes:
sudo tar zxvf libdnet-1.12.tgz cd libdnet-1.12/ sudo ./configure sudo make sudo make install sudo ln -s /usr/local/lib/libdnet.1.0.1 /usr/lib/libdnet.1 |
Instalación de snort
La versión de snort que he utilizado es la 2.9.2 pero si vamos a la web de snort podemos descargar una versión más actualizada. La versión 2.9.2 la podemos descargar desde aquí. Los pasos que voy a describir son para instalar snort en la ruta "/usr/local/snort" pero se puede cambiar a otro directorio, lo que habría que hacer es cambiar la ruta "--prefix" en las instruccion de instación. Las instrucciones son las siguientes:
Nota: recordar que por defecto los archivos descargados se almacenan en el directorio "/home/usuario/Downloads".
Nota: recordar que por defecto los archivos descargados se almacenan en el directorio "/home/usuario/Downloads".
sudo tar zxvf snort-2.9.2.tar.gz cd snort-2.9.2 sudo ./configure --prefix=/usr/local/snort --enable-sourcefire sudo make sudo make install |
Creamos los directorios para los logs con las siguientes intrucciones:
sudo mkdir /var/log/snort sudo mkdir /var/snort |
Creamos el usuario y grupo snort con las siguientes instrucciones:
sudo groupadd snort sudo useradd -g snort snort |
Cambiamos de propietario el directorio "/var/log/snort" con la siguiente instrucción:
sudo chown snort:snort /var/log/snort |
Con esto ya tendríamos instalado snort, habríamos creado el usuario snort que indicabamos en el archivo de configuración de snort report. Ahora nos faltaría crear la base de datos, darle permisos al usuario snort para utilizarla y asignarle la contraseña que indicabamos en el archivo de configuración de snort report.
Para crear la base de datos usamos la siguiente instrucción:
echo "create database snort;" | mysql -u root -p |
Para crear las tablas necesarias en la base de datos usamos la siguiente instrucción:
mysql -u root -p -D snort < ./schemas/create_mysql |
Para darle al usuario snort los permisos necesarios sobre la base de datos snort y asignarle una contraseña utilizaremos la siguiente instrucción:
echo "grant create, insert, select, delete, update on snort.* to snort@localhost identified by '123456'" | mysql -u root -p |
Nota: la contraseña que ponemos es 123456 porque es la que hemos indicado en el archivo de configuración de snort report.
Instalación de las Snort rules
Lo siguiente que haremos es descargarnos el conjunto de reglas para snort (estás reglas son las que harán que detecten las amenazas), para ello iremos a ésta página. Aquí hay dos secciones diferenciadas "Subscriber Release" y "Registered User Release". La diferencia entre ellas es que el conjunto de reglas para los usuario registrados no está actualizada, va un mes por detrás. Para poder descargarnos el conjunto de reglas deberemos de registrarnos en la página (figura 10). La versión que yo me he bajado ha sido la 2922.
Figura 10: descargar las reglas. |
Una vez descargado ejecutaremos las sisguientes instrucciones:
sudo tar zxvf snortrules-snapshot-2922.tar.gz -C /usr/local/snort sudo mkdir /usr/local/snort/lib/snort_dynamicrules sudo cp /usr/local/snort/so_rules/precompiled/Ubuntu-10-4/i386/2.9.2.2/* /usr/local/snort/lib/snort_dynamicrules sudo touch /usr/local/snort/rules/white_list.rules sudo touch /usr/local/snort/rules/black_list.rules sudo ldconfig |
Configuración de Snort
Para configurar snort tendremos que editar el fichero "/usr/local/snort/etc/snort.conf", el editor que uso es el vi. La instrucción para editar el fichero es la siguiente:
sudo vi /usr/local/snort/etc/snort.conf |
Una vez que estemos editando el fichero deberemos realizar los siguientes cambios:
Luego buscaremos la línea:
y debajo añadiremos la siguiente línea:
El porque de ésta última instrucción la comentaremos en el siguiente paso. Guardaremos los cambios realizados y ya tendremos configurado snort y sus reglas.
Instalar Barnyard2
En entornos en los que un IDS Snort tiene que procesar una gran cantidad de tráfico es muy posible que su rendimiento se vea afectado y acabe descartando paquetes.
Esto es debido a que Snort no procesa el siguiente paquete hasta que no termina de escribir la alerta en la base de datos. Este proceso de escritura es lento si hablamos de que es necesario una conexión TCP y un insert en la base de datos por cada alerta.
Para estos casos se puede configurar Snort (/usr/local/snort/etc/snort.conf ) para que escriba las alertas en un fichero local en lugar de hacerlo directamente en red. y esto se consigue con la instrucción anterior ( output unified2: filename snort.u2, limit 128 ). Con esta línea diremos a Snort que escriba las alertas en un fichero con nomenclatura base snort.log. con un tamaño máximo de 128MB cada uno.
Se trata del formato unified2, un formato binario optimizado que permitirá a snort generar alertas más rápidamente.
Pero si tenemos las alertas en un fichero local, ¿cómo las escribimos entonces en la base de datos? Para esta tarea tenemos Barnyard2 (en español "corral"), un intérprete open source de los ficheros de salida en formato unified2. Barnyard2 tendrá como entrada un fichero unified2 y como salida escribirá en nuestra base de datos.
Esta explicación la he sacado de la web www.hackerplayers.com y allí hay muchos más detalles, muchas gracias al autor desde aquí por su trabajo.
Primero descagamos barnyard2, la versión que yo he utilizado es la 1.9, el enlace lo tenemos aquí. Una vez descargado descomprimimos e instalamos con el siguiente conjunto de instrucciones:
Ahora vamos a implementar las actualizaciones necesarias en el archivo de configuración de barnyard2, lo editamos con el siguiente comando:
Las modificaciones que debemos de hacer son las siguientes:
Donde password es 123456 porque es la contraseña para acceder a la base de datos asignada al usuario snort en pasos anteriores. Una vez hechos estos cambios guardamos el archivo y pasamos a configurar la interfaz.
Configuración de la interfaz
Ahora vamos a introducir la configuración de la interfaz de red de la máquina virtual, para ello editamos el archivo "interfaces" con la siguiente instruccion:
La configuración de la interfaz eth0 debe de ser la siguiente:
Una vez realizados los cambios guardamos y reiniciamos la configuración con la siguiente instrucción:
Buscar en snort.conf | Sustituir por.... |
var WHITE_LIST_PATH /etc/snort/rules var BLACK_LIST_PATH /etc/snort/rules |
var WHITE_LIST_PATH /usr/local/snort/rules var BLACK_LIST_PATH /usr/local/snort/rules |
Buscar en snort.conf | Sustituir por.... |
dynamicpreprocessor directory /usr/local/lib/snort_dynamicpreprocessor/ dynamicengine /usr/local/lib/snort_dynamicengine/libsf_engine.so dynamicdetection directory /usr/local/lib/snort_dynamicrules |
dynamicpreprocessor directory /usr/local/snort/lib/snort_dynamicpreprocessor/ dynamicengine /usr/local/snort/lib/snort_dynamicengine/libsf_engine.so dynamicdetection directory /usr/local/snort/lib/snort_dynamicrules |
Luego buscaremos la línea:
#output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_types |
y debajo añadiremos la siguiente línea:
output unified2: filename snort.u2, limit 128 |
El porque de ésta última instrucción la comentaremos en el siguiente paso. Guardaremos los cambios realizados y ya tendremos configurado snort y sus reglas.
Instalar Barnyard2
En entornos en los que un IDS Snort tiene que procesar una gran cantidad de tráfico es muy posible que su rendimiento se vea afectado y acabe descartando paquetes.
Esto es debido a que Snort no procesa el siguiente paquete hasta que no termina de escribir la alerta en la base de datos. Este proceso de escritura es lento si hablamos de que es necesario una conexión TCP y un insert en la base de datos por cada alerta.
Para estos casos se puede configurar Snort (/usr/local/snort/etc/snort.conf ) para que escriba las alertas en un fichero local en lugar de hacerlo directamente en red. y esto se consigue con la instrucción anterior ( output unified2: filename snort.u2, limit 128 ). Con esta línea diremos a Snort que escriba las alertas en un fichero con nomenclatura base snort.log. con un tamaño máximo de 128MB cada uno.
Se trata del formato unified2, un formato binario optimizado que permitirá a snort generar alertas más rápidamente.
Pero si tenemos las alertas en un fichero local, ¿cómo las escribimos entonces en la base de datos? Para esta tarea tenemos Barnyard2 (en español "corral"), un intérprete open source de los ficheros de salida en formato unified2. Barnyard2 tendrá como entrada un fichero unified2 y como salida escribirá en nuestra base de datos.
Esta explicación la he sacado de la web www.hackerplayers.com y allí hay muchos más detalles, muchas gracias al autor desde aquí por su trabajo.
Primero descagamos barnyard2, la versión que yo he utilizado es la 1.9, el enlace lo tenemos aquí. Una vez descargado descomprimimos e instalamos con el siguiente conjunto de instrucciones:
sudo tar zxvf barnyard2-1.9.tar.gz cd barnyard2-1.9 sudo ./configure --with-mysql sudo make sudo make install sudo cp etc/barnyard2.conf /usr/local/snort/etc sudo mkdir /var/log/barnyard2 sudo chmod 666 /var/log/barnyard2 sudo touch /var/log/snort/barnyard2.waldo sudo chown snort.snort /var/log/snort/barnyard2.waldo |
Ahora vamos a implementar las actualizaciones necesarias en el archivo de configuración de barnyard2, lo editamos con el siguiente comando:
sudo vi /usr/local/snort/etc/barnyard2.conf |
Las modificaciones que debemos de hacer son las siguientes:
Buscar en barnyard2.conf | Sustituir por.... |
config reference_file: /etc/snort/reference.config | config reference_file: /usr/local/snort/etc/reference.config |
config classification_file: /etc/snort/classification.config | config classification_file: /usr/local/snort/etc/classification.config |
config gen_file: /etc/snort/gen-msg.map | config gen_file: /usr/local/snort/etc/gen-msg.map |
config sid_file: /etc/snort/sid-msg.map | config sid_file: /usr/local/snort/etc/sid-msg.map |
#config hostname: thor | config hostname: localhost |
#config interface: eth0 | config interface: eth0 |
#output database: log, mysql, user=root password=test dbname=db host=localhost | output database: log, mysql, user=snort password=123456 dbname=snort host=localhost |
Donde password es 123456 porque es la contraseña para acceder a la base de datos asignada al usuario snort en pasos anteriores. Una vez hechos estos cambios guardamos el archivo y pasamos a configurar la interfaz.
Configuración de la interfaz
Ahora vamos a introducir la configuración de la interfaz de red de la máquina virtual, para ello editamos el archivo "interfaces" con la siguiente instruccion:
sudo vi /etc/network/interfaces |
La configuración de la interfaz eth0 debe de ser la siguiente:
auto eth0 iface eth0 inet manual ifconfig eth0 up |
Una vez realizados los cambios guardamos y reiniciamos la configuración con la siguiente instrucción:
sudo /etc/init.d/networking restart |
Con esto ya habríamos terminado de configurar snort y la interfaz.
Configuracion de port mirroring
Para configurar como SPAN el puerto 5 de nuestro switch cisco de la serie 2900XL y que se duplique el tráfico de la boca 7 a la boca 5 y así snort pueda analizar el tráfico, ejecutamos las siguientes instrucciones:
La última intrucción nos muestra los puertos que se están auditando:
Para configurar como SPAN el puerto 5 de nuestro switch cisco de la serie 2900XL y que se duplique el tráfico de la boca 7 a la boca 5 y así snort pueda analizar el tráfico, ejecutamos las siguientes instrucciones:
Switch>enable Switch#configure terminal Switch(config)#interface fa 0/5 Switch(config-if)#port monitor fa 0/7 Pulsamos ctrl+z Switch#show port monitor |
La última intrucción nos muestra los puertos que se están auditando:
Switch#show port monitor Monitor Port Port Being Monitored --------------------- --------------------- FastEthernet0/5 FastEthernet0/7 |
Probar Snort
Para comprobar que la tarjeta de red está capturando el tráfico que se genera en el puerto 7 (y que funciona el SPAN), me he instalado el wireshark y he realizado una captura por la interfaz eth0 en la máquina virtual. Viendo el origen de los paquetes compruebo que funciona bien. Esta comprobación es importante, porque podemos pensar que snort no funciona bien cuando en realidad la tarjeta no está capturando el tráfico.
Arrancamos el snort con la siguiente instrucción:
sudo /usr/local/snort/bin/snort -u snort -g snort -c /usr/local/snort/etc/snort.conf -i eth0 |
Lo siguiente es abrir el navegador en la máquina virtual y acceder a la dirección "http://localhost/snortreport-1.3.3/". Aquí vemos la interfaz gráfica de snort report (figura 11), que es el lugar donde se nos mostrarán las alertas detectadas.
Figura 11: interfaz snort report. |
Navegamos desde el pc conectado a la interfaz 7 e intentamos generar tráfico para que salte una alerta en el snort report. Podemos realizar escaneos de puertos, intentar hacer un POD (ping de la muerte), descargar el emule y ejecutarlo, entre otras cosas. La opción más sencilla es visitar la web testmyids. Esto hará que se nos muestre una alerta. Después de hacer estas cosas en la parte de la página web donde aparece "No Data" aparece un diagrama en forma de queso con un porcentaje con los tipos de alertas detectadas (figura 12).
Figura 12: alertas en snort report. |
Configurar el arranque de snort de forma automática
Para configurar el arranque automático editaremos el fichero rc.local con la instrucción:
sudo vi /etc/rc.local |
Y añadiremos al final del fichero las siguientes instrucciones:
ifconfig eth1 up /usr/local/snort/bin/snort -D -u snort -g snort \ -c /usr/local/snort/etc/snort.conf -i eth1 /usr/local/bin/barnyard2 -c /usr/local/snort/etc/barnyard2.conf \ -G /usr/local/snort/etc/gen-msg.map \ -S /usr/local/snort/etc/sid-msg.map \ -d /var/log/snort \ -f snort.u2 \ -w /var/log/snort/barnyard2.waldo \ -D |
Una vez guardados los cambios reiniciamos ejecutando la siguiente instrucción:
sudo /etc/init.d/rc.local start |
De esta forma si reiniciamos la máquina virtual, snort arrancará de form automática.
Estós son los pasos que he seguido para instalar este IDS de software libre, espero que no se me haya escapado nada, ahora que lo tengo instalado probaré a hacer más cosas con él y ya os iré contando. Si hay algún error o posible mejora estoy abierto a sugerencias :).
No hay comentarios:
Publicar un comentario