Bro – IDS. Un sistema de detección de intrusiones basado en políticas especializadas.

Seguimos con la serie dedicada a motores IDS / NIDS. Hemos visto y seguiremos viendo, ya que es parte importante de la temática de este blog, el IDS Snort y Suricata.

Bro-ids

En esta ocasión vamos a iniciar una serie de artículos dedicados a Bro, un sistema de detección de intrusiones para UNIX/Linux Open Source que analiza el tráfico de red en busca de actividad sospechosa. su carcterística principal es que sus reglas de detección están basados en scricd en lenguaje nativo que suponen políticas (policies) que son las encargadas de detectar, generar logs o eventos y acciones a nivel de sistema operativo.

Este artículo está especialmente dedicado a mi bro Dabo (@daboblog).

Qué es Bro.

Bro es un sistema de detección de intrusiones para UNIX/Linux Open Source que analiza el tráfico de red en busca de actividad sospechosa.

Analiza la actividad a nivel de aplicación y por comparación con patrones considerados sospechosos, es decir, por características del tráfico y contenido.  Algunas características importantes de Bro son la gran capacidad de análisis a nivel de protocolo y las políticas especializadas y configurables y la capacidad de ser una herramienta de análisis forense.También es importante destacar el elevado rendimiento y capacidad de gestionar gran volumen de tráfico.

Las alertas pueden ser configuradas de tal forma que puedan generar eventos de log, alertas en tiempo real y hasta ejecución de comandos de sistema.

Bro dispone de una serie de scripts o Policies escritos en un lenguaje nativo de Bro. Estas políticas describen qué tipo de actividades se consideran sospechosas. En base a esto, disponemos de una gran cantidad de políticas para la detección de las actividades sospechosas más comunes. Estas policies suponen una especie de capa más en la estructura de Bro. Estos policies generarán, dado el caso, cientos de eventos depndiendo del tipo de protocolo / script.

Las políticas o policies, además de generar logs por actividad sospechosa, puede generar logs de actividad normal.

Mediante el uso del lenguaje de scripts de políticas o policies, podemos crear políticas específicas para nuestro entorno de red o un actividad concreta que deseemos detectar.

Podemos ejecutar Bro para detecciçón en tiempo real usando una determinada interface de red o leyendo un fichero .pcap.

Instalando y configurando Bro.

Si hemos instalado herramientas del tipo Wireshark, Snort , Suricata, etc, tenemos casi todo lo necesario. En mi caso he necesitado instalar como requisito previo:

  • ncurses-dev
  • libssl-dev
  • python2.6-dev

Comenzamos:

wget http://www.bro-ids.org/download/bro-1.5.3.tar.gz
tar xzf bro-1.5.3.tar.gz
cd bro-1.5.3

./configure
make
make install-broctl

Configuramos Bro.

  • Bro se encuentra en /usr/local/bro por defecto.
  • Archivos de configuración en /usr/local/bro/etc
  • Archivo de configuración: /usr/local/bro/etc/broctl.cfg
  • Configuramos la interface en /usr/local/bro/etc/node.cfg
  • Configuramos nuestra red usando notación CIDR en /usr/local/bro/etc/networks.cfg

Una vez realizados los cambios que considerenos:

en /usr/local/bro/bin ejecutamos sudo python broctl install :

alfon@alfonubuntu:/usr/local/bro/bin$ sudo python broctl install
removing old policies in /usr/local/bro/share/bro/.site … done.
creating policy directories … done.
installing site policies … done.
generating broctl-layout.bro … done.
generating analysis-policy.bro … done.
generating local-networks.bro … done.
updating nodes … done.

Ejecutando Bro.

Dada la complejidad de Bro, iremos estudiando sus características poco a poco y sus variadas fomas de funcionamiento. Toda basado en la práctica.

De momento vamos con lo más simple para inr entendiendo Bro.

Un uso básico puede ser el siguiente:

> /usr/local/bro/bin$ sudo ./bro -f  «tcp» -r captura_smtp.pcap smtp

Se trata de un análisis offline, le decimos a Bro que lea el archivo archivo.pcap, añadimos un filtro BPF para tcp y que aplique la policy o script de política smtp.bro que se encuentra en: /usr/local/bro/share/bro

La ejecución de esta línea de bro con la política smtp.bro, genera los siguientes alrchivos .log:

  • conn.log
  • notice.log
  • smtp.log

