Configurando Suricata como un Sistema de Prevención de Intrusiones (IPS)

Con la creciente popularidad de la ciberdelincuencia, es necesario que las empresas cuenten con una mejor protección contra los hackers. Un Sistema de Prevención de Intrusiones (IPS) es una de las mejores formas de defenderse contra los ataques informáticos. Pero antes de buscar en Internet un IPS, pruebe Suricata.

En este tutorial, aprenderá cómo configurar un IPS Suricata completamente funcional en un servidor Linux para proteger su red contra amenazas en línea.

¿Listo? ¡Siga leyendo y comience a proteger su red!

Prerrequisitos

Este tutorial será una demostración práctica. Si desea seguirlo, asegúrese de tener lo siguiente:

  • A Linux server – This demo uses Ubuntu 20.04 LTS, but any Linux distribution will work.
  • A non-root user with sudo privileges.
  • Dependiendo de la configuración de su red y cómo pretenda usar Suricata, es posible que necesite más o menos CPU y RAM para su servidor. En general, cuanto más tráfico planee inspeccionar, más recursos asignará a Suricata. En un entorno de desarrollo, planee utilizar al menos 2 CPUs y 8GB de RAM para comenzar, de modo que Suricata pueda realizar sus tareas sin comprometer la calidad del servicio para todos los usuarios.

Instalación de Suricata y adición del repositorio PPA.

Suricata no viene instalado por defecto en Ubuntu, pero instalar Suricata es similar a cómo instalas otros paquetes en tu sistema.

1. Ejecuta el comando apt update para actualizar los paquetes disponibles en tu sistema.

sudo apt update -y
Updating the list of available packages

2. A continuación, ejecuta el comando add-apt-repository para agregar el repositorio PPA mantenido por la Open Information Security Foundation (OISF). Al agregar el repositorio PPA, obtendrás la versión más reciente y estable de Suricata (ppa:oisf/suricata-stable).

sudo add-apt-repository ppa:oisf/suricata-stable
Adding the PPA repository for Suricata

3. Vuelve a ejecutar el comando sudo apt update para cargar el repositorio de Suricata recién agregado en el índice de paquetes de tu sistema.

sudo apt update -y

4. Ahora, ejecuta el comando sudo apt policy para verificar que hayas agregado correctamente el PPA de Suricata. Asegúrate de ver el PPA de Suricata en la lista como se muestra a continuación antes de instalar Suricata.

sudo apt policy
Running the sudo apt policy

5. Ejecuta el siguiente comando para instalar suricata en tu sistema.

sudo apt install suricata -y
Installing Suricata on your system

6. Una vez que la instalación se complete, ejecuta el siguiente comando systemctl status a continuación para verificar el estado del servicio suricata.

sudo systemctl status suricata

A continuación, puedes ver que el servicio Suricata está activo (en ejecución).

Checking the Suricata service status

Configuración de Suricata

El paquete Suricata incluye un archivo de configuración llamado suricata.yaml ubicado en el directorio /etc/suricata. Este archivo de configuración tiene muchos ajustes diferentes para otros casos de uso. Pero ten en cuenta que hay algunos ajustes en el archivo de configuración predeterminado que necesitas modificar antes de usar Suricata.

El modo predeterminado para Suricata es el modo de Detección de Intrusiones (IDS), que registra, pero no elimina ningún tráfico. Este modo se utiliza al configurar y familiarizarse con Suricata. Una vez que estés más cómodo con Suricata y entiendas mejor los tipos de tráfico sobre los que Suricata te alertará, puedes optar por activar el modo IPS.

Suricata añade un campo en su formato JSON (ID de flujo de comunidad). El ID de flujo de comunidad es un campo de 8 bytes que te permite correlacionar registros generados por otras herramientas. Esta característica es útil cuando se utiliza Suricata en conjunto con otras herramientas como Bro o Elasticsearch.

1. Abre el archivo /etc/suricata/suricata.yaml en tu editor de texto favorito.

Encuentra la línea que dice community-id: false y cámbiala por community-id: true. Guarda los cambios y sal del editor de texto.

Cada vez que examines eventos, verás el ID de flujo de la comunidad en su salida JSON.

Enabling Community ID

A continuación, ejecuta el siguiente comando para encontrar un dispositivo con una ruta predeterminada en tu sistema (route show default). La bandera -p le indica al comando ip que imprima el dispositivo de una manera legible para humanos, mientras que la bandera -j imprime la salida en JSON.

Suricata está configurado para capturar paquetes de cualquier interfaz de red disponible de manera predeterminada. Pero puedes cambiar este comportamiento y especificar una interfaz para que Suricata escuche cuando se inicie.

 ip -p -j route show default

