Shutterstock 432008905

Implementación automatizada de Snort IDS/IPS con Snorter – Parte I


Img 20190207 131921
Sheyla Leacock

Hace un tiempo atrás escribí un artículo sobre los conceptos de Sistemas de detección y prevención de Intrusos. Si eres nuevo en el tema, te recomiendo que pases por ese artículo antes de proseguir con éste.

 

Enlace: https://backtrackacademy.com/articulo/que-es-un-sistemas-de-deteccion-y-prevencion-de-intrusos-ids

 

La finalidad de este artículo es llegar a una implementación rápida y sencilla de un IDS/IPS. Empecemos.

 

¿Qué es Snorter?

Snorter es un script que facilita la puesta en marcha de Snort, un sistema de detección de intrusos basado en red, así como de otras herramientas complementarias. Snort suele ser algo complicado de implementar de forma manual ya que se deben instalar muchas librerías y hacer muchas configuraciones, de igual manera al instalar las heramientas complementarias. Snorter funciona oficialmente en distribuciones Debian, Kali Linux, Ubuntu y Raspberry Pi.

He realizado la implementación en Kali Linux, Ubuntu, Opensuse y Fedora, siendo en Fedora la instalación más rápida y fácil a comparación de las distribuciones previamente mencionadas.

 

 

¿Qué hace realmente Snorter?

Pues este Script que puedes ejecutar desde la línea de comandos, te ayudará a instalar y configurar todo lo necesario para que puedas poner en marcha tu propio IDS/IPS de una forma mucho más sencilla.

Snorter instala las siguientes herramientas:

  • Snort
  • DAQ
  • Pulledpork
  • Barnyard2
  • WebSnort

 

Antes de comenzar con la implementación, conozcamos un poco mejor cada una de éstas herramientas y su funcionamiento.

 

Snort: Es el sistema de detección y prevención de intrusos basado en red (NIDPS) más utilizado en todo el mundo, y pionero en los conceptos de IDS/IPS desde el cual, se han derivado todos los demás, incluso algunos IDPS actuales utilizan Snort como su motor de detección.

Snort es Opensource, con la capacidad de realizar análisis de tráfico de red en tiempo real y permite almacenar logs de los datos. Posee extensa documentación en su sitio web oficial www.snort.org y una gran comunidad que aporta para la mejora continua de este IDPS.

 

DAQ: Acrónimo de librería de adquisición de datos, es una librería que utiliza Snort para el manejo de la entrada y salida de los paquetes desde el kernel, en vez de copiarlos al espacio usuario como se solía hacer en versiones anteriores de Snort. Esta librería fue incluida a partir de las versiones

2.9.x de Snort. DAQ hace que los llamados a las funciones de otras librerías sean independientes del hardware o software y que no requiera realizar cambios a Snort.

 

Pulledpork: Es un Script escrito en perl para la automatización de las reglas de Snort. Permite realizar automáticamente la descarga y actualización de las reglas en la ruta que se le indique, además de modificar el estado de las reglas, es decir, habilitarlas, deshabilitarlas o eliminarlas.

 

Barnyard2: Es un intérprete y conversor de archivos de salida binarios, como los archivos u2 (unified 2) que arroja Snort. Banryard2 es Opensource, permite que podamos exportar las alertas generadas por Snort en cualquier base de datos que soporte barnyard2. Esto hace que Snort se desligue del proceso de conversión de data y de escritura en base de datos y se dedique plenamente al análisis del tráfico de la red.

 

WebSnort: Es un servicio web que permite subir archivos de alertas en formato pcap para que sean analizados por los IDPS y que devuelve como resultado el detalle del análisis y las alertas arrojadas por el IDPS, mediante una interfaz amigable y de fácil lectura para el usuario.

Websnort permite que los archivos puedan subirse mediante la interfaz web o mediante consola utilizando su API.

 

Aunque originalmente websnort fue desarrollado para Snort, se ha hecho flexible para ser utilizado con otros IDPS.

 

Ahora sí, comencemos con la implementación.

 

La instalación se realizó en Fedora 28 virtualizado sobre Opensuse Leap 15.1.

 

Al trabajar con un IDS o IPS es importante tener en cuenta el espacio en disco que puede utilizar para el almacenamiento de los logs de alertas y la memoria RAM que puede consumir con el análisis de todo el tráfico que pase por la red.

 

En caso de implementar Snort en un entorno virtualizado, como éste caso, el adaptador de red debe estar configurado como adaptador puente. En caso de querer que snort se comporte como IPS, debe activarse el modo promiscuo. Debemos tener en cuenta que es necesario utilizar una dirección IP estática.

 

Luego de tener nuestro sistema Fedora andando, lo primero que debemos hacer es instalar las librerías necesarias para correr adecuadamente Snort y las otras herramientas que instalaremos.

 

 

gcc, gcc-c++ (compilador de C y C++ para linux),

flex, bison (generadores de analizadores sintácticos y léxicos), vim (para edición de texto),

libpcap.*, libpcap-devel (librerías para el manejo de paquetes de red en formato pcap), pcre.*, pcre-devel (librerías para el manejo de expresiones regulares),

git (herramienta para administración de repositorios y control de versiones) libdnet-devel (librerías para el manejo de rutinas de red a bajo nivel),

libtirpc-devel (librerías de soporte para el uso de APIs con llamados a procedimientos remotos), zlib-devel (librerías para la compresión de datos).

Tcpdump (para el monitoreo del tráfico de red).

 

 

Ahora, realizaremos el clon del repositorio github de Snorter en nuestro entorno local con el comando git clone  (https://github.com/joanbono/Snorter.git)

 

 

Además, necesitaremos posicionarnos en la carpeta Snorter/src y editar la línea 53 del archivo snorter.sh, donde agregaremos el parámetro –disable-open-appid.

 

 

OpenAppID es un plugin para detección a nivel de aplicación y estadísticas de uso.

 

Nos permite identificar mediante parámetros URL (facebook.com, gmail, minecraft), detectar aplicaciones maliciosas, limitar el uso de aplicaciones, establecer controles adicionales (doble factor de autenticación), entre otras funcionalidades.

 

En este caso estamos desactivando la utilización de este plugin.

 

Una vez instaladas las libreras y realizadas las configuraciones nos dirigimos a la carpeta donde clonamos Snorter y ejecutamos el comando de instalación:

 

  • bash Snorter.sh -o <‘oinkcode’> -i ‘interfaz’.

 

Es recomendable ejecutar snorter con un oinkcode generado al registrarnos en Snort. El oinkcode es una llave asociada a nuestro registro que funciona como api para descargar las reglas de snort. En caso de no tener oinkcode, debemos descargar por separado las reglas comunitarias.

 

El comando -o indica que ingresaremos el oinkcode asociado, en caso de no tenerlo, ejecutemos Snorter sin este comando.

 

Con el comando -i indicamos cual será la interfaz de red sobre la cual queremos que Snort realice el monitoreo.

 

Cuando termine de instalar snort nos solicitará editar los datos más importantes del archivo de configuración de snort necesarios para el funcionamiento, como lo son las variables de la red interna: “HOME_NET” (la que queremos proteger) y la red externa “EXTERNAL_NET”.

 

 

osteriormente nos solicita elegir el formato de salida para los archivos de alerta binarios en formato unified2. Podemos elegir la opción 2 para TCPdump o la opción 3 para TCPdump y CSV.

 

Después de esto, se ejecutará Snort en modo de prueba para validar la configuración.

 

Anteriormente Snorter escribió una regla en el archivo de reglas locales que alertará cualquier tráfico ICMP generado, la que usará en el proceso de prueba de snort.