Como sabemos, un honeypot es un emulador de un servicio (en este caso de SSH) que se utiliza como señuelo para entretener y registrar las acciones de un atacante sin comprometer el sistema en si. De esta manera, se pueden analizar las técnicas y tipos de ataques que podemos sufrir.

Instalación y configuración

La instalación mas sencilla de Kippo involucra una única dependencia que se puede instalar de la siguiente manera:

$ sudo apt-get install python-twisted

Ahora si descargamos la aplicación, la descomprimimos y ejecutamos.

$ wget http://kippo.googlecode.com/files/kippo-0.5.tar.gz
$ tar -xvzf kippo-0.5.tar.gz
$ cd kippo-0.5

Para ver los accesos (y sus intentos) podemos verificar el archivo kippo.log en la carpeta /log:

$ cat log/kippo.log | grep " login attempt"
2012-10-12 09:20:16-0300 [SSHService ssh-userauth on HoneyPotTransport,0,10.10.1.51] login attempt [root/matut] failed
2012-10-12 09:20:18-0300 [SSHService ssh-userauth on HoneyPotTransport,0,10.10.1.51] login attempt [pepe/pepe] failed
2012-10-12 09:20:38-0300 [SSHService ssh-userauth on HoneyPotTransport,1,10.10.1.51] login attempt [root/621] failed
2012-10-12 09:20:40-0300 [SSHService ssh-userauth on HoneyPotTransport,1,10.10.1.51] login attempt [pirulo/23r] failed
2012-10-12 09:21:33-0300 [SSHService ssh-userauth on HoneyPotTransport,2,10.10.1.51] login attempt [pablo/1256] failed
2012-10-12 09:22:14-0300 [SSHService ssh-userauth on HoneyPotTransport,3,10.10.1.51] login attempt [pablo/6540] failed
2012-10-12 09:22:24-0300 [SSHService ssh-userauth on HoneyPotTransport,4,10.10.1.51] login attempt [pepe/12456] failed
2012-10-12 09:27:26-0300 [SSHService ssh-userauth on HoneyPotTransport,3,10.10.1.51] login attempt [root/123456] succeeded

Con esta configuración los registros se manejan sobre archivos de texto, pero podemos hacer que se escriban en una base de datos MySQL generando la siguiente estructura y cambiando el archivo de configuración.

$ mysql -uroot -p
mysql> CREATE DATABASE kippo;
mysql> CREATE USER 'usuario'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON kippo.* TO 'usuario'@'localhost';
mysql> FLUSH PRIVILEGES;
 
$ mysql -uusuario -p -D kippo < ./doc/sql/mysql.sql

Añadimos la configuración de MySQL al final del archivo de configuración de Kippo, kippo.cfg:

[database_mysql]
host = localhost
database = kippo
username = usuario
password = password

Ahora se pueden hacer consultas a la BBDD, como por ejemplo cuales fueron las últimas 10 combinaciones de usuario/password recibidas:

$ mysql -u usuario -p -D kippo -e "select * from auth order by timestamp desc limit 10;"
+-----+----------------------------------+---------+----------+------------------------------+---------------------+
| id  | session                          | success | username | password                     | timestamp           |
+-----+----------------------------------+---------+----------+------------------------------+---------------------+
| 153 | 7258df989e6d11e1be4f00031d3cf419 |       0 | root     | rk08xve12!                   | 2012-10-11 09:07:51 |
| 152 | 70c8b7e89e6d11e1be4f00031d3cf419 |       0 | root     | bufusemata                   | 2012-10-11 09:07:49 |
| 151 | 6f30e1949e6d11e1be4f00031d3cf419 |       0 | root     | murge123                     | 2012-10-11 09:07:46 |
| 150 | 6d9fe3529e6d11e1be4f00031d3cf419 |       0 | pepe     | iamena                       | 2012-10-11 09:07:43 |
| 149 | 6c10533c9e6d11e1be4f00031d3cf419 |       0 | root     | pulamee1985                  | 2012-10-11 09:07:41 |
| 148 | 6a8135a49e6d11e1be4f00031d3cf419 |       0 | root     | Zpflje,fkczddjlbnmsnjnGFHJKM | 2012-10-11 09:07:38 |
| 147 | 68e833509e6d11e1be4f00031d3cf419 |       0 | pirulo   | yacheicDokdipow              | 2012-10-11 09:07:35 |
| 146 | 675810649e6d11e1be4f00031d3cf419 |       0 | root     | Y88..sse                     | 2012-10-11 09:07:33 |
| 145 | 65c925449e6d11e1be4f00031d3cf419 |       0 | root     | ~X4CKeR                      | 2012-10-11 09:07:30 |
| 144 | 6439d5849e6d11e1be4f00031d3cf419 |       0 | root     | vKe4                         | 2012-10-11 09:07:28 |
+-----+----------------------------------+---------+----------+------------------------------+---------------------+