Como ves a continuación, el parámetro dev especifica la interfaz que Suricata utilizará para capturar paquetes. En esta demostración, la interfaz es eth0, pero tu interfaz puede ser diferente, como tun0, wlan0, y así sucesivamente.

Previewing the Network Interface

Por último, abre el archivo de configuración /etc/suricata/suricata.yaml, localiza el parámetro interface bajo la sección af-packet y modifícalo en consecuencia. En esta demostración, se utiliza eth0 como la interfaz para capturar paquetes.

Guarda los cambios, pero mantén abierto tu editor de texto por ahora.

Editing the /etc/suricata/suricata.yaml configuration file

Configuración de la función de recarga de reglas en vivo

Has configurado Suricata, pero eso es solo el comienzo para proteger tu red. Típicamente, querrías agregar reglas sobre la marcha y recargar automáticamente las reglas. ¿Cómo? La función de recarga de reglas en vivo de Suricata te permite actualizar las reglas sobre la marcha. Como resultado, no necesitas reiniciar Suricata manualmente para que las nuevas reglas surtan efecto.

Abre el archivo /etc/suricata/suricata.yaml, copia/pega las siguientes directivas al final del contenido del archivo y guarda los cambios. Estas directivas te permiten habilitar la función de recarga de reglas en vivo.

Con esta configuración en su lugar, cuando edites/actualices tus conjuntos de reglas, los cambios surtirán efecto sin reiniciar el servicio de Suricata.

detect-engine:
  - rule-reload: true
Setting up the Live Rule Reloading

Ahora ejecuta el comando kill a continuación para notificar a tu proceso de Suricata ($(pidof suricata)) que actualice las reglas sin reiniciar.

El comando envía una señal definida por el usuario (-usr2) al ID de proceso especificado, luego Suricata realiza lo siguiente automáticamente:

  • Carga nueva configuración para actualizar variables y valores de reglas.
  • Carga nuevas reglas
  • Construye un nuevo motor de detección
  • Intercambia los motores de detección antiguos y nuevos
  • Asegúrate de que todos los hilos estén actualizados
  • Libera el motor de detección antiguo
sudo kill -usr2 $(pidof suricata)

Actualización de conjuntos de reglas de Suricata

La función de recarga de reglas en vivo está lista, pero no servirá a menos que actualices tus conjuntos de reglas. Por defecto, el paquete de Suricata tiene un conjunto de reglas limitado que solo detecta los protocolos de Internet más comunes ubicados en el directorio /etc/suricata/rules.

En este punto, recibirás un mensaje de error No se encontraron archivos de reglas que coincidan con el patrón, como el siguiente, cada vez que intentes iniciar y usar tu servicio Suricata. Este mensaje de error indica que no hay conjuntos de reglas para que Suricata los utilice.

Previewing Error Message when No Rulesets Exist

Para solucionar este error, proporciona archivos de reglas a tu instancia de Suricata. Afortunadamente, Suricata tiene una herramienta llamada suricata-update que te ayudará a obtener más conjuntos de reglas de proveedores externos.

1. Ejecuta el siguiente comando para obtener una actualización para tu instancia de Suricata.

sudo suricata-update

Como puedes ver a continuación, la salida indica que el comando suricata-update obtuvo las reglas conectándose a https://rules.emergingthreats.net/open/. Luego, el comando guarda las nuevas reglas en el directorio /var/lib/suricata/rules/.

La salida también imprime lo siguiente:

  • El número total (31737) de conjuntos de reglas
  • El número de reglas habilitadas (24355)
  • El número de reglas agregadas (31737)/eliminadas (0).
Updating Your Suricata Rulesets

A continuación, ejecuta el siguiente comando para listar todos los proveedores de conjuntos de reglas (list-sources).

El comando suricata-update obtiene conjuntos de reglas de muchos proveedores, incluidos proveedores gratuitos y comerciales.

sudo suricata-update list-sources

A continuación, puedes ver una pequeña parte de la lista. Toma nota de un nombre de conjunto de reglas del que quieras que Suricata obtenga conjuntos de reglas específicamente. Este tutorial obtiene conjuntos de reglas et/open para fines de demostración (paso tres).

Listing all ruleset providers

3. Ejecute el siguiente comando para obtener e incluir los conjuntos de reglas et/open en sus reglas de Suricata.

sudo suricata-update enable-source et/open
Fetching the et/open rulesets

Finalmente, vuelva a ejecutar el comando suricata-update para cargar el conjunto de reglas recién seleccionado.

sudo suricata-update

Validación de la Configuración de Suricata

