lunes, 16 de marzo de 2015

Honeypots XIII nuevo cada noche + sistema de control aislado de la red para analizar la información. HoneyDrive+Vmware+Powercli

Estimados amigos de inseguros.

Después de tantos artículos sobre el asunto de Honeypots, creo que podemos darle forma con un proyecto concreto basado en un despliegue sobre VMware, muy asequible como vps en cualquier operador, y un conjunto de máquinas y configuraciones dedicadas específicamente a mantener un Honeypot.

Uno de los retos con el Honeypot es mantener su integridad. Si creamos una estrategia para generar automaticamente una máquina virtual con el honeypot cada noche, nos aseguramos que en caso de compromiso, al menos, el atacante deberá realizar las mismas acciones cada día de explotación para tener acceso. No vamos a tener un Honeypot comprometido realizando el mal a sus anchas, y nosotros recolectando logs... Legalmente creo que seríamos los responsables de las acciones del criminal.


La idea general es tener en un host VMware, una máquina virtual firewall gratuita como pueda ser pfsense, o un cfs sobre iptables, un mikrotik virtual o similar. Esto nos permite dar visibilidad hacia la parte "interna" de nuestro sistema, las máquinas virtuales con los Honeypots y sobre todo, un sistema aislado y seguro para conectarnos hacia nuestro "Command & Control" y no tener que abrir una puerta conectando nuestros sistemas hacia un Honeypot, un sistema que a priori se despliega para que te "ciber-zurran" :-).

Basando nuestro Honeypot en la distro. Honeydrive versión actual .
El proceso de instalación sobre ESXi lo puedes leer aquí.

Aparte de cambiar el teclado a tu gusto, debes realizar el cambio de clave honeydrive por una que NO TENGA NADA QUE VER CON SISTEMAS que tengamos en producción. No uses ni la misma combinación, totalmente distinta. sudo passwd es más que suficiente.

Aparte de la máquina virtual instalada como Honeydrive, vamos a crear un disco duro secundario con VMware de 20 gb, que usaremos para montar/desmontar la información de los sistemas en el Honeypot y luego pasárselo a una máquina de confianza para recolectar la información.

Importante este punto. Para crear el disco duro que pueda ser accesible por distintas máquinas tenemos que hacer una configuración un tanto distinta de como estamos acostumbrados.

Para empezar, debemos acceder al ESXi por ssh y desde el directorio del volumen donde reside nuestra máquina, crear un disco eagerzerothick con este comando:

vmkfstools -d eagerzeroedthick -c 20G -a lsilogic intercambio.vmdk
desde la ruta: /vmfs/volumes/

Una vez creado el disco, lo agregamos a la máquina virtual como siempre.

Ahora cambiamos la configuración del adaptador SCSI para que sea Virtual, y así poder acceder desde varias máquinas virtuales en el mismo host.



Podemos montar el disco, según si has particionado ya algo, con los pasos en este enlace. Recuerda que crear la partición solo lo realizarás la primera vez, en las operaciones diarias solo realizaremos la parte de montaje/desmontaje entre las distintas máquinas virtuales.

No olvides modificar tu /etc/fstab en ambas máquinas para que se monte el disco al inicio.

Un dato importante, no podrás tener las dos máquinas instaladas corriendo debido al disco, la VM activa bloquea el disco.

Esto implicaría coordinar con el proceso de restauración del Honeypot mediante Powercli, el encendido de la máquina control y posterior envio de información. Esta tarea la realizaremos con el script modificado al final del artículo en Powershell, asociado a una tarea programada.

Ya tenemos el Honeypot y un disco duro para logs, vamos a montar algún servicio honey y a cambiar la configuración para que escriba en el disco.

Antes de nada, me gusta iniciar tcpdump al arrancar la máquina virtual, filtrando solo los puertos que ofrecemos como Honeypot. De esta manera, podemos tener un pcap diario de la actividad contra al servicio Honey. Si enfocamos la captura a solo unos puertos puede que perdamos el sentido del Honeypot si lo que queremos es encontrar patrones de actividad basados en el acceso a distintos puertos, por ejemplo, si estamos detectando un bot que explota algún port knocking por defecto. Para el caso de obtener estadísticas, ip reputation, y algunos comando o la descarga de malware, me basta con hacer el tcpdump normal.

Podría valer este: =tcpdump -i eth0  -n dst port 22 or 24 -w /media/disk1/pcap.pcap

Empezamos con el famoso Kippo, que ya vimos alguna configuración por aquí.

Lo que voy a hacer es copiar todos los logs que genera, incluido la bbdd Kippo para verlo luego en Kippo-Graph, con un cron programado 10 minutos antes de apagar la máquina.

Qué cosas voy a copiar en ese disco duro? que datos voy a necesitar para visualizar en mis sistemas?
Para el ejemplo de Kippo y Kippo-graph podemos copiar:

