Sitio para la difusión de conocimiento informático. 

Twitter RSS

Integrando Dispositivos de Red a Prelude SIEM

Integrando Dispositivos de Red a Prelude SIEM

 

En esta publicación veremos un resumen sobre como debemos agregar un nuevo dispositivo de red a Prelude.

Prelude utiliza el agente Prelude-LML para recibir eventos. Este proceso lee archivos syslog según un formato definido en el archivo de configuración prelude-lml.conf, para así obtener la fecha y hora, nombre del dispositivo que reportó el evento, o número de proceso, etc.
Una vez que lee los mensajes que llegan al syslog, se procede a buscar una coincidencia mediante una expresión regular definida en el archivo ruleset/pcre.rules. Encontrada una coincidencia, el mensaje será analizado contra expresiones regulares definidas para este tipo de mensajes syslog y determinar si es necesario generar una alerta. Ej. de esta forma los mensajes que correspondan a un firewall cisco serán analizados con las reglas defindas en ruleset/cisco-asa.rules.

Índice
1.1 – Definir un nuevo formato Syslog.
2.1 – Definir nuevas reglas en pcre.rules.
3.1 – Crear nuevas reglas para generar alertas.
4.1 – Ejemplo Cisco ASA
5.1 – Ejemplo Fortigate
6.1 – Ejemplo IBM DataPower xG45

 

1.1 – Definir un nuevo formato Syslog.

 

Por defecto prelude-lml procesará los archivos monitoreados con el formato por defécto de syslog. En caso de que este formato no se ajuste al tipo de mensaje deseo analizar, debemos definir este nuevo formato en el archivo “/etc/prelude-lml/prelude-lml.conf”.

En este archivo definiremos com Prelude-LML debe obtener la siguiente información de nuestros mensajes:
– hostname
– process
– pid
– timestamp

 

Para esto definiremos las expresiones regulares (PCRE: www.pcre.org) en los prefijos del mensaje correspondiente a log. El caso de un formato Syslog estandar es el siguiente:
[format=syslog]
time-format = “%b %d %H:%M:%S”
prefix-regex = “^(?P<timestamp>.{15}) (?P<hostname>\S+) (?:(?P<process>\S+?)(?:\[(?P<pid>[0-9]+)\])?: )?”
file = /var/log/file.log

De esta forma se define el formato “syslog”, con un formato de fecha y hora “time-format”, y expresiones regulares en los prefijos del mensaje “prefix-regex”. Ej. “Sep 22 03:14:32 prelude-siem rsyslogd…”.

 

Veamos un caso de ejemplo para los firewall Cisco ASA:

Log ej: “Sep 2 03:28:11 2.8.1.4 Mi-Firewall %ASA-4-106023: Deny icmp src inside:2.0.1.4 dst outside:12.18.0.2 (type 8, code 0) by access-group “acl_inside””.

[format=asa]
time-format = “%b %d %H:%M:%S”
prefix-regex = “^(?P<timestamp>.{15}) ([\d\.]+) (?P<hostname>\S+) (?:(?P<process>\S+?)(?:\[(?P<pid>[0-9]+)\])?: )?”
file = /var/log/firewall.log

El formato es casi el mismo solo que indicamos que entre el “time-format” y el “hostname”, se encuentra un número separado por puntos (la IP). Así el campo “hostname” coincide con el nombre del dispositivo y no con su IP. Esto es de ayuda ya que al momento de analizar la alerta veremos el nombre del dispositivo y no su IP.

 

 

2.1 – Definir nuevas reglas en pcre.rules.

 

Habiendo definido el formato de nuestro mensaje podemos comenzar a crear las reglas que generarán las alertas correspondientes. Pero antes de esto debemos indicar que reglas serán analizadas para este formato de mensaje de log.

Para esto crearemos una expresión regular en el archivo “/etc/prelude-lml/ruleset/pcre.rules”, mediante la cual indicaremos que archivo contiene las reglas que generarán una alerta en caso de coincidencia.

Siguiendo con el ejemplo de firewalls Cisco debemos escribir una expresión regular que coincida únicamente con este tipo de mensajes para que sean analizados por el archivo que contiene las reglas para cisco asa. Para esto podemos usar la sección del log que tiene esta cadena de caracteres: “ASA-4-106023”, y así agregar la siguiente expresión regular al archivo “pcre.rules”:

regex=%\S+-\d+-\S+:;      include = cisco-asa.rules;

esta otra expresión regular también es válida:
regex=-\S+:;                            include = cisco-asa.rules;

De esta forma los mensajes correspondientes a los firewall cisco ASA serán analizados por las reglas contenidas en nuestro archivo “cisco-asa.rules”, en busca de una coincidencia para generar una alerta.

 

 

3.1-  Crear nuevas reglas para generar alertas.

 

Ya definimos el formato de los mensajes e identificamos los mensajes que corresponden a el dispositivo de red que deseamos agregar, ahora debemos escribir las reglas para generar una nueva alerta.

Siguiendo con el ejemplo de los firewall cisco ASA creamos el archivo “/etc/prelude-lml/ruleset/cisco-asa.rules”, y comenzamos a definir nuestras reglas. A continuación veremos un ejemplo:

