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

Ya vimos en la primera parte dedicada a Bro-IDS su instalación, configuración y uso básico (Bro – IDS. Un sistema de detección de intrusiones basado en políticas especializadas.). Más adelante, en la segunda parte (Bro – IDS. Un sistema de detección de intrusiones basado en políticas especializadas. Parte 2) vimos algunos ejemplos de uso e interpretación de logs, estados de conexión, generación de estadísticas de tráfico, detección de scan de puertos, etc.

Logo broEn esta ocasión vamos a instalar Bro-IDS 2.1, analizaremos algunas novedades y avanzaremos en el uso de este IDS.

(Actualizado 19-12-2012 para instalar y usar Bro-IDS 2.1)
Dedicado a mi amigo @daboblog

Instalación Bro-IDS 2.0/2.1.

Aunque ya dí en su momento una descripción de Bro IDS, para los que no lo hayais leido, decir que Bro es un Sistema de Detección de Intrusos que detecta y registra eventos de intrusión basados en las características del tráfico y su contenido. Eso lo hace comparando el tráfico de la red o mediante un fichero .pcap con una serie de reglas y/o políticas especializadas por tipos de tráfico.

Ahora vamos con la instalación.

De entre los prerequisitos básicos, no dispongo de CMake, a sí que lo instalaré:

wget http://www.cmake.org/files/v2.8/cmake-2.8.6.tar.gz
tar xzf cmake-2.8.6.tar.gz
cd cmake-2.8.6
./configure
make
sudo make install

Si queremos asegurarnos de que cuumplimos con todos los prerequisitos:

sudo apt-get install make gcc g++ flex bison libpcap-dev libssl-dev python-dev swig

También, de forma opcional, podemos instalar:

sudo apt-get install zlib1g-dev libmagic-dev libgeoip-dev sendmail google-perftools

Y por último nos hará falta instalar Ruby. En mi caso ya lo tengo instalado.

Ahora vamos a instalar la versión Bro-IDS 2.1:

http://www.bro-ids.org/downloads/release/bro-2.1.tar.gz
tar xzf bro-2.1.tar.gz
cd bro-2.1
./configure –enable-perftools

NOTA: Comprobamos que todo está correcto, resolvemos los warnings, etc. –enable-perftools es opcional y no necesario.

Obtenemos:

====================|  Bro Build Summary  |=====================

Install prefix:    /usr/local/bro
Bro Script Path:   /usr/local/bro/share/bro
Debug mode:        false

CC:                /usr/bin/gcc
CFLAGS:             -Wall -Wno-unused -O2 -g
CXX:               /usr/bin/c++
CXXFLAGS:           -Wall -Wno-unused -O2 -g
CPP:               /usr/bin/c++

Broccoli:          true
Broctl:            true
Aux. Tools:        true

GeoIP:             true
Google perftools:  true
=======================================

y para terminar:

make
sudo make install

