Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
DECEIVE — DECeption with Evaluative Integrated Validation Engine (DECEIVE): Let an LLM do all the hard honeypot work! | Kitploit
Outils/GitHubGitHub/cisco-talos/deceive
Defensive ToolsNetwork SecurityThreat IntelligenceIntrusion DetectionAI SecurityLog Analysis
GitHubcisco-talos/deceive

DECEIVE

DECeption with Evaluative Integrated Validation Engine (DECEIVE): Let an LLM do all the hard honeypot work!

Voir le dépôt
28841il y a 15 joursVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

DECEIVE

Un cybercriminel interagit avec un système honeypot fantomatique piloté par IA

DECEIVE, le DECeption with Evaluative Integrated Validation Engine, est un système honeypot à haute interaction et nécessitant peu d'effort. Contrairement à la plupart des honeypots à haute interaction, DECEIVE ne donne pas aux attaquants accès à un système réel. L'IA fait en réalité tout le travail de simulation d'un système honeypot réaliste en se basant sur un prompt système configurable qui décrit le type de système que vous souhaitez simuler. Contrairement à de nombreux autres honeypots à haute interaction qui exigent un effort considérable pour être peuplés d'utilisateurs, de données et d'applications réalistes, le backend IA de DECEIVE fera tout cela pour vous, automatiquement.

Cette version de DECEIVE simule un serveur Linux via le protocole SSH. Elle journalise toutes les entrées de l'utilisateur, les sorties renvoyées par le backend LLM, ainsi qu'un résumé de chaque session après leur fin. Elle vous dira même si elle pense qu'une session d'utilisateur était bénigne, suspecte ou carrément malveillante.

⛔️⛔️ DECEIVE est un projet de preuve de concept. Il n'est pas de qualité production. Essayez-le, apprenez-en, mais soyez prudent avant de le déployer dans un environnement de production. ⛔️⛔️

Supported Host Platforms

DECEIVE est principalement développé sur MacOS 15 (Sequoia), mais il devrait fonctionner sur tout système de type UNIX capable d'exécuter Python3. Cela inclut d'autres versions de MacOS, Linux, et même Windows (via le Sous-système Windows pour Linux).

Setup

Check out the latest code from GitHub

Vous pouvez récupérer la dernière version à l'aide de la commande suivante :

root@kitploit:~
git clone https://github.com/splunk/DECEIVE

La suite de ces instructions suppose que vous avez placé votre répertoire courant dans le dépôt une fois le clonage terminé.

Install Dependencies

DECEIVE utilise uv pour la gestion des dépendances Python et de l'environnement virtuel. Si vous n'avez pas déjà installé uv, installez-le avec l'installeur autonome d'Astral :

root@kitploit:~
curl -LsSf https://astral.sh/uv/install.sh | sh

Ensuite, synchronisez l'environnement du projet à partir de la racine du dépôt :

root@kitploit:~
uv sync

Les fichiers pyproject.toml et uv.lock sont la source de vérité pour les dépendances. Ce projet ne maintient volontairement pas de solution de repli requirements.txt.

Generate the SSH Host Key

Le serveur SSH nécessite une paire de clés TLS pour les communications sécurisées. Depuis le répertoire racine du dépôt, générez une paire de clés SSH à l'aide de la commande suivante :

root@kitploit:~
ssh-keygen -t rsa -b 4096 -f SSH/ssh_host_key

Copy the Template Configuration File

Copiez le fichier SSH/config.ini.TEMPLATE vers SSH/config.ini :

Edit the Configuration File

Ouvrez le fichier SSH/config.ini et examinez les paramètres. Mettez à jour les valeurs selon vos besoins, en accordant une attention particulière aux valeurs de la section [llm], où vous configurerez le backend LLM que vous souhaitez utiliser, et à la section [user_accounts], où vous pouvez configurer les noms d'utilisateur et mots de passe que le honeypot doit prendre en charge.

Tell DECEIVE What it's Emulating

Modifiez le fichier SSH/prompt.txt pour y inclure une courte description du type de système qu'il doit simuler. Vous n'avez pas besoin d'être très détaillé ici, même si plus vous fournissez de détails, meilleure sera la simulation. Vous pouvez rester à un niveau général, par exemple :

root@kitploit:~
You are a video game developer's system. Include realistic video game source and asset files.

