Splunk y Suricata, SIEM e IDS… ¡Pongamos orden!

Suricata y mis necesidades

Tras unas semanas “jugando” con mi IDS (post anterior) y cansado de excepcionar reglas “absurdas” que no aportan valor a mi red… He decidido atacar diferentes puntos débiles que he detectado a nivel de monitorización y explotación para conseguir mejorar mi IDS.

Tal y como vimos anteriormente, la gestión de Suricata (la que instalé yo, desconozco si existen otras distribuciones mejores) es engorrosa ya que se debe gestionar todo a nivel de consola. Esto significa que para analizar las alertas que saltan en el IDS tenemos que revisar el fichero “fast.log“, mientras que si queremos trazar o inspeccionar las conexiones en la red tenemos que mirar el fichero “eve.json“.

  • Gestión engorrosa y manual.
  • Echo en falta algún tipo de visualización grafica.
  • Pasa mucho tiempo entre que salta la alerta y la puedo gestionar…
  • Demasiada acción – reacción

Finalmente, y por primera vez en este blog, lo vamos a decir…

Y si mandamos las alertas y las conexiones hacia un SIEM… ¿Qué conseguiremos?

  1. Conseguiremos tener metados e indexados los logs del IDS.
  2. Podremos crear visualizaciones para monitorizar en tiempo real nuestra red.
  3. Podremos crear alertas en función de la criticidad de nuestros logs.

¿Entonces?

¡Vamos allá!

Splunk, te escojo a ti

Actualmente muchas compañías o empresas tienen muchos dilemas a la hora de escoger un SIEM para recopilar los logs de sus infraestructuras. Dilemas enfocados a nivel de presupuesto, enfocados en la visión o posición del producto en el mercado. 

En el mercado podemos encontrar diferentes SIEMs (open-source y de pago). Año tras año, Gartner presenta su cuadrante con los diferentes SIEMs disponibles en el mercado en función de su posicionamiento.

En mi caso, me gustaría apostar por un SIEM open-source… Pero la verdad es que he decidido apostar por Splunk.

Splunk no es open-source pero existe Splunk free para poder testearlo con un “limite de logs diarios”.

¿El motivo principal?

Nunca he utilizado Splunk y este está en boca de “todos”.

 

https://www.splunk.com/

Suricata in the SIEM

En este apartado veremos el resultado final de integrar nuestro IDS en el SIEM (en las últimas secciones de esta entrada se detallará técnicamente como se ha realizado la integración).

En la captura que podemos ver a continuación, podemos ver el aplicativo de Splunk (TA-Suricata) funcionando. Este aplicativo genera un conjunto de visualizaciones para identificar las firmas que saltan en nuestro IDS.

Nota: En las capturas no veremos el IDS tuneado, por eso es posible que veamos firmas “absurdas”.

 

Gráficamente  es mucho más intuitivo, podemos ver los diferentes campos del log parseados correctamente.

El hecho de tener parseados correctamente los logs, podemos decidir crear “alertas”, reports diarios o incluso alguna visualización “custom” para identificar eventos que “deben” ser tratados con más cariño…

A continuación, podemos ver un evento muy curioso de la IP (79.124.62.186) de Bulgaria hacía una IP interna mía… ¡Bastante mal rollo!

Analizando por la IP “atacante” en los logs de conexiones, he identificado un total de 428 logs apuntando hacía mi IP pública. En este sentido, puedo ver que el “atacante” estaba haciendo un escaneo general y estaba escaneando varios puertos míos…

En la siguiente captura, podemos ver los logs con la misma IP origen pero apuntando a mi IP pública (tachada).

¿Entonces qué ha pasado?

Analizando bien mi router, he visto que hacía tiempo había declarado un Virtual Host apuntando a un ordenador y un puerto en concreto. De manera que en el momento de hacer el escaneo, mi router ha redirigio la petición directa al ordenador en cuestión…

¡Visto y solucionado!

fast.log, eve.json y rsyslog