NOTA IMPORTANTE: Contínuamente se realizan mejoras, se arreglan bugs, etc, etc, con lo que cada cierto tiempo es interesante actualizar desde los repositorios git de Bro-IDS (http://git.bro-ids.org/). Para ello:

git clone –recursive git://git.bro-ids.org/bro.git

creará una carpeta denominada bro

  • cd bro
  • ./configure –enable-perftools
  • make
  • sudo make install

Como os cuento en la parte 4, tenemos que definir los rangos de IPs provadas de una red local. Esto lo hacemos en:

/usr/local/bro/share/bro/site/local.bro

redef Site::local_nets = {
        10.0.0.0/8,     # Red privada.
        192.168.0.0/16, # Red privada.
        172.16.0.0/12,  # Red privada.
};

Bien, ya tenemos instalado Bro-IDS. Aunque nos quedan algunas aspectos como la configuración de broctl y configuración de nodos (lo veremos más a adelante) podeis ver como se hace en el enlace de abajo porque es prácticamente lo mismo:

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

Bro IDS 2.1. Uso básico y algunas novedades.

Ahora nos queda probar que todo está correcto y funciona.  Yo he creado una carpeta en /home/usuario/ que he llamado browork desde donde ejecutaré bro y donde se volcarán los logs. Entro en la carpeta y uso bro como en artículos anteriores, indicando un policy, en este caso tcp y leyendo un archivo de tráfico de red .pcap (ids_4.pcap):

~/browork$ sudo /usr/local/bro/bin/bro -r /home/preludeids/pcap1/ids_4.pcap tcp
error: can’t open tcp

la primera en la frente. Se trata de la primera novedad de Bro 2.0 respecto a las anteriores versiones. Ahora los scripts/policy se cargan en local.bro ahí podemos añadir o quitar lo que queramos y redefinir comportamientos. Solo tenemosque añadir la “palabra” local para que se cargen todos los scripts *.bro. Vamos a ello:

~/browork$ sudo /usr/local/bro/bin/bro -r /home/preludeids/pcap1/ids_4.pcap local
[sudo] password for preludeids:
WARNING: No Site::local_nets have been defined.  It’s usually a good idea to define your local networks.

Vaya, bien vamos. Nos dice que no tenemos definida la/s “direccioens” de red local. Esto lo hacemos añadiendo:

 “Site::local_nets += {192.168.1.0/24, 192.168.101.0/24, 192.168.100.0/24 }”

y quedará de la forma siguiente:

~/browork$ sudo /usr/local/bro/bin/bro -r /home/preludeids/pcap1/ids_4.pcap local “Site::local_nets += {192.168.1.0/24, 192.168.101.0/24, 192.168.100.0/24 }”

El resultado es:

Bro IDS 2.0Decir que he usado algunos .pcap de hasta 3,6 Gb con un rendimiento y velocidad muy acptables.

También podemos usar una interface de red de la forma:

~/browork$ sudo /usr/local/bro/bin/bro -ieth1 local “Site::local_nets += {192.168.1.0/24, 192.168.101.0/24, 192.168.100.0/24 }”

Con local.bro hemos cargado una serie de scripts que podemos ver en loaded_scripts.log. Y según el tráfico se activarán o no las alertas o logs correspondientes. Además vemos también, marcado en azul, una serie de ficheros .dat que corresponden a la extracción HTTP de ficheros .pfd (otra de las novedades).

Otros logs son muy significativos como dns.log, ftp.log, conn.log (registro de las conexiones y características de estas), etc. algunos ya lo vimos aquí:

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

Tenemos también el log notice.log, este log registra avisos o alarmas cuando se registra una situación o actividad sospechosa basada en ls scripts cargados en loaded_scripts.log. Por ejemplo, si el script scan.bro registra un escaneo de puertos, se registrará en notice.log de una forma similar a:

1326876135.920277       -       -       -       -       -       tcp     Scan::LowPortTrolling   low port trolling 213.96.xxx.xxx 1014/tcp       -       213.96.xxx.xxx  -       1014    -       bro     Notice::ACTION_LOG      6       3600.000000     F       -       -       -       -       -       -       -       -
1326876137.968331       -       -       -       -       -       tcp     Scan::LowPortTrolling   low port trolling 213.96.xxx.xxx 1018/tcp       -       213.96.xxx.xxx  -       1018    -       bro     Notice::ACTION_LOG      6       3600.000000     F       -       -       -       -       -       -       -       -
1326876138.480411       -       -       -       -       -       tcp     Scan::LowPortTrolling   low port trolling 213.96.xxx.xxx 1019/tcp       -       213.96.xxx.xxx  -       1019    -       bro     Notice::ACTION_LOG      6       3600.000000     F       -       -       -       -       -       -       -       -
1326876140.017974       -       -       -       -       -       tcp     Scan::LowPortTrolling   low port trolling 213.96.xxx.xxx 1022/tcp        -      213.96.xxx.xx   -       1022    -       bro     Notice::ACTION_LOG      6       3600.000000     F       -       -       -       -       -       -       -       -
1326876719.697517       -       -       -       -       -       -       Scan::PortScanSummary   192.168.1.5 scanned a total of 42891 ports      -       192.168.1.5     -       -       42891   bro     Notice::ACTION_LOG      6       3600.000000     F       -       -       -       -       -       -       -       -
1326877159.699444       -       -       -       -       -       -       Scan::LowPortScanSummary        213.96.xxx.xx scanned a total of 10 low ports   -       213.96.xxx.xx   -       -       10      bro     Notice::ACTION_LOG      6       3600.000000     F       -       -       -       -       -       -       -   -
1326878629.705988       -       -       -       -       -       -       Scan::PortScanSummary   213.96.xxx.xxx scanned a total of 20 ports      -       213.96.xxx.xxx  -       -       20      bro     Notice::ACTION_LOG      6       3600.000000     F       -       -       -       -       -       -       -       -
1326879519.709814       -       -       -       -       -       -       Scan::PortScanSummary   213.96.xxx.xxx scanned a total of 20 ports      -       213.96.xxx.xxx  -       -       20      bro     Notice::ACTION_LOG      6       3600.000000     F       -       -       -       -       -       -       -       -

Vemos el eventos como Scan::LowPortTrolling   low port trolling  o Scan::PortScanSummary pero hay más dependiendo del tipo de scan de puertos y otras características. Según configuremos bro, este tipo de eventos puede generar un correo de aviso, etc.

Una parte del fichero loaded_scripts.log tiene este contenido:

Bro IDS 2.0Enmarcado en azul abajo tenemos scan.bro; que no viene por defecto pero que podemos añadir manualmente tras ser descargado del respositorio.

Otras de las novedades es el log software.log. Muy interesante. Vemos su contenido:

1323834852.215605       192.168.xxx.xxx HTTP::BROWSER   Skype\x99       3       8       -       -       Skype\x99 3.8
1323838799.480349       192.168.xxx.xxx HTTP::BROWSER   jupdate -       -       -       -       jupdate
1323841845.887612       192.168.xxx.xxx HTTP::BROWSER   Skype\x99       5       5       -       -       Skype\x99 5.5
1323842194.688679       192.168.xxx.xxx HTTP::BROWSER   Thunderbird     3       1       7       -       Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.13) Gecko/20101207 Thunderbird/3.1.7
1323844463.096480       192.168.xxx.xxx HTTP::BROWSER   Wget    1       12      -       linux-gnu       Wget/1.12 (linux-gnu)
1323844463.456066       192.168.xxx.xxx HTTP::BROWSER   Debian APT-HTTP 1       3       -       0.8.3ubuntu7.3  Debian APT-HTTP/1.3 (0.8.3ubuntu7.3)
1323844765.185682       192.168.xxx.xxx HTTP::BROWSER   MSIE    7       0       -       -       Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
1323845386.610939       192.168.xxx.xxx HTTP::BROWSER   Thunderbird     8       0       -       -       Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20111105 Thunderbird/8.0 Lightning/1.0
1323845460.268570       192.168.xxx.xxx HTTP::BROWSER   GreatNews       1       0       -       -       GreatNews/1.0
1323845599.780658       192.168.xxx.xxx HTTP::BROWSER   Firefox 8       0       -       -       Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20100101 Firefox/8.0
1323846222.487334       192.168.xxx.xxx HTTP::BROWSER   MSIE    6       0       -       -       Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2; .NET4.0C; .NET4.0E; MSOffice 12)
1323846239.878849       192.168.xxx.xxx HTTP::BROWSER   Firefox 3       6       8       -       Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)