Mensaje syslog que disparará una alerta: “Apr 10 15:40:15 12.18.1.2 xxx %ASA-4-419002: Duplicate TCP SYN from outside:xx.xx.xx.xx/xxx to inside:xx.xx.xx.xx/xxxx with different initial sequence number”.

regex=-419002: Duplicate TCP SYN from (\S+):([\d\.]+)/(\d+) to (\S+):([\d\.]+)/(\d+); \
classification.text=Duplicate TCP SYN; \
classification.reference(0).origin=vendor-specific; \
classification.reference(0).meaning=asa_id; \
classification.reference(0).name=419002; \
classification.reference(0).url=http://www.cisco.com/en/US/docs/security/asa/asa70/system/message/logmsgs.html#wp1279756; \
id=511; \
revision=1; \
analyzer(0).name=ASA; \
analyzer(0).manufacturer=Cisco; \
analyzer(0).class=Firewall; \
assessment.impact.severity=medium; \
assessment.impact.description=Duplicate TCP SYN with different initial sequence number.; \
source(0).interface=$1; \
source(0).node.address(0).category=ipv4-addr; \
source(0).node.address(0).address=$2; \
source(0).service.port=$3; \
target(0).interface=$4; \
target(0).node.address(0).category=ipv4-addr; \
target(0).node.address(0).address=$5; \
target(0).service.port=$6; \
last

Como podrán observar mediante expresiones regulares PCRE, debemos indicar que sección del mensaje corresponde al formulario de una alerta en Prelude.  De esta forma cada expresión reglular PCRE que indica un número, letras, o símbolos, corresponde a una variable $número. Es así que nuestra primer regex (\S+), corresponde a el texto “outside” de nuestro mensaje syslog y es la variables $1, que está referenciado en el campo “source(0).interface=$1;\” de nuestro formulario.

Finalizada la creación de la nueva regla debemos reiniciar el proceso “prelude-lml” para que comience a trabajar nuestra nueva alerta.

 

Por más información sobre cómo crear reglas pueden ir al siguiente link (www.prelude-ids.org/wiki/prelude/PreludeLml), donde se encuentra información detallada sobre el proceso indicado en este post.

 

 

4.1 – Ejemplo Cisco ASA

Ejemplo Cisco ASA.

– Formato de mensaje syslog en el archivo “/etc/prelude-lml/prelude-lml.conf”:
[format=asa]
time-format = “%b %d %H:%M:%S”
prefix-regex = “^(?P<timestamp>.{15}) ([\d\.]+) (?P<hostname>\S+) (?:(?P<process>\S+?)(?:\[(?P<pid>[0-9]+)\])?: )?”
file = /var/log/firewall.log

– Regex para el archivo “/etc/prelude-lml/ruleset/pcre.conf”:
regex=-\S+:;                            include = cisco-asa.rules;

– Archivo con reglas: www.seguridadx.com/archivos/cisco-asa.rules

El archivo completo fue enviado a prelude-ids.org, para que sean agregadas a esta solución.

 

 

5.1 – Ejemplo Fortigate

Ejemplo Fortigate.

– Formato de mensaje syslog en el archivo “/etc/prelude-lml/prelude-lml.conf”:
[format=fortigate]
time-format = “%b %d %H:%M:%S”
prefix-regex = “^(?P<timestamp>.{15}) ([\d\.]+) date=(\d+)-(\d+)-(\d+),time=(\d+):(\d+):(\d+),devname=(?P<hostname>\S+)”
file = /var/log/security/fortigate.log

– Regex para el archivo “/etc/prelude-lml/ruleset/pcre.conf”:
regex=devname=;                         include = fortigate.rules;

– Archivo con reglas: www.seguridadx.com/archivos/fortigate.rules
# 04 – Generic IDS:
regex=devname=(\S+),devid=(\S+),logid=04(\d+),+.+vd=(\S+)(\,)severity=(\S+)(\,)srcip=([\d\.]+),dstip=([\d\.]+),+.+proto=(\d+)(\,)service=(\S+)(\,)+.+attackname=(\S+)(\,)srcport=(\d+),dstport=(\d+),attackid=(\d+),sensor=(\S+)(\,)ref=(\S+)(\,)incidentserialno; \
classification.text= $14; \
id=80025; \
revision=1; \
analyzer(0).name=Fortigate; \
analyzer(0).manufacturer=www.fortinet.com; \
analyzer(0).class=UTM; \
assessment.impact.severity=$6; \
assessment.impact.type=file; \
assessment.impact.completion=succeeded; \
assessment.impact.description=Log message type: IDS Generic Event.; \
additional_data(0).type=string; \
additional_data(0).meaning=Device Name; \
additional_data(0).data=$1; \
additional_data(1).type=string; \
additional_data(1).meaning=Device ID; \
additional_data(1).data=$2; \
additional_data(2).type=string; \
additional_data(2).meaning=Log ID; \
additional_data(2).data=0000$3; \
additional_data(3).type=string; \
additional_data(3).meaning=VDOM; \
additional_data(3).data=$4; \
additional_data(4).type=string; \
additional_data(4).meaning=Service; \
additional_data(4).data=$12; \
additional_data(5).type=string; \
additional_data(5).meaning=Proto; \
additional_data(5).data=$10; \
additional_data(6).type=string; \
additional_data(6).meaning=Attack ID; \
additional_data(6).data=$18; \
additional_data(7).type=string; \
additional_data(7).meaning=Sensor; \
additional_data(7).data=$19; \
additional_data(8).type=string; \
additional_data(8).meaning=Sensor; \
additional_data(8).data=$21; \
source(0).node.address(0).category=ipv4-addr; \
source(0).node.address(0).address=$8; \
source(0).service.port=$16; \
target(0).node.address(0).category=ipv4-addr; \
target(0).node.address(0).address=$9; \
target(0).service.port=$17; \
last

