06 noviembre 2012

Honeypot con Kippo - I

Todo aquel que tenga o haya tenido un servidor en Internet con el puerto 22 abierto, habrá experimentado decenas de peticiones cada mes tratando de acceder con usuarios predecibles.

Kippo es una honeypot escrita en python que simula un servicio de SSH, registrando todas las combinaciones de usuarios y contraseñas e incluso simulando la interacción de la shell. Una forma divertida de capturar un grillo, meterlo en una jaula y ver lo que hace. 

En esta serie de entradas voy a contar paso a paso como montar el servicio y explotar los datos. 

Pese a que el script se ejecuta sin privilegios, es más que aconsejable ejecutarlo en una máquina virtual y en un entorno enjaulado. ¡Cualquier precaución es poca!

Montar un chroot e instalar los paquetes que más adelante serán necesarios, en CentOS es muy sencillo con estos comandos.


A continuación se descarga el software del SVN oficial, se crea el usuario y grupo, se establecen los permisos y se copia el fichero de configuración de ejemplo para editarlo posteriormente.



Es recomendable editar el fichero kippo.cfg y cambiar el nombre del hostname por otro, ya que mucha gente puede detectar que es una honeypot si ve el "sales" que viene por defecto.

El resto de la configuración está por defecto, exceptuando los datos que se usarán para la conexión a base de datos, que están descomentados y parametrizados según el usuario y base de datos que se crea en el siguiente paso.

El puerto se puede modificar, pero no establecer uno inferior a 1024, reservados únicamente para el usuario root. Como parte final, se redireccionará el tráfico usando iptables.



Lo siguiente es preparar el MySQL donde se almacenarán los datos. Esto es opcional, pero para explotar la información y ver la siguiente entrada es necesario.

Como el servicio se instaló con el yum inicial, se configura MySQL para que no abra ningún puerto editando el fichero /var/chroot/etc/my.cnf y añadiendo la línea skip-networking.



Se arranca el MySQL y se ejecuta el script para fortificarlo: eliminando bases de datos y usuarios temporales, el acceso remoto y estableciendo una contraseña para el usuario root.

También se crea la base de datos "kippo", a la que se le asigna una contraseña (en este caso OO!OO!OO!OO). Y con el comando SOURCE, se crea la estructura de la base de datos.

Ya está prácticamente todo, aunque con algunas opciones por defecto. El script se puede arrancar llamando al comando start.sh. Si algo fallase, el fichero kippo.log del directorio log/ mostraría el error.



Fuera de la jaula, para simular el puerto 22 se redirecciona al 2222 usando iptables.



También se puede parametrizar y mejorar mucho más el funcionamiento. Es a partir de aquí donde cada instalación se hará distinta, única y más divertida.
  • El fichero data/userdb.txt contiene los usuarios que aceptará el servicio SSH, por defecto root/123456, aunque puede modificarse con cualquier editor de texto.
  • El fichero fs.pickle de la raíz contiene la estructura de directorios y ficheros (vacios) por la que puede navegar el intruso. Se genera con la utilidad createfs.py que se encuentra en el directorio utils, de la forma: createfs.py > fs.pickle
  • Dentro del directorio honeyfs/ se encuentran los ficheros falsos que puede consultar el intruso.
  • En el directorio dl/ se almacena todo lo que el script-kiddie descargue con wget. 
Las conexiones, usuarios y contraseñas, además de en la base de datos, se almacenan en el fichero log/kippo.log y para ver como interactúa el intruso con la shell, se ha de consultar los registros almacenados en el directorio log/tty mediante la herramienta playlog.py.


En el caso de que se use playlog, se reproducirá el contenido tal y como muestra este vídeo.


3 comments :

akae dijo...

La mayoría de capturas muestran scripts de rastreo y diccionario, pero aun así es divertido ver como los rusos, chinos, etc intentan acceder al 22. Por cierto, el código de pastebin no sale en el feed :(

Felipe Jarenau dijo...

Me encanta.
Estoy deseando montar una de estas :-)

También hay unas cuantas risas con este otro:

http://www.youtube.com/watch?v=1Woni0hNxgs

CarŁoko Encrypted dijo...

Muy buen material, aunque siempre he tenido la duda de como debería ir posicionado en la red,¿como una dmz? o es mejor dejarlo posicionado a la par del FW ?..que creen?