O este con información muy interesante:

1288853776.727814       192.168.1.5     HTTP::BROWSER   Skype\x99       4       2       -       -       Skype\x99 4.2
1288853776.727814       1192.168.x.xxx   HTTP::SERVER    Apache  -       -       -       -       Apache
1288854035.295215       192.168.1.11    HTTP::BROWSER   Firefox 3       6       8       -       Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)
1288854035.295215       1192.168.x.xxx   HTTP::SERVER    gws     -       -       -       -       gws
1288854046.374514       1192.168.x.xxx   HTTP::SERVER    ANA     1       6       0       1       ANA 1.6.0.1
1288854050.329594       1192.168.x.xxx   HTTP::SERVER    Microsoft-IIS   6       0       -       -       Microsoft-IIS/6.0
1288854050.329594       1192.168.x.xxx   HTTP::APPSERVER ASP.NET -       -       -       -       ASP.NET
1288854051.276822       1192.168.x.xxx   HTTP::SERVER    DCLK-AdSvr      -       -       -       -       DCLK-AdSvr
1288854053.081860       1192.168.x.xxx   HTTP::SERVER    Apache-Coyote   1       1       -       -       Apache-Coyote/1.1
1288854054.774540       1192.168.x.xxx   HTTP::SERVER    sffe    -       -       -       -       sffe
1288854055.417234       1192.168.x.xxx   HTTP::APPSERVER PHP     5       2       4       2       PHP/5.2.4-2ubuntu5.10
1288854306.005220       192.168.1.28    HTTP::BROWSER   Thunderbird     3       1       6       -       Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.12) Gecko/20101027 Thunderbird/3.1.6
1288854307.899505       1192.168.x.xxx   HTTP::SERVER    Chunked Update Server   -       -       -       -       Chunked Update Server
1288854353.953414       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       3       Red Hat Apache/2.2.3 (Red Hat)
1288854353.953414       1192.168.x.xxx   HTTP::APPSERVER PHP     5       1       6       -       PHP/5.1.6
1288854354.501961       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       2       Fedora  Apache/2.2.2 (Fedora)
1288854354.543945       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       3       Red Hat Apache/2.2.3 (Red Hat)
1288854354.742681       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       2       Fedora  Apache/2.2.2 (Fedora)
1288854354.882235       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       3       Red Hat Apache/2.2.3 (Red Hat)
1288854354.896306       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       2       Fedora  Apache/2.2.2 (Fedora)
1288854354.930551       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       3       Red Hat Apache/2.2.3 (Red Hat)
1288854354.951164       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       2       Fedora  Apache/2.2.2 (Fedora)
1288854354.965727       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       3       Red Hat Apache/2.2.3 (Red Hat)
1288854355.077132       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       2       Fedora  Apache/2.2.2 (Fedora)
1288854355.099659       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       3       Red Hat Apache/2.2.3 (Red Hat)
1288854355.208316       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       2       Fedora  Apache/2.2.2 (Fedora)
1288854355.366454       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       3       Red Hat Apache/2.2.3 (Red Hat)
1288854355.495602       1192.168.x.xxx   HTTP::APPSERVER PHP     5       2       6       -       PHP/5.2.6
1288854355.495602       1192.168.x.xxx   HTTP::SERVER    lighttpd        1       4       26      devel   lighttpd/1.4.26-devel-109890:109892M
1288854355.671560       1192.168.x.xxx   HTTP::SERVER    Apache  1       3       39      Unix    Apache/1.3.39 (Unix) mod_python/2.7.11 Python/2.4.4 mod_perl/1.29 PHP/5.2.6
1288854355.905002       1192.168.x.xxx   HTTP::SERVER    Apache  -       -       -       -       Apache
1288854356.235686       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       2       Fedora  Apache/2.2.2 (Fedora)
1288854356.264124       1192.168.x.xxx   HTTP::SERVER    Golfe   -       -       -       -       Golfe
1288854358.113280       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       3       Red Hat Apache/2.2.3 (Red Hat)
1288854503.704869       1192.168.x.xxx   HTTP::APPSERVER PHP     5       1       6       -       PHP/5.1.6
1288854504.194287       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       2       Fedora  Apache/2.2.2 (Fedora)
1288854504.212786       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       3       Red Hat Apache/2.2.3 (Red Hat)
1288854504.255363       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       2       Fedora  Apache/2.2.2 (Fedora)
1288854504.379136       1192.168.x.xxx   HTTP::SERVER    Apache  2       2       3       Red Hat Apache/2.2.3 (Red Hat)

Seguimos.

Vemos ahora un aspecto de http.log con información de la cabecera (del log) de los campos:

#fields ts      uid     id.orig_h       id.orig_p       id.resp_h       id.resp_p       trans_depth     method  host    uri     referrer        user_agent      request_body_len        response_body_len       status_code     status_msg      info_code       info_msg        filename        tags    username        password     proxied mime_type       md5     extraction_file
#types  time    string  addr    port    addr    port    count   string  string  string  string  string  count   count   count   string  count   string  string  table[enum]     string  string  table[string]   string  string  file
1288853734.233794       3xJ3mpt5TUb     192.168.1.5     1040    192.168.1.245   13266   1       GET     CSC3-2004-crl.verisign.com      /CSC3-2004.crl  -       Microsoft-CryptoAPI/5.131.2600.5512     0       96019   200     OK      -       -       -       (empty) -       -       -       application/octet-stream    --
1288853736.079144       tTmqIRelkWa     192.168.1.5     1041    192.168.1.245   13266   1       GET     cr-tools.clients.google.com     /service/check2?appid={430FD4D0-B729-4F61-AA34-91526481799D}&appversion=1.2.183.39&applang=&machine=1&version=1.2.183.39&osversion=5.1&servicepack=Service Pack 3       -       Google Update/1.2.183.39;winhttp     0       0       204     No Content      -       -       -       (empty) -       -       -       -       -       -
1288853776.727814       r9QZKcKPvQ5     192.168.1.5     1051    192.168.1.245   13266   1       GET     ui.skype.com    /ui/0/4.2.0.187.259/es/getlatestversion?ver=4.2.0.187&uhash=1540f7874177b01d4df58ee305d933e23&google-chrome:notoffered;alreadyoffered   -       Skype\x99 4.2   0       8       200     OK      -   --       (empty) -       -       -       text/plain      -       -
1288854035.295215       wN4bRrKNyp4     192.168.1.11    1164    192.168.1.245   13266   1       GET     es-es.start3.mozilla.com        /firefox?client=firefox-a&rls=org.mozilla:es-ES:official        -       Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)0       278     301     Moved Permanently       -       -       -       (empty) -       -       -       text/html       -       -
1288854035.714032       1l3FHO8SaMc     192.168.1.11    1166    192.168.1.245   13266   1       GET     www.google.com  /firefox?client=firefox-a&rls=org.mozilla:es-ES:official        -       Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)   0       277 302      Found   -       -       -       (empty) -       -       -       text/html       -       -
1288854036.175462       vD7zTfX0Mo8     192.168.1.11    1168    192.168.1.245   13266   1       GET     www.google.es   /firefox?client=firefox-a&rls=org.mozilla:es-ES:official        -       Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)   0       8942200      OK      -       -       -       (empty) -       -       -       text/html       -       -
1288854045.199255       FWdTIoRS86c     192.168.1.11    1172    192.168.1.245   13266   1       GET     estaticos.elmundo.es    /js/comunes.js  http://www.elmundo.es/index.html?a=LOW2849254e71211fa1f05fed7d20417eb7&t=1286448433     Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)        0       46422   200     OK      -       -       -       (empty) -       -       -       text/x-c++      -       -
1288854046.374514       NBkFpD7hYsa     192.168.1.11    1174    192.168.1.245   13266   1       GET     anapixel.elmundo.es     /banner.gif?campaign=endesaactitudazul-nov10&group=Interstitial_MUNDO&page=Interstitial_MUNDO&creativity=endesa28oct1000_interstitial.html&endpartialtimestamp=4cd33aef&sign=828B2F65BD8700B65188C80EAF2A9F17&type=flash&rnd=128885455768780527      http://www.elmundo.es/index.html?a=LOW2849254e71211fa1f05fed7d20417eb7&t=1286448433     Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)   0       43      200     OK      -       -       -       (empty)      -       -       -       image/gif       -       -
1288854047.255045       Xl1Obj4nN2c     192.168.1.11    1176    192.168.1.245   13266   1       GET     cache.elmundo.es        /banners-hashed/ea/d3/endesaactitudazul-nov10/Interstitial_MUNDO/endesa28oct1000.swf?clickTag=http://193.110.128.104/anaredir?endesaactitudazul%2Dnov10%2FInterstitial%5FMUNDO%2FInterstitial%5FMUNDO%2Fendesa28oct1000%5Finterstitial%2Ehtml%2Fflash%2Bhttp%3A%2F%2Fwww.actitudazul.com%2F%2B123.123.123.123.ZZ     http://www.elmundo.es/index.html?a=LOW2849254e71211fa1f05fed7d20417eb7&t=1286448433     Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)0       10054   200     OK      -       -       -       (empty) -       -       -       application/x-shockwave-flash   -       -
1288854049.183104       FWdTIoRS86c     192.168.1.11    1172    192.168.1.245   13266   2       GET     estaticos.elmundo.es    /js/accordian.js        http://www.elmundo.es/index.html?a=ENDee1286c3a610f8f5c61306ee682485b9&t=1288854557     Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)        0       10917   200     OK      -       -       -       (empty) -       -       -       text/plain      -       -

Es mucha la información. Así que vamos a filtrar y extraer la información que necesitamos: Por ejemplo lo las IPs y numero de conexiones de cada una de ellas que usaron el protocolo http:

$ awk '{print $3 }' http.log | sort | uniq -c

      4 192.168.1.10
    318 192.168.1.11
      4 192.168.1.28
      6 192.168.1.29
    211 192.168.1.36
   1467 192.168.1.5

o también:

$ awk '{ print $3,$8 }' http.log | sort | uniq -c

      4 192.168.1.10 GET
    307 192.168.1.11 GET
     11 192.168.1.11 POST
      4 192.168.1.28 POST
      3 192.168.1.29 GET
      3 192.168.1.29 POST
    202 192.168.1.36 GET
      9 192.168.1.36 POST
   1465 192.168.1.5 GET
      2 192.168.1.5 POST

Otro ejemplo. Filtramos por una dirección IP y mostramos solo el campo correspondiente al dominio al que se conecta:

$ awk '$3 == "192.168.1.11" {print $9}' http.log | sort | uniq -c
      3 active.cache.el-mundo.net
      2 ad-emea.doubleclick.net
      1 ad.es.doubleclick.net
     26 ads.grupozeta.es
     28 anapixel.elmundo.es
      2 blogs.grupojoly.com
      3 bs.serving-sys.com
      3 cache.elmundo.es
      2 cdn4.eyewonder.com
     33 cdn.eyewonder.com
      1 contadores.miarroba.com
      7 es-es.start3.mozilla.com
     14 estaticos01.cache.el-mundo.net
      1 estaticos01.elmundo.es
     12 estaticos02.cache.el-mundo.net
     15 estaticos03.cache.el-mundo.net
     11 estaticos.elmundo.es
      1 evsecure-ocsp.verisign.com
      2 gbooks3.melodysoft.com
      3 i1.ytimg.com
      3 i2.ytimg.com
      1 i4.ytimg.com
      3 imgs.codigobarras.net
      4 javadl-esd.sun.com
      2 jazztelespaa.solution.weborama.fr

Un último ejemplo. Solo para 192.168.1.11 si la URI contiene “elmundo“, visualizar una serie de campos determinados:

$ awk '$3 == "192.168.1.11" && $9 ~/elmundo/ {print $3,$8,$9,$11}' http.log | sort | uniq -c
     27 192.168.1.11 GET anapixel.elmundo.es http://www.elmundo.es/index.html?a=ENDee1286c3a610f8f5c61306ee682485b9&t=1288854557
      1 192.168.1.11 GET anapixel.elmundo.es http://www.elmundo.es/index.html?a=LOW2849254e71211fa1f05fed7d20417eb7&t=1286448433
      2 192.168.1.11 GET cache.elmundo.es http://www.elmundo.es/index.html?a=ENDee1286c3a610f8f5c61306ee682485b9&t=1288854557
      1 192.168.1.11 GET cache.elmundo.es http://www.elmundo.es/index.html?a=LOW2849254e71211fa1f05fed7d20417eb7&t=1286448433
      1 192.168.1.11 GET estaticos01.elmundo.es http://estaticos01.cache.el-mundo.net/elmundo/estilos/v5.x/v5.02/comun.css
     10 192.168.1.11 GET estaticos.elmundo.es http://www.elmundo.es/index.html?a=ENDee1286c3a610f8f5c61306ee682485b9&t=1288854557
      1 192.168.1.11 GET estaticos.elmundo.es http://www.elmundo.es/index.html?a=LOW2849254e71211fa1f05fed7d20417eb7&t=1286448433
      2 192.168.1.11 GET pixelcounter.elmundo.es http://www.elmundo.es/index.html?a=ENDee1286c3a610f8f5c61306ee682485b9&t=1288854557

Las posibilidades ya os la podeis imaginar con http.log o cualquier otro como conn.log, software.log, etc:

awk '$2 == "192.168.1.5" && $4 ~ Skype {print $4,$9}' software.log | sort | uniq -c
      1 Firefox Mozilla/5.0
      1 Google 39
      1 GreatNews GreatNews/1.0
      1 Microsoft-CryptoAPI Microsoft-CryptoAPI/5.131.2600.5512
      1 MSIE Mozilla/4.0
      1 Skype\x99 Skype\x99
      1 Thunderbird Mozilla/5.0

Extrayendo información con Bro-cut.

Pero Bro-IDS tiene otros mecanismo quizá más potentes para extraer información de los logs. Se trata de Bro-cut. Lo vemos mejor con ejemplos.

Antes que nada comentar que, al contrario que awk, con Bro-cut en vez de usar $X para indicar campos, lo haremos directamente con el nombre del campo a mostrar. Vamos con los ejemplos.

Vamos a exteaer el campo user_agent del log smtp.log. Vermos una información muy interesante:

cat smtp.log | /usr/local/bro/bin/bro-cut user_agent | sort | uniq -c | sort -n
      1 ACEM
      1 eC-Messenger Build 6.50.425
      1 EDMAIL R6.00.02
      1 emailManager Sender (emailmanager.com) - version 2.0
      1 FoxMail 3.11 Release [cn]
      1 Foxmail 4.1 [cn]
      1 IceWarp Mailer 10.3.5 (2011-11-11)
      1 Lotus Notes Release 8.5.2 August 10, 2010
      1 Microsoft Outlook Express 5.00.2314.1300
      1 Microsoft Outlook Express 5.50.4807.1700
      1 Microsoft Outlook Express 6.00.2741.2600
      1 Microsoft Outlook Express 6.00.2800.1081
      1 Microsoft Outlook Express 6.00.2800.1409
      1 Microsoft Outlook Express 6.00.2800.1506
      1 Microsoft Outlook Express 6.00.2900.5512
      1 Microsoft Outlook Express 6.00.3790.2663
      1 MIME-tools 5.417 (Entity 5.417)
      1 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.9) Gecko/20101112 Thunderbird/3.1.4
      1 Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.2.13) Gecko/20101207 Thunderbird/3.1.7
      1 Opera Mail/10.00 (MacIntel)
      1 PHPMailer (phpmailer.sourceforge.net) [version 2.0.4]
      1 Siebel EMS 78 [EMS 1094]   main/200506171805
      1 SmartSend.2.0.127
      1 teenvio.com
      1 The Bat! (v3.0.1.33) Professional
      1 The Bat! (v3.60.07) Educational
      1 The Bat! (v3.62.03) Educational
      1 The Bat! (v3.71.01) Professional
      1 The Bat! (v3.80.06) Educational
      1 The Bat! (v4.1.35) UNREG
      1 YahooMailClassic/15.0.4 YahooMailWebService/0.8.115.331698
      1 Zimbra 7.1.0_GA_3140 (zclient/7.1.0_GA_3140)
      2 1.0.0.15042
      2 Microsoft Office Outlook 11
      2 Microsoft Office Outlook, Build 11.0.5510
      2 Microsoft Office Outlook, Build 11.0.6353
      2 Microsoft Outlook Express 5.50.4522.1200
      2 Microsoft Outlook Express 6.00.2600.0000
      2 Microsoft Outlook Express 6.00.2800.1106
      2 Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20111105 Thunderbird/8.0
      2 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.24) Gecko/20100328 Thunderbird/2.0.0.24
      2 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Thunderbird/3.1.6
      2 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101103 Thunderbird/3.1.6
      2 nlserver, Build 5.10.5657
      3 GoldMine [9.0.1.49]
      3 Microsoft Outlook Express 6.00.2800.1478
      3 MXSendMail 1.0
      3 PHPMailer 5.1 (phpmailer.sourceforge.net)
      3 YahooMailWebService/0.8.115.331698
      4 iPhone Mail (9A405)
      4 Microsoft Outlook 14.0
      4 Siebel 7.5.3.15 [16279] LANG_INDEPENDENT
      5 Cabestan DMS
      5 Microsoft CDO for Windows 2000
     11 Microsoft Office Outlook 12.0
     20 Microsoft Outlook Express 6.00.2900.5931

Otro ejemplo para http.log para extraer ficheros de imagenes IP origen y destino:

cat http.log | /usr/local/bro/bin/bro-cut id.orig_h id.resp_h filename | sort | uniq -c 
     26 192.168.1.24 92.xx.xx.2    -
      3 192.168.1.24 92.xx.xx.2    mini_magick20072-0..png
      1 192.168.1.24 92.xx.xx.2    mini_magick20072-10..png
      1 192.168.1.24 92.xx.xx.2    mini_magick20072-11..png
      1 192.168.1.24 92.xx.xx.2    mini_magick20072-12..png
      1 192.168.1.24 92.xx.xx.2    mini_magick20072-13..png
      1 192.168.1.24 92.xx.xx.2    mini_magick20072-14..png
      1 192.168.1.24 92.xx.xx.2    mini_magick20072-15..png
      2 192.168.1.24 92.xx.xx.2    mini_magick20072-1..png
      1 192.168.1.24 92.xx.xx.2    mini_magick20072-2..png
      1 192.168.1.24 92.xx.xx.2    mini_magick20072-3..png
      1 192.168.1.24 92.xx.xx.2    mini_magick20072-4..png
      1 192.168.1.24 92.xx.xx.2    mini_magick20072-5..png
      1 192.168.1.24 92.xx.xx.2    mini_magick20072-6..png
      1 192.168.1.24 92.xx.xx.2    mini_magick20072-7..png
      1 192.168.1.24 92.xx.xx.2    mini_magick20072-8..png
      1 192.168.1.24 92.xx.xx.2    mini_magick20072-9..png
     28 192.168.1.24 92.xx.xx.15    -
      1 192.168.1.24 93.xx.xx.5      -
     33 192.168.1.24 93.xx.xx.28     -
    177 192.168.1.24 93.xx.2.20   -
      1 192.168.1.24 93.xx.2.20   31f2dfe9d263c6a72b178e9301ab8a14.jpeg
      1 192.168.1.24 93.xx.2.20   55775664bdad5fc9b4ad3bb222cdc56f.ico
      1 192.168.1.24 93.xx.2.20   5782a0aa207512ccb029b6d52bc3cb3b.jpeg
      1 192.168.1.24 93.xx.2.20   5bff68d2474c67939776a299fbfdd8bc.jpeg
      1 192.168.1.24 93.xx.2.20   7f1143ce870e3b9b78c29b0d9c5812b5.jpeg
      1 192.168.1.24 93.xx.2.20   8241b2dec34b1816d218001aac792fb7.jpeg
      1 192.168.1.24 93.xx.2.20   8e0c462a4e803b5441ce516dfccd4e9c.jpeg
      8 192.168.1.24 93.xx.2.20   ad516503a11cd5ca435acc9bb6523536.png
      1 192.168.1.24 93.xx.2.20   cf08740bd37789dc8cfd0775702779e8.jpeg
      2 192.168.1.24 93.xx.2.20   eb3173ad3c3d29c6e369943f04897321.jpeg
      2 192.168.1.24 93.xx.2.20   eb98d43d0d41d4b5a30affad5863dcf5.jpeg
      1 192.168.1.24 93.xx.2.20   f674452ebedaa6e6ecf5483b0e319fcf.ico
      1 192.168.1.24 93.xx.2.20   none.jpg

