15/11/2024

Services

Honey Pot SSH avec Kippo

I. Présentation du HoneyPot Kippo

Nous allons ici étudier un outil très utile et simple d’utilisation : Kippo

Kippo est un Honey Pot (aussi appelé "Pot de miel") SSH qui s'installe sous Linux. Pour ceux à qui les Honey Pot ne disent rien, il s'agit donc de faux services installés sur une machine (parfois un machine entière peut être un pot de miel) et qui va avoir pour but d'attirer l'attention des attaquants potentiels et ensuite de les piéger en trahissant leur identité ou en journalisant leurs faits et gestes par exemple. Kippo est donc spécialisé sur le protocole SSH, il va en effet se substituer à un véritable service SSH et va être configuré de façon vulnérable pour que les pirates puissent y accéder sans trop de difficulté (sans trop de facilité non plus pour ne pas qu'ils détectent la présence du piège mis en place ! ).

Plus simplement, nous allons faire tourner notre service SSH légitime sur un port non standard (autre que le port 22 qui est son port par défaut) puis envoyer les requêtes SSH arrivant sur le port 22 de la machine protégée et venant des pirates potentiels essayant de se connecter vers Kippo qui va "piéger" les attaquants. Cela peut être particulièrement pratique pour révéler des attaques de type brute-force par exemple ou alors pour faire perdre du temps aux attaquants.

Note : Ce tutoriel est effectué avec la version 0.8 de Kippo sur une Debian 7 standard.

II. Installation et configuration de Kippo

Kippo est un outil écrit en Python, on va commencer par installer  ses dépendances :

apt-get install python-twisted

Nous allons alors voir les dépendances de python-twisted qui seront téléchargées :

kippo installation
Vue des dépendances requises pour faire fonctionner Kippo.

Il nous faudra ensuite mettre notre service SSH légitime sur un autre port que le port par défaut. En effet, le principe de fonctionnement de Kippo vise à simuler un service SSH sur son port standard pour piéger les attaquants. Lors d'une attaque, les attaquants vont généralement en priorité vérifier si un service est actif sur les ports connus comme le port SMTP (25) ou le port SSH (22) et s'attaquent ensuite aux ports plus ésotériques si les recherches précédentes ne sont pas suffisamment riches en information. En trouvant le port 22 actif, nous sommes quasiment certains que le pirate pourra croire à un service SSH légitime et n’ira pas en chercher un autre sur un autre port. On doit donc ouvrir le fichier de configuration SSH :

vim /etc/ssh/sshd_config
changer port SSH
Changement du port SSH dans la configuration SSHD

On modifiera donc la valeur "Port" qui est par défaut paramétrée à "22".

Note : Si vous êtes connecté en SSH sur votre serveur, il faudra vous reconnecter non plus avec le port 22 par défaut mais sur le nouveau port

Pour valider notre configuration, nous allons redémarrer le service SSH

service ssh restart
adduser kippo
créer utilisateur linux
Création de l'utilisateur Kippo qui fera tourner le service

On va ensuite passer au téléchargement de Kippo que l'on récupérera directement sur son dépôt GoogleCode (Kippo sur Code.Google) :

cd/opt
wget http://kippo.googlecode.com/files/kippo-0.8.tar.gz

On décompresse le tout puis on donne les droits d'utilisation à notre utilisateur Kippo qui exécutera l’outil.

tar zxvf kippo-0.8.tar.gz
chown kippo:kippo kippo-0.8 -Rf

Voici le contenu du dossier Kippo :

kippo
Vue des dossiers contenus dans le dossier Kippo
  • log/kippo.log : Contient les logs d'activité du processus et du pirate sur le Honey Pot, nous y retournerons un peu plus bas dans l'article.
  • log/tty/ : Contient les logs de connexion et de déconnexion, nous y retournerons un peu plus bas dans l'article.
  • utils/playlog.py : Utilitaire permettant de rejouer une session de log capturée.
  • utils/createfs.py : Utilisé pour créer le fichier fr.pickle.
  • fs.pickle : Il s'agit d'un faux système de fichier dans lequel le pirate piégé va naviguer.
  • honeyfs/ : Contenu des fichiers pour le faux système de fichier, on peut y copier un vrai système entier.

Par défaut, Kippo écoute sur le port 2222. Nous allons donc configurer une règle iptables qui va rediriger les flux arrivants sur le port 22 vers le port 2222 :

iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222

 Nous allons ensuite aller dans le dossier de l'outil Kippo, passer à une session Kippo pour ne pas avoir à l'exécuter en tant que root (ce que l'outil refuse de toute façon) :

cd kippo-0.8
su kippo
./start.sh

Une fois l'outil actif, nous allons pouvoir faire quelques essais :

Utilisation Kippo
Démarrage de Kippo via son script de lancement

III. Test et visualisation des logs

 Pour tester notre Honey Pot, rien de plus simple. Il suffit de se connecter tout simplement en SSH sur le port standard avec un outil comme Putty ou une console Linux

ssh [email protected]

 Le mot de passe par défaut est "123456", il sera forcément trouvé par un pirate utilisant une attaque de type brute force par dictionnaire. Nous pouvons toutefois ajouter d'autres mots de passe pour piéger plus facilement le pirate, nous verrons cela un peu plus bas.

Nous sommes donc maintenant en tant que pirate sur le Honey Pot SSH. On voit d'ailleurs que notre machine se nomme désormais "nas3", on fait alors croire au pirate qu'il est sur une machine importante, un NAS pouvant contenir des données stratégiques. "nas3" est le nom par défaut de la machine de piège, nous verrons un peu plus bas comment le changer.

On peut donc naviguer sur le système librement sans vraiment se rendre compte qu'il s'agisse d'un faux système :

utilisation kippo
Accès en tant qu'attaquant au piège SSH de Kippo

 Après avoir quitter la session, on pourra retourner du "coté du sysadmin" dans le dossier de l'outil Kippo pour voir ce que l'outil a détecté. Dans le dossier "log", on pourra voir  le fichier "kippo.log" qui contient les informations d'ouverture de sessions et les activités de l'utilisateur ayant ouvert la session :

logs kippo
Vue des logs d'une session piégée dans Kippo

Il y a également le dossier logs/tty qui contiendra un fichier par session ouverte (par piège réussi) spécialement formaté par Kippo, ceux-ci ne sont pas lisibles avec un éditeur de texte :

utilisation kippo
Liste des session des pirates piégé par Kippo

On voit ici que les fichiers sont nommés en fonction de la date et l'heure d'ouverture de session. Ainsi, chaque pirate tombant dans notre pot de miel aura un fichier de log qui sera dédié à sa session. On peut alors utiliser un petit utilitaire écrit en Python et fournis avec Kippo qui se nomme "playlog" et qui permet tout simplement de rejouer un fichier de logs du dossier "tty" pour voir en direct (la manière d'une vidéo) les actions effectuées par le pirate :

Utilisation Kippo
Rejoue d'une session d'un pirate piégé par Kippo

Il faut noter que cela est sans risque pour le système car il n'y a qu'un affichage des commandes, aucune action ne sera véritablement menée sur celui-ci.

IV. Configuration supplémentaire

Nous avons précédemment vu que le mot de passe par défaut était "123456" et le nom de la machine piège par défaut était "nas3". Cela peut être modifié pour s'adapter à l'environnement de votre SI et ainsi rendre le piège encore plus discret. On peut par exemple faire en sorte que plusieurs mots de passe accepte l'ouverture de session afin de maximiser nos chances de "capturer" un pirate. On va donc aller dans le fichier data/userdb.txt et ajouter les mots de passe voulus sous la même forme que le mot de passe par défaut  :

configuration kippo
Ajout d'un utilisateur/mot de passe dans la configuration Kippo

Le pirate pourra alors accéder plus facilement à notre piège car plusieurs mots de passe pour un même compte seront valides. Attention toutefois à ne pas mettre des mots de passe "trop" simple pour ne pas que votre attaquant ne soupçonne un piège. On peut également changer le nom par défaut de la machine piège qui est donc "nas3". Il faut pour cela aller dans le fichier "kippo.cfg" présent à la racine de l'outil et modifier la ligne suivante :

Configuration Kippo
Changement du nom d'hôte du faux-hôte Kippo

Il faudra alors redémarrer Kippo.

author avatar
Mickael Dorigny Co-founder
Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

6 commentaires sur “Honey Pot SSH avec Kippo

  • Ahah super outils, j’ai mis ça sur le web, on verra qui mort à hameçon :p

    Un truc sympa, c’est que une fois que t’es co sur le serveur, on peut pas se déconnecter (CTRL+C), en gros, si le mec passe par ssh pour t’attaquer, il pert aussi sa connexion :p

    Répondre
  • Le truc qui serait sympas surtout c’est de créer une blacklist de tous ceux qui se sont branchés à ce pot de miel pour leur barré l’accès aux vrais services sur les autres ports. C’est possible/facile?

    Question subsidiaire, c’est gourmand en ressources? Je voudrais sécuriser un petit serveur raspberry pi (première génération)

    Merci,
    Yann.

    Répondre
    • Bonjour,

      Gourmand en ressource je ne sais pas, mais pour l’utilité que tu en as, je te conseillerais plutôt d’utiliser fail2ban qui permet de bannir temporairement une IP qui tenterais trop d’authentification sur ton port SSH http://www.it-connect.fr/premiers-pas-avec-fail2ban/ . Dans le cadre de le protection d’un Raspebrry pi, un Honey Pot n’a pas vraiment d’intérêt.

      Répondre
  • Mince… BarrER « er » pas possible d’éditer?

    Répondre
  • Jamais 2 sans 3 😉
    Est-il possible d’enregistrer les mots de passe saisis par l’intrus histoire de se conforter sur ceux choisis, et peut être permettre d’en savoir un peu plus sur l’attaquant?

    Répondre
  • @Yann,

    Les mots de passes saisit par l’attaquant, son IP ainsi que toutes les commandes utilisées sont visible dans les logs de Kippo !

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.