
Honeypot SSH autonome permettant de capturer les interactions des attaquants et de les transformer en renseignements de sécurité structurés.
SSHintel est un honeypot SSH léger construit avec Python et Paramiko. Il simule un shell Linux factice pour journaliser les tentatives d'accès non autorisées, capturer les identifiants et analyser le comportement des attaquants dans un environnement contrôlé.
ls, cd, pwd, cat, echo, grep, find, tree, head, tail, wc, stat, ps, df, free, env, id, whoami, etc.)--tarpit optionnel pour ralentir les attaquants avec une sortie différéeSSHintel n'est pas un shell Bash/Linux complet. Il simule un sous-ensemble crédible de commandes courantes pour recueillir la télémétrie des attaquants. Les commandes sont distribuées par un registre léger ; ajouter une commande signifie ajouter une petite fonction de gestion.
pip install -r requirements.txt
Remarque : La clé d'hôte SSH est générée automatiquement au premier lancement. Aucune génération manuelle de clé n'est nécessaire.
Exécutez le honeypot avec un port, un nom d'utilisateur et un mot de passe spécifiques :
python3 run.py serve --port 2222 --username user1 --password pass123
Le port par défaut est
2222et l'hôte est0.0.0.0.
Le honeypot génère automatiquement une clé d'hôte SSH dans static/server.key au premier lancement si elle n'existe pas. Aucune génération manuelle de clé n'est nécessaire.
Pour activer le mode tarpit :
python3 run.py serve --port 2222 --username user1 --password pass123 --tarpit
Pour désactiver la télémétrie SQLite (JSONL uniquement) :
python3 run.py serve --port 2222 --username user1 --password pass123 --no-db
SSHintel protège contre l'épuisement des ressources causé par de nombreuses connexions simultanées ou des connexions maintenues actives indéfiniment. Ces paramètres sont configurables via la CLI :
| Indicateur | Défaut | Objectif |
|---|---|---|
--max-connections | 50 | Nombre maximal de connexions actives simultanées ; les connexions supplémentaires sont rejetées et journalisées comme un événement connection_rejected |
--auth-timeout | 60 (s) | Temps autorisé pour terminer la poignée de main/authentification SSH ; les clients bloqués sont déconnectés |
--session-idle-timeout | 300 (s) | Délai d'inactivité pour un shell authentifié ; une session inactive est terminée, mais un attaquant qui tape activement n'est jamais tué |
Exemple :
python3 run.py serve --port 2222 --username user1 --password pass123 \
--max-connections 25 --auth-timeout 30 --session-idle-timeout 300
Lorsque trop de connexions sont ouvertes, la connexion supplémentaire est fermée immédiatement et un événement de sécurité connection_rejected (avec reason: connection_limit) est écrit dans le journal JSONL. Une authentification bloquée est enregistrée comme une déconnexion avec reason: auth_timeout ; un shell inactif se termine avec reason: idle_timeout.
Le mode tarpit envoie intentionnellement la sortie lentement pour maintenir l'engagement d'un attaquant, donc la boucle de bannière tarpit n'est pas soumise au délai d'inactivité — mais les sessions tarpit comptent dans la limite de connexions.
SSHintel comprend un tableau de bord web local qui visualise la télémétrie de sécurité stockée dans SQLite.
python3 run.py dashboard
Ouvrez ensuite http://localhost:5000 dans votre navigateur.
Le tableau de bord lit la base de données SQLite dans
data/sshintel.dbpar défaut. Démarrez d'abord le honeypot pour que la télémétrie soit capturée, puis lancez le tableau de bord pour le regarder se remplir.
Cliquez sur un ID de session (ou naviguez vers /session/<session_id>) pour ouvrir la vue d'investigation de session, qui reconstitue une seule attaque chronologiquement :
$ commande de tout ce que l'attaquant a tapé, avec les répertoires de travail# Terminal 1 : démarrer le honeypot
python3 run.py serve --port 2222 --username user1 --password pass123
# Terminal 2 : démarrer le tableau de bord
python3 run.py dashboard
# Terminal 3 : simuler un attaquant
ssh user1@localhost -p 2222
# (exécuter quelques commandes, puis quitter)
Ouvrez ensuite http://localhost:5000 pour inspecter l'activité capturée.
Le tableau de bord prend en charge la télémétrie en direct — il interroge le honeypot toutes les 2 secondes et se met à jour automatiquement. Les nouvelles sessions, commandes et événements apparaissent en temps réel sans actualiser la page. Un indicateur en direct (● Live) montre l'état de la connexion.
Ouvrez un second terminal et essayez de vous connecter :
ssh user1@localhost -p 2222
Si les identifiants correspondent, vous serez placé dans le shell émulé.
Pour supprimer les empreintes SSH obsolètes :
notepad "%USERPROFILE%\.ssh\known_hosts"
Supprimez la ligne pertinente contenant
localhostou l'adresse IP du honeypot.
creds_loggerfunnel_loggerlog_files/events.jsonl au format JSON Lines (JSONL) — un objet JSON valide par ligne