Si nunca habéis oído el
término “honeypot” deciros que es, como su nombre indica, un
tarro de miel para un posible atacante. Existen varios tipos de
honeypots según el nivel de interacción que brindan, su finalidad,
el tipo de servicio/s que emulen, etc.
Básicamente, un honeypot
suele ser un sistema que simula ser vulnerable a algun
vulnerabilidad, ser un relay de correo abierto, un servidor SSH con
credenciales fáciles de adivinar, etc.
En este caso, Kippo es un
honeypot de interacción media (no es una consola obtenida por SSH
con todas sus posibilidades, pero sí tiene implementados ciertos
comandos) escrito en Python y cuya finalidad es guardar un registro de los intentos de
acceso al servidor por fuerza bruta y, cuando un atacante se conecte
y realice cualquier acción, guardar toda la sesión de comandos y
cualquier posible fichero que el atacante descargue en el servidor.
Las ventajas de tener un
honeypot, o varios, son diversas. Por un lado, tenemos la posibilidad
de detectar que alguien está intentando atacar nuestra red por las
alertas del honeypot, además de que se mantendrá “ocupado” al
menos hasta que descubra que es un honeypot o cambie de objetivo. Por
otro, podemos recopilar multitud de herramienta que los atacantes
suben a los servidores SSH comprometidos, así como obtener ciertas
estadísticas relativas a los ataques SSH que recibamos y la
metodología seguida por los atacantes cuando consiguen un acceso
SSH.
Explicado esto, pasemos a
la instalación, en sistemas Debian bastará con hacer:
root@ph0b0s:~#
apt-get install python-dev openssl python-openssl python-pyasn1
python-twisted , si tenéis otros sistemas, podéis pasaros
por la entrada de instalación
en la wiki oficial.
Adicionalmente, y como
veremos más adelante, Kippo puede utilizar una base de datos MySQL
para guardar la información del honeypot, para ello necesitaremos
también el paquete “python-mysqldb”.
Antes de arrancar Kippo,
es necesario comentar que, ejecutarlo como root, es una acción
bastante peligrosa, puesto que si algún atacante lograse saltarse el
honeypot de algún modo, o encontrar algún fallo en el mismo, los
privilegios con los que contaría serían los de root, por lo que lo
mejor es ejecutarlo con un usuario limitado. Más adelante veremos
cómo hacer para que Kippo se encuentre tras el puerto 22 sin estarlo
realmente.
Ahora, una vez hayamos
descargado y descomprimido el fichero en el directorio que queramos,
pasaremos a modificar el fichero kippo.cfg para establecer la
configuración del honeypot.
Entre las distintas
opciones que tenemos de configuración se encuentran las siguientes:
- ssh_port: Puerto en el que dejar a la escucha Kippo, como comentamos anteriormente, que sea un puerto no privilegiado para ejecutarlo con un usuario con privilegios limitados.
- hostname: El nombre de la máquina que será mostrado en el prompt de la consola cuando alguien se conecte al honeypot.
- log_path: Ruta donde se guardarán los ficheros de log de toda actividad del honeypot.
- download_path: Ruta donde se guardarán todos los ficheros que se descarguen mediante el “comando” wget, muy útil para descubrir nuevas herramientas y/o malware utilizadas por los atacantes.
Una vez realizados los
cambios necesarios tenemos que arrancar Kippo, para ello contamos con
varias opciones. La primera es ejecutar directamente el fichero
“start.sh”, que no es más que “twistd -y kippo.tac -l
log/kippo.log --pidfile kippo.pid
”, lo que arrancará
Kippo en segundo plano. En caso de que queráis ejecutarlo en primer
plano para poder ver toda la actividad en tiempo real, podéis
hacerlo con el comando twistd -y kippo.tac -n.
Una vez ejecutado, se nos
irá mostrando la información de toda actividad:
Visualización en tiempo real de las sesiones de Kippo |
Por supuesto, el atacante
tiene una pseudo shell bastante completa. A pesar de que Kippo emula
distintos comandos, es muy fácil que un atacante que realiza el
proceso de forma manual se de cuenta de que está en un honeypot sólo
con probar algunos comandos básicos.
Por ejemplo, el comando
“top” dice que no se encuentra:
webdev:~# top
bash: top: command
not found
Al igual que disponemos
de un “ls”, pero con cierto comportamiento extraño de sus
modificadores:
Comportamiento del ls "simulado" |
Como vemos, el “ls”
funciona, si le decimos que haga un “ls” extendido también nos
devuelve la salida, pero con la particularidad de que nos muestra los
ficheros ocultos. Por último, si probamos a realizar un “ls”
“recursivo” el argumento no es procesado.
En cualquier caso, un
honeypot como este considero que es muy útil para detectar y
estudiar ataques automatizados que realizan ataques de fuerza bruta
de contraseñas para acceder a servidores y, posteriormente,
descargar herramientas de ataque, por ejemplo:
Descarga con "wget" de una herramienta de ataque |
En este caso simulamos un
atacante que descarga un fichero en C de una herramienta que permite
realizar ataques de SYN flood. Recordemos que todo fichero descargado
se guarda en la carpeta “dl” (establecida en el fichero de
configuración), por lo que, si el atacante descargase una
herramienta privada, algún exploit, etc, podríamos obtener una
copia para su posterior análisis.
Para reproducir los logs
tenemos la herramienta “playlog.py” dentro de la carpeta “utils”,
para reproducir un log podemos, por ejemplo, utilizar el comando
z0mbiehunt3r@ph0b0s:~/kippo-0.5/utils$ ./playlog.py
../log/tty/20111001-181757-4654.log 0,
lo que empezará a mostrar por pantalla toda
la sesión.
Por
supuesto, existen más herramientas en dicha carpeta, como
“passdb.py” que permite añadir más passwords aceptados para la
conexión SSH o “createfs.py” que permite recrear el sistema de
ficheros de la máquina real para simular un entorno más realista.
También hay que tener en
cuenta que, para recibir más ataques automatizados, lo mejor es que
Kippo “escuche” en el puerto 22, tal y como se ha comentado
varias veces en el post, para escuchar en dicho puerto se requieren
privilegios de root, por lo que lo mejor es utilizar iptables para
redirigir la petición, por ejemplo: iptables -t nat -A
PREROUTING -i IN_IFACE -p tcp --dport 22 -j REDIRECT --to-port 2222,
si queréis más información al respecto, o
métodos alternativos,
visitad
la correspondiente
entrada en la wiki.
Por último, vamos a ver
las opciones de log mediante MySQL con las que cuenta Kippo.
Lo primero será
conectarnos al servidor MySQL como root, o un usuario con suficientes
privilegios, para autorizar al usuario que usará Kippo.
z0mbiehunt3r@ph0b0s:~$
mysql -u root -p
mysql> CREATE
DATABASE kippo;
mysql> GRANT ALL
ON kippo.* TO 'kippo'@'localhost' IDENTIFIED BY 'kippo';
(Utilizar un password mejor...)
Ahora, nos conectamos
como el usuario kippo e importamos el fichero .sql con la estructura
utilizada por Kippo.
z0mbiehunt3r@ph0b0s:~$
mysql -u kippo -p
mysql> USE
kippo;
mysql> source
kippo-0.5/doc/sql/mysql.sql;
Una vez que tengamos
preparada la base de datos, sólo nos queda realizar los cambios de
configuración, recordemos que es el fichero kippo.cfg. Las líneas
correspondientes al log mediante MySQL se encuentran justo al final.
Tendremos que dejar algo similar a lo siguiente:
[database_mysql]
host = localhost
database = kippo
username = kippo
password = kippo
Una vez volvamos a
arrancar Kippo, podremos recurrir a la base de datos para obtener
estadísticas, comprobar el uso del Honeypot, etc.
Si alguno de vosotros
utiliza Kippo en un servidor real, seguro que se “asusta” de la
cantidad de ataques diarios que se realizan de manera automatizada...
No hay comentarios:
Publicar un comentario