Guía de tecnologías

Cómo configurar Kippo SSH Honeypot en CentOS 5.5

7 min read Seguridad Actualizado 23 Sep 2025
Configurar Kippo SSH Honeypot en CentOS 5.5
Configurar Kippo SSH Honeypot en CentOS 5.5

Introducción

Kippo es un honeypot SSH de interacción media diseñado para registrar ataques por fuerza bruta y, lo más importante, toda la interacción de shell realizada por el atacante. Kippo está inspirado en Kojoney, pero no basado en él. Esta guía muestra cómo compilar e instalar Kippo en un servidor CentOS 5.5 y ofrece recomendaciones prácticas para un despliegue más seguro en entornos de laboratorio.

Definición rápida: honeypot = sistema que simula vulnerabilidades para atraer y analizar atacantes.

Antes de empezar — Requisitos

  • CentOS 5.5 (esta guía está escrita específicamente para esa versión; ver sección de compatibilidad más abajo).
  • Acceso root o privilegios sudo para instalar paquetes y crear usuarios.
  • Python 2.6 (CentOS 5.5 trae Python 2.4 por defecto).
  • Paquetes/librerías: Twisted, zope.interface, pycrypto, pyasn1.

Importante: Kippo no debe ejecutarse como root. Cree un usuario dedicado y limite su acceso.

Instalación de Python 2.6

CentOS 5.5 incluye Python 2.4; usted debe instalar Python 2.6. Puede usar los RPMs preparados como en este recurso:

http://www.geekymedia.com/tech-articles/rhel5-centos5-rpms-for-python-2-5-and-2-6/

Notas importantes:

  • Instale solo los RPMs de la versión que necesite (al menos el paquete base y libs).
  • Para iniciar Python 2.6, use el comando python26 en lugar de python. Su Python 2.4 original seguirá instalado.
  • Si instala paquetes con setuptools, asegúrese de usar el intérprete correcto: python26 setup.py install

Twisted, Zope Interface y PyCrypto

Twisted es un motor de red orientado a eventos, escrito en Python. Se usa para manejar las conexiones y protocolos (entre ellos SSH).

Ejemplo de instalación de Twisted:

cd /tmp  
wget http://twistedmatrix.com/Releases/Twisted/10.2/Twisted-10.2.0.tar.bz2  
tar -xvf Twisted-10.2.0.tar.bz2  
cd Twisted-10.2.0  
python26 setup.py build  
python26 setup.py install

Instale zope.interface:

cd /tmp  
wget http://www.zope.org/Products/ZopeInterface/3.3.0/zope.interface-3.3.0.tar.gz  
tar -xvf zope.interface-3.3.0.tar.gz  
cd zope.interface-3.3.0  
python26 setup.py build  
python26 setup.py install

Instale pycrypto:

cd /tmp  
wget wget http://www.amk.ca/files/python/crypto/pycrypto-2.0.1.tar.gz  
tar -xvf pycrypto-2.0.1.tar.gz  
cd pycrypto-2.0.1  
python26 setup.py build  
python26 setup.py install

Instale pyasn1 (ASN.1 codecs):

cd /tmp  
wget http://sourceforge.net/projects/pyasn1/files/pyasn1-devel/0.0.12a/pyasn1-0.0.12a.tar.gz/download  
tar -xvf pyasn1-0.0.12a.tar.gz  
cd pyasn1-0.0.12a  
python26 setup.py build  
python26 setup.py install

Crear un usuario no privilegiado

Kippo no debe ejecutarse como root. Cree un usuario dedicado para ejecutar Kippo:

useradd kippouser

Revise y limite sus permisos si va a ejecutar en un entorno con acceso a red.

Descargar el código fuente de Kippo

Descargue la versión disponible en aquel entonces desde Google Code:

su - kippouser   
wget http://kippo.googlecode.com/files/kippo-0.5.tar.gz  
tar -xvf kippo-0.5.tar.gz  
cd kippo-0.5

Configurar Kippo

Edite kippo.cfg según su entorno:

vi kippo.cfg

(El contenido del archivo de configuración se mantiene tal cual en el proyecto; use el archivo ejemplo y ajuste ssh_port, hostname, rutas de log y password.)

