Installation et configuration d’un Honeypot SSH avec Kippo sous Linux

2
301

I. Concept du Honeypot

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.

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
--2012-02-24 23:47:16--  https://kippo.googlecode.com//kippo-0.5.tar.gz
Resolving kippo.googlecode.com... 173.194.67.82
Connecting to kippo.googlecode.com|173.194.67.82|:443... 
connected.
HTTP request sent, awaiting response... 200 OK
Length: 387148 (378K) [application/x-gzip]
Saving to: `kippo-0.5.tar.gz'
 
100%[===========================================>] 387,148     
 457K/s   in 0.8s 
 
2012-02-24 23:47:17 (457 KB/s) - `kippo-0.5.tar.gz' saved [387148/387148]
$ tar xzf kippo-0.5.tar.gz

On exporte le tout dans le dossier personnel de kippo:

$ sudo mv kippo-0.5 /home/kippo/
$ sudo chown -R kippo:kippo /home/kippo/

On change d’utilisateur pour Kippo et on configure Kippo:

$ su kippo
$ cd kippo-0.5
~/kippo-0.5$ sed -i s/'ssh_port = 2222'/'ssh_port = 22'/ kippo.cfg

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 
Starting kippo in background...Generating RSA keypair...
done.

On vérifie que Kippo fonctionne bien:

$ ps aux | grep `cat kippo.pid`
kippo    16632  0.0  6.8  30824 21612 ?        S   
 02:31   0:00 /usr/bin/python /usr/bin/twistd -y kippo.tac -l 
log/kippo.log --pidfile 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 root@192.168.146.157
Password:
sale:~# ls

Visualisation des logs :

$ tail log/kippo.log 
2012-02-25 02:31:09+0100 [SSHChannel session (0) on SSHService ssh-conn
ection on HoneyPotTransport,0,192.168.146.1] channel open
2012-02-25 02:31:09+0100 [SSHService ssh-connection on HoneyPotTranspo
rt,0,192.168.146.1] got global no-more-sessions@openssh.com request
2012-02-25 02:31:09+0100 [SSHChannel session (0) on SSHService ssh-
connection on HoneyPotTransport,0,192.168.146.1] pty request: ansi (60, 236, 1652, 900)
2012-02-25 02:31:09+0100 [SSHChannel session (0) on SSHService ssh-
connection on HoneyPotTransport,0,192.168.146.1] Terminal size: 60 236
2012-02-25 02:31:09+0100 [SSHChannel session (0) on SSHService ssh-
connection on HoneyPotTransport,0,192.168.146.1] unhandled request for env
2012-02-25 02:31:09+0100 [SSHChannel session (0) on SSHService ssh-
connection on HoneyPotTransport,0,192.168.146.1] getting shell
2012-02-25 02:31:09+0100 [SSHChannel session (0) on SSHService ssh-
connection on HoneyPotTransport,0,192.168.146.1] Opening TTY log: 
log/tty/20120225-023109-8964.log
2012-02-25 02:31:11+0100 [SSHChannel session (0) on SSHService 
ssh-connection on HoneyPotTransport,0,192.168.146.1] 
Received unhandled keyID: '\x08'
2012-02-25 02:33:18+0100 [SSHChannel session (0) on 
SSHService ssh-connection on HoneyPotTransport,0,192.168.146.1] CMD: ls
2012-02-25 02:33:18+0100 [SSHChannel session (0) on 
SSHService ssh-connection on HoneyPotTransport,0,192.168.146.1] Command found: ls

2 Commentaires

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here