Si vous le souhaitez, vous pouvez ajouter tous les détails supplémentaires que vous pensez utiles. Par exemple :

root@kitploit:~
You are the Internet-facing mail server for bigschool.edu, a state-sponsored university in Virginia. Valid user accounts are "a20093887", "a20093887-admin", and "mxadmin". Home directories are in "/home/$USERNAME".  Everyone's default shell is /bin/zsh, except mxadmin's, which is bash. Mail spools for all campus users (be sure to include email accounts that are not valid for logon to this server) are in /var/spool/mail. Be sure to simulate some juicy emails there, but make them realistic.  Some should be personal, but some should be just about the business of administering the school, dealing with students, applying for financial aid, etc. Make the spool permissions relaxed, simulating a misconfiguration that would allow anyone on the system to read the files.

Running the Honeypot

Pour démarrer le serveur honeypot DECEIVE, assurez-vous d'abord d'avoir défini toutes les variables d'environnement requises par le backend LLM de votre choix. Par exemple, si vous utilisez l'un des modèles OpenAI, vous devrez définir la variable OPENAI_API_KEY comme ceci :

root@kitploit:~
export OPENAI_API_KEY="<your secret API key>"

Ensuite, exécutez le honeypot SSH depuis la racine du dépôt :

root@kitploit:~
uv run python SSH/ssh_server.py

Vous pouvez également vous placer dans le répertoire SSH et exécuter :

root@kitploit:~
uv run python ssh_server.py

Le serveur démarrera et écoutera les connexions SSH entrantes sur le port configuré. Il ne produira aucune sortie, mais restera en cours d'exécution au premier plan.

Test it Out

Une fois le serveur en cours d'exécution (cela peut prendre quelques secondes), accédez-y sur le port configuré. Si vous êtes sur un système Linux ou de type UNIX, essayez la commande suivante (remplacez « localhost » et « 8022 » selon votre configuration) :

root@kitploit:~
ssh guest@localhost -p 8022

Running Automated Tests

Après avoir exécuté uv sync, lancez tous les tests depuis la racine du dépôt :

root@kitploit:~
uv run pytest

Pour exécuter uniquement les tests d'intégration SSH :

root@kitploit:~
uv run pytest tests/test_ssh_integration.py

Les tests d'intégration démarrent le vrai serveur SSH sur un port local aléatoire, se connectent avec un client SSH et utilisent un faux backend LLM déterministe afin que les assertions ne dépendent pas d'une sortie de modèle en direct.

Logging

Les journaux seront écrits dans le fichier spécifié par l'option de configuration log_file. Les chemins log_file relatifs sont résolus à partir du répertoire contenant le fichier de configuration chargé, donc la valeur du modèle par défaut écrit dans SSH/ssh_log.log.

Les journaux de DECEIVE sont au format JSON Lines, chaque ligne étant un document JSON complet.

Ce qui suit est un exemple complet d'une simple session SSH, dans laquelle l'utilisateur a exécuté deux commandes simples (pwd et exit) :

