
honeyprompt v0.1.8
Cadre de leurre axé sur les LLM : "Le honeypot qui répond !™"
honeyprompt

Présentation de honeyprompt, un framework de leurre axé sur les LLM conçu par/pour les développeurs web. Le projet personnel de @alectrocute.
Prend en charge tous les principaux fournisseurs de LLM cloud et locaux. SSH, HTTP, TLS, TCP, telnet et plus encore. Il est livré sous la forme d'un petit conteneur (et d'un binaire statique unique) et conserve tous les réglages dans un seul fichier honeyprompt.yaml.
Aucun plugin à compiler, aucune base de données à exécuter, facilement extensible et peut être déployé sur du matériel bas de gamme.
Instance de démonstration
Une instance de démonstration est disponible à 172.233.151.216, avec le panneau web non authentifié ici : http://172.233.151.216:9090. Il s'agit d'une instance publique de honeyprompt tournant sur un VPS Linode bon marché, avec openrouter/free comme seul fournisseur/modèle LLM.
Démarrage rapide
Pour une configuration facile en 2026, nous recommandons Docker et OpenRouter/openrouter/free comme fournisseur LLM. Tous les principaux fournisseurs de LLM cloud et locaux sont pris en charge. Trois fichiers et une commande mettent en place le déploiement par défaut complet : sept leurres alimentés par LLM, un stockage d'événements durable et le panneau opérateur.
1. Récupérez la configuration par défaut, le fichier compose et le modèle d'environnement :
# si vous n'avez pas 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
(Ou clonez le dépôt et cd dedans — les mêmes trois fichiers.)
2. Remplissez .env. Deux valeurs sont requises :
OPENROUTER_API_KEY=sk-or-... # utilisez une clé dédiée avec une limite de dépenses
HONEYPROMPT_PANEL_PASSWORD=changeme # mot de passe d'authentification de base pour le panneau
3. Démarrez-le :
docker compose up -d
4. Testez-le :
ssh -p 2222 root@localhost # mot de passe : root — puis tapez n'importe quoi
curl http://localhost:2375/v1.54/containers/json # API Docker "exposée"
5. Regardez-le se produire dans le panneau en lecture seule à http://127.0.0.1:9090 (connectez-vous en tant qu'admin avec votre mot de passe du panneau). Chaque connexion, identifiant et commande est diffusé en direct. Si vous êtes déployé sur un hôte distant, vous devrez exposer le port :9090 dans compose.yaml. Ceci n'est pas recommandé pour les déploiements en production.
Épinglez une version numérotée au lieu de
latestpour les déploiements en production — définissezHONEYPROMPT_IMAGEdans.env.
Le fichier honeyprompt.yaml que vous venez de télécharger est une vitrine entièrement annotée. Il embarque des profils pour :
- Un serveur web générique d'entreprise — port 80, le plus large filet ;
/sert instantanément la page d'accueil nginx standard, et les chemins plus profonds passent par le LLM pour générer des pages intranet complètes en HTML/CSS, des formulaires de connexion et des panneaux d'administration conçus pour que l'attaquant continue à cliquer. - Passerelles MCP / agent — Découverte HTTP streamable, métadonnées OAuth, appels d'outils JSON-RPC et outils de production tentants.
- API Docker Engine 29.5 — la surface du port 2375 non authentifiée utilisée par les vers cloud réels.
- API Kubernetes v1.36 — découverte des espaces de noms, des charges de travail, des Secrets, des ConfigMaps et du RBAC.
- Infrastructure de build IA Ubuntu 26.04 — SSH, charges de travail GPU, Docker, kubeconfigs, état CI et identifiants de fournisseur.
- Redis 8.8 — sondes RESP courantes utilisées pour le vol d'identifiants, la persistance et le mouvement latéral.
- Edge industriel / OT — un plan de gestion Telnet délibérément hérité, car la défense moderne doit encore attraper les attaques contre l'infrastructure ancienne.
Fonctionnement sans LLM
[!IMPORTANT] Même si vous utilisez des LLM, identifiez les chemins les plus fréquemment utilisés et ajoutez des règles statiques pour eux. Cela vous fera économiser des quantités massives de tokens LLM et accélérera les réponses aux requêtes qui ne valent pas le coût d'un appel LLM. Exemples aléatoires :
whoami, vérifications de santé, favicon, sondes de version, etc.
Ce honeyprompt.yaml minimal simule une boîte SSH avec deux règles statiques et aucun LLM :
panel:
enabled: true
address: "0.0.0.0:8080"
events:
buffer: 2000
file: /data/events.jsonl # activité durable de l'attaquant
services:
- protocol: ssh
address: "0.0.0.0:2222"
description: "Exécuteur de build Ubuntu 26.04 LTS"
serverName: "gpu-runner-07"
passwordRegex: "^(root|admin|123456)$" # quels mots de passe "fonctionnent"
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
Déploiement
Pour un déploiement persistant, utilisez le fichier compose.yaml fourni. Le guide de déploiement couvre les versions Docker Hub, les secrets GitHub requis, la configuration des ports et du pare-feu, l'accès au panneau via SSH, les mises à niveau, le rollback, le stockage des événements et l'isolation.
Pourquoi un leurre axé sur le LLM, en bref
Un honeypot n'a qu'une seule chose à faire : rester convaincant assez longtemps pour que l'attaquant continue à taper. Chaque commande qu'il exécute est une information de renseignement — les outils qu'il utilise, les identifiants qu'il réutilise, les CVE qu'il suppose que vous n'avez pas corrigées. Les honeypots statiques perdent leur crédibilité dès que quelqu'un exécute une commande que l'auteur n'avait pas anticipée. honeyprompt confie ce moment à un LLM, de sorte que le shell réponde à dmesg | tail ou cat /etc/shadow comme le ferait un vrai, et la session continue.
Découvrez l'excellente présentation de Adel Karimi à DEF CON 32 sur Galah, (le premier ?) honeypot LLM, qui a inspiré ce projet : https://www.youtube.com/watch?v=XGsm4Qcc_Ag
Ce qui est enregistré : deux flux distincts
C'est la partie qu'il vaut la peine de comprendre dès le départ, car les deux sont délibérément séparés :
- Événements de leurre : chaque interaction d'attaquant : connexions, tentatives d'authentification, chaque commande ou requête, la réponse renvoyée par honeyprompt, quel fournisseur et modèle ont répondu, et combien de temps cela a pris. C'est votre renseignement sur les menaces. Il est conservé dans un tampon mémoire limité pour le panneau en direct et vous pouvez tout persister sur le disque.
- Journaux opérationnels : démarrage, ports liés, échecs de fournisseur, arrêt, erreurs internes. C'est ce que vous lisez lorsque le runtime se comporte mal. Cela n'a rien à voir avec l'activité de l'attaquant.
Vous les configurez séparément :
# Le miel : l'activité de l'attaquant.
events:
buffer: 2000 # événements récents conservés en mémoire pour le panneau
file: /data/events.jsonl # persister chaque événement en JSON Lines