Man in the middle 802.1x

De Wiki d'activités IMA


Présentation générale

  • Nom du projet : Man in the middle 802.1x
  • Stagiaire : Brandon ELEMVA
  • Encadrant : Xavier REDON

Projet

Man In The Middle concept

Le concept du Man In The Middle 802.1x est le suivant : soit un PC connecté sur un réseau ethernet et communiquant avec un serveur distant. On insère sur ce même réseau un PC "d'attaque" qui viendra écouter la communication qui s'effectue sur le réseau. L'objectif de cette manoeuvre est de pouvoir intercepter les échanges qui s'effectuent entre les deux parties de manière totalement discrète et de se faire passer pour l'un ou les 2 parties.

Pour entrer plus dans les détails, supposons 2 interlocuteurs A et B possédant chacun une clé publique que nous nommerons Ap et Bp, et une clé privée que nous nommerons As et Bs :

  • lors d'un échange de données chiffrées normal, A envoie ses données à B en les protégeant avec la clé Bp. B n'aura qu'à les déchiffrer avec Bs;
  • à ces 2 interlocuteurs, nous insérons un troisième, C, possédant les clés Cp et Cs. C ne peut déchiffrer ni Ap ni Bp car ne possède pas les clés privées adéquates;
  • dans le cas d'une attaque, on suppose que B répond à A en chiffrant ses données avec Ap. C intercepte donc les données, modifie la clé publique et renvoie ainsi sa clé Cp à A en se faisant passer pour B (sans que A s'en aperçoive);
  • A va donc répondre à C en chiffrant ses données avec la clé Cp (sans le savoir): C est en mesure de déchiffrer les données avec Cs et donc voir le contenu du message envoyé;
  • C retransmet ainsi le message à B avec la clé Bp (légèrement modifiée si nécessaire) qui va déchiffrer le message avec Bs sans se douter de rien.

Ainsi, A et B vont continuer de s'échanger des messages en pensant utiliser la clé publique de l'autre sans se douter que c'est celle de C qu'ils utilisent en réalité. L'intrusion est ainsi un succès.




Le sujet

Notre objectif pour ce projet est de concevoir une carte électronique qui nous permettra d'effectuer ce même type d'attaque mais cette fois sur un réseau ethernet 802.1x . Nous simulerons, une fois la carte réalisée, une attaque sur le réseau ethernet des PC disponibles dans les salles de TP de Polytech en suivant le même procédé. Pour cela, nous nous inspirerons des travaux menés par les ingénieurs Erwan Broquaire et Pierre-Yves TANNIOU qui ont déjà réalisé un tel montage à base de relais, l'idée étant de proposer un modèle optimisé par rapport à celui-là.


Cahier des charges

Objectif :

  • Concevoir un système permettant de simuler une intrusion sur un réseau éthernet tel que celui disponible dans les salles de TP de Polytech Lille.

Besoins fonctionnels :

  • Ce système doit être discret;
  • La communication doit pouvoir être bidirectionnelle entre le PC d'attaque et les PC légitimes;
  • Si possible, utiliser d’autres composants que des relais électromécaniques pour la commutation lors de l’attaque.

Contrainte :

  • Minimiser au maximum le coût des composants.

Résultat attendu :

  • Un prototype capable de permettre l'intrusion d'un PC extérieur dans une communication entre un PC et un serveur via une liaison ethernet sans que cette intrusion ne soit détectée.


Liste du matériel nécessaire