Y ahora si arrancamos el honeypot:

$ ./start.sh
Starting kippo in background...Loading dblog engine: mysql
Generating RSA keypair...
done.

Verificando su funcionamiento:

Con el comando netstat podemos comprobar que el honeypot está funcionando:

$ sudo netstat -atnp | grep 2222
tcp        0      0 0.0.0.0:2222            0.0.0.0:*               ESCUCHAR    4401/python

Desde otro equipo, podemos podemos intentar loguearnos a nuestro falso ssh (la combinación usuario/password que dejara acceder con la configuración por default es root/123456):

$ ssh -l root -p 2222 hostServidor

Con el comando playlog (dentro de la carpeta utils) se puede reproducir alguna de las sesiones generadas.

$ ./utils/playlog.py -b -m 2 ./log/tty/20121012-093347-1723.log 0

Aquí un ejemplo de dicha salida

Redireccionando el puerto 2222 al 22 (como utiliza generalmente el SSHd)

sudo iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 22 -j REDIRECT  --to-port 2222
$ nmap -PN -sV -p 22 hostServidor
 
Starting Nmap 4.62 ( http://nmap.org ) at 2012-10-11 12:00 ART
Interesting ports on hostServidor:
PORT     STATE SERVICE VERSION
22/tcp open  ssh      (protocol 2.0)
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at http://www.insecure.org/cgi-bin/servicefp-submit.cgi :
SF-Port2222-TCP:V=4.62%I=7%D=10/12%Time=507830A1%P=x86_64-unknown-linux-gnu%r(NULL,1C8,"SSH-2\.0-OpenSSH_5\.1p1\x20Debian-5\r\n\0\0\x01\xa4\x04\x14\x
SF:a8-\x01\xfa\xc0\t\x82\x8d\x96\xc90\xc7\x9b\xf8\xba\x0e\0\0\0\x1adiffie-
SF:hellman-group1-sha1\0\0\0\x07ssh-rsa\0\0\0\x85aes256-ctr,aes256-cbc,aes
SF:192-ctr,aes192-cbc,aes128-ctr,aes128-cbc,cast128-ctr,cast128-cbc,blowfi
SF:sh-ctr,blowfish-cbc,3des-ctr,3des-cbc\0\0\0\x85aes256-ctr,aes256-cbc,ae
SF:s192-ctr,aes192-cbc,aes128-ctr,aes128-cbc,cast128-ctr,cast128-cbc,blowf
SF:ish-ctr,blowfish-cbc,3des-ctr,3des-cbc\0\0\0\x12hmac-sha1,hmac-md5\0\0\
SF:0\x12hmac-sha1,hmac-md5\0\0\0\tnone,zlib\0\0\0\tnone,zlib\0\0\0\0\0\0\0
SF:\0\0\0\0\0\0\xe6\xe6\)'");
MAC Address: 00:50:8D:9C:04:4A (Abit Computer)
 
Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.670 seconds

Ahora si, con un cliente de ssh, usuarios y password de Kippo (root/123456) accedemos al falso servicio, en el cual podemos ejecutar algunos comandos como ls o ps.

$ ssh root@hostServidor
Password:
hostServidorKippo:~# ls -l
drwxr-xr-x 1 root root 4096 2012-10-12 12:03 .
drwxr-xr-x 1 root root 4096 2012-10-12 12:03 ..
drwxr-xr-x 1 root root 4096 2009-11-06 08:16 .debtags
-rw------- 1 root root 5515 2009-11-20 06:08 .viminfo
drwx------ 1 root root 4096 2009-11-06 08:13 .aptitude
-rw-r--r-- 1 root root  140 2009-11-06 08:09 .profile
-rw-r--r-- 1 root root  412 2009-11-06 08:09 .bashrc
hostServidorKippo:~# ps -a
USER       PID %%CPU %%MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   2100   688 ?        Ss   Nov06   0:07 init [2]  
root         2  0.0  0.0      0     0 ?        S<   Nov06   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S<   Nov06   0:00 [migration/0]
root         4  0.0  0.0      0     0 ?        S<   Nov06   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   Nov06   0:00 [watchdog/0]
root         6  0.0  0.0      0     0 ?        S<   Nov06   0:17 [events/0]
root         7  0.0  0.0      0     0 ?        S<   Nov06   0:00 [khelper]
root        39  0.0  0.0      0     0 ?        S<   Nov06   0:00 [kblockd/0]
root        41  0.0  0.0      0     0 ?        S<   Nov06   0:00 [kacpid]
root        42  0.0  0.0      0     0 ?        S<   Nov06   0:00 [kacpi_notify]
root       170  0.0  0.0      0     0 ?        S<   Nov06   0:00 [kseriod]
root       207  0.0  0.0      0     0 ?        S    Nov06   0:01 [pdflush]
root       208  0.0  0.0      0     0 ?        S    Nov06   0:00 [pdflush]
root       209  0.0  0.0      0     0 ?        S<   Nov06   0:00 [kswapd0]
root       210  0.0  0.0      0     0 ?        S<   Nov06   0:00 [aio/0]
root       748  0.0  0.0      0     0 ?        S<   Nov06   0:00 [ata/0]
root       749  0.0  0.0      0     0 ?        S<   Nov06   0:00 [ata_aux]
root       929  0.0  0.0      0     0 ?        S<   Nov06   0:00 [scsi_eh_0]
root      1014  0.0  0.0      0     0 ?        D<   Nov06   0:03 [kjournald]
root      1087  0.0  0.1   2288   772 ?        S<s  Nov06   0:00 udevd --daemon
root      1553  0.0  0.0      0     0 ?        S<   Nov06   0:00 [kpsmoused]
root      2054  0.0  0.2  28428  1508 ?        Sl   Nov06   0:01 /usr/sbin/rsyslogd -c3
root      2103  0.0  0.2   2628  1196 tty1     Ss   Nov06   0:00 /bin/login --     
root      2105  0.0  0.0   1764   504 tty2     Ss+  Nov06   0:00 /sbin/getty 38400 tty2
root      2107  0.0  0.0   1764   504 tty3     Ss+  Nov06   0:00 /sbin/getty 38400 tty3
root      2109  0.0  0.0   1764   504 tty4     Ss+  Nov06   0:00 /sbin/getty 38400 tty4
root      2110  0.0  0.0   1764   504 tty5     Ss+  Nov06   0:00 /sbin/getty 38400 tty5
root      2112  0.0  0.0   1764   508 tty6     Ss+  Nov06   0:00 /sbin/getty 38400 tty6
root      2133  0.0  0.1   2180   620 ?        S<s  Nov06   0:00 dhclient3 -pf /var/run/dhclient.eth0.pid -lf /var/lib/dhcp3/dhclien
root      4969  0.0  0.1   5416  1024 ?        Ss   Nov08   0:00 /usr/sbin/sshd
root      5673  0.0  0.2   2924  1540 pts/0    Ss   04:30   0:00 -bash
root      5679  0.0  0.1   2432   928 pts/0    R+   04:32   0:00 ps -a