conn.log contiene información de las conexiones independientemente del protocolo y política usada. Aquí el resultado de nuestro ejemplo aplicado a un server honeypot virtual:

bro ids. ejemplo conn.log

notice.log está a 0. Lo explicaré más adelante.

smtp.log es el resultado de la policy smtp.log. Para el ejemplo, este es el resultado de aplicar bro a un server virtual honeypot (es solo una parte, falta la zona timestamp e IPs origen / destino ya que el log es bastante extenso):

bro ids. ejemplo politica policy smtp.log

.

Ejecutando Bro con múltiples políticas.

> /usr/local/bro/bin$ sudo ./bro -r /home/alfon/lan031110.cap scan alarm tcp smtp http

Genera los siguientes logs:

  • alarm.log
  • conn.log
  • http.log está a 0
  • notice.log
  • smtp.log está a 0

Si editamos alarm.log nos encontramos con esta línea:

1288814614.603440 PortScanSummary 20x.xx.xxx.xx2 scanned a total of 20 ports

Si editamos notice.log nos encontramos con esta línea:

1288814614.603440:PortScanSummary:NOTICE_ALARM_ALWAYS::20x.xx.xx.xx2::::::::20:209.85.227.132 scanned a total of 20 ports:$

Ejecutandobro en tiempo real.

Lo hacemos de la forma:

alfon@alfonubuntu:/usr/local/bro/bin$ sudo ./bro -ieth0 tcp alarm smtp http

Configurando con bro.cfg

Esiste, en la carpeta que hemos descomprimido para instalar Bro, una serie de scrips para configuración y otras utilidades.

En este caso nos interesa bro_config para la creación de un fichero de configuración bro.cfg. Ejecutamos el script:

alfon@alfonubuntu:~/bro-1.5.3/scripts$ sudo ./bro_config

  • nos preguntará si queremos crear bro.cfg y decimos que si.
  • ahora nos pregunta sobre la ubicación de logs en /usr/local/bro/archive
  • usuario para ejecutar bro
  • interface, en mi caso eth0
  • otra serie de preguntas….. lo podemos dejar como está
  • a email reports decimos que si e indicamos el mail
  • nos pregunta sobre encriptación para los mail
  • ejecutará una función para determinar el rango de red

Ahora copiamos bro.cfg en /usr/local/bro/etc. En su momento veremos este archivo.

Existe otro script de perl muy interesante que lo veremos más adelante. Este script se encuentra en /bro-1.5.3/scripts/perl/script y es site-report.pl, lo copiamos a /usr/local/bro/bin para usaro en su momento.

Ejecutando Bro con broctl. Broctl centro de control.

En base a la configuración que hemos visto de:

  • broctl.cfg
  • node.cfg
  • networks.cfg

podemos ejecutar  broctl para desplegar un centro de contro para la configuración de bro. Esta es la mejor manera de configurar bro y la que está ahora en uso sustituyendo al sistema antiguo broccolite.

La manera de ejecutar broctl es:

alfon@alfonubuntu:/usr/local/bro/bin$ sudo ./broctl

Tenemos una consola (BroControl).

  • Si queremos activarBro: [BroControl] > start
  • Para ayuda: [BroControl] >help

Por ejemplo: incimos Bro con start y vemos el estado con status:

Name       Type       Host       Status        Pid    Peers  Started
bro        standalone localhost  running       8516   0      23 Mar 13:38:10

ahora hacemos [BroControl] > scripts para ver una lista de scripts / policies que se ejecutan y la jeracquía.

En este momento tenemos Bro ejecutándose. Salimos con exit y bro seguirá ejecutándose. Si hacemos top lo vemos.

En este momento tenemos actividad en /usr/local/bro/logs/current.Se está registrando toda la actividad:

alfon@alfonubuntu:/usr/local/bro/logs/current$ ls -l
total 44
170 2011-03-23 13:55 alarm.log
0 2011-03-23 13:55 broctl.log
d4096 2011-03-23 13:55 certs
16384 2011-03-23 13:56 conn.log
0 2011-03-23 13:55 dns.log
0 2011-03-23 13:55 ftp.log
0 2011-03-23 13:55 http.log
0 2011-03-23 13:55 icmp.log
0 2011-03-23 13:55 irc-bots.log
0 2011-03-23 13:55 irc.detailed.log
0 2011-03-23 13:55 irc.log
115 2011-03-23 13:55 mail.log
0 2011-03-23 13:55 notice.log
0 2011-03-23 13:55 pop3.log
1995 2011-03-23 13:59 remote.log
0 2011-03-23 13:55 signatures.log
0 2011-03-23 13:55 smtp.log
0 2011-03-23 13:55 ssh.log
0 2011-03-23 13:55 ssl.log
18 2011-03-23 13:55 stderr.log
0 2011-03-23 13:55 stdout.log
8192 2011-03-23 13:59 weird.log
0 2011-03-23 13:55 worm.log