Composants Quantité Lien pour commande
74VHC245 4 https://fr.farnell.com/on-semiconductor/mc74vhc245dwr2g/buffer-driver-ligne-octal-soic/dp/2728420
Portes inverseuses 2 https://fr.farnell.com/diodes-inc/74ahc1g04se-7/ci-logique-inverseur-gate-simple/dp/1893805?st=inverseur
Relais DPTD G6K 8 https://fr.farnell.com/omron/g6k-2f-5dc/relais-de-signal-dpdt-30vdc-1a/dp/4446185
Ports RJ45 4 https://fr.farnell.com/amp-te-connectivity/1-406525-1/embase-rj45-ci-8-voies/dp/1773035?st=rj45
Connecteurs fils à cartes type HE10 2 https://fr.farnell.com/molex/51110-0850/connecteur-fem-8-voies-2-rangs/dp/510981
Transistor MOSFET P-Channel 1 https://fr.farnell.com/vishay/sud50p04-09l-e3/mosfet-p-channel-40v-50a-to-252/dp/2300519
Diodes 8 https://fr.farnell.com/multicomp/ll4001g/diode-50v-1a-cms/dp/7355521
Transistor NPN 1 https://fr.farnell.com/nexperia/bcv72-215/transistor-npn-60v-100mhz-sot/dp/2575207?st=transistor
Résistances de 1 Kohms 2 https://fr.farnell.com/multicomp/mcwf08u1001btl/res-couche-mince-1k-0-1-0-1w-0805/dp/2694159
Résistance de 10 kohms 1 https://fr.farnell.com/te-connectivity/rn73c2a10kbtdf/res-couche-mince-10k-0-1-0-1w/dp/1140912

Le travail effectué

Semaine 1 : étude du concept et du montage à réaliser

Cette première semaine de travail était principalement dédiée à de la recherche et de l'analyse du sujet. Avant de se lancer dans la réalisation de notre système d'attaque, il était essentiel de comprendre le fonctionnement du montage réalisé par les ingénieurs précédemment cités. Nous nous sommes donc penchés, dans un premier temps, sur la réalisation de la partie matérielle du projet. Les travaux qu'ils ont réalisés sont les suivants :

Schéma réalisé par Erwan Broquaire et Pierre-Yves TANNIOU
Montage réalisé par Erwan Broquaire et Pierre-Yves TANNIOU

Le système réalisé par les deux ingénieurs précédemment mentionnés est composé de relais électromécanique qui permettent de basculer les connexions du réseau attaqué vers les équipements d’attaque employés. Or, leur délai de commutation est de 5 ms, ce qui laisse une période durant laquelle la communication est interrompue, exposant ainsi l’intrusion. Ils ont donc ajouté des résistances sur leurs commutateurs d’attaque et les ont reliées au réseau attaqué afin de tromper le réseau en faisant passer le signal émis comme étant un simple bruit sur la ligne.

L'objectif de leur manœuvre était d'avoir 2 commutateurs d'écoute : l'un écoutant les informations transmises par le PC relié à la caméra, l'autre écoutant les données transmises par la caméra de surveillance. Une Raspberry d'attaque peut éventuellement être rajoutée en cas d'attaque sur le VLAN des commutateurs légitimes (ceux qu'on attaque).

Semaine 2 : recherche des composants adaptés à notre montage

À partir de nos analyses effectuées lors de la semaine précédente, l'objectif de cette semaine était de déterminer les composants pouvant remplacer les relais électromécaniques, ceux-ci devant être silencieux et discret et devant permettre la transmission bidirectionnelle des signaux perçus sur le réseau. L'objectif étant de pouvoir commencer à réaliser un schéma électrique fonctionnel en vu du routage de notre carte.

Voici les principales idées émises :

  • montage à diodes en tête bêche (avec ou sans transistor) :
Schéma de principe de diodes en tête bèche

En positionnant les diodes sous cette configuration, nous sommes en mesure de bloquer le sens du courant dans un sens comme dans l'autre (on peut également rajouter des transistors en série à nos diodes). Cela dit, un tel système ne garantit pas une bidirectionnalité de notre montage car nous n'avons aucune indication concernant le signe du courant transmis sur la ligne de transmission, donc système peu fiable;

  • montage à base d'optocoupleurs :
Schéma conceptuel d'un optocoupleur

