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“.
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?
¿Entonces?
¡Vamos allá!
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”.
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!
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.
$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
}
# 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
}
[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:
Si tenéis dudas o podéis aportar mejoras, no dudéis en contactar conmigo.
Espero que os haya gustado.
Jordi