Editamos alarm.log:

t=1300884937.770530 no=PortScan na=NOTICE_ALARM_ALWAYS es=bro sa=192.168.1.5 p=1096/tcp num=50 msg=192.168.1.5\ has\ scanned\ 50\ ports\ of\ 192.168.1.106 ta$

Usando broctl vemos que obtenemos de este log mayor información. Vreemos su formato en el próximo capítulo.

Editamos weird.log:

Observamos claramente el tipo de información de este tipo de log.

1300884922.499851 192.168.1.5/2268 > 192.168.1.106/ssh: bad_TCP_checksum
1300884937.763084 192.168.1.5/49635 > 192.168.1.106/ssh: bad_TCP_checksum
1300884937.890885 192.168.1.106/58844 > 192.168.1.245/dns: bad_UDP_checksum
1300884937.963542 192.168.1.5/49826 > 192.168.1.106/ssh: bad_TCP_checksum
1300884938.070815 192.168.1.5/49827 > 192.168.1.106/ssh: bad_TCP_checksum
1300884938.178196 192.168.1.5/49828 > 192.168.1.106/ssh: bad_TCP_checksum
1300884938.292406 192.168.1.5/49829 > 192.168.1.106/ssh: bad_TCP_checksum
1300884938.400810 192.168.1.5/49830 > 192.168.1.106/ssh: bad_TCP_checksum
1300884938.508303 192.168.1.5/49831 > 192.168.1.106/ssh: bad_TCP_checksum
1300884938.630239 192.168.1.5/49838 > 192.168.1.106/ssh: bad_TCP_checksum
1300884938.701615 192.168.1.5/49841 > 192.168.1.106/ssh: baroque_SYN
1300884938.701627 192.168.1.5/49841 > 192.168.1.106/ssh: bad_TCP_checksum
1300884938.787513 192.168.1.106/1 > 192.168.1.5/49844: spontaneous_RST
1300884938.823629 192.168.1.5/49845 > 192.168.1.106/1: spontaneous_FIN
1300885009.275644 192.168.1.5/2268 > 192.168.1.106/ssh: bad_TCP_checksum
1300885009.542581 192.168.1.5/2268 > 192.168.1.106/ssh: bad_TCP_checksum
1300885009.726829 192.168.1.5/2268 > 192.168.1.106/ssh: bad_TCP_checksum
1300885009.890607 192.168.1.5/2268 > 192.168.1.106/ssh: bad_TCP_checksum
1300885010.063698 192.168.1.5/2268 > 192.168.1.106/ssh: bad_TCP_checksum
1300885010.103528 192.168.1.5/2268 > 192.168.1.106/ssh: bad_TCP_checksum
1300885010.127833 192.168.1.5/2268 > 192.168.1.106/ssh: bad_TCP_checksum
1300885010.699427 192.168.1.5/2268 > 192.168.1.106/ssh: bad_TCP_checksum

——–

Queda aún mucho que ver para entender y comenzar a sacar partido a Bro-IDS. Nos vemos pues en el siguiente artículo.

Y como siempre..  hasta aquí por hoy. Hasta la próxima.

Esta entrada fue publicada en Bro-IDS, Seguridad y redes. Guarda el enlace permanente.

5 respuestas a Bro – IDS. Un sistema de detección de intrusiones basado en políticas especializadas.

  1. Dabo dijo:

    Brutal trabajo bro;) y gracias por la dedicatoria en Twitter !!!

  2. Alfon dijo:

    No te había visto. Gracias Bro.

  3. Pingback: Bro–IDS. Un sistema de detección de intrusiones basado en políticas especializadas. Parte 3. Bro 2.0. | Seguridad y Redes

  4. Pingback: Bro–IDS. Un sistema de detección de intrusiones basado en políticas especializadas. Parte 4. Bro 2.0. | Seguridad y Redes

  5. Pingback: Security Onion Parte 1 « Tyto Alba

Deja un comentario