Para conseguir tener las alertas del IDS y los eventos de todas las conexiones en el SIEM, hemos necesitado configurar la recepción de logs en el Splunk junto con el envío de logs del IDS.

A continuación, veremos punto por punto.

  1. Tener el IDS configurado y funcionando.
    1.  Configurar el port-mirroring del router, para enviar una copia de todo el tráfico hacía el IDS.
    2. Revisar el post https://tardesdesiem.com/mi-primer-suricata/
    3. Mirar de forma manual los ficheros fast.log y eve.json para ver el contenido.
  2. Configurar rsyslog en Suricata para enviar las alertas hacia al SIEM.
    1. Crear fichero de configuración de rsyslog para leer el contenido de fast.log y enviarlo por TCP/UDP hacia el SIEM. En este caso enviaremos las alertas utilizando el puerto 9997 UDP.
      1. suricata_alert.conf
        # SEND SURICATA ALERTS TO SIEM

        $ModLoad imfile
        $InputFileName /var/log/suricata/fast.log
        $InputFileTag suricata_alert
        $InputFileStateFile suricata
        $InputFileSeverity info
        $InputFileFacility local7
        $InputRunFileMonitor

        :syslogtag, isequal, “suricata_alert” {
        local7.* @192.168.1.252:9997
        }

    2. Crear fichero de configuración de rsyslog para leer el contenido de eve.json y enviarlo por TCP/UDP hacia el SIEM. En este caso enviaremos las alertas utilizando el puerto 9998 UDP.
      1. suricata_con.conf

        # SEND SURICATA LOGS TO SIEM

        #$ModLoad imfile
        $InputFileName /var/log/suricata/eve.json
        $InputFileTag suricata_traps
        $InputFileStateFile state-suricata_traps
        $InputFileSeverity info
        $InputFileFacility local7
        $InputRunFileMonitor

        :syslogtag, isequal, “suricata_traps” {
        local7.* @192.168.1.252:9998
        }

  3. Configurar Splunk para recibir los diferentes logs.
    1. Configurar SPLUNK para recibir logs en los puertos 9997 y 9998:
          (Settings -> Forwarding and receiving -> Configure receiving).
    2. Configurar “Data Inputs”:
           (Settings – Data Inputs – TCP/UDP)
  4. Crear fichero props.conf  (Ejemplo de mi ruta de Splunk: /opt/splunk/etc/system/local/props.conf)
    1. Este fichero de configuración servirá para eliminar los “headers” de syslog en los logs eve.json, de esta manera Splunk parseará de forma automática los logs.
    2. Fichero de configuración:
          [suricata]
      SEDCMD-StripHeader = s/^[^\{]+//
      KV_MODE = json
      pulldown_type = true
      NO_BINARY_CHECK = 1
      TRUNCATE = 0
      TIME_PREFIX = timestamp":"
      TIME_FORMAT = %Y-%m-%dT%H:%M:%S.%6Q%z
      MAX_TIMESTAMP_LOOKAHEAD = 31
      LINE_BREAKER = ([\r\n]+)
      SHOULD_LINEMERGE = false

      Fichero de referencia:
      https://github.com/anthonygtellez/TA-Suricata/blob/master/default/props.conf

Notas interesantes:

  • No soy experto en Splunk, he encontrado estas soluciones y por el momento funcionan. Estoy evaluando su eficiencia y su comportamiento.
  • En mi caso las alertas de Suricata las he categorizado como “snort” en el SourceType.
  • Los logs .json con todas las conexiones los he categorizado como “suricata” en el SourceType.
  • He creado índices diferentes ya que los eventos .json son muchos (en 3-4 días tengo más de 3 millones de logs), (sé que un SIEM no se usa para guardarlo todo, pero en este caso es un índice controlado).
  • Ahora si, ahora será más fácil excepcionar y tunear reglas. ¡Veremos que se cuece!

Si tenéis dudas o podéis aportar mejoras, no dudéis en contactar conmigo.

Espero que os haya gustado.

Jordi

21/07/2021