2.0beta2 Suricata como IPS en Ubuntu 12.04

Hoy me decidí a instalar Suricata, la detección de intrusiones de código abierto y el motor de la prevención de la Fundación de Seguridad de la Información abierta (OISF), como un IPS.

He estado corriendo Suricata en modo IDS a través del Seguro de cebolla de manera intermitente durante varios años, pero nunca he intentado Suricata como un IPS.

decidí que quería correr Suricata como un IPS de puente, de modo que no hizo enrutar el tráfico. En otras palabras, podría colocar un Suricata IPS entre, por ejemplo, un router y un firewall, o entre un router y un host, y ni punto final sabría el IPS estuvo presente.

En cuanto a la documentación disponible a través de la Web, no vi mención específica de esta configuración exacta. Es muy posible que me perdí algo útil, pero la mayoría de las personas que utilizan Linux como un puente que no estaban usando Suricata.

Aquellos que ejecuta Linux como un puente a veces habilitado una dirección IP para el puente, que es algo que no quiero hacer. (Los verdaderos puentes deben ser invisibles a los puntos finales.)

Por supuesto, para administrar el sistema de puente en sí, se asegura de que la caja tiene una tercera interfaz y se asigna dicha interfaz una dirección IP de administración.

también noté que utilizan Suricata como IPS tendían a configurarlo como un enrutador, dando direcciones IP a las direcciones IP internas y externas. Yo quería un puente invisible, no un router.

El hardware que utilicé para el puente era un traslado pequeño sistema 2003 de la era de factor de forma con 512 MB de RAM, dos tarjetas de red (eth0 y eth1), y una tarjeta de red inalámbrica (wlan0). He instalado Ubuntu Server 12.04.3 LTS. He intentado instalar la versión de 64 bits pero me di cuenta que la caja era demasiado viejo para 64 bits. Una vez intenté una instalación de 32 bits que estaba trabajando en ningún momento.

El primer paso que daba era crear el puente. Yo quería implementar el sistema entre un router y un punto final con la dirección IP 192.168.2.142, así:

 

enrutador <-> eth0/Linux bridge/eth1 <-> 192.168 .2.142

Estos son los comandos para crear el puente. Este tutorial fue útil.

 
$ sudo apt-get install bridge-utils
$ sudo brctl addbr br0
$ sudo brctl addif br0 eth0
$ sudo brctl addif br0 eth1
ifconfig eth0 $ sudo 0.0.0.0 />
$ sudo ifconfig br0

Con el trabajo del puente, que podría alcanzar los 192.168. 2.142, el host de punto final, a través del sistema de puentes Ubuntu Linux. Si quería, podía ver el tráfico con tcpdump en br0 eth0 o eth1.

siguiente que necesita para instalar Suricata. Decidí usar los paquetes beta publicados por OISF como se describe aquí. También tuve que instalar python-software-properties, como se muestra con el fin de tener add-apt-repository disponibles.

 
$ sudo apt-get install python-software-properties

$ sudo add-apt-repositorio ppa: oisf / suricata-beta
Vas paquetes beta
Suricata IDS / IPS / NSM


http://www.openinfosecfoundation.org/ http://planet.suricata: para agregar el siguiente PPA a su sistema -ids.org /
http://suricata-ids.org/

Suricata IDS / IPS / NSM -. Suricata es un motor de Monitoreo IDS de red de alto rendimiento, IPS y seguridad de la red

Open Source y es propiedad de una fundación sin fines de lucro dirigida comunidad, la Fundación Apertura Seguridad de la Información (OISF).
Suricata es desarrollado por el OISF, sus proveedores de apoyo y la comunidad.

Este motor no tiene la intención de simplemente reemplazar o imitar las herramientas existentes en la industria, pero traerá nuevas ideas
y tecnologías para el campo />
Este nuevo motor soporta.:

multi-Threading - prevé un funcionamiento extremadamente rápido y flexible en los sistemas multi-núcleo de extracción
Archivo, coincidentes MD5 -.. más de 4000 tipos de reconocimiento de archivos / extracción de transmisión en vivo a través del cable
TLS / SSL correspondiente certificado / registro
detección automática del protocolo (IPv4 / 6, TCP, UDP, ICMP, HTTP, TLS, FTP, SMB)

Gzip descompresión IP Matching Fast
Aceleración de hardware en CUDA y GPU tarjetas

y muchas más características -

http://suricata-ids.org/features/all-features/ Más información: https :/ / launchpad.net / ~ oisf / + archive / suricata-beta
Pulse [ENTER] para continuar o ctrl-c para cancelar agregarlo

gpg: llavero `/ tmp/tmpqk6Ubk / secring.gpg 'creado
gpg: llavero `/ tmp/tmpqk6Ubk/pubring.gpg' creado
gpg: solicitando 66EB736F llave del servidor hkp keyserver.ubuntu.com
gpg: / tmp / tmpqk6Ubk/trustdb.gpg: trustdb creado
gpg: 66EB736F clave: clave pública "Launchpad PPA para Peter Manev"
importada gpg: Cantidad total procesada: 1
gpg: importadas: 1 (RSA: 1)
Aceptar />

Ahora yo estaba listo para instalar Suricata y HTP, una dependencia.

 $  sudo apt-get install htp /> 
Hecho Creando árbol de dependencias Leyendo la información de
estado ... Hecho
Los siguientes paquetes extras serán instalados:
libhtp1 libnet1 libnetfilter-cola1 libnspr4 libnss3 libyaml-0-2
Se instalarán los siguientes paquetes NUEVOS:
htp libhtp1 libnet1 libnetfilter- cola1 libnspr4 libnss3 libyaml-0-2

suricata 0 actualizados, 8 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 2510 kB de archivos.
Después de este operación, se utilizarán 8.394 kB de espacio de disco adicional.
¿Quieres continuar [S / n]?
... snip ...

Con este proceso realizado Agregué reglas de Amenazas Emergentes. Me pareció útil el blog de Samiux.

 $  cd / etc / suricata 
$ sudo wget https://rules.emergingthreatspro.com/open/suricata/emerging.rules.tar.gz
$ sudo tar-xzf mkdir />

Ahora tenía que editar / etc / suricata / suricata.yaml. La siguiente diff muestra los cambios que hice en el archivo original.

 
$ diff-u / etc / suricata / suricata.yaml.orig / etc / suricata / suricata.yaml
--- / etc / suricata / suricata.yaml.orig 2014 -01-25 21:39:57.542801685 -0500
+ + + / etc / suricata / suricata.yaml 25/01/2014 21:41:31.530801055 -0500
@ @ -46,7 46 , 7 @ @

# Por defecto el archivo pid
# Utilizará este archivo si no - pidfile en opciones de comando
- # pid-file:.. / var / run /
suricata.pid + pid-file: / var / run / suricata.pid />
# Daemon directorio de trabajo
# Suricata cambiará directorio a ésta si se proporciona
@ @ -208,7 +208,7 @ @

# a información en línea basado en los paquetes perdidos en el modo de IPS
- caída:
- enabled: no
+ habilitado: sí
del archivo: drop.log append /> # filetype: regulares # 'normal', 'unix_stream' o 'unix_dgram'
@ @ -337,7 +337,7 @ @

# Se puede especificar un archivo de configuración de umbral mediante el establecimiento de "umbral-file"
# para la ruta del archivo de configuración de umbral:
- # umbral -file: / etc / suricata / threshold.config
+ umbral archivo: / etc / suricata / threshold.config

