lunes, 16 de marzo de 2015

IP REPUTATION Collective Intelligence Framework. Parte 2.

Estimados amigos de Inseguros !!!

Vamos a seguir madurando el concepto de IP REPUTATION que comenzamos en el pasado artículo.


En esta ocasión, vamos a preparar el framework de trabajo para obtener la información de seguridad de eventos no solo para nuestro sistema OSSIM como vimos, sino para otras fuentes públicas.

Vamos a usar el proyecto CIF Collective Intelligence Framework elaborado por REN-ISAC que me recomendó el profesor Jose Luis Chica. Gracias !!!

El proyecto implementa el formato IODEF  Incident Object Description Exchange Format . Volvemos a las épocas de los RFC´s :-)


Se puede observar que en la descripción del proyecto no aparece esta información, ya que la definición del formato IODEF se contempla como formato de transporte, y no de almacenamiento de larga duración, por lo que CIF implementa una definición de IODEF adaptada a un almacenamiento en formato JSON no en XML con en origen indica el RFC. El resultado es una tabla con una sola columna de texto. Se crean índices con la extracción de los metadatos, y al parecer, la velocidad es superior que en un planteamiento clásico de estructura SQL normalizada, con mil millones de tablas y campos.

Una imagen vale más que mil palabras. 


A diferencia de un SIEM, con CIF podemos no solo recolectar información, sino que podemos generar el output que necesitamos para incorporar en nuestros sistemas de prevención. Podemos generar la alerta para que nuestro Snort o Bro PAREN el ataque. Podemos cargar la información en IPTABLES, etc. Con OSSIM por ejemplo tendrías que hacer lo que comentamos en el anterior post, crearte un script que ejecute una inserción de la ip del evento en tu sistema. 
La lista de Outputs que genera CIF es: Bind Zone config, BRO, CSV, HTML,  IPTABLES, JSON, PCAPFILTER , SNORT, TABLE

La comodidad de usar una API nos permite usar la parte del proyecto que nos interese, consultando o exportando información de una manera controlada.

Podemos crear una estructura federada para compartir información entre varios CIF. El objetivo primordial de un proyecto como este, desarrollado para dar cobertura a los CERT´s, es el de compartir la información de amenazas.



  
El otro punto es que se integra con numerosas fuentes de información públicas o FEEDS. Como puedan ser:*algunas no funcionan bien, o bien ya no existen publicamente*

