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 |