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
SSHintel — Honeypot SSH autonome permettant de capturer les interactions des attaquants et de les transformer en renseignements de sécurité structurés. | Kitploit
Outils/GitHubGitHub/sonitbahl/sshintel
Sécurité RéseauRenseignement sur les MenacesDétection d'IntrusionRéponse aux IncidentsAnalyse de Journaux
GitHubsonitbahl/sshintel

SSHintel

Honeypot SSH autonome permettant de capturer les interactions des attaquants et de les transformer en renseignements de sécurité structurés.

Voir le dépôt
7il y a 1 jourPas encore vérifié

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

SSHintel — Honeypot SSH léger

License: MIT Python Last Commit Repo Size

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é.


🔧 Fonctionnalités

  • Journalise les tentatives de connexion SSH avec l'adresse IP, le nom d'utilisateur et le mot de passe
  • Fournit un shell Linux simulé (un environnement factice en mémoire)
  • Prend en charge un large ensemble de commandes de reconnaissance et de navigation (ls, cd, pwd, , , , , , , , , , , , , , , , etc.)
cat
echo
grep
find
tree
head
tail
wc
stat
ps
df
free
env
id
whoami
  • Mode --tarpit optionnel pour ralentir les attaquants avec une sortie différée
  • Système de fichiers factice isolé par session avec prise en charge de la création et de la lecture de fichiers
  • Tableau de bord web local pour visualiser la télémétrie de sécurité capturée (sessions, commandes, tentatives d'authentification, principaux attaquants)
  • Vue d'investigation de session — sélectionnez n'importe quelle session et reconstituez la chronologie complète de l'attaque, y compris l'adresse IP source, le résultat de l'authentification, chaque commande exécutée avec son répertoire de travail et la durée de la session
  • Tout est simulé — les commandes ne s'exécutent jamais sur l'hôte, n'accèdent jamais au système de fichiers réel et n'effectuent aucune requête réseau.
  • SSHintel 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.


    🛠️ Installation

    1. 📦 Installer les dépendances

    root@kitploit:~
    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écution du honeypot

    Exécutez le honeypot avec un port, un nom d'utilisateur et un mot de passe spécifiques :

    root@kitploit:~
    python3 run.py serve --port 2222 --username user1 --password pass123
    

    Le port par défaut est 2222 et l'hôte est 0.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 :

    root@kitploit:~
    python3 run.py serve --port 2222 --username user1 --password pass123 --tarpit
    

    Pour désactiver la télémétrie SQLite (JSONL uniquement) :

    root@kitploit:~
    python3 run.py serve --port 2222 --username user1 --password pass123 --no-db
    

    🛡️ Limites de connexion et délais d'attente

    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 :

    IndicateurDéfautObjectif
    --max-connections50Nombre maximal de connexions actives simultanées ; les connexions supplémentaires sont rejetées et journalisées comme un événement connection_rejected
    --auth-timeout60 (s)Temps autorisé pour terminer la poignée de main/authentification SSH ; les clients bloqués sont déconnectés
    --session-idle-timeout300 (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 :

    root@kitploit:~
    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.


    📊 Tableau de bord

    SSHintel comprend un tableau de bord web local qui visualise la télémétrie de sécurité stockée dans SQLite.

    Démarrer le tableau de bord

    root@kitploit:~
    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.db par 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.

    Ce qu'il affiche

    • Cartes KPI — sessions totales, adresses IP sources uniques, tentatives d'authentification, authentifications réussies/échouées et commandes exécutées
    • Graphique d'activité — connexions au fil du temps, groupées par heure
    • Commandes principales — les commandes d'attaque les plus fréquemment exécutées
    • Noms d'utilisateur ciblés — quels noms d'utilisateur les attaquants essaient
    • Sessions récentes — cliquez sur n'importe quel ID de session pour l'investiguer
    • Activité récente — les derniers événements de télémétrie dans un tableau consultable

    Investigation de session

    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 :

    • Résumé de la session — adresse IP source, nom d'utilisateur, heures de début/fin, durée, résultat de l'authentification, raison de la déconnexion
    • Chronologie de l'attaque — chaque événement (connexion, tentatives d'authentification, commandes, déconnexion) dans l'ordre chronologique
    • Séquence de commandes — une vue compacte $ commande de tout ce que l'attaquant a tapé, avec les répertoires de travail

    Exemple de flux de travail

    root@kitploit:~
    # 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.


    🔐 Test depuis un autre terminal

    Ouvrez un second terminal et essayez de vous connecter :

    root@kitploit:~
    ssh user1@localhost -p 2222
    

    Si les identifiants correspondent, vous serez placé dans le shell émulé.


    🚑 Optionnel : Effacer les hôtes connus (en cas de reconnexion)

    Pour supprimer les empreintes SSH obsolètes :

    root@kitploit:~
    notepad "%USERPROFILE%\.ssh\known_hosts"
    

    Supprimez la ligne pertinente contenant localhost ou l'adresse IP du honeypot.


    📝 Informations journalisées

    • Les identifiants sont journalisés dans creds_logger
    • Les commandes shell sont journalisées via funnel_logger
    • Les événements de sécurité structurés sont écrits dans log_files/events.jsonl au format JSON Lines (JSONL) — un objet JSON valide par ligne

    Chaque événement JSONL comprend un timestamp UTC ISO-8601, un event_type, un session_id unique et l'source_ip. Les connexions, les tentatives/résultats d'authentification, l'exécution des commandes, l'activation du tarpit et les déconnexions sont tous enregistrés comme événements structurés.

    Chaque connexion SSH entrante est suivie comme une session indépendante avec son propre session_id. Une session enregistre l'adresse IP source, les heures de connexion/déconnexion, le résultat de l'authentification et la durée de la connexion, et chaque événement généré dans cette connexion porte le même session_id (afin que les tentatives d'authentification, les commandes et les déconnexions puissent être reliées à une seule connexion). Les sessions sont isolées par connexion — aucun état n'est partagé entre les clients simultanés.

    Chaque session reçoit également son propre système de fichiers factice isolé en mémoire — le système de fichiers simulé est créé fraîchement pour chaque connexion et nettoyé lorsque la connexion se termine. Les fichiers, répertoires et le répertoire de travail créés ou modifiés par un attaquant ne sont jamais visibles par un autre attaquant connecté au même moment. L'ensemble du système de fichiers est simulé dans la mémoire Python et ne touche jamais le système de fichiers réel de l'hôte.

    Valeurs actuelles de event_type : connect, auth_attempt, auth_success, auth_failure, command, disconnect, connection_rejected, tarpit.


    📂 Structure des fichiers

    root@kitploit:~
    SSHintel/
    ├── honeypot/                  # Logique principale du honeypot
    │   ├── __init__.py
    │   ├── main.py                # Boucle d'acceptation + limitation des connexions
    │   ├── handlers.py            # Configuration du transport SSH + shell émulé
    │   ├── server.py              # Interface serveur Paramiko (authentification)
    │   ├── session.py             # Suivi de session par connexion
    │   ├── fs.py                  # Système de fichiers factice en mémoire (isolé par session)
    │   ├── shell.py               # Shell factice : registre de commandes + répartiteur
    │   ├── limits.py              # Limitation des connexions simultanées thread-safe
    │   ├── logger.py              # Journalisation des événements JSONL + pont SQLite
    │   └── telemetry_store.py     # Stockage de télémétrie SQLite + couche de requêtes
    │
    ├── dashboard/                 # Tableau de bord web local
    │   ├── app.py                 # Application Flask + routes API
    │   ├── templates/
    │   │   ├── index.html         # Modèle principal du tableau de bord
    │   │   └── session.html       # Modèle d'investigation de session
    │   └── static/
    │       ├── style.css          # Styles du tableau de bord
    │       ├── dashboard.js       # JS principal du tableau de bord (mises à jour en direct)
    │       └── session.js         # JS d'investigation de session
    │
    ├── log_files/                 # Journaux d'exécution (ignorés par git)
    │   ├── creds_audits.log       # Tentatives d'identifiants
    │   ├── cmd_audits.log         # Piste d'audit des commandes
    │   └── events.jsonl           # Événements de sécurité JSONL structurés
    │
    ├── data/                      # Base de données SQLite (ignorée par git)
    │   └── sshintel.db
    │
    ├── static/                    # Clé d'hôte SSH (générée automatiquement)
    │   └── server.key
    │
    ├── .github/workflows/         # Configuration CI
    │   └── tests.yml
    │
    ├── Dockerfile
    ├── README.md
    ├── requirements.txt           # Dépendances d'exécution (paramiko, flask)
    ├── requirements-dev.txt       # Dépendances de test (pytest, pytest-cov)
    └── run.py                     # Point d'entrée CLI
    

    💪 Exécution avec Docker (méthode alternative)

    Si vous préférez exécuter le honeypot dans un environnement conteneurisé, vous pouvez utiliser le Dockerfile inclus.

    🔨 Construire l'image Docker

    root@kitploit:~
    docker build -t sshintel .
    

    Cela crée une image Docker nommée sshintel.


    🚀 Exécuter le conteneur

    root@kitploit:~
    docker run -p 2222:2222 sshintel
    

    Cela va :

    • Générer automatiquement la clé privée SSH dans static/server.key (si elle n'existe pas déjà)
    • Lancer le honeypot sur le port 2222 avec les identifiants par défaut :
      username: user1, password: pass123

    🔮 Tester le honeypot

    Ouvrez un second terminal et connectez-vous via SSH :

    root@kitploit:~
    ssh user1@localhost -p 2222
    

    Vous serez placé dans le shell simulé si les identifiants correspondent.


    🧼 Arrêter et nettoyer

    Pour arrêter le conteneur :

    root@kitploit:~
    docker ps  # Trouver l'ID du conteneur
    docker stop <container_id>
    

    Pour supprimer l'image :

    root@kitploit:~
    docker rmi sshintel
    

    Vous pouvez également exporter l'image avec docker save -o sshintel.tar sshintel et la charger plus tard avec docker load -i sshintel.tar.


    📄 Licence

    Ce projet est sous licence MIT License.


    👤 Auteur

    Sonit Bahl
    🔗 LinkedIn
    🔗 Portfolio

    Télécharger l’outil