
Marco de engaño basado en LLM: "La trampa que responde!™"

Presentamos honeyprompt, un framework de decepción basado en LLM creado por/para desarrolladores web. El proyecto personal de @alectrocute.
Compatible con todos los principales proveedores de LLM en la nube y locales. SSH, HTTP, TLS, TCP, telnet y más. Se distribuye como un contenedor pequeño (y un único binario estático) y mantiene todos los controles en un solo archivo honeyprompt.yaml.
Sin plugins que compilar, sin base de datos que ejecutar, fácilmente extensible y puede implementarse en hardware de gama baja.
Hay una instancia de demostración disponible en 172.233.151.216, con el panel web sin autenticación aquí: http://172.233.151.216:9090. Es una instancia pública de honeyprompt ejecutándose en un VPS barato de Linode, con openrouter/free como único proveedor/modelo de LLM.
Para la configuración más sencilla en 2026, recomendamos Docker y OpenRouter/openrouter/free como proveedor de LLM. Todos los principales proveedores de LLM en la nube y locales son compatibles. Tres archivos y un comando levantan la implementación predeterminada completa: siete señuelos basados en LLM, almacenamiento de eventos duradero y el panel del operador.
1. Obtén la configuración predeterminada, el archivo compose y la plantilla de entorno:
# if you don't have Docker:
# curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh
mkdir honeypot && cd honeypot
wget https://raw.githubusercontent.com/alectrocute/honeyprompt/main/honeyprompt.yaml
wget https://raw.githubusercontent.com/alectrocute/honeyprompt/main/compose.yaml
wget -O .env https://raw.githubusercontent.com/alectrocute/honeyprompt/main/.env.example
(O clona el repositorio y haz cd en él — los mismos tres archivos.)
2. Rellena .env. Se requieren dos valores:
OPENROUTER_API_KEY=sk-or-... # use a dedicated key with a spend limit
HONEYPROMPT_PANEL_PASSWORD=changeme # basic-auth password for the panel
3. Inícialo:
docker compose up -d
4. Pruébalo:
ssh -p 2222 root@localhost # password: root — then type anything
curl http://localhost:2375/v1.54/containers/json # "exposed" Docker API
5. Observa lo que sucede en el panel de solo lectura en http://127.0.0.1:9090 (inicia sesión como admin con la contraseña de tu panel). Cada conexión, credencial y comando se transmite en vivo. Si estás implementado en un host remoto, necesitarás exponer el puerto :9090 en compose.yaml. Esto no se recomienda para implementaciones en producción.
Fija una versión numerada en lugar de
latestpara implementaciones en producción — estableceHONEYPROMPT_IMAGEen.env.
El archivo honeyprompt.yaml que acabas de descargar es una muestra completamente anotada. Incluye perfiles para:
/ sirve la página de bienvenida estándar de nginx al instante, y las rutas más profundas pasan al LLM para páginas completas de intranet HTML/CSS, formularios de inicio de sesión y paneles de administración diseñados para mantener al atacante haciendo clic.[!IMPORTANT] Incluso si estás usando LLMs, determina las rutas más utilizadas y agrega reglas estáticas para ellas. Esto te ahorrará grandes cantidades de tokens de LLM y acelerará las respuestas a solicitudes que no valen el costo de una llamada LLM. Ejemplos aleatorios:
whoami, health checks, favicon, sondeos de versión, etc.
Este honeyprompt.yaml mínimo simula una caja SSH con dos reglas estáticas y sin LLM:
panel:
enabled: true
address: "0.0.0.0:8080"
events:
buffer: 2000
file: /data/events.jsonl # durable attacker activity
services:
- protocol: ssh
address: "0.0.0.0:2222"
description: "Ubuntu 26.04 LTS build runner"
serverName: "gpu-runner-07"
passwordRegex: "^(root|admin|123456)$" # which passwords "work"
commands:
- regex: "^whoami$"
handler: "root"
- regex: "^(.+)$"
handler: "bash: command not found"
docker run --rm \
-p 2222:2222 -p 8080:8080 \
-v "$(pwd)/honeyprompt.yaml:/etc/honeyprompt/honeyprompt.yaml:ro" \
-v honeyprompt-data:/data \
alectrocute/honeyprompt:latest
Para un despliegue persistente, usa el compose.yaml incluido. La guía de despliegue cubre las versiones de Docker Hub, los secretos de GitHub necesarios, la configuración de puertos y cortafuegos, el acceso al panel a través de SSH, las actualizaciones, la reversión, el almacenamiento de eventos y el aislamiento.
Un honeypot solo tiene que hacer bien una cosa: mantenerse convincente el tiempo suficiente para que el atacante siga escribiendo. Cada comando que ejecutan es inteligencia: las herramientas que buscan, las credenciales que reutilizan, los CVE que asumen que no has parcheado. Los honeypots estáticos rompen el personaje en el momento en que alguien ejecuta un comando que el autor no anticipó. honeyprompt entrega ese momento a un LLM, para que el shell responda a dmesg | tail o cat /etc/shadow como lo haría uno real, y la sesión continúe.
Consulta la excelente presentación de Adel Karimi en DEF CON 32 sobre Galah, (¿el primer?) honeypot LLM, que inspiró este proyecto: https://www.youtube.com/watch?v=XGsm4Qcc_Ag
Esta es la parte que vale la pena entender desde el principio, porque los dos se mantienen deliberadamente separados:
Los configuras por separado:
# The honey: attacker activity.
events:
buffer: 2000 # recent events kept in memory for the panel
file: /data/events.jsonl # persist every event as JSON Lines
# The runtime's own diagnostics.
logging:
level: info # debug | info | warn | error
format: text # how it looks on the console: text (human) or json
file: /data/honeyprompt.log # optional; on disk it's always JSON