Les optocoupleurs fonctionnent de la manière suivante : il reçoit à son entrée un courant qui traverse une LED IR (infrarouge). Cette LED va s'allumer et émettre une lumière IR dans un boîtier hermétique à la lumière qui sera reçue par un phototransistor ou une photodiode. Celui-ci devient donc passant et ferme le circuit de sortie. L'optocoupleur fait donc les conversions successives suivantes : courant électrique - lumière infrarouge - courant électrique. Le seul soucis : ce dispositif est unidirectionnel, bien qu'il soit plus rapide et plus discret qu'un relais électromécanique. Il faudrait donc prévoir un optocoupleur par pins connectées. Sachant qu'un port RJ45 possède 8 pins entrées/sorties, il faudrait donc 8 optocoupleurs. Et pour avoir une bidirectionnalité, il faudrait avoir 8 optocoupleurs supplémentaires dans les sens opposé aux 8 premiers. Soit 16 optocoupleurs ! Cela est donc coûteux d'une part, et complexe d'un point réalisation d'autre part;

  • montage à base de buffers :
Schéma conceptuel du AD8075

Le buffer sélectionné ici est un AD8075, utilisés pour la transmission de signaux RGB (il s'agit donc d'un buffer vidéo). Le principe est le suivant : on envoie un signal sur la pin OE\ (si on envoie un signal elle sort un '0' logique, si on envoie rien elle sort un '1' logique) qui va activer la fermeture ou l'ouverture des interrupteurs reliant les sorties aux entrée correspondantes. À l'aide d'une Arduino ou d'une Raspberry pour la commande des interrupteurs, un tel système est tout à fait possible. Cela dit, le problème de la bidirectionnalité se pose car rien n'indique que ces buffers soient bidirectionnels. Il faudrait donc penser également à un système pouvant permettre cette bidirectionnalité;

  • montage à base d'émetteurs/récepteurs :
Schéma conceptuel du transceiver 74VHC245

Le 74VHC245 est un dispositif dispositif à 16 broches entrées/sorties réversibles Réversibles car via la pin DIR, nous sommes en mesure de déterminer dans quel sens passe le courant (c'est-à-dire, fixe les pins A entrées et les B en sorties ou l'inverse). La pin OE\ permet d'autoriser ou non le passage du courant selon le signal envoyé sur cette pin. Ci-dessous, vous avez le schéma logique du circuit interne à ce transceiver ainsi que la table de vérité associée.

Schéma logique du 74VHC245
Table de vérité du 74VHC245

Ce dispositif semble bidirectionnel car il est possible de permuter les entrées et les sorties.

Nous avons fini par opter pour la solution à base d'émetteurs/récepteurs car celle-ci semblait plus viable et sûre en terme de fonctionnalité par rapport à notre application. Cela dit, nous avons également décidé de réaliser un montage à relais dans la même optique que celui réalisé par les 2 ingénieurs.

Semaine 3 : réalisation des schémas électriques et des PCB des cartes

Nos composants ayant été choisis, il nous fallait donc réaliser les schémas électriques correspondants aux montages que nous souhaitions réaliser.

Montage à base de 74VHC245 :

Schéma du montage à base de 74VHC245

L'idéal pour notre montage aurait été de pouvoir le réaliser en simple face, nous conduisant donc au PCB suivant :

PCB du montage à base de 74VHC245

Cela dit, un tel montage ne peut fonctionner d'un point de vue informatique, tout du moins pas tel que nous le souhaitons. En effet, l'idée est de pouvoir commander les commutateurs l'un à l'opposé de l'autre. Plus précisément : nous avons placer 2 transceivers (émetteurs/récepteurs) au niveau de chaque port RJ45 dans le but de gérer la bidirectionnalité de nos signaux. Ceux-ci sont donc commandés avec des directions opposées (au niveau des 2 ports RJ45) mais le signal reçu sur la pin OE\ est le même pour les 2 sur un port et l'exact opposé sur l'autre port. Ainsi, le signal de commande de l'un est l'opposé de l'autre. Pour réaliser cela, nous avons utiliser des portes logiques NOT au niveau des pins DIR et OE\ des 4 transceivers. Les 8 pins auxquelles sont reliées nos RJ45 sont en fait un connecteur HE10. Nous allons dénuder un câble RJ45, le couper et venir "mordre" les fils avec ce HE10 qui sera donc relié à nos RJ45.

Schéma du montage à base de 74VHC245

Montage à base de relais type DPDT :

Schéma du montage à base de DPDT

