En el capítulo de hoy vamos a seguir dando una vuelta sobre el mundo de la recolección de inteligencia para nuestra defensa. Este proceso se puede emplear con el tráfico generado por el honeypot que instalamos en este capítulo.
El propósito de usar PassiveDns del señor Edward Bjarte, es analizar el contenido de un fichero pcap para extraer los registros dns. Se puede pasar como parámetro un fichero, o simplemente ejecutar la herramienta. Por defecto se pone el adaptador eth0 en modo promiscuo y comienza a analizar el tráfico de registros DNS.
Otra de las gestiones que podemos realizar con PassiveDns es integrarlo con OSSIM mediante el plugin que nos traen, en fase beta, disponible desde aquí. Si observas la definición de la regular expressión que hace el parser del log, lo mismo puedes reusarlo para tus propios propósitos :-)
El proceso de instalación comienza solventando las dependencias. Un poquito de Git y compilando.
$ sudo apt-get install git-core binutils-dev libldns1 libldns-dev libpcap-devlibdate-simple-perl
$ git clone git://github.com/gamelinux/passivedns.git
$ cd passivedns/
$ autoreconf --install
$ ./configure
$ make
Ahora podemos realizar algunas operaciones, vamos a empezar con lo más básico, esnifar alguna petición dns y ver el formato.
Vemos que pone el adaptador en modo sniffing y comienza a procesar los paquetes dns.
La idea original es utilizarlo para listar el contenido de los pcap que vamos a analizar del honeypot o cualquier otro sistema. La "salida" o el listado lo puedes emplear como te plazca. Podemos insertarlo en una base de datos mysql con un sencillo procedimiento, podemos exportarlo al fichero de log, tirarlo al syslog, configurar el delimitador de campos...
En mi caso he tenido que instalar el módulo Datetime para Perl desde Cpan, y no como indica el procedimiento oficial.
perl -MCPAN -e shell
install DateTime
El comando para ejecutar el volcado en mysql es:
sudo perl pdns2db.pl --file /var/log/passivedns.log
Una de las cosas que me gusta de almacenar la lista en Mysql es que en la tabla de resultados me almacena registros únicos con un hitcount, así me ahorro el proceso de depurar los registros duplicados. En un registro pcap de muchos Mb/Gb en un sistema en producción, es MUY útil.
Hay que tener una cosa en cuenta en la utilización del script. Cada vez que se ejecute, volcará los registros que encuentre en el log, por lo que un cat /dev/null > /var/log/passivedns.log al finalizar el script no estaría mal...
Las opciones son muy interesantes, por ejemplo, poder gestionar una whitelist mediante un fichero, para disminuir los registros a investigar...
--file <file> : set the file to monitor for passivedns entries (/var/log/passivedns.log)
--batch : process a file and exit when done
--skiplist <file> : file with a list of domains to skip DB insertion
--onlylist <file> : file with a list of domains to only insert into DB
--whitelist <file> : file with a list of domains to not check for in blacklist
--blacklist <file> : file with a list of domains to alert on
--skiplist-pcre <file> : file with regexp list of domains to skip DB insertion
--onlylist-pcre <file> : file with regexp list of domains to only insert into DB
--whitelist-pcre <file>: file with regexp list of domains to not check for in blacklist
--blacklist-pcre <file>: file with regexp list of domains to alert on
--alertlog <file> : file to log alerts to (/var/log/passivedns-alert.log)
--nodb : dont talk to the DB at all
--daemon : enables daemon mode
--verbose : enables some verboseness
--debug <int> : enable debug messages (default: 0 (disabled))
--help : this help message
--version : show pdns2db.pl version
El uso que le des es cosa tuya, pero con esta sencilla herramienta podemos obtener rápidamente el listado de registros dns consultados sobre un pcap, algo muy útil para forense o para el ámbito del proyecto de inteligencia que llevamos en marcha.
Como siempre, gracias por leerme, espero que os guste.