Ha configurado Suricata e incluso ha agregado conjuntos de reglas, así que es hora de validar sus cambios y asegurarse de que todo funcione como se espera. El paquete de Suricata tiene un servicio de validación incorporado que le permite ver cualquier desviación de la configuración actual.

Ejecute el comando suricata a continuación para validar los cambios en el archivo de configuración de Suricata (-c /etc/suricata/suricata.yaml). El comando también muestra todos los mensajes de validación (-v).

La bandera -T le indica a Suricata que se ejecute en “modo de prueba” y “modo descendente”. Ambos modos tienen reglas más estrictas para coincidir con los paquetes y es menos probable que generen falsos positivos.

sudo suricata -T -c /etc/suricata/suricata.yaml -v

Dado que Suricata es un cortafuegos altamente configurable, la prueba puede tardar varios minutos en completarse. Si no hay errores, verá una salida similar a la siguiente que muestra un mensaje completo.

Validating Your Suricata Configuration: complete

Si su archivo de configuración tiene errores similares a los que se muestran a continuación, Suricata imprimirá cada error, indicando las líneas específicas que causan problemas. Si obtiene estos errores, corrija cada problema de configuración uno por uno hasta que la validación sea exitosa.

Validating Your Suricata Configuration: errors

Prueba de las Reglas de Suricata

Ahora que tus archivos de configuración de Suricata están validados, puedes ejecutar Suricata para ver si están funcionando correctamente. Utilizarás Suricata para probar el ET Open (2100498) con el comando curl para detectar actividad/tráfico sospechoso.

En este momento, tu instancia de Suricata tiene más de 30,000 reglas que Suricata obtuvo de varios conjuntos de reglas. Por lo tanto, una prueba completa de todas las reglas con su explicación no cabrá en este tutorial.

1. Ejecuta el comando curl a continuación para generar algo de tráfico/solicitudes HTTP/actividades desde el sitio web TestMyNIDS. TestMyNIDS es un proyecto de aprendizaje electrónico dedicado a apoyar pruebas, validación y comparación de NIDS. El sitio web proporciona una plataforma única para el análisis comparativo de NIDS y herramientas relacionadas.

Puedes usar este sitio web para probar cualquier actividad/tráfico sospechoso para ver si tu conjunto de reglas configurado está funcionando como se espera.

curl http://testmynids.org/uid/index.html

Los datos de respuesta están diseñados para activar una alerta falsa pretendiendo ser un usuario root de Linux/Unix. Y este usuario root está en un sistema que podría estar comprometido.

Testing Your Suricata Rules

A continuación, ejecuta el comando grep a continuación para examinar el archivo fast.log en el directorio /var/log/suricata/ en busca de un mensaje de alerta coincidente 2100498. Este comando verifica el archivo de registro para alertas de usuario.

Además del archivo fast.log, otro archivo de registro al que debes prestar atención es el eve.log en el mismo directorio.

grep 2100498 /var/log/suricata/fast.log

Verás una salida similar a la siguiente que muestra la dirección IPv4 pública de tu sistema.

Examining the fast.log file

3. Ahora, ejecuta el comando jq a continuación para examinar el archivo eve.log. El archivo eve.log también se utiliza para registrar eventos, pero en formato JSON (/var/log/suricata/eve.json). Son los archivos eve.json y fast.log a los que harás referencia para el tráfico sospechoso y los intentos bloqueados. Una vez encontrados, toma las medidas necesarias.

jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json

A continuación, puedes ver “signature_id”: 2100498 en la salida, que es el ID de firma de alerta que especificaste en el comando.

También puedes ver el “community_id”: “1:ETRbv54GHTVCayHTUR5OIovK4gh2=” en la salida, que es el ID de Flujo de Comunidad que configuraste en el archivo /etc/suricata/suricata.yaml.

Este community_id es útil cuando utilizas Suricata en conjunto con otras herramientas como Elasticsearch para obtener un completo “stack de monitoreo de seguridad” a un costo razonable.

Examining the eve.log file

Conclusión

A lo largo de este tutorial, has aprendido cómo instalar y configurar Suricata con conjuntos de reglas para proteger tu red. También has pasado por la prueba para verificar si los conjuntos de reglas están funcionando al generar tráfico en tu red.

En este punto, Suricata está funcionando perfectamente con tu conjunto de reglas personalizado para detectar actividades/tráfico sospechosos en tu red.

Claro, ¿por qué no construir sobre este conocimiento recién adquirido? Tal vez comenzar con instalar y configurar Suricata, Zeek, la pila Elasticsearch para establecer un completo “conjunto de monitoreo de seguridad”.

Source:
https://adamtheautomator.com/suricata/