GoRiX blog

A blog about things

Honeypot Ssh

May 11, 2025 — n4ch0m4n

Cuando estaba más metido en el tema de seguridad/pentesting solía usar kippo como honeypot y he llegado a crear un artículo sobre él en un antiguo blog que escribía.

Kippo ya no está mantenido y su fork se llama Cowrie

Que es un honeypot?

Un honeypot es un mecanismo de seguridad que consiste en un sistema o servicio deliberadamente expuesto como cebo para atraer atacantes, distraerlos de recursos valiosos y, al mismo tiempo, analizar sus métodos en un entorno controlado. Funciona como un “pote de miel” (de ahi el nombre claro) que simula vulnerabilidades reales, pero aísla y monitorea todo lo que hagan los intrusos, permitiéndote recopilar inteligencia de amenazas sin comprometer tus servidores de verdad.


Por que elegir Cowrie?

Cowrie es un honeypot de interacción media para SSH y Telnet escrito en Python, ideal para registrar intentos de fuerza bruta, comandos ejecutados y transferencias de archivos. Genera logs en texto y JSON con cada acción del atacante, lo que facilita el análisis de patrones de ataque y la detección de nuevas tácticas.

Vamos con su puesta en marcha!

Instalar dependencias del sistema

Para arrancar, instalá Git, Python 3, las librerías de desarrollo y herramientas básicas. Usá tu gestor de paquetes o lo que quieras:

git python3-pip python3-venv libssl-dev libffi-dev build-essential libpython3-dev python3-minimal authbind

Crear un usuario dedicado

Es más seguro levantar Cowrie con un usuario sin privilegios, por si acaso vite'? Generamos el usuario y hacemos login con él

# adduser --disabled-password cowrie
# su - cowrie

De esta forma, si el honeypot es vulnerado, el impacto queda acotado al usuario cowrie y no a todo el sistema.

Clonar el repositorio

Bajate el código oficial de su repo:

git clone http://github.com/cowrie/cowrie
cd cowrie

De paso te metés a la carpeta generada.

Configurar el entorno virtual

Dentro de la carpeta del proyecto, armá y activá un virtualenv:

python3 -m venv cowrie-env
source cowrie-env/bin/activate
python -m pip install --upgrade pip
python -m pip install --upgrade -r requirements.txt

Esto aísla las dependencias de Cowrie del resto del sistema.

Instalar el archivo de configuración

Copiá el .dist para empezar a personalizar sin pisar nada cuando actualices:

cp etc/cowrie.cfg.dist etc/cowrie.cfg

Editá etc/cowrie.cfg para ajustar puertos y definir rutas de logs entre otras cosas.

Por defecto se pone a escuchar en el 2222 este honeypot y en mi caso yo ssh lo tengo escuchando por dicho puerto, por ello cambio este dato para escuchar por el 2223 y luego redirigir por firewall del 22 al 2223:

listen_endpoints = tcp:2223:interface=0.0.0.0

Más adelante explico como redirigir el tráfico.

A tener en cuenta podemos personalizar nuestro "pote de miel" como querramos, acá dejo una breve descripción de todo lo que podemos hacer y algunas ubicaciones importantes:

  • etc/cowrie.cfg - Archivo de configuración de Cowrie.
  • etc/cowrie.cfg.dist - Configuración por defecto, no modificar este archivo, como mencioné antes.
  • etc/userdb.txt - Credenciales para acceder al honeypot.
  • src/cowrie/data/fs.pickle - Sistema de archivos falso, contiene solo metadatos (ruta, uid, gid, tamaño).
  • honeyfs/ - Contenido del sistema de archivos falso.
  • honeyfs/etc/issue.net - Banner previo al inicio de sesión.
  • honeyfs/etc/motd - Banner posterior al inicio de sesión.
  • src/cowrie/data/txtcmds/ - Salida de comandos falsos simples.
  • var/log/cowrie/cowrie.json - Salida de auditoría en formato JSON.
  • var/log/cowrie/cowrie.log - Salida de logs y depuración.
  • var/lib/cowrie/tty/ - Logs de sesiones, se pueden reproducir con la utilidad bin/playlog.
  • var/lib/cowrie/downloads/ - Archivos transferidos desde el atacante al honeypot se guardan acá.

Iniciar Cowrie

Con todo listo, levantá el honeypot:

bin/cowrie start

Por defecto queda escuchando en el puerto 2222 como dije antes y empieza a registrar cada movimiento sospechoso.

Redirigir el puerto 22 con iptables

Para que Cowrie agarre SSH estándar (puerto 22), usá NAT en iptables:

sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2223
  • -t nat indica que estamos modificando la tabla NAT (Network Address Translation).
  • -A PREROUTING agrega una regla que intercepta paquetes antes de la decisión de enrutamiento.
  • -p tcp --dport 22 filtra tráfico TCP hacia el puerto 22, que es donde se conectan por defecto los clientes SSH.
  • -j REDIRECT --to-port 2223 redirige esos paquetes internamente al puerto 2223, donde Cowrie está escuchando.

Como alternativas para puertos <1024 también existen authbind y setcap, pero no entraremos en detalle acá.

Una vez que tu honeypot está en corriendo, es hora de revisar qué andan haciendo los intrusos. Cowrie guarda todo en logs detallados, y tenés varias formas de explorarlos.

Reproducir sesiones con playlog

Cowrie guarda las sesiones SSH y Telnet en formato de texto, permitiéndote reproducirlas para ver exactamente qué hizo el atacante. Para hacerlo, usá el script playlog.py que viene con Cowrie:

bin/playlog var/lib/cowrie/tty/archivo_log

Esto te mostrará la sesión tal como la vio el atacante, incluyendo los comandos que ejecutó y las respuestas del sistema simulado. Es una herramienta muy útil para entender el comportamiento del intruso.

Analizar los logs en JSON

Cowrie también genera logs en formato JSON, que son ideales para análisis más profundos o para integrarlos con herramientas de monitoreo. Estos logs se encuentran en var/log/cowrie/cowrie.json.

Cada entrada en el log incluye información como:

  • timestamp: la fecha y hora del evento.
  • src_ip: la IP del atacante.
  • session: un identificador único de la sesión.
  • eventid: el tipo de evento (por ejemplo, cowrie.login.success o cowrie.command.input).
  • input: el comando que ingresó el atacante.

Podés usar herramientas como jq para filtrar y analizar estos logs. Por ejemplo, para ver todos los comandos ejecutados:

jq 'select(.eventid=="cowrie.command.input") | .input' var/log/cowrie/cowrie.json

Visualizar patrones de ataque

Con los datos recopilados, podés identificar patrones como:

  • Las IPs más activas.
  • Los nombres de usuario y contraseñas más probados.
  • Los comandos más comunes.
  • La geolocalización de los atacantes.

Ejemplo de ataque y visualización del mismo

Primero nos conectamos al “pote de miel”y tiro algunos comandos (los veremos luego con playlog)

ssh root@gorix.xyz
root@gorix.xyz's password:
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

Y luego vamos a ver el ataque con playlog:

Tenemos otras alternativas de analizar los logs, como también personalizar el entorno fictisio de lo que puede hacer y ver el atacante que llego a “vulnerar” nuestro sistema.

La info del post y mucha más data sobre Cowrie pueden encontrarla en su documentación.

**UPDATE** Dejé cowrie corriendo y estoy acumulando intentos de ataque. Seguramente luego venga un post sobre análisis de los mismos.

Tags: Seguridad

Comments: