Introducción
Los tutoriales anteriores en esta serie te guiaron sobre cómo instalar y configurar Suricata. También explicaron cómo usar Filebeat para enviar alertas desde tu servidor Suricata a un servidor Elastic Stack, para ser utilizado con su funcionalidad integrada de Seguridad de la Información y Gestión de Eventos (SIEM).
En este último tutorial de la serie, crearás reglas personalizadas de Kibana y generarás alertas dentro de los paneles SIEM de Kibana. Una vez que tengas reglas en su lugar y comprendas dónde y cómo filtrar los registros de Suricata usando Kibana, explorarás cómo crear y gestionar casos usando las herramientas de análisis de líneas temporales de Kibana.
Al final de este tutorial, tendrás un sistema SIEM que puedes usar para rastrear e investigar eventos de seguridad en todos los servidores de tu red.
Prerrequisitos
Si has estado siguiendo esta serie de tutoriales, deberías tener ya un servidor con al menos 4GB de RAM y 2 CPUs, y un usuario no root configurado. Para los propósitos de esta guía, puedes configurarlo siguiendo nuestras guías de configuración inicial de servidor para Ubuntu 20.04, Debian 11, o Rocky Linux 8, dependiendo de tu sistema operativo preferido.
También necesitarás tener Suricata instalado y funcionando en tu servidor. Si necesitas instalar Suricata en tu servidor, puedes hacerlo siguiendo uno de los siguientes tutoriales dependiendo de tu sistema operativo:
- Ubuntu 20.04: Cómo instalar Suricata en Ubuntu 20.04
- Debian 11: Cómo instalar Suricata en Debian 11
- Rocky Linux 8: Cómo instalar Suricata en Rocky Linux 8
También necesitarás un servidor ejecutando el Elastic Stack y configurado para que Filebeat pueda enviar registros desde tu servidor Suricata a Elasticsearch. Si necesitas crear un servidor Elastic Stack, utiliza uno de los tutoriales de la siguiente lista que coincida con tu sistema operativo:
- Ubuntu 20.04: Cómo construir un sistema de Gestión de la Información y Eventos de Seguridad (SIEM) con Suricata y la pila Elastic en Ubuntu 20.04
- Debian 11: Cómo construir un sistema de Gestión de la Información y Eventos de Seguridad (SIEM) con Suricata y la pila Elastic en Debian 11
- Rocky Linux 8: Cómo construir un sistema de Gestión de la Información y Eventos de Seguridad (SIEM) con Suricata y la pila Elastic en Rocky Linux 8
Asegúrese de poder iniciar sesión en Kibana en su servidor Elasticsearch y de que haya eventos en los diferentes paneles de alertas y eventos de Suricata.
Una vez que tenga todos los requisitos previos en su lugar, abra un túnel SSH a su servidor Kibana e inicie sesión en Kibana con su navegador utilizando las credenciales que generó en el tutorial anterior.
Paso 1 — Habilitar claves API en Elasticsearch
Antes de poder crear reglas, alertas y líneas de tiempo en Kibana, necesitas habilitar un ajuste del módulo de seguridad xpack
.
Abre tu archivo /etc/elasticsearch/elasticsearch.yml
con nano
o tu editor preferido.
Agrega la siguiente línea resaltada al final del archivo:
. . .
discovery.type: single-node
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
Guarda y cierra el archivo cuando hayas terminado de editarlo. Si estás usando nano
, puedes hacerlo con CTRL+X
, luego Y
y ENTER
para confirmar.
Ahora reinicia Elasticsearch para que el nuevo ajuste surta efecto.
Ahora estás listo para configurar reglas, examinar alertas y crear líneas de tiempo y casos en Kibana.
Paso 2 — Agregar Reglas a Kibana
Para utilizar la funcionalidad SIEM de Kibana con datos de eventos de Suricata, necesitarás crear reglas que generen alertas sobre eventos entrantes. Visita el Tablero de Reglas en la página de la aplicación de seguridad de Kibana para crear o importar reglas.
Para los fines de este tutorial, utilizaremos las siguientes firmas para detectar tráfico dirigido a un servidor en puertos no coincidentes (tráfico SSH, HTTP y TLS respectivamente):
alert ssh any any -> 203.0.113.5 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000000;)
alert ssh any any -> 2001:DB8::1/32 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000001;)
alert http any any -> 203.0.113.5 !80 (msg:"HTTP REQUEST on non-HTTP port"; classtype:misc-activity; sid:1000002;)
alert http any any -> 2001:DB8::1/32 !80 (msg:"HTTP REQUEST on non-HTTP port"; classtype:misc-activity; sid:1000003;)
alert tls any any -> 203.0.113.5 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; classtype:misc-activity; sid:1000004;)
alert tls any any -> 2001:DB8::1/32 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; classtype:misc-activity; sid:1000005;)
Si estás utilizando tus propias firmas, o aquellas de un conjunto de reglas, asegúrate de poder generar alertas y de poder acceder a los eventos correspondientes en los paneles de control de Suricata por defecto en Kibana.
Ahora visita la página de Reglas en la aplicación de Seguridad de Kibana http://localhost:5601/app/security/rules/. Haz clic en el botón Crear nueva regla en la esquina superior derecha de la página.
Asegúrate de que esté seleccionada la tarjeta del tipo de regla Consulta personalizada. Desplázate hasta el campo de entrada de Consulta personalizada y pega lo siguiente en él:
rule.id: "1000000" or rule.id :"1000001"
Asegúrate de que los valores de rule.id
coincidan con el valor sid
de Suricata para el ataque o ataques sobre los que deseas recibir alertas.
Cambia la lista desplegable de Vista previa rápida de consulta a Último mes y luego haz clic en Previsualizar resultados. Suponiendo que tengas eventos coincidentes en tus registros de Suricata, la página se actualizará con un gráfico que muestra alertas del último mes. Tu página debería parecerse a la siguiente captura de pantalla:
Haz clic en Continuar para proceder a agregar un nombre al campo Nombre de la regla, lo cual es necesario para cada regla que agregues. Agrega un nombre al campo Nombre de la regla. En este ejemplo, usaremos la descripción del mensaje de la regla de Suricata TRÁFICO SSH en un puerto no SSH
. Agrega también una descripción para la regla. En este ejemplo, usaremos Comprobar intentos de conexión SSH en puertos no estándar
.
También puedes expandir la sección de Configuraciones avanzadas y agregar detalles sobre la regla. Por ejemplo, podrías agregar una explicación sobre cómo manejar una alerta generada por la regla, o enlazar a artículos de investigadores de seguridad sobre un tipo de ataque en particular.
Cuando hayas terminado de agregar el nombre de la regla, la descripción y campos adicionales opcionales, haz clic en Continuar para proceder al Paso 3 de la creación de la regla.
Deja la configuración de la siguiente sección Programar regla con sus valores predeterminados y haz clic en Continuar.
Finalmente, en el paso Acciones de la regla, haz clic en Crear y activar regla.
Serás redirigido a una nueva página que muestra detalles sobre la regla:
Nota: Puede tardar unos minutos en que los datos de alerta se poblacen al principio. Esta demora se debe a que el horario predeterminado de la regla es ejecutarse cada 5 minutos.
Si hay otras reglas de Suricata sobre las que te gustaría recibir alertas, repite los pasos anteriores, sustituyendo el sid
de la firma en el campo de consulta personalizada rule.id
de Kibana.
Una vez que tengas una o varias reglas en su lugar, estás listo para proceder al siguiente paso donde examinarás las alertas y crearás un caso o casos para gestionarlas.
Paso 3 — Creación de una línea de tiempo para rastrear las alertas relacionadas con el tráfico SSH
Ahora que tiene una regla o reglas configuradas para generar alertas en la aplicación SIEM de Kibana, necesitará una forma de agrupar y gestionar aún más esas alertas. Para comenzar, visite el panel de alertas de Kibana: http://127.0.0.1:5601/app/security/alerts.
Asegúrese de haber generado algún tráfico inválido que coincida con la firma o firmas de Suricata que está utilizando. Por ejemplo, podría activar la regla de Suricata de ejemplo sid:1000000
ejecutando un comando como el siguiente desde su máquina local:
Este comando intentará conectarse a su servidor utilizando SSH en el puerto 80, en lugar del puerto predeterminado 22 y debería generar una alerta. Puede tomar algunos minutos para que la alerta aparezca en Kibana, ya que debe ser procesada por Elasticsearch y la regla que creó en Kibana.
A continuación, agregará el campo comnunity_id
a la tabla de alertas que se muestra en la parte inferior de la página. Recuerde del primer tutorial que este campo es generado por Suricata y representa las direcciones IP únicas y los puertos contenidos en un flujo de red. Haga clic en el botón Campos y en el cuadro de diálogo modal que aparece, ingrese network.community_id
y luego marque la casilla junto al nombre del campo:
Cierre el modal y el campo se agregará a la tabla de alertas. Ahora, coloque el puntero sobre cualquiera de las alertas que tengan el mismo valor de community_id
y haga clic en el icono Agregar a la investigación de la línea de tiempo. Esto asegurará que todas las alertas que compartan el community_id
que Suricata agregó al evento se agreguen a una línea de tiempo para una investigación adicional:
A continuación, haz clic en el enlace Untitled Timeline en la parte inferior izquierda de tu navegador. Este enlace te llevará a una página que solo muestra alertas con el campo community_id
de Suricata que deseas investigar.
La página de la línea de tiempo te muestra más detalles sobre los paquetes individuales asociados con una alerta o flujo de red. Puedes utilizar la línea de tiempo para tener una mejor idea de cuándo comenzó un flujo de red sospechoso, de dónde se originó y cuánto tiempo duró.
Haz clic en el botón All data sources en el lado derecho de la página y selecciona el botón Detection Alerts, luego haz clic en Guardar. Esta opción restringirá la línea de tiempo para mostrar solo las alertas que genera Kibana. Sin esta opción, las alertas de Suricata también se incluirán en la línea de tiempo.
Para guardar tu nueva línea de tiempo, haz clic en el ícono de lápiz en la parte superior izquierda de la página de la línea de tiempo. La siguiente captura de pantalla resalta dónde encontrar el ícono de lápiz y el botón All data sources:
Puedes agregar texto al campo de descripción si hay información adicional que deseas agregar a la línea de tiempo. Una vez que hayas terminado de editar el nombre y la descripción de la línea de tiempo, haz clic en el botón Guardar en la parte inferior derecha del cuadro de diálogo modal.
Repite los pasos anteriores para crear líneas de tiempo para otras alertas que desees examinar más detenidamente más tarde.
En el siguiente paso, utilizarás tus vistas de línea de tiempo de eventos para adjuntar alertas a la aplicación Casos de Kibana en el conjunto de herramientas de SIEM.
Paso 4 — Creación y Gestión de Casos SIEM
En el paso anterior, creaste una línea de tiempo para agrupar alertas individuales y paquetes según el campo community_id
de Suricata. En esta sección del tutorial, crearás un Caso para rastrear y gestionar las alertas en tu línea de tiempo.
Para crear un nuevo caso desde tu línea de tiempo, asegúrate de estar en una página de línea de tiempo en tu navegador. Haz clic en el botón Adjuntar al caso en la parte superior derecha de la página de la línea de tiempo, y luego en el botón Adjuntar a un nuevo caso de la lista que aparece.
Serás redirigido a una página donde podrás ingresar información sobre el incidente que estás investigando. En la siguiente captura de pantalla de ejemplo, el caso es nuestro ejemplo de Alertas de Tráfico SSH en un puerto no SSH:
Rellena los campos con un nombre descriptivo y una etiqueta opcional o etiquetas. En este ejemplo, el nombre del caso es TRÁFICO SSH en puerto no SSH desde 203.0.113.5
ya que es el tipo específico de tráfico y host que estamos investigando. Con muchos eventos para investigar en tu sistema SIEM, un esquema de nombres como este te ayudará a realizar un seguimiento de casos, líneas de tiempo y alertas, ya que el nombre corresponderá a la alerta de Kibana y al campo de mensaje de la firma de Suricata.
Desplázate hasta la parte inferior de la página y haz clic en el botón Crear caso. Tu navegador estará en una página que muestra el caso guardado. Puedes agregar comentarios en formato Markdown con información adicional, así como editar el caso desde esta página.
A continuación, haz clic en el enlace en la descripción para ir a la línea de tiempo del caso que agregaste en el paso anterior de este tutorial.
Para cada alerta que desees incluir en el caso, haz clic en el icono Más acciones en la alerta. Haz clic en Agregar al caso existente.
Haz clic en el nombre del caso en el modal que aparece para agregar la alerta al caso. Asegúrate de seleccionar el caso que corresponde a la línea de tiempo y alertas que estás investigando. Repite agregando cada alerta de la lista al caso existente.
Ahora visita la aplicación Casos nuevamente en Kibana usando el menú de navegación en el lado izquierdo de la página. Haz clic en tu caso y nota cómo las alertas que agregaste están listadas en los detalles del caso:
Desde aquí, puedes desplazarte hasta la parte inferior del caso y agregar cualquier información adicional que desees. Por ejemplo, cualquier paso que hayas tomado para investigar una alerta o alertas, cambios de configuración en Suricata como una regla nueva o editada, escalada a otro miembro del equipo o cualquier otra cosa relevante para el caso.
Una vez que te sientas cómodo/a con la creación de casos para los diferentes tipos de alertas que deseas seguir, ahora puedes usar las herramientas SIEM de Kibana para organizar y coordinar la investigación de cualquier alerta en un lugar central.
Conclusión
En este tutorial, ampliaste tu sistema SIEM existente de Suricata y Elastic Stack agregando reglas a Kibana que generan alertas sobre tráfico específico de interés. También creaste una línea de tiempo o varias líneas de tiempo para agrupar conjuntos de alertas basadas en su community_id
. Finalmente, creaste un caso y vinculaste tu línea de tiempo a él, junto con las alertas individuales de interés.
Con este sistema SIEM en su lugar, ahora puedes rastrear eventos de seguridad en tus sistemas casi a cualquier escala. A medida que te familiarices más con Suricata y rastrees las alertas que genera en tu SIEM de Kibana, podrás personalizar las alertas de Suricata y las acciones predeterminadas que toma para adaptarlas a tu red particular.
Para obtener más información sobre las herramientas SIEM de Kibana, visita la Documentación oficial de Elastic Security. Las guías allí explican cómo utilizar Reglas, Alertas, Líneas de tiempo y Casos con mucho más detalle.
Para una interfaz SIEM más liviana, también puede interesarte EveBox, que presenta todos los datos de eventos de Suricata y la funcionalidad SIEM en una sola página.