# El motor de detección se basa grupos internos de las firmas. El motor
# nos permite especificar el perfil que desea utilizar para ellos, para la gestión de memoria en un
@ @ -373,7 +373,7 @ @
- Inspección-recursion límite: 3000
# Cuando regla-reload está habilitada, el envío de una señal USR2 a la
proceso Suricata # provocará una recarga regla en vivo. Característica experimental, utilice con cuidado
- # - regla-reload:. Verdad
+ - regla-reload: true
# Si se establece en sí, la carga de las firmas se hará después de la captura
se inicia #. Esto limitará el tiempo de inactividad en el modo de IPS
# - retardada detectar:. Sí

Siguiente añadí la regla de la prueba siguiente a / etc / suricata / reglas / drop.rules. La ubicación del archivo es arbitrario. Escribí una regla simple para alertar sobre el tráfico ICMP de un sistema de prueba, 192.168.2.126. Todo lo que sigue es una línea. Acabo de romper para facilitar la lectura.

 
icmp alerta 192.168.2.126 cualquier -> any any (msg: "ping ICMP prueba ALERTA desde 192.168.2.106";
icode: 0; itype: 8; ClassType: Trojan-actividad; sid : 99999998; rev: 1 ;)

Note que no tengo reglas de iptables cargados en este punto:

 
$ sudo iptables-VNL
Chain INPUT (política ACEPTAR 5 paquetes de 392 bytes),
pkts bytes target prot opción en la fuente a destino />
Cadena FORWARD (policy ACCEPT 4 paquetes de 240 bytes)
pkts bytes target prot opt ​​in fuera SALIDA origen destino />
Cadena (policy ACCEPT 4 paquetes, 496 bytes)
pkts bytes target prot opción en la fuente a destino

Ahora yo estaba dispuesto a ver si Suricata sería, al menos, ver y alertar sobre tráfico que coincide con mi regla de prueba ICMP. Primero empecé Suricata y dije que a ver br0, la interfaz de puente.

 
$ sudo suricata-c / etc / suricata / suricata.yaml-i br0

25/1/2014 - 22:44:13 - - Este es versión Suricata LIBERACIÓN 2.0beta2
25/1/2014 - 22:44:16 - - [ERRCODE: SC_ERR_NO_RULES (42)] - No hay reglas cargadas desde / etc / suricata / rules /-icmp emergente. reglas
25/1/2014 - 22:44:33 - - [ERRCODE: SC_ERR_OPENING_RULE_FILE (41)] - archivo de reglas de apertura / etc / suricata / reglas / dns-events.rules: No existe el fichero . o directorio
25/1/2014 - 22:44:51 - - [ERRCODE: SC_ERR_PCAP_CREATE (21)] -. Usando Pcap capturar con GRO o LRO activado puede conducir a problemas de captura
25/1/2014 - 22:44:51 - -. todos los 2 hilos de procesamiento de paquetes, 3 temas de gestión inicializados, el motor comenzó a

No me importa acerca de la advertencia o de error avisos aquí. Pude arreglar esos pero no son pertinentes para demostrar el punto principal de este post.

En un sistema separado, 192.168.2.126, me hizo ping 192.168.2.142. .

 $  ping-c 2 192.168.2.142 
PING 192.168.2.142 (192.168.2.142) 56 (84) bytes de datos
64 bytes from 192.168.2.142: icmp_req = 1 ttl = 64 tiempo = 5,29 ms
64 bytes from 192.168.2.142: icmp_req = 2 ttl = 64 tiempo = 4,03 ms

--- estadísticas de ping 192.168.2.142 ---
2 paquetes transmitidos, 2 recibieron, 0% de pérdida de paquetes, 1001ms tiempo
rtt min / avg / max / mdev = 4.030/4.663/5.297/0.637 ms

Entonces revisé mis registros Suricata :.

 
$ ls-al / var / log / suricata /

total de 88 drwxr-xr-x 3 root root 4096 25 de enero 22:50
drwxr- xr-x 11 root root 4096 25 de enero 21:38 ..
-rw-r - r - 1 root root 0 25 de enero 22:15 drop.log
-rw-r - r - 1 root root 392 25 de enero 22:50 fast.log
-rw-r - r - 1 root root 0 25 de enero 21:42 http.log
-rw-r - r - 1 root root 66008 25 de enero 22:50 stats.log
raíz raíz drwxr-xr-x 2 4096 25 de enero 22:15 tmp
-rw-r -. r - 1 root root 388 25 de enero 22:50 unified2.alert.1390708237 />