root@kitploit:~
{"timestamp": "2025-01-10T20:37:55.018+00:00", "level": "INFO", "task_name": "session-6355218b-59e5-4549-add3-49e6d1efc133", "src_ip": "::1", "src_port": 58164, "dst_ip": "::1", "dst_port": 8022, "message": "SSH connection received", "name": "__main__", "levelname": "INFO", "levelno": 20, "pathname": "/home/deceive/DECEIVE/SSH/./ssh_server.py", "filename": "ssh_server.py", "module": "ssh_server", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 59, "funcName": "connection_made", "created": 1736541475.0183098, "msecs": 18.0, "relativeCreated": 13872.790813446045, "thread": 8145041472, "threadName": "MainThread", "processName": "MainProcess", "process": 10823, "taskName": null}
{"timestamp": "2025-01-10T20:37:55.177+00:00", "level": "INFO", "task_name": "session-6355218b-59e5-4549-add3-49e6d1efc133", "src_ip": "::1", "src_port": 58164, "dst_ip": "::1", "dst_port": 8022, "message": "Authentication success", "name": "__main__", "levelname": "INFO", "levelno": 20, "pathname": "/home/deceive/DECEIVE/SSH/./ssh_server.py", "filename": "ssh_server.py", "module": "ssh_server", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 75, "funcName": "begin_auth", "created": 1736541475.1775439, "msecs": 177.0, "relativeCreated": 14032.02486038208, "thread": 8145041472, "threadName": "MainThread", "processName": "MainProcess", "process": 10823, "taskName": "session-6355218b-59e5-4549-add3-49e6d1efc133", "username": "guest", "password": ""}
{"timestamp": "2025-01-10T20:37:57.456+00:00", "level": "INFO", "task_name": "session-6355218b-59e5-4549-add3-49e6d1efc133", "src_ip": "::1", "src_port": 58164, "dst_ip": "::1", "dst_port": 8022, "message": "LLM response", "name": "__main__", "levelname": "INFO", "levelno": 20, "pathname": "/home/deceive/DECEIVE/SSH/./ssh_server.py", "filename": "ssh_server.py", "module": "ssh_server", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 174, "funcName": "handle_client", "created": 1736541477.4568708, "msecs": 456.0, "relativeCreated": 16311.351776123047, "thread": 8145041472, "threadName": "MainThread", "processName": "MainProcess", "process": 10823, "taskName": "session-6355218b-59e5-4549-add3-49e6d1efc133", "details": "V2VsY29tZSB0byBHYW1lRGV2IENvcnAncyBEZXZlbG9wbWVudCBFbnZpcm9ubWVudAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBXZWxjb21lLCBndWVzdCEgCiAgIExhc3QgbG9naW46IFR1ZSBPY3QgMjQgMTQ6MzI6MTUgMjAyMyBmcm9tIDE5Mi4xNjguMS4xMAogICBQcm9qZWN0czoKICAgICAtIEZhbnRhc3lRdWVzdAogICAgIC0gU3BhY2VFeHBsb3JlcnMKICAgICAtIFJhY2luZ01hbmlhCiAgIFN5c3RlbSBTdGF0dXM6IEFsbCBzeXN0ZW1zIG9wZXJhdGlvbmFsCiAgIFJlbWVtYmVyIHRvIGNvbW1pdCB5b3VyIGNoYW5nZXMhCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmd1ZXN0QGRldi13b3Jrc3RhdGlvbjp+JCA="}
{"timestamp": "2025-01-10T20:37:59.333+00:00", "level": "INFO", "task_name": "session-6355218b-59e5-4549-add3-49e6d1efc133", "src_ip": "::1", "src_port": 58164, "dst_ip": "::1", "dst_port": 8022, "message": "User input", "name": "__main__", "levelname": "INFO", "levelno": 20, "pathname": "/home/deceive/DECEIVE/SSH/./ssh_server.py", "filename": "ssh_server.py", "module": "ssh_server", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 184, "funcName": "handle_client", "created": 1736541479.3334038, "msecs": 333.0, "relativeCreated": 18187.88480758667, "thread": 8145041472, "threadName": "MainThread", "processName": "MainProcess", "process": 10823, "taskName": "session-6355218b-59e5-4549-add3-49e6d1efc133", "details": "cHdk"}
{"timestamp": "2025-01-10T20:38:00.189+00:00", "level": "INFO", "task_name": "session-6355218b-59e5-4549-add3-49e6d1efc133", "src_ip": "::1", "src_port": 58164, "dst_ip": "::1", "dst_port": 8022, "message": "LLM response", "name": "__main__", "levelname": "INFO", "levelno": 20, "pathname": "/home/deceive/DECEIVE/SSH/./ssh_server.py", "filename": "ssh_server.py", "module": "ssh_server", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 200, "funcName": "handle_client", "created": 1736541480.189375, "msecs": 189.0, "relativeCreated": 19043.855905532837, "thread": 8145041472, "threadName": "MainThread", "processName": "MainProcess", "process": 10823, "taskName": "session-6355218b-59e5-4549-add3-49e6d1efc133", "details": "L2hvbWUvZ3Vlc3QKCmd1ZXN0QGRldi13b3Jrc3RhdGlvbjp+JCA="}
{"timestamp": "2025-01-10T20:38:01.944+00:00", "level": "INFO", "task_name": "session-6355218b-59e5-4549-add3-49e6d1efc133", "src_ip": "::1", "src_port": 58164, "dst_ip": "::1", "dst_port": 8022, "message": "User input", "name": "__main__", "levelname": "INFO", "levelno": 20, "pathname": "/home/deceive/DECEIVE/SSH/./ssh_server.py", "filename": "ssh_server.py", "module": "ssh_server", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 184, "funcName": "handle_client", "created": 1736541481.944072, "msecs": 944.0, "relativeCreated": 20798.552989959717, "thread": 8145041472, "threadName": "MainThread", "processName": "MainProcess", "process": 10823, "taskName": "session-6355218b-59e5-4549-add3-49e6d1efc133", "details": "ZXhpdA=="}
{"timestamp": "2025-01-10T20:38:04.132+00:00", "level": "INFO", "task_name": "session-6355218b-59e5-4549-add3-49e6d1efc133", "src_ip": "::1", "src_port": 58164, "dst_ip": "::1", "dst_port": 8022, "message": "Session summary", "name": "__main__", "levelname": "INFO", "levelno": 20, "pathname": "/home/deceive/DECEIVE/SSH/./ssh_server.py", "filename": "ssh_server.py", "module": "ssh_server", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 151, "funcName": "session_summary", "created": 1736541484.1324642, "msecs": 132.0, "relativeCreated": 22986.945152282715, "thread": 8145041472, "threadName": "MainThread", "processName": "MainProcess", "process": 10823, "taskName": "session-6355218b-59e5-4549-add3-49e6d1efc133", "details": "The user issued basic commands like `pwd` to check the current working directory and `exit` to terminate the session. This activity is typical of a benign user checking their environment upon logging in and then closing the session. There is no indication of reconnaissance, exploitation, or any post-foothold activity such as privilege escalation or data exfiltration. The actions appear to be standard and routine.\n\nJudgement: BENIGN", "judgement": "BENIGN"}
{"timestamp": "2025-01-10T20:38:04.139+00:00", "level": "INFO", "task_name": "session-6355218b-59e5-4549-add3-49e6d1efc133", "src_ip": "::1", "src_port": 58164, "dst_ip": "::1", "dst_port": 8022, "message": "SSH connection closed", "name": "__main__", "levelname": "INFO", "levelno": 20, "pathname": "/home/deceive/DECEIVE/SSH/./ssh_server.py", "filename": "ssh_server.py", "module": "ssh_server", "exc_info": null, "exc_text": null, "stack_info": null, "lineno": 65, "funcName": "connection_lost", "created": 1736541484.139776, "msecs": 139.0, "relativeCreated": 22994.2569732666, "thread": 8145041472, "threadName": "MainThread", "processName": "MainProcess", "process": 10823, "taskName": null}

