The Information Systems and Computer Applications examination covers material that is usually taught in an introductory college-level business information systems course.

Honeypot con Kippo – I by Alejandro Ramos

 

 
 
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/ttymediante la herramienta playlog.py.
 

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

http://youtu.be/BfbVn1ZAnMw

Comments are closed.