L'idée était de s'inspirer du travail effectuer par nos 2 ingénieurs. Cependant, le montage qu'ils ont réalisé ne s'applique que dans le cas le cas où on ne souhaite limiter notre application qu'à des câbles de 100 Mbit/s de débit. Or, nous souhaitons pouvoir appliquer notre montage sur des réseaux de 1Gbit/s de débit. De ce fait, plutôt que ne prendre que 2 paires de fils comme eux l'ont fait (blanc-orange, orange, blanc-vert, vert), nous prenons les 8 fils utilisés par le câble ethernet. Le sechéma ainsi obtenu diffère du leur sur plusieurs points, mais le principe reste le même (et s'inspire de celui que nous avons réalisé avec les transceivers).

Nous nous sommes servis de relais DPDT (Double Pole Double Throw). Ils sont équivalents à 2 relais SPDT (Single Pole Double Throw) fonctionnent ensemble et pilotés par la même bobine.

Schéma conceptuel d'un relais DPDT

Ils possèdent 2 contacts l'un à l'opposé de l'autre qui font office de borne commune, 2 contacts Normalement Ouvert ou NO pour "Normaly Open" (quand il n'y a aucune tension sur la bobine) et 2 contacts Normalement Fermé ou NC pour "Normaly Closed" (également lorsqu'il n'y a aucune de tension sur la bobine). Quand on applique une tension sur la bobine, on entend des "clics" : les bornes communes vont se connecter sur les contacts NO et les contacts NC vont s'ouvrir. Dès qu'on coupe la tension aux bornes de la bobine, on entend à nouveau des "clics" et le relais revient à son état de repos (les NO ouverts et les NC fermés). Le relais DPDT possède donc 8 broches au total : 6 pour les contacts, 2 pour la bobine.

PCB du montage à base de relais DPDT

Les PCB étant réalisés, il ne nous reste plus qu'à réaliser les cartes et passer à la phase de test.

Semaine 4 : vérifications et améliorations des circuits imprimés et des schémas électriques

Après avoir consulté Mr BOE, nous nous sommes aperçus que la carte à relais pourrait ne pas fonctionner comme nous le souhaitions. En effet, j'ai connecté l'alimentation directement aux relais, impliquant ainsi que la bobine de ceux-ci serait toujours alimentée et, donc, les contacts resteraient bloqués sur la position NO. Dans ce cas, déconnecter l'alimentation manuellement aurait pu être une solution mais le temps de commutation aurait donc été beaucoup trop long. Il fallait donc concevoir un montage permettant de couper l'alimentation des relais.

Nous avons donc pensé à utiliser un montage "high side switch".

Montage High Side Switch

Le fonctionnement est le suivant : on place un transistor MOSFET entre la source d’alimentation et la borne In de bobines de nos relais. Celui-ci coupe donc l'alimentation des bobines. À la borne Source de transistor, on connecte le + de notre alimentation. Sur la borne Drain, on connecte nos relais. Sur la borne Grille, on connecte un transistor NPN (tant que sur la base du transistor NPN on a un signal de 5V appliqué dessus, le MOSFET reste actif et coupe l'alimentation des relais) et une résistance (pour limiter le courant à la base du MOSFET). En parallèle à nos relais, nous ajoutons des diodes de roue libre afin de protéger les inductances de nos relais d’une éventuelle surtension.

Nous avons pu arriver, ainsi, aux schéma et PCB suivants, qui ont été validés pour le montage à relais :

Schéma électrique final du montage à relais
PCB final du montage à relais

Semaine 5 : réalisation des soudures des 2 cartes

Cette semaine, nous avons reçu les cartes ainsi que les composants nécessaires à la finalisation de celles-ci. Ci-dessous, le rendu final des cartes après soudure.

Carte avec 74VHC245 vu du dessous
Carte avec 74VHC245 vu du dessus
Carte avec relais vu du dessous
Carte avec relais vu du dessus

La carte à relais n'est pas entièrement terminée car le transistor MOSFET n'a pas été livré dans les temps avec les autres composants. Pour le coup, la phase de test s'effectuera donc sur la carte avec 74VHC245. Sur les 8 pins mâles au milieu de la carte nous viendrons connecter le câble ethernet. Une Arduino fournira l'alimentation nécessaire aux transceivers et aux inverseurs (+5V), ainsi que le signal de commande des transceivers (voir le fichier programme de contrôle des commutations en fin de wiki).