fast.log 01/25/2014-22: 50:40.510124 [**] [1:99999998:1] prueba ALERTA ICMP ping desde 192.168.2.106 [**] [Clasificación: Un troyano Red se detectó] [Prioridad 1] {} ICMP 192.168.2.126:8 -> 192.168.2.142:0
01/25/2014-22: 50:41.510464 [**] [1:99999998:1] prueba ALERTA ICMP ping desde 192.168.2.106 [**] [Clasificación: Un troyano Red se detectó] [Prioridad 1] {} ICMP 192.168.2.126:8 -> 192.168.2.142:0

Esto funcionó como se esperaba. Tengo las alertas sobre el tráfico ICMP que concuerden con la regla de alerta de prueba.

Ahora era el momento de bajar el tráfico!

he añadido una nueva regla a drop.rules, clasificados también sólo para facilitar su lectura aquí:

 
caer icmp cualquier 192.168.2.126 -> any any (msg: "prueba de caída ICMP ping desde 192.168.2.106" ;
icode: 0; itype: 8; ClassType: Trojan-actividad; sid: 99999999; rev: 1 ;)

también he deshabilitado la regla de alerta anterior comentando a cabo.

siguiente he añadido las reglas de iptables para la cadena FORWARD, para el tráfico que atraviesa el puente. Esta documentación ha sido útil.

 
$ sudo iptables-I FORWARD-j NFQUEUE

$ sudo iptables-VNL ENTRADA />
pkts bytes opt prot objetivo en fuente fuera destino

Cadena FORWARD (policy ACCEPT 0 paquetes, 0 bytes)
pkts bytes opt prot objetivo en fuera
origen destino 0 0 NFQUEUE todo - * * SALIDA 0.0.0.0 / 0 0.0.0.0 / 0 NFQUEUE num 0

Cadena (policy ACCEPT 25 paquetes, 2600 bytes)
pkts bytes target prot opt ​​in fuera
origen destino

Por último me reinicia Suricata, esta vez diciéndole que la utilice cola 0, donde NFQUEUE estaba esperando paquetes para Suricata.

 
$ sudo suricata-c / etc / suricata / suricata.yaml-q 0
25/1/2014 - 22:54:49 - - Este es Suricata versión 2.0beta2 COMUNICADO
25/1/2014 - 22:54:52 - - [ERRCODE: SC_ERR_NO_RULES (42)] - No hay reglas cargadas desde / etc / suricata / rules / emergentes-icmp.rules
25/1/2014 - 22:55:08 - - [ERRCODE: SC_ERR_OPENING_RULE_FILE (41)] - archivo de reglas de apertura / etc / suricata / reglas / dns-events.rules:. No existe el fichero o directorio
25/1/2014 - 22:55:26 - - todos los temas de procesamiento de paquetes de 3, 3 temas de gestión inicializados, el motor comenzó

Con Suricata se ejecuta en modo IPS, yo. intentado hacer ping 192.168.2.142 192.168.2.126 de como lo hice antes.

 $  ping-c 2 192.168.2.142 /> 

--- 192.168.2.142 estadísticas de ping ---
2 paquetes transmitidos, recibidos 0, 100% packet loss, 1006ms tiempo

