Suricata
Under construction
Suricata es un sistema de detección y prevención de intrusiones en la red, IDPS. Es un sistema de código abierto, desarrollado por una comunidad de seguridad informática.
Es un motor de alto rendimiento con una alta capacidad para examinar el tráfico de la red en tiempo real, es también capaz de identificar patrones maliciones y responder a amenazas en modo activo. Es un sistema versatilidad y potente que lo hacen muy popular en la protección de redes.
Un IDS previene y detecta, esto es, se mantiene a la escucha del tráfico de red, aplicando reglas y haciendo reconocimiento de patrones de atque para evitar ataques a la red.
Sirve de complemento de un firewall donde podemos tener abiertos puertos como por ejemplo: el 80 o 443 del servicio web y nos permitiría detectar intrusiones en el sistema.
Hay dos tipos de IDS:
Pasivo: permite registrar las intrusiones y manda alertas.
Activo: como el pasivo pero es capaz de bloquear las direcciones IP o cerrar puertos.
Modos activo y pasivo
Suricata tiene de los dos modos de funcionamiento: pasivo y activo. Veamos.
Modo activo
En este modo Suricata toma medidas inmediatas para prevenir o mitigar amenazas identificadas. bEs capaz de loquear conexiones, ejecutar acciones según las reglas de seguridad configuradas y enviar alertas al sistema.
El modo activo es vital para dar una respuesta rápida y en tiempo real a las amenazas. No obstante, puede afectar la entrega de servicios si no se configura correctamente.
Modo pasivo
En este modo, Suricata actúa como un simple observador. Va analizando el tráfico de red pero sin interferir en la entrega de datos. Es un modo interesante para la monitorización y la recopilación de información sobre posibles amenazas pero sin afectar el rendimiento del tráfico.
Es un enfoque útil en aquellos entornos de trabajo donde una intervención activa pudiera ser riesgosa o no está permitida.
Funcionamiento
Suricata, para su funcionamiento, usa una serie de técnicas que son las que le permiten el análisis del tráfico de la red y detectar actividades maliciosas. Para su funcionamiento requiere de:
Motor de reglas: Son reglas flexibles que permiten definir patrones y comportamientos específicos asociados con amenazas conocidas o comportamientos anómalos.
Análisis de protocolos: Analiza protocolos de red como es el caso de TCP, UDP, ICMP, así como HTTP y DNS. Examina el tráfico en busca de anomalías y patrones maliciosos.
Inspección de contenido: Puede realizar una inspección profunda del contenido del tráfico, identificando amenazas basadas en patrones de cadenas, exploits conocidos y firmas de malware.
Decodificación de protocolos: Es capaz de decodificar protocolos en capas, lo que significa que puede analizar y comprender el tráfico en diferentes niveles, desde la capa de red hasta la capa de aplicación.
Captura de archivos: Es capaz de apturar archivos transmitidos a través de la red para su análisis posterior. Esto es crucial para identificar y examinar posibles amenazas basadas en archivos maliciosos.
Instalación
La prueba de instalación de Suricata la vamos a hacer en un Ubuntu Server 22.04 al que previamente hemos actualizado:
La herramienta jq permite mostrar la información de la salida JSN de EVE de Suricata.
Una vez realizada la instalación, podemos comprobar la versión y el estado del servicio:
Configuración básica
Esta variable HOME_NET
debe incluir la dirección IP de la interfaz de red que queremos monitorizar, así como las redes locales en uso.
Vamos a acceder al directorio de configuración de suricata: /etc/suricata/ y hagamos una copia del archivo de configuración de Suricata, esto es:
A continuación, vamos a determinar la interfaz y la IP de red donde Suricata va a estar inspeccionando los paquetes de red:
Como se puede ver en el pantallazo anterior, el nombre de la interfaz es enp0s3
, por lo que debemos ir a la sección af-packet
del archivo /etc/suricata/suricata.yml
y modificar el nombre de la interfaz de red para que coincidan.
Esta configuración utiliza la configuración recomendada para ejecutar el modo IDS en configuraciones básicas. Existen otras opciones de configuración, específicas para configuraciones de alto rendimiento.
Reglas, firmas, alertas
Suricata utiliza reglas que permiten activar alertas. Por tanto, debemos instalar y actualizar dichas reglas. Para ello, podemos usar la herramienta siguiente para obtenerlas, actualizarlas y gestionarlas.
Nota: Recordad que solo estamos configurando el modo predeterminado, que obtiene el conjunto de reglas de ET Open.
Una vez hecho esto, tendremos instaladas las reglas en el directorio /var/lib/suricata/rules
y el archivo suricata.rules
. Por tanto, podemos reiniciar el servicio:
y tendremos suricata en ejecución
Y si queremos comprobar que Suricata está en ejecución podemos ver los logs:
Y veremos algo como lo siguiente:
Creando alertas
Si queremos probar que Suricata está usando la funcionalidad IDS , debemos usar una firma. Dicha firma tiene ID 2100498 y es la que corresponde al conjunto de reglas ET Open escrita específicamente para casos de prueba.
2100498:
Esto emitirá una alerta sobre cualquier tráfico IP que contenga el contenido en su carga útil. Esta regla se puede activar fácilmente pero antes de hacerlo, iniciamos tail
para ver las actualizaciones de fast.log
.
Testeando
Si queremos testear el funcionamiento de Suricata podemos hacer un curl a una web de testing y después visualizamos el contenido de los logs:
Más sobre las alertas
Me puedo descargar:
descomprimir y mover los archivos a: /var/lib/suricata/rules/
Crear un documento con las rules nuestras, por ejemplo:
Lo añadimos en default-rule-path en el /etc/suricata/suricata.yaml
Comprobando
Me falta ...
Firmas
Me falta ...
Prometheus
Prometheus es un conjunto de herramientas de código abierto que permite la monitorización de sistemas. Fue desarrollado originalmente en SoundCloud y desde su creación en 2012, numerosas empresas y organizaciones lo han adoptado. El proyecto cuenta con una comunidad de desarrolladores y usuarios muy activa y fue escrito en el lenguaje de programación Go
.
Para su funcionamiento Prometheus recopila y almacena métricas como datos de series temporales, esto es: se almacenan en la base de datos junto al instante de tiempo en el que el valor se ha registrado.
Estas métricas que almacena Prometheus dependen de la aplicación o del sistema que se vaya a monitorizar. Lo que vamos a monitorizar o medir varía según la aplicación o las necesidades. Si hablamos de un servidor web, serían los tiempos de solicitud; si se trata de una base de datos, puede ser el número de conexiones o consultas activas. También pudiéramos medir el uso de CPU, de la memoria, etc.
Las métricas resultan fundamentales para comprender por qué una aplicación funciona de un modo. Por ejemplo, pudiéramos querer saber por qué una aplicación web va lenta. Para ello necesitaríamos conocer si la aplicación se ralentiza cuando el número de solicitudes es alto. Tendríamos que disponer de una métrica de conteo de solicitudes.
En definitiva, toda la información recogida a través de las métricas nos facilitaría el diagnóstico de los errores en los servicios, en los sistemas o aplicaciones que se están monitorizando.
El ecosistema de Prometheus consta de múltiples componentes, muchos de los cuales son opcionales pero dispone de 3 fundamentales que son:
Servidor - que almacena los datos de las métricas. Es el servidor principal que extrae y almacena datos de series temporales.
Librería cliente - que sirve para calcular y exponer las métricas al cliente, para instrumentar el código de la aplicación.
Gestor de alertas - genera las alertas basadas en reglas.
Instalación
Para instalar, me bastó:
Aunque inicialmente no lo había instalado, sino que se instaló solo con Suricata. Podemos verificar que lo tenemos en escucha por el puerto 9090.
Por tanto, si tengo la VM en modo adaptador puente, puedo acceder al servicio a través de:
Directorio de trabajo
Tengo prometheus en la siguiente ubicación. Ahí es donde se encuentra el archivo de configuración: prometheus.yml.
Instalación y configuración del node_exporter
Este
node_exporter
es el agente que va a recopilar y envíar las métricas de nuestro servidor Ubuntu Server. Recopilará parámetros como CPU, RAM, sistema de archivos y estadísticas de la red.
Lo primero será crear el usuario de servicio "node_exporter”:
Una vez tenemos el archivo descargado en nuestro linux, lo vamos a descomprimir y copiar al directorio /usr/local/bin
:
Con el siguiente paso vamos a crear el servicio node_exporter
:
Guardamos, cerramos y reiniciamos los servicios para que tome la nueva configuración del systemd y luego volver a iniciar el servicio de node_exporter:
Podemos volver a comprobar que tenemos el servicio activo por el puerto 9100:
Para finalizar con esta parte de la configuración añadiremos el nuevo job node_exporter
al archivo de configuración prometheus.yml
:
Ahora deberíamos reiniciar el servicio “prometheus.service” y poder visualizar las métricas por la interfaz web:
Grafana
Para instalar grafana, hacemos:
Podemos verificar que tenemos el servicio activo escuchando por el puerto 3000:
Finalmente podremos acceder a la web de Grafana. Primero nos aparece un usuario y contraseña para el cual usamos las credenciales por defecto: user: admin, password: admin.
To be continued ...
Links
Suricata
Prometheus
Grafana
Last updated
Was this helpful?