Semaine 6 : test et résultats

Durant cette dernière semaine, nous nous sommes consacrés au test de la carte à transceivers. Dans un premier temps, nous avons testé la continuité électrique de celle-ci afin de vérifier qu'il n' y avait pas de court-circuits apparents. D'après le test, la carte semblait bien fonctionnelle : on reçoit bien les 5V nécessaire à l'alimentation de tous les composants. Un test avec le code Arduino a révélé que la commutation des ports des transceivers était bien effective (on observe bien une alternance de 0 et 5V sur les pins OE\ des transceivers, montrant ainsi un changement du sens de transmission sur les ports entrées/sorties A et B).

Cela dit, le test de fonctionnalité côté logiciel s'est avéré moins concluant. En effet, nous avons limité le test à la simple vérification de l'apparition ou non de notre Raspberry d'attaque sur le PC légitime. Pour ce faire, nous avons modifié le fichier interfaces de la Rpi comme suit :

Paramètres à fixer dans le fichier interfaces de la Rpi

Il faut, au préalable, installer les packages bridge-utils et ebtables sur la Rpi d'attaque.

Une fois la Rpi configurée, il faut saisir les commandes suivantes sur le terminal de la Rpi :

ebtables -t nat -A PREROUTING -d xx:xx:xx:xx:xx:xx -j dnat --to-destination XX:XX:XX:XX:XX:XX

ebtables -t nat -A POSTROUTING -s xx:xx:xx:xx:xx:xx -j snat --to-source XX:XX:XX:XX:XX:XX

Ces commandes permettent de rediriger les trames vers un destinataire qui est notre Rpi. L'adresse "xx:xx:xx:xx:xx:xx" correspond à l'adresse MAC du PC victime tandis que l'adresse "XX:XX:XX:XX:XX:XX" correspond à celle de la Rpi d'attaque.

Ceci étant fait, la Rpi est normalement configurée pour recevoir et retransmettre les paquets au PC victime. Le problème vient du fait qu'en connectant la carte à transceivers sur le commutateur de la Rpi et celui du PC victime, rien ne se passe, c'est-à-dire aucun matériel n'est détecté. En saisissant la commande dmesg -wH sur le terminal du PC victime, on observe la liste des dispositifs ayant été connectés ou déconnectés, en temps réel, du PC, comme vous pouvez le voir ci-dessous :

Liste des appareils connectés ou déconnectés temps réel sur le PC légitime

On observe bien que nous avons déconnecté un câble ethernet du PC victime mais en connectant ce même câble à notre dispositif lui-même connecté au commutateur de la Rpi et au PC, aucun changement ne se produit.

Les explications sont nombreuses mais celles qui sont les plus évidentes sont les suivantes :

1) Les composants choisis ne sont pas adaptés à une transmission de signaux ethernet; 2) Les manipulations effectuées pour le test n'étaient peut-être pas adaptées au résultat que nous souhaitions obtenir; 3) La Rpi est peut-être mal configurée

Avec du temps supplémentaire, il aurait été possible de trouvé le véritable problème et d'en déterminer une solution. mais cela se fera hors période de stage. Cela étant dit, ce projet était très intéressant et mérite d'être abouti. Ça été une très bonne occasion de mettre en application les connaissances et compétences acquises au cours de ma formation mais, surtout, d'en acquérir de nouvelles dans le domaine de la cybersécurité. Je souhaiterais vivement pouvoir terminer ce projet et voir le résultat final

Sources

Documentation

Man In The Middle 802.1x : principe[1]

Silent Wire Hacking by Pierre-Yves Tanniou and Erwan Broquaire[2]

Datasheet transceiver 74VHC245[3]

Datasheet relay DPDT G6K[4]

Montage High Side Switch : Réalisation du montage[5]

Programme Arduino permettant le contrôle la commutation des relais et des 74VHC245 : Fichier:Programme controle commutation.zip