Points à noter :

  • Les horodatages sont toujours en UTC. UTC||GTFO!
  • Le champ task_name contient une valeur unique qui est allouée à la réception de la connexion SSH et utilisée sur toutes les entrées de journal de cette session.
  • Le champ « message » vous indiquera de quel type d'entrée il s'agit :
    • SSH connection received
    • Authentication success
    • User input
    • LLM response
    • Session summary
    • SSH connection closed
  • Plusieurs de ces types de messages comportent également un champ details avec des informations supplémentaires
    • les messages User input contiennent une copie encodée en base64 de l'intégralité de l'entrée utilisateur dans le champ details, ainsi qu'un champ interactive (true/false) qui vous indique s'il s'agit d'une commande interactive ou non interactive (c'est-à-dire si l'utilisateur s'est connecté avec une session terminal ou a fourni une commande en ligne de commande SSH).

Contributing

Les contributions sont les bienvenues ! Veuillez soumettre des pull requests ou ouvrir des issues pour discuter de tout changement ou amélioration.

License

Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.

Télécharger l’outil
  • les messages LLM response contiennent une copie encodée en base64 de l'intégralité de la réponse simulée dans le champ details.
  • les messages Session summary contiennent non seulement un résumé des commandes, mais aussi une estimation de ce qu'elles étaient censées accomplir. Il y aura également un champ judgement contenant l'une des valeurs "BENIGN", "SUSPICIOUS" ou "MALICIOUS"
  • Comme il s'agit d'un honeypot et non d'un outil destiné à de vrais utilisateurs, IL JOURNALISERA LES NOMS D'UTILISATEUR ET LES MOTS DE PASSE ! Ceux-ci se trouvent dans les messages Authentication success, dans les champs username et password.