Qu'est-ce qu'une attaque MITM ?
Vous souhaitez vous connecter à votre compte bancaire, depuis votre ordinateur. Vous vous rendez sur la page de connexion, afin de rentrer votre identifiant et votre mot de passe.
Vous voilà maintenant connecté à votre compte bancaire. Vous consultez votre compte et, une fois terminé, vous vous déconnectez. 2 jours plus tard, vous souhaitez vous reconnecter. Vous effectuez la même démarche qu'il y a deux jours, sauf qu'après avoir rentré votre identifiant et votre mot de passe, votre page web affiche ça :
Impossible pour vous de vous reconnecter... Votre identifiant et votre mot de passe ont été modifiés. Vous avez peut-être été victime, avant cela, d'une attaque MITM.
L'attaque MITM (Man-In-The-Middle) ou "l'homme au milieu" en français, est une attaque dans laquelle un attaquant va s'interposer entre deux personnes qui communiquent, pour écouter leur communication.
Dans l'exemple précédent, les deux personnes sont, vous et le serveur web sur lequel est hébergé le site de votre banque. La communication est représentée par la page web que vous envoie votre navigateur et par les données (identifiant et mot de passe), que vous saisissez et envoyez au serveur web.
L'attaquant était donc entre vous et votre serveur. Il a donc pu intercepter toute votre communication.
Comment faire une attaque MITM ?
Attention : Cette démonstration est réalisée dans un environnement de laboratoire à des fins pédagogiques. Ne reproduisez pas ces techniques sur un système réel sans autorisation.
Nous allons réaliser l'exemple vu plus haut, du point de vue de l'attaquant. Nous utiliserons une machine virtuelle cliente (pour représenter votre ordinateur) et une machine virtuelle serveur (pour représenter le serveur qui héberge le site de votre banque). Nous utiliserons une dernière machine virtuelle, celle de l'attaquant, qui sera entre la machine cliente et la machine serveur.
Schéma de l'exercice :
Créons la machine virtuelle cliente sur VirtualBox. Nous utiliserons Debian comme distribution Linux pour l’OS.
La machine cliente, donc votre ordinateur, est bien créée. Il faut maintenant que nous puissions consulter le site internet de votre banque. Nous devons donc installer un serveur web.
Nous utiliserons Debian Server avec Apache 2 comme serveur web.
Le serveur est bien configuré et le site web de votre banque est bien hébergé dessus. Vérifions maintenant sur votre ordinateur (machine cliente), que nous pouvons y accéder. Avant cela assurons-nous que nos machines virtuelles, soient sur le même réseau. Ici, nos machines virtuelles sont en bridge. Nous pouvons maintenant consulter le site web.
Nous essayons maintenant de nous connecter en entrant votre identifiant et votre mot de passe.
"Connexion réussie !"
Pour le moment tout va bien !
Nous allons maintenant passer à l'attaque. Pour ce faire, nous allons utiliser une machine attaquante sous Kali Linux.
Pour réaliser l'attaque nous allons utiliser 2 logiciels. Ettercap (voir cours-ettercap) et Wireshark (voir cours-wireshark). Le but est le suivant : nous allons faire en sorte que la communication entre votre ordinateur et le serveur passe par notre machine attaquante. Une fois que la communication entre les 2 machines passe bien par notre machine attaquante, nous allons intercepter les données.
Sur notre machine attaquante, nous allons lancer Ettercap. Le but est de repérer les machines du réseau et de "changer leur manière de communiquer".
Les 2 adresses IP présentes sur Ettercap sont les adresses IP de nos machines virtuelles cibles. L'adresse 192.168.56.100 correspond à votre ordinateur (= machine cliente) et l'adresse 192.168.56.11 correspond au serveur.
Pour résumer avant de passer à la suite, nous avons :
- Une machine cliente
- Un serveur
- Une machine attaquante
- Un réseau local
- L'attaquant qui voit les machines du réseau
Maintenant une question se pose : comment l’attaquant peut-il réellement se placer entre votre ordinateur et le serveur web ? Autrement dit, comment faire pour que la communication passe par sa machine ?
Sur un réseau local, cela est possible grâce à une technique appelée ARP Spoofing (ou ARP Poisoning).
Sans entrer dans les détails, cette technique consiste à tromper les machines du réseau pour leur faire croire que l’attaquant est le bon interlocuteur (voir cours-arp).
Donc la machine cliente pensera communiquer avec la machine serveur et inversement. Quand on parle de "communication", c'est par exemple, lorsque depuis votre machine cliente vous tapez l'URL du site hébergé sur le serveur pour y accéder. Ici, nous avons une communication entre votre machine et le serveur.
Grâce à l'ARP Spoofing, l’attaquant peut faire passer sa machine pour le serveur auprès de la machine cliente, et pour la machine cliente auprès du serveur.
Notre première étape est terminée ! Maintenant toute la communication entre votre ordinateur et le serveur passe par la machine attaquante, sans que ces derniers ne soient au courant ! Nous sommes l"homme du milieu".
Après cela, il ne nous reste plus qu'à "écouter" la communication.
Utilisons maintenant Wireshark, qui est un analyseur de paquets réseau. Il permet de capturer et d'analyser les données qui circulent sur une interface réseau.
Wireshark nous montre ici tous les paquets qui passent sur notre carte réseau.
La première information que l'on peut relever, au travers de toutes les informations présentes, c'est l'adresse IP. Dans la partie "Source", nous pouvons voir 192.168.56.100, ou votre ordinateur et 192.168.56.11 ou le serveur. Donc nous voyons (depuis la machine attaquante) toute la communication entre votre ordinateur et le serveur.
La deuxième information intéressante c'est le protocole. Et ici, nous pouvons voir que la communication utilise le protocole HTTP.
Le protocole HTTP ne chiffre pas les données (voir cours-chiffrement). Cela signifie que les informations envoyées entre votre ordinateur et le serveur circulent en clair sur le réseau (= elles sont visibles).
L'attaque MITM fonctionne car le protocole pour communiquer est du HTTP.
Retournons sur votre ordinateur pour rentrer l'identifiant et le mot de passe.
Et si l'on retourne sur Wireshark sur notre machine attaquante, nous pouvons voir de nouveaux paquets.
Analysons le premier paquet :
- Source : 192.168.56.100 (votre ordinateur)
- Destination : 192.168.56.11 (le serveur)
- Protocole : HTTP
Et une fois qu'on clique dessus... Nous voyons toutes les données sensibles. Votre identifiant et votre mot de passe sont maintenant connus par l'attaquant. L'attaque MITM a bien fonctionné. L'attaquant peut maintenant se connecter à votre compte.
Pour résumer, l'attaque MITM est une attaque dans laquelle un attaquant se place entre 2 entités qui communiquent, pour intercepter leurs informations sans qu’elles le sachent.
Comment se protéger d'une attaque MITM ?
Rentrons maintenant dans la partie sécurité. Nous ne sommes plus du côté de l’attaquant, mais du côté de la défense.
Le but ici n'est pas d'empêcher un attaquant de se mettre au milieu de notre communication, mais nous allons l'empêcher de voir les informations que l'on s'échange. Un attaquant pourra facilement se placer au milieu de notre communication s'il se trouve sur le même réseau local, donc ce n'est pas notre but de l'en empêcher. Nous voulons juste qu'il ne "puisse rien faire".
La première chose à savoir est que notre communication utilise actuellement le protocole HTTP. Ce protocole ne chiffre pas les données. Nous allons utiliser la version sécurisée de HTTP : HTTPS. Pour faire simple, HTTPS chiffre les données échangées (il y a beaucoup d'autres choses à savoir sur son fonctionnement, mais ce n'est pas le but de ce cours).
Maintenant que le serveur utilise HTTPS, refaisons l’attaque.
Nous pouvons voir maintenant dans Wireshark, qu'il n'y a plus de paquets HTTP. Et c'est normal, car nous sommes maintenant en HTTPS.
En HTTPS, le protocole utilisé est le TLS, c'est grâce à lui que nos données sont chiffrées.
Regardons le premier paquet ("Client Hello"). C'est dans ce paquet que le client (= la machine cliente donc votre ordinateur) s'identifie auprès du serveur.
Une fois la connexion sécurisée établie, toutes les données dans les paquets sont chiffrées. L'attaquant ne peut donc plus lire vos informations.
Voilà pourquoi il est important de consulter des sites web en HTTPS, vos informations sont chiffrées et donc invisibles pour un attaquant.