#
# Kippo configuration file (kippo.cfg)
#
[honeypot]
# IP addresses to listen for incoming SSH connections.
#
# (default: 0.0.0.0) = any address
#ssh_addr = 0.0.0.0
# Port to listen for incoming SSH connections.
#
# (default: 2222)
ssh_port = 2222
# Hostname for the honeypot. Displayed by the shell prompt of the virtual
# environment.
#
# (default: sales)
hostname = sales
# Directory where to save log files in.
#
# (default: log)
log_path = log
# Directory where to save downloaded (malware) files in.
#
# (default: dl)
download_path = dl
# Directory where virtual file contents are kept in.
#
# This is only used by commands like 'cat' to display the contents of files.
# Adding files here is not enough for them to appear in the honeypot - the
# actual virtual filesystem is kept in filesystem_file (see below)
#
# (default: honeyfs)
contents_path = honeyfs
# File in the python pickle format containing the virtual filesystem. 
#
# This includes the filenames, paths, permissions for the whole filesystem,
# but not the file contents. This is created by the createfs.py utility from
# a real template linux installation.
#
# (default: fs.pickle)
filesystem_file = fs.pickle
# Directory for miscellaneous data files, such as the password database.
#
# (default: data_path)
data_path = data
# Directory for creating simple commands that only output text.
#
# The command must be placed under this directory with the proper path, such
# as:
#   txtcmds/usr/bin/vi
# The contents of the file will be the output of the command when run inside
# the honeypot.
#
# In addition to this, the file must exist in the virtual
# filesystem {filesystem_file}
#
# (default: txtcmds)
txtcmds_path = txtcmds
# Public and private SSH key files. If these don't exist, they are created
# automatically.
#
# (defaults: public.key and private.key)
public_key = public.key
private_key = private.key
# Initial root password. Future passwords will be stored in
# {data_path}/pass.db
#
# (default: 123456)
password = 123456
# IP address to bind to when opening outgoing connections. Used exclusively by
# the wget command.
#
# (default: not specified)
#out_addr = 0.0.0.0
# Sensor name use to identify this honeypot instance. Used by the database
# logging modules such as mysql.
#
# If not specified, the logging modules will instead use the IP address of the
# connection as the sensor name.
#
# (default: not specified)
#sensor_name=myhostname
# Fake address displayed as the address of the incoming connection.
# This doesn't affect logging, and is only used by honeypot commands such as
# 'w' and 'last'
#
# If not specified, the actual IP address is displayed instead (default
# behaviour).
#
# (default: not specified)
#fake_addr = 192.168.66.254
# MySQL logging module
#
# Database structure for this module is supplied in doc/sql/mysql.sql
#
# To enable this module, remove the comments below, including the
# [database_mysql] line.
#[database_mysql]
#host = localhost
#database = kippo
#username = kippo
#password = secret

Consejo: cambie ssh_port a un puerto elevado durante pruebas y deje 2222 solo para producción de laboratorio si configura redirección de puertos.

Arrancar Kippo

Desde el directorio de kippo:

./start.sh

Kippo redirige la salida a log/kippo.log por defecto.

Ver los logs

Use tail para ver en tiempo real:

tail -f log/kippo.log

Hacer Kippo accesible desde internet (nota sobre puertos)

Por defecto Kippo escucha en el puerto 2222. En Windows a menudo puede usar el puerto 22 directamente; en Linux el puerto 22 está restringido a root. Una forma habitual de exponer Kippo en el puerto 22 sin ejecutar como root es redirigir el tráfico con iptables (ejemplo tomado de Twisted):

iptables -t nat -A PREROUTING -i IN_IFACE -p tcp --dport 22 -j REDIRECT --to-port 2222

Reemplace IN_IFACE por su interfaz real, p. ej. eth0. Importante: aplicar reglas NAT cambia el flujo de red; pruebe en un entorno controlado.

Pruebas

Conéctese al servidor Kippo en el puerto 2222 usando root y la contraseña 123456:

ssh 127.0.0.1 -p 2222 -l root

Debe ver el prompt del honeypot tras el login:

sales:~#

Si no ve el prompt, verifique que start.sh esté en ejecución y que no haya conflictos de puerto.

Comparativa rápida: alternativas a Kippo

  • Honeyd: honeypot de baja interacción para emular servicios de red.
  • Cowrie: fork moderno de Kippo con soporte mejorado y actualizaciones (recomendado si no está obligado a usar Kippo).
  • Dionaea: enfocado en capturar malware (más orientado a servicios y binarios).

Cuando usar Kippo: entornos de investigación y análisis retro donde se requiere la experiencia de interacción con shell. Para nuevas implementaciones, considere Cowrie por soporte activo.