#! /bin/bash
clave=cacadevaca
vacio=`ls -l /honeydrive/kippo/dl | grep -v total | wc -l`
now=$(date +"%m_%d_%y")
if [ ! -d /media/disk1/log-kippo/$now ]
then
mkdir /media/disk1/log-kippo/$now
fi
cp /honeydrive/kippo/log/kippo.log* /media/disk1/log-kippo/$now
if [ $vacio != 0 ]
then
cp /honeydrive/kippo/dl/* /media/disk1/log-kippo/$now
fi
if [ -f /media/disk1/pcap.pcap ]
then
cp /media/disk1/pcap.pcap /media/disk1/log-kippo/$now/pcap.pcap
fi
rm -f /media/disk1/pcap.pcap
rm -f /honeydrive/kippo/dl/*
cat /dev/null > /honeydrive/kippo/log/kippo.log
mysql -u root --password=$clave kippo -e "select * from auth" -B > /media/disk1/log-kippo/$now/auth.csv
mysql -u root --password=$clave kippo -e "select * from clients" -B > /media/disk1/log-kippo/$now/clients.csv
mysql -u root --password=$clave kippo -e "select * from downloads" -B > /media/disk1/log-kippo/$now/downloads.csv
mysql -u root --password=$clave kippo -e "select * from input" -B > /media/disk1/log-kippo/$now/input.csv
mysql -u root --password=$clave kippo -e "select * from sensors" -B > /media/disk1/log-kippo/$now/sensors.csv
mysql -u root --password=$clave kippo -e "select * from sessions" -B > /media/disk1/log-kippo/$now/sessions.csv
mysql -u root --password=$clave kippo -e "select * from ttylog" -B > /media/disk1/log-kippo/$now/tty.csv


Ten en cuenta en cambiar el path donde has montado tu disco duro de intercambio.

Preparamos un cron para que a las 23:45 realice la copia, ya que vamos a programar que a las 24:00 la máquina Honeypot se apague, se borre, se regenere desde una plantilla y se inicie.

Ahora es el turno de montar un sistema de control. Una máquina aislada del Honeypot, en la que solo se permita el acceso por ssh desde lo que denominaría la sede. En esta máquina vamos a montar el disco duro en el que se guarda toda la información del Honeypot, para poder extraer la información. De esta manera, el honeypot NUNCA tendrá una conexión hacia ningún sistema de producción, el intercambio lo haremos montando el disco duro de datos en otra máquina que si tiene acceso al sistema de producción. Esta máquina debe estar muy capada.

Cualquier máquina linux que montes es buena. El asunto ahora es agregarle en Vmware un segundo disco, que será el mismo segundo disco que hemos montado en la máquina Honeypot, osea, el de intercambio...

Comprobamos que accedemos al disco duro de intercambio.

Ahora es el turno de coordinar el tiempo entre que el Honeypot está apagado, arrancamos la máquina de control, realizamos el volcado de información hacia nuestra sede, apagamos la máquina de control e iniciamos el Honeypot de nuevo. Aquí deberías tener un script al inicio para volcar la información. Omito de momento esta parte ya que mi destino, de momento, será la propia máquina Honeypot control.

Recuerda este artículo para automatizar la tarea.

El final del script es este:

Connect-VIServer -Server ip-server-esxi -User usuario -Password contraseña
Stop-VM -VM "nombre de la clonada" -Kill -Confirm:$false
Remove-VM "nombre de la clonada" -DeletePermanently -Confirm:$false
Clone-MasterVM -MasterName "nombre de la original"  -CloneName "nombre de la clonada" -DatastoreName "nombre del datastore" -Register -PowerON

Vamos a realizar una modificación. Trás apagar la máquina virtual Honeypot, vamos a añadir:

Connect-VIServer -Server ip-server-esxi -User usuario -Password contraseña
*conexión al vmware
Stop-VM -VM "nombre de la clonada" -Kill -Confirm:$false
*parar el honeypot
Start-Sleep -s 60
*espera 1 minuto a que se apague.
Remove-VM "nombre de la clonada" -DeletePermanently -Confirm:$false
*borra la máquina honeypot
Start-VM -VM control-honeypot
*arranco la máquina de control
Start-Sleep -s 300
*espero 5 minutos para que arranque y ejecute un script de inicio volcando información.
Stop-VM -VM "control-honeypot" -Kill -Confirm:$false
*apago la máquina de control.
Clone-MasterVM -MasterName "nombre de la original"  -CloneName "nombre de la clonada" -DatastoreName "nombre del datastore" -Register -PowerON
*clono el honeypot plantilla a una máquina nueva y la inicio.

De momento el esquema es:

EQUIPO VMWARE ESXi.
-Máquina firewall para natear la IP pública con las máquinas virtuales y el propio Vsphere client.
 - Ip pública al firewall.
 - Nateos al puerto ssh y vsphere client al host Vmware. Ip privada el host.
 - Nateos al puerto del Honyepot configurado.
 - Nateo a vlan distinta para la máquina de control. Todos puertos cerrados salvo ssh filtrado a sede.
-Máquina Honeypot Honeydrive.
-Máquina Debian para recibir la información.
*Disco duro compartido entre la máquina Honeypot y Control.
*script modificado del artículo anterior con este.

Tenemos un Honeypot con kippo que se regenera todas las noches y guarda la información en un disco duro compartido con otra máquina virtual, que será la que usemos para trabajar la información. Digamos que es la parte de infraestructura.

En el próximo capítulo de la serie completaremos el script Powershell con las típicas mejoras que habrás podido observar, y realizaremos algún trabajo con la clasificación de los logs que nos ha generado Kippo. Tambien pasaremos por snort y similares el fichero pcap de captura.

Espero que os guste el artículo, gracias por leerme !!!