El archivo completo fue enviado a prelude-ids.org, para que sean agregadas a esta solución.

 

 

6.1 – Ejemplo IBM DataPower xG45

Ejemplo IBM DPW.

– La integración de esta solución será a través de mensajes SNMPTraps, que serán recibidos y enviados al proceso Syslog para que Prelude-LML pueda analizar los mismos. Para esto iniciamos el servicio snmptrapd con los siguientes argumentos: “snmptrapd -Ls 16 -Osq”.

El único paso que debemos realizar en el archivo “/etc/prelude-lml/prelude-lml.conf”, es el de agregar el archivo de log SNMPtraps, al formato por defécto:

[format=syslog]

file = /var/log/snmptrap.log

Para que el DPW nos envíe SNMPtraps, debemos configurar lo siguiente en la interface web de administración:
– Ir a  “Control Panel -> Administration -> Access -> SNMP Settings” y creamos un nuevo destino SNMP para enviar Traps en “Trap and Notification Targets”.
– Luego, vamos a “Control Pannel -> Objects -> Logging Configuration -> Log Target”, y creamos un nuevo destino de log para enviar los traps. Para esto debes seleccionar “Target Type: SNMP”, “Timestamp Format: syslog”  en “General Configuration”, y seleccionar “Event Category = all”,  y “Minimum Event Priority = notice” en la pestaña “Event Subscriptions”.
– En la pestaña “Trap Event Subscriptions”, seleccione “Enable Default Event Subscriptions = on” y “Minimum Priority = debug”.

– Regex para el archivo “/etc/prelude-lml/ruleset/pcre.conf”:
regex=snmptrapd;                            include = xg45-datapower.rules;

 

– Archivo con reglas: www.seguridadx.com/archivos/xg45-datapower.rules

# Ej.
regex=snmptrapd\[(\d+)]:+.+via UDP: \[([\d\.]+)\]:+.+011enterprises.14685.3.3.1.1.0 (\d+)+.+011enterprises.14685.3.3.1.2.0 [1,2,3,4]+.+011enterprises.14685.3.3.1.6.0 “([\S ]+|\S+)”+.+011enterprises.14685.3.3.1.7.0 (\d+)+.+011enterprises.14685.3.3.1.4.0 “([\S ]+|\S+)”+.+011enterprises.14685.3.3.1.8.0 “(\S+)”+.+011enterprises.14685.3.3.1.9.0 “(\S+)”; \
classification.text=$6 – $4; \
classification.reference(0).origin=vendor-specific; \
classification.reference(0).meaning=ibm_id; \
classification.reference(0).name=$8; \
classification.reference(0).url=http://www.ibm.com; \
id=7001; \
revision=1; \
analyzer(0).name=DPW; \
analyzer(0).manufacturer=IBM; \
analyzer(0).class=Firewall XML; \
analyzer(0).node.name=$2; \
assessment.impact.severity=high; \
assessment.impact.description=This event was generated by the XML Firewallof IBM.; \
source(0).node.address(0).category=ipv4-addr; \
source(0).node.address(0).address=n/a; \
target(0).node.address(0).category=ipv4-addr; \
target(0).node.address(0).address=$7; \
additional_data(0).type=string; \
additional_data(0).meaning=Category:; \
additional_data(0).data=$3; \
additional_data(1).type=string; \
additional_data(1).meaning=Level:; \
additional_data(1).data=Emerg – Error.; \
additional_data(2).type=string; \
additional_data(2).meaning=tid:; \
additional_data(2).data=$5; \
additional_data(3).type=string; \
additional_data(3).meaning=Object Name:; \
additional_data(3).data=$4; \
additional_data(4).type=string; \
additional_data(4).meaning=Domain:; \
additional_data(4).data=$7; \
additional_data(5).type=string; \
additional_data(5).meaning=Events Codes:; \
additional_data(5).data=http://publib.boulder.ibm.com/infocenter/wsdatap/v4r0m2/index.jsp?topic=%2Fcom.ibm.dp.doc%2Fmessages03.htm; \
last

El archivo completo fue enviado a prelude-ids.org, para que sean agregadas a esta solución.

 
Home Linux OS Prelude SIEM Integrando Dispositivos de Red a Prelude SIEM