Nada consiguió pasar! Confirmé que podía hacer ping a la misma caja de otra dirección IP de origen. En otras palabras, sólo ICMP desde 192.168.2.126 fue bloqueado. Ahora compruebe los registros Suricata:

 
$ ls-al / var / log / suricata /
total de 152
drwxr-xr-x 3 root root 4096 25 de enero 22:57 <. br /> root drwxr-xr-x 11 root 4096 25 de enero 21:38 ..
-rw-r - r - 1 root root 294 25 de enero 22:57 drop.log
-rw -r - r - 1 root root 798 25 de enero 22:57 fast.log
-rw-r - r - 1 root root 0 25 de enero 21:42 http.log
-rw -r - r - 1 root root 125 812 25 de enero 22:57 stats.log
drwxr xr-x-2 root root 4096 25 de enero 22:15 tmp
-rw-r -. r - 1 root root 388 25 de enero 22:50 unified2.alert.1390708237
-rw-r - r - 1 root root 0 25 de enero 22:55 unified2.alert.1390708526
-rw- r - r - 1 root root 360 25 de enero 22:57 unified2.alert.1390708633

$ cat drop.log
01/25/2014-22: 57:17.031400: IN = OUT = SRC = 192.168.2.126 DST = 192.168.2.142 LEN = 84 TOS = 0x00 TTL = 64 ID = 36055 PROTO = ICMP TYPE = 8 CÓDIGO = 0 ID = 59729 SEQ = 256
01/25/2014- 22:57:18.038179: IN = OUT = SRC = 192.168.2.126 DST = 192.168.2.142 LEN = 84 TOS = 0x00 TTL = 64 ID = 36056 PROTO = ICMP TYPE = 8 CÓDIGO = 0 ID = 59729 SEQ = 512

Cool, esos son nuestros paquetes ICMP perdidos. Comprobación fast.log veremos los dos mensajes de prueba ALERTA originales, pero echa un vistazo a los nuevos mensajes de prueba DROP demasiado: />
$ cat / var / log / suricata /
fast.log 01 / 25/2014-22: 50:40.510124 [**] [1:99999998:1] prueba ALERTA ICMP ping desde 192.168.2.106 [**] [Clasificación: Un troyano Red se detectó] [Prioridad 1] {} ICMP 192.168 .2.126:8 -> 192.168.2.142:0
01/25/2014-22: 50:41.510464 [**] [1:99999998:1] ICMP prueba ALERTA ping desde 192.168.2.106 [**] [ Clasificación: Un troyano Red se detectó] [Prioridad 1] {} ICMP 192.168.2.126:8 -> 192.168.2.142:0
01/25/2014-22: 57:17.031400 [Quitar] [**] [1:99999999:1] prueba DROP ICMP ping desde 192.168.2.106 [**] [Clasificación: Un troyano Red se detectó] [Prioridad 1] {} ICMP 192.168.2.126:8 -> 192.168.2.142:0
01/25/2014-22: 57:18.038179 [Quitar] [**] [1:99999999:1] prueba DROP ICMP ping desde 192.168.2.106 [**] [Clasificación: Un troyano Red se detectó] [Prioridad : 1] {} ICMP 192.168.2.126:8 -> 192.168.2.142:0

Así que es eso.

Tenga en cuenta que con esta configuración, si usted deja de Suricata entonces la máquina, es «proteger» es totalmente inalcanzable. Puede restaurar la conectividad mediante el lavado de las reglas de iptables a través de este comando:

 
$ sudo iptables-F

Ahora, el punto final es alcanzable mientras Suricata no se está ejecutando. Para volver a habilitar el IPS, usted tiene que configurar el NFQUEUE mediante iptables de nuevo como se indica anteriormente.

Siguiendo estas instrucciones usted tiene la base para la construcción de un puente utilizando IPS Suricata sobre Ubuntu Server 12.04. El siguiente paso sería la de solucionar los problemas de configuración haciendo que los mensajes de error de puesta en marcha, hacer que el puente, firewall y componentes Suricata disponibles en el arranque, y luego crear su propio conjunto de reglas DROP. Hay probablemente también optimizaciones para PF_RING y otras características de rendimiento. ¡Buena suerte!

qué corres Suricata como un IPS? ¿Cómo lo haces? ¿Has probado la nueva beta 2.x?

Tweet

Deja un comentario

Tu dirección de correo electrónico no será publicada.