
honeyprompt v0.1.8
Framework di inganno basato su LLM: "La honeypot che risponde!™"
honeyprompt

Introducing honeyprompt, un framework di deception basato su LLM realizzato da/per sviluppatori web. Il progetto personale di passione di @alectrocute.
Supporta tutti i principali provider LLM cloud e locali. SSH, HTTP, TLS, TCP, telnet e altro. Viene fornito come un piccolo container (e un singolo binario statico) e tiene ogni manopola in un unico honeyprompt.yaml.
Nessun plugin da compilare, nessun database da eseguire, facilmente estendibile e può essere distribuito su hardware di fascia bassa.
Istanza demo
Un'istanza demo è disponibile all'indirizzo 172.233.151.216, con il pannello web non autenticato qui:
http://172.233.151.216:9090. È un'istanza pubblica di honeyprompt in esecuzione su un economico VPS Linode, con openrouter/free come unico provider/modello LLM.
Avvio rapido
Per la configurazione più semplice nel 2026, consigliamo Docker e OpenRouter/openrouter/free come provider LLM. Tutti i principali provider LLM cloud e locali sono supportati. Tre file e un unico comando avviano l'intera distribuzione predefinita: sette esche basate su LLM, archiviazione persistente degli eventi e il pannello operatore.
1. Scarica il file di configurazione predefinito, il file compose e il modello env:
# 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
(Oppure clona il repository e cd al suo interno — gli stessi tre file.)
2. Compila .env. Sono richiesti due valori:
OPENROUTER_API_KEY=sk-or-... # use a dedicated key with a spend limit
HONEYPROMPT_PANEL_PASSWORD=changeme # basic-auth password for the panel
3. Avvialo:
docker compose up -d
4. Provalo:
ssh -p 2222 root@localhost # password: root — then type anything
curl http://localhost:2375/v1.54/containers/json # "exposed" Docker API
5. Guardalo accadere nel pannello di sola lettura all'indirizzo http://127.0.0.1:9090 (accedi come admin con la password del pannello). Ogni connessione, credenziale e comando viene trasmesso in tempo reale. Se sei distribuito su un host remoto, dovrai esporre la porta :9090 in compose.yaml. Questo non è consigliato per distribuzioni in produzione.
Fissa una release numerata invece di
latestper le distribuzioni in produzione — impostaHONEYPROMPT_IMAGEin.env.
Il honeyprompt.yaml che hai appena scaricato è una vetrina completamente annotata. Include profili per:
- Un generico server web aziendale — porta 80, la rete più ampia;
/serve immediatamente la pagina di benvenuto standard di nginx, e i percorsi più profondi passano al LLM per pagine intranet complete in HTML/CSS, moduli di login e pannelli di amministrazione progettati per tenere l'attaccante a cliccare. - Gateway MCP / agent — Discovery HTTP streamable, metadati OAuth, chiamate a strumenti JSON-RPC e strumenti di produzione allettanti.
- API Docker Engine 29.5 — la superficie della porta 2375 non autenticata utilizzata da veri worm cloud.
- API Kubernetes v1.36 — namespace, carichi di lavoro, Secret, ConfigMap e scoperta RBAC.
- Infrastruttura di build AI Ubuntu 26.04 — SSH, carichi di lavoro GPU, Docker, kubeconfig, stato CI e credenziali dei provider.
- Redis 8.8 — sonde RESP comuni utilizzate per furto di credenziali, persistenza e movimento laterale.
- Edge industriale / OT — un piano di gestione Telnet volutamente legacy, perché la difesa moderna deve comunque intercettare attacchi contro infrastrutture vecchie.
Esecuzione senza un LLM
[!IMPORTANT] Anche se stai usando LLM, determina i percorsi più frequentemente utilizzati e aggiungi regole statiche per essi. Questo ti farà risparmiare enormi quantità di token LLM e accelererà le risposte a richieste che non valgono il costo di una chiamata LLM. Esempi casuali:
whoami, health check, favicon, sonde di versione, ecc.
Questo honeyprompt.yaml minimo simula un box SSH con due regole statiche e nessun 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
Distribuzione
Per una distribuzione persistente, usa il compose.yaml incluso. La guida alla distribuzione copre le release su Docker Hub, i segreti GitHub richiesti, la configurazione di porte e firewall, l'accesso al pannello via SSH, aggiornamenti, rollback, archiviazione degli eventi e isolamento.
Perché deception basato su LLM, brevemente
Un honeypot deve fare bene solo una cosa: rimanere convincente abbastanza a lungo da far continuare a digitare l'attaccante. Ogni comando che esegue è intelligence — gli strumenti che cerca, le credenziali che riutilizza, le CVE che presume tu non abbia patchato. Gli honeypot statici perdono il loro personaggio nel momento in cui qualcuno esegue un comando che l'autore non aveva previsto. honeyprompt affida quel momento a un LLM, così la shell risponde a dmesg | tail o cat /etc/shadow come farebbe una vera, e la sessione continua.
Guarda l'eccellente presentazione DEF CON 32 di Adel Karimi su Galah, (il primo?) honeypot LLM, che ha ispirato questo progetto: https://www.youtube.com/watch?v=XGsm4Qcc_Ag
Cosa viene registrato: due flussi separati
Questa è la parte che vale la pena capire subito, perché i due sono deliberatamente tenuti separati:
- Eventi di deception: Ogni interazione dell'attaccante: connessioni, tentativi di autenticazione, ogni comando o richiesta, la risposta che honeyprompt ha inviato, quale provider e modello hanno risposto, e quanto tempo ci è voluto. Questa è la tua intelligence sulle minacce. È tenuta in un buffer in memoria limitato per il pannello live e puoi persistere tutto su disco.
- Log operativi: Avvio, quali porte ha associato, errori del provider, arresto, errori interni. Questo è ciò che leggi quando il runtime si comporta male. Non ha nulla a che fare con l'attività dell'attaccante.
Li configuri separatamente:
# 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