http://honeytarg.cert.br/honeypots/
http://exposure.iseclab.org/
http://arakis.pl/en/index.html
http://www.spamcop.net/
http://honeytarg.cert.br/spampots/
http://zeltser.com/combating-malicious-software/malicious-ip-blocklists.html
http://contagiodump.blogspot.com/2010/11/links-and-resources-for-malware-samples.html
http://urlquery.net/index.php
http://www3.malekal.com/malwares/
http://jsunpack.jeek.org/dec/go?list=1
http://vxvault.siri-urz.net/ViriList.php
http://minotauranalysis.com/malwarelist.aspx -- overlaps malc0de and cleanmx
http://rss.uribl.com/nic/NAUNET_REG_RIPN.xml
http://www.malwareblacklist.com/showMDL.php
http://abusix.org/service/spamfeeds
http://atlas.arbor.net/summary/fastflux?out=xml
http://dshield.org/diary.html?storyid=12373
https://reputation.alienvault.com/reputation.data
http://security-research.dyndns.org/pub/malware-feeds/ponmocup-botnet-domains.txt
http://security-research.dyndns.org/pub/malware-feeds/ponmocup-botnet-ips.txt
http://security-research.dyndns.org/pub/malware-feeds/ponmocup-malware-domains.txt
http://security-research.dyndns.org/pub/malware-feeds/ponmocup-malware-ips.txt
http://malwareint.com
http://www.senderbase.org/home/detail_virus_source
http://callbackdomains.wordpress.com
http://labs.snort.org/iplists/
http://www.enisa.europa.eu/activities/cert/support/proactive-detection/proactive-detection-report
http://rules.emergingthreats.net/open/suricata/rules/compromised-ips.txt
http://rules.emergingthreats.net/open/suricata/rules/botcc.rules
http://rules.emergingthreats.net/open/suricata/rules/rbn-ips.txt
https://www.projecthoneypot.org/list_of_ips.php
http://rules.emergingthreats.net/open/suricata/rules/tor.rules
http://rules.emergingthreats.net/open/suricata/rules/compromised.rules
http://www.malwaredomainlist.com/hostslist/ip.txt
http://rules.emergingthreats.net/open/suricata/rules/rbn.rules
http://www.mtc.sri.com/live_data/attackers/
http://intel.martincyber.com/ip/
https://reputation.alienvault.com/reputation.generic
https://www.openbl.org/lists/base.txt
http://www.blocklist.de/lists/ssh.txt
https://palevotracker.abuse.ch/
http://www.malwaregroup.com/ipaddresses
http://www.ciarmy.com/list/ci-badguys.txt
http://www.malware.com.br/cgi/submit?action=list
http://www.autoshun.org/files/shunlist.html
abusechweb http://dnsbl.abuse.ch/webabusetracker.php
arbor http://atlas-public.ec2.arbor.net/public/ssh_attackers
autoshun http://www.autoshun.org/files/shunlist.csv
badguys http://www.t-arend.de/linux/badguys.txt
blacklisted http://www.infiltrated.net/blacklisted
brawg http://www.brawg.com/hosts.deny
cleanmxv http://support.clean-mx.de/clean-mx/xmlviruses?response=alive&format=csv&fields=url,ip,domain&domain=
cleanmxp http://support.clean-mx.de/clean-mx/xmlphishing?response=alive&format=csv&fields=url,ip,domain&domain=
danger http://danger.rulez.sk/projects/bruteforceblocker/blist.php
denyhost http://stats.denyhosts.net/stats.html
dshield http://www.dshield.org/ipsascii.html?limit=5000
dynastop http://dynastop.tanaya.net/DynaStop.BleedingThreats.conf
emergingthreats http://www.emergingthreats.net/rules/bleeding-compromised.rules
evilssh http://vmx.yourcmc.ru/BAD_HOSTS.IP4
geopsy http://www.geopsy.org/blacklist.html
haleys http://charles.the-haleys.org/ssh_dico_attack_hdeny_format.php/hostsdeny.txt
kidsclinic http://www.kids-clinic.jp/uni/ipaddress/new_log
kolatzek http://robert.kolatzek.org/possible_botnet_ips.txt
malekal http://www3.malekal.com/exploit.txt
maldom http://mirror1.malwaredomains.com/files/domains.txt
mdl http://www.malwaredomainlist.com/mdl.php?colsearch=All&quantity=All&search=
prometheus http://downloads.prometheus-group.com/delayed/rules/modsec/domain-blacklist.txt
skygeo http://sky.geocities.jp/ro_hp_add/ro_hp_add_hosts.txt
sshbl http://www.sshbl.org/list.txt
stopforumspam http://www.stopforumspam.com/downloads/bannedips.csv
surriel rsync://psbl-mirror.surriel.com/psbl/psbl.txt

Imagina parsear todas estas fuentes a mano :-)

Existe otro proyecto parecido. AbuseHelper pero no he podido investigar mucho, y por lo que veo, está poco actualizado
La instalación realizada sobre Debian Wheezy requiere de las siguientes dependencias y paquetes:

sudo aptitude -y install rng-tools postgresql apache2 apache2-threaded-dev gcc g++ make libexpat1-dev libapache2-mod-perl2 libclass-dbi-perl libdigest-sha-perl libnet-cidr-perl libossp-uuid-perl libxml-libxml-perl libxml2-dev libmodule-install-perl libapache2-request-perl libdbd-pg-perl bind9 libregexp-common-perl libxml-rss-perl libapache2-mod-gnutls libapreq2-dev rsync libunicode-string-perl libconfig-simple-perl libmime-lite-perl libfile-type-perl libtext-csv-perl libio-socket-inet6-perl libapr1-dbg libhtml-table-perl libdate-manip-perl libtry-tiny-perl libclass-accessor-perl pkg-config libnet-ssleay-perl vim libjson-xs-perl libextutils-parsexs-perl libdatetime-format-dateparse-perl libnet-patricia-perl libdatetime-perl libtext-table-perl libcpan-meta-perl libmodule-build-perl

Si usas otra distribución puedes consultar la dependencias:
El siguiente paso es instalar zeromq, paquete necesario para la gestión de colas de mensajes entre componentes y algunos componentes más que requieren instalación por fuente.

$ wget http://download.zeromq.org/zeromq-2.2.0.tar.gz
$ tar -zxvf zeromq-2.2.0.tar.gz
$ cd zeromq-2.2.0
$ ./configure && make && sudo make install
$ sudo ldconfig

sudo PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install Test::SharedFork,Test::TCP,Net::Abuse::Utils,Regexp::Common::net::CIDR,LWP::Protocol::https,Google::ProtocolBuffers,Iodef::Pb::Simple,Compress::Snappy,Snort::Rule,Time::HiRes,Net::Abuse::Utils::Spamhaus,Net::SSLeay,Net::DNS::Match,Log::Dispatch,Sys::MemInfo,LWPx::ParanoidAgent,ZeroMQ,Net::Whois::IP,Net::DNS,Email::Address'
 
$ wget http://search.cpan.org/CPAN/authors/id/J/JS/JSTOWE/Linux-Cpuinfo-1.7.tar.gz
$ tar -zxvf Linux-Cpuinfo-1.7.tar.gz
$ cd Linux-Cpuinfo-1.7
$ perl Makefile.PL && make && sudo make install
 
Ahora nos auto-baneamos de Internet durante un tiempo :-)

iface eth0 inet
        dns-nameservers 127.0.0.1
sudo vim /etc/resolv.confnameserver 127.0.0.1

Añadimos el usuario CIF:

sudo adduser --disabled-password --gecos '' cif

Configuramos algunos parámetros en Apache.

sudo a2ensite default-sslsudo a2enmod ssl perl apreq

sudo vi /etc/apache2/sites-available/default-ssl
<IfModule mod_ssl.c>

<VirtualHost _default_:443>
+      PerlRequire /opt/cif/bin/http_api.pl
+      Include /etc/apache2/cif.conf
....
 
sudo vi /etc/apache2/cif.conf
 
<Location /api>
    SetHandler perl-script
    PerlResponseHandler CIF::Router::HTTP
    PerlSetVar CIFRouterConfig "/home/cif/.cif"
</Location>
 
Por último configuramos rng-tools para generar numeros random.

echo 'HRNGDEVICE=/dev/urandom' | sudo tee -a /etc/default/rng-tools

Configuramos BIND y Postgres con las instrucciones que nos proporciona la documentación oficial.Si tienes problemas al reiniciar Bind puedes comprobar el fallo ejecutando: named-checkconf

Ahora instalamos el framework CIF.

Paramos Apache
$ tar -xzvf cif-v1-1.X.X.tar.gz
$ cd cif-v1-1.X.X
$ ./configure && make testdeps
$ sudo make install
$ sudo make initdb 

El proceso de configuración es muy sencillo y está bien documentado aquí.

Este proceso tarda bastante, quizás horas.


Una vez terminado el proceso de instalación, configurada la rotación de logs y creados los cron para ejecutar las actualizaciones, es turno de probar la herramienta.

Para poder consultar la información tenemos varios métodos, un cliente instalado, un plugin para los navegadores Firefox y Chrome y la API.

Vamos a instalar el complemento en Chrome tal como lo índica el manual. Descargamos el plugin. Y configuramos:



Configuramos la dirección del servidor, la API key de cliente y probamos conexión.



Con esto ya podemos consultar nuestro servidor CIF desde Chrome. Vamos a hacer una prueba. Podemos hacer click sobre el icono de CIF en la parte superior derecha, o directamente sobre un dominio, correo, IP o similar, seleccionarlo y botón derecho.




Ya tenemos instalado CIF server para recolectar inteligencia de distintas fuentes de información mas  o menos públicas. Podemos consultar manualmente esta información con el Plugin para Chrome. 

En los próximos episodios seguiremos trabajando con la idea de integrar en un única base de datos, nuestras IP´s, cotejando la información con estas fuentes, y creando una base de datos sólida.

Espero que os guste, gracias por leerme.