Fallos comunes y cómo solucionarlos

  • Python incorrecto: asegúrese de invocar python26 al instalar dependencias.
  • Permisos: Kippo crea logs y carpetas; compruebe que kippouser tenga permisos de escritura.
  • Puerto en uso: use netstat -tlnp o lsof para identificar procesos que escuchen en el puerto.
  • Errores de dependencias: lea la salida de python26 setup.py install; instale paquetes del sistema (gcc, python-devel) si hay fallos al compilar extensiones.

Seguridad y endurecimiento (básico)

  • Ejecutar en red aislada (VLAN o laboratorio) y con monitoreo del tráfico.
  • No permitir que Kippo realice conexiones salientes sin filtrado; use reglas de firewall para limitar wget y otras salidas.
  • Mantenga copias de los logs en un servidor seguro para análisis forense.
  • Desactive módulos de logging que puedan filtrar información sensible hacia terceros.

Checklist por rol

  • Operaciones/Infraestructura:

    • Crear usuario kippouser y limitar permisos.
    • Configurar firewall y redirección de puertos.
    • Asegurar almacenamiento de logs.
  • Seguridad/Analistas:

    • Verificar que la fs.pickle y contenidos virtuales no expongan datos reales.
    • Confirmar que las muestras descargadas (dl) queden en un entorno aislado.
    • Revisar y rotar claves y contraseñas iniciales.
  • Desarrolladores/QA:

    • Probar intentos de login y validar que las sesiones quedan registradas.
    • Validar que comandos en txtcmds producen salida esperada.

Criterios de prueba / aceptación

  • Kippo arranca sin errores con ./start.sh.
  • Conexiones SSH entrantes en ssh_port crean entradas en log/kippo.log.
  • Interacciones de shell se registran y pueden reproducirse desde los logs.
  • Descargas realizadas por el atacante quedan almacenadas en download_path.

Migración y compatibilidad

CentOS 5.5 y Python 2.6 son plataformas antiguas y ya no reciben actualizaciones de seguridad. Para entornos modernos considere migrar a una distribución soportada y a una solución actualizada (por ejemplo Cowrie). Si mantiene CentOS 5.5, aíslelo de redes de producción y aplique controles adicionales.

Mini-metodología para despliegue en laboratorio

  1. Preparar VM aislada con snapshot.
  2. Instalar dependencias (python26, Twisted, etc.).
  3. Crear usuario non-root y descargar Kippo.
  4. Configurar kippo.cfg (logs, puerto, paths).
  5. Probar localmente y revisar logs.
  6. Aplicar reglas de NAT/Firewall para exponer el servicio (si procede).
  7. Capturar snapshot y comenzar monitorización.

Glosario — 1 línea

  • Honeypot: sistema trampa que simula servicios vulnerables para atraer y estudiar atacantes.

Preguntas frecuentes

¿Puedo ejecutar Kippo como root para escuchar en el puerto 22?

No es recomendable. En Linux, mejor redirigir el puerto 22 al puerto de Kippo con iptables o ejecutar en puerto no privilegiado y mantener Kippo como usuario sin privilegios.

¿Debo usar Kippo en producción?

No. Kippo es para investigación y análisis. Nunca debería ejecutarse sin aislamiento y controles estrictos en redes de producción.

¿Cuál es la alternativa moderna a Kippo?

Cowrie es un fork/alternativa más activa y mantenida que agrega funcionalidades y compatibilidad moderna.

Enlaces útiles

Resumen final

Kippo permite capturar interacciones de atacantes en SSH y estudiar técnicas de intrusión. Dado que depende de software y sistemas antiguos, úselo en entornos controlados. Para nuevos despliegues valore alternativas mantenidas como Cowrie y siempre aplique aislamiento de red, control de salidas y almacenamiento seguro de logs.

Importante: no ejecute muestras descargadas en sistemas de producción; trate todo el material capturado como potencialmente malicioso.

Autor
Edición

Materiales similares

Recuperar y proteger Gmail pirateada
Seguridad

Recuperar y proteger Gmail pirateada

Controla la velocidad de juegos en Windows
Juegos

Controla la velocidad de juegos en Windows

XLOOKUP con múltiples criterios en Excel
Excel

XLOOKUP con múltiples criterios en Excel

Configurar rtGui para rTorrent
Guía

Configurar rtGui para rTorrent

Recuperar cuenta de Instagram deshabilitada
Redes sociales

Recuperar cuenta de Instagram deshabilitada

Configurar Kippo SSH Honeypot en CentOS 5.5
Seguridad

Configurar Kippo SSH Honeypot en CentOS 5.5