Otro log interesante es smtp_entities.log. Extraemos solo cierta información como IP origen, destino fichero..:

cat smtp_entities.log | /usr/local/bro/bin/bro-cut id.orig_h id.resp_h filename mime_type | sort | uniq -c
      1 8x.xxx.190.xx   192.168.1.xxx 12.jpg  image/jpeg
      1 8x.xxx.190.xx   192.168.1.xxx 4584-01-0ARRANxxxxNT Model.pdf    application/pdf
      1 8x.xxx.190.xx   192.168.1.xxx 4584-07-0OCxxxT PLAN_Grab.pdf     application/pdf
      1 8x.xxx.190.xx   192.168.1.xxx 4584-07-0_Hoxxxk.pdf     application/pdf
      1 8x.xxx.190.xx   192.168.1.xxx linux_server.pdf   application/pdf
      1 8x.xxx.190.xx   192.168.1.xxx CPT imagen_1.JPG       image/jpeg
      1 8x.xxx.190.xx   192.168.1.xxx IMG00026-20100502-1201.jpg      image/jpeg
      1 8x.xxx.190.xx   192.168.1.xxx P3250036.jpg    image/jpeg
      1 8x.xxx.190.xx   192.168.1.xxx P3250040.jpg    image/jpeg
      1 8x.xxx.190.xx   192.168.1.xxx P3260055.jpg    image/jpeg
      1 8x.xxx.190.xx   192.168.1.xxx P3260081.jpg    image/jpeg
      1 8x.xxx.190.xx   192.168.1.xxx P3260089.jpg    image/jpeg
      1 8x.xxx.190.xx   192.168.1.xxx P3260237.jpg    image/jpeg
      1 8x.xxx.190.xx   192.168.1.xxx P3290372.jpg    image/jpeg
      1 8x.xxx.190.xx   192.168.1.xxx Survey Status Report (INSB).pdf application/pdf
      1 8x.xxx.190.xx   192.168.1.xxx -       text/html
      1 8x.xxx.190.xx   192.168.1.xxx -       text/plain

Para el log smtp.log he usado un archivo .pcap del repositorio de Wireshark.org. El contenido es:

#fields ts      uid     id.orig_h       id.orig_p       id.resp_h       id.resp_p       trans_depth     helo    mailfrom        rcptto  date    from    to      reply_to        msg_id  in_reply_to     subject x_originating_ip        first_received  second_received last_reply      path    user_agent      is_webmail
#types  time    string  addr    port    addr    port    count   string  string  table[string]   string  string  table[string]   string  string  string  string  addr    string  string  string  vector[addr]    string  bool
1254722768.219663       1KZKrjywXUf     10.10.1.4       1470    74.53.140.153   25      1       GP      <gurpartap@patriots.in> <raj_deol2002in@yahoo.co.in>    Mon, 5 Oct 2009 11:36:07 +0530  "Gurpartap Singh" <gurpartap@patriots.in>       <raj_deol2002in@yahoo.co.in>    -       <000301ca4581$ef9e57f0$cedb07d0$@in>    -       SMTP    -       -       -       250 OK id=1Mugho-0003Dg-Un      74.53.140.153,10.10.1.4 Microsoft Office Outlook 12.0   F

En el ejemplo de arriba vemos el campo de tiempo (ts) cuyo formato es : 1254722768.219663. Si lo quereis ver en un formato más “agradable”, usaremos -d con bro-cut. Por ejemplo:

cat smtp.log | /usr/local/bro/bin bro-cut -d ts id.orig_h id.orig_p

===================

Y hasta aquí por hoy. Hasta la proxima que será en la Parte 4 y suguientes que seguiremos con Bro-IDS 2.0, trace-summary, veremos los otros logs y comenzaremos a ver el lenguaje de scripts de Bro-IDS 2.0.

Relacionado con Bro-IDS:

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

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

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

4 respuestas a Bro–IDS. Un sistema de detección de intrusiones basado en políticas especializadas. Parte 3. Bro 2.0.

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

  2. Pingback: Sistema de detección de intrusiones basado en políticas especializadas | B1nary0's Web

  3. Luis Ornelas dijo:

    Exelente articulo. La verdad este articulo es mucho mejor que leer la documentacion de Bro.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s