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.
En 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:
Decir 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:
Enmarcado 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.
Pingback: Bro–IDS. Un sistema de detección de intrusiones basado en políticas especializadas. Parte 4. Bro 2.0. | Seguridad y Redes
Pingback: Sistema de detección de intrusiones basado en políticas especializadas | B1nary0's Web
Exelente articulo. La verdad este articulo es mucho mejor que leer la documentacion de Bro.
Gracias Luís por tu comentario y por leer el blog.