Configurer un Honeypot SSH
Dans cet article nous allons traiter de la mise en place d’un Honeypot.
I. Concept du Honeypot
Un honeypot ou pot de miel en français est une technique assez utilisée dans les DMZ. Celle-ci a pour objectifs de volontairement laisser entrer tout attaquant depuis l’extérieur. Il se matérialise par un serveur sur lequel un programme spécifique a été installé. Il va autoriser toutes les connexions sur des ports de services connus. Prenons le cas de SSH, celui-ci par défaut écoute sur le port 22. La mise en place d’un Honeypot écoutant sur le port 22 permettra de volontairement céder aux attaques de brute force sur un login root en ayant spécifié un mot de passe simple comme « azerty ». Une fois l’attaquant logé sur la machine, il se retrouve à son insue dans un environnement virtuel, un fake environnement. Pour la même occasion toutes ces actions depuis son loging sont enregistré dans les logs du service Honeypot. Tout l’intérêt réside dans l’analyse comportementale des attaquants, de leur programme, de leur manipulation et des outils utilisés. Au final nous serons mieux à même de nous prévenir de ce genre de méthodes.
Pour cette démonstration nous utiliserons le logiciel Open Source Kippo, Kippo project.
II. Installation et configuration
Nous allons débuter en modifiant le port d’écoute de notre vrai serveur SSH. La manipulation permettra à Kippo d’écouter sur le port par défaut de SSH:22
.Rendez-vous dans le fichier /etc/ssh/sshd_config
et changer le port par défaut:
Port 5643 |
On relance SSH après la modification:
$ sudo service ssh restart |
Installer les paquets Python s’il ne sont pas déjà présent:
$ sudo apt-get install python-twisted |
Kippo a besoin d’être exécuté par un utilisateur normal, nous allons donc lui en créer un:
$ sudo useradd -m kippo && sudo passwd kippo |
On télécharge les sources du projet et on extrait son contenu:
$ wget https://kippo.googlecode.com/files/kippo-0.5.tar.gz |
On exporte le tout dans le dossier personnel de kippo:
$ sudo mv kippo-0.5 /home/kippo/ |
On change d’utilisateur pour Kippo et on configure Kippo:
$ su kippo |
Dans l’état des choses si on lance Kippo cela ne fonctionnera pas car le script essaiera d’écouter sur un port réservé à root. Pour rappel, tous les ports inférieurs à 1024. Étant donné que 22 en fait parti, la parade est d’utiliser les capacités. L’utilisation des capacités va nous permettre de contourner les limitations imposées par le noyau. Il faut donc les utiliser avec précision.
Extrait du man: Pour vérifier les permissions, les implémentations Unix traditionnelles distinguent deux catégories de processus : les processus privilgis (dont l’UID effectif est 0, appelé superutilisateur ou root), et les processus non privilgis (dont l’UID effectif est non-nul). Les processus privilégiés contournent les vérifications de permissions du noyau, alors que les processus non-privilégiés sont soumis à une vérification complète basée sur l’identification du processus (habituellement : UID effectif, GID effectif, et liste des groupes).
À partir du noyau 2.2, Linux propose un mécanisme (encore incomplet) de capacits, qui scinde les privilèges traditionnellement associés au superutilisateur en unités distinctes que l’on peut activer ou inhiber individuellement.
$ sudo setcap 'cap_net_bind_service=+ep' /usr/bin/python2.7 |
Maintenant on lance Kippo:
~/kippo-0.5$ ./start.sh |
On vérifie que Kippo fonctionne bien:
$ ps aux | grep `cat kippo.pid` |
Comme précisé dans l’introduction l’intégralité des actions effectuées par l’attaquans sont loguées dans /home/kippo/kippo-0.5/log/kippo.log
$ ssh [email protected] |
Visualisation des logs :
$ tail log/kippo.log |
Et voilà !
Comments