Identifier un équipement au sein d’un réseau

15 Nov

Afin d’interconnecter les équipements informatiques comme le fait Internet aujourd’hui , il a fallu inventer le concept de « réseau informatique » et pouvoir identifier chacun de ces équipements pour permettre une communication. Nous allons aborder dans ce chapitre ces notions de base.

a) Identification physique (adresses MAC)

Chaque équipement réseau que nous possédons, qu’il soit filaire (paires torsadées, fibre optique…) ou sans-fil (Wi-Fi), possède une adresse physique unique au monde : c’est l’adresse MAC (Media Access Control). C’est grâce à cette adresse qu’on peut identifier l’équipement auquel on veut envoyer des informations.
Celle-ci se décompose en six octets, trois identifiant le constructeur, et trois identifiant le modèle.
Exemple d’adresse MAC : 00-14-1b-33-21-80, qui correspond au constructeur Cisco Cisco Systems, voir ce site.

Pour reprendre le schéma du modèle TCP/IP, MAC est une sous-couche de la couche d’accès réseau (liaison de données dans le modèle OSI). Cette sous-couche permet notamment de délimiter le flux binaire reçu de la couche physique, de filtrer les trames reçues (selon l’adresse MAC destination indiquée), d’insérer les adresses MAC Source/Destination lors de l’envoi d’un paquet et de détecter les erreurs de transmission grâce à une somme de contrôle (checksum) calculée par l’émetteur. On ne parle pas d’en-tête MAC, puisque c’est une sous-couche. En général, on aura un en-tête Ethernet II ou DIX (Ethernet version 2, la version 1 n’étant plus utilisée). Ethernet II implémente aussi bien la communication filaire que sans fil.
L’adresse MAC source est bien-sûr l’adresse de la carte Wi-Fi (par exemple) de l’émetteur, et l’adresse destination peut-être celle d’une carte Wi-Fi d’un autre PC dans le réseau local (nous aborderons cette notion de local plus tard), ou bien du routeur.

Que ce soit de la communication filaire ou sans-fil, cette sous-couche MAC est implémentée par le protocole Ethernet, qui représente globalement l’implémentation de la couche Liaison de données. L’adresse MAC de votre PC représente donc son adresse physique sur le réseau.

Dans les communications réseaux, il y a principalement deux modes de transmission :
unicast : le paquet envoyé est destiné à un seul PC.
broadcast : le paquet envoyé est destiné à tous les PC’s du réseau.
Un troisième existe, le multicast, où le paquet est destiné à un ensemble de PC du réseau (peu utilisé).
Vous comprendrez en lisant la suite comment reconnaître une trame émise en unicast ou en broadcast.

Dans un réseau local, c’est en connaissant l’adresse MAC du destinataire qu’on peut lui envoyer une trame réseau (une trame étant un flux de bits). C’est ensuite à la couche physique qu’il revient d’envoyer la trame. Cela ne signifie pas forcément que seul le PC ciblé va recevoir la trame, cela dépend de la topologie du réseau mis en place.
En revanche, c’est la couche MAC, qui pour un PC qui reçoit le trame, regarde l’adresse MAC Destination : si celle-ci correspond à la sienne ou que c’est une trame en broadcast, alors il tient compte de la trame, sinon l’ignore.

En Ethernet filaire, il y a globalement deux cas :

– Machines ->  Hub/Concentrateur -> Routeur : Tout le monde voit toutes les trames circulantes dans le réseau local. En effet, quand un hub reçoit une trame, il se contente de la retransmettre sur toutes ses pattes !
– Machines -> Switch/Commutateur -> Routeur : Tout le monde voit les broadcasts, seul le destinataire reçoit les autres trames (unicast). À la différence d’un hub, le switch « mémorise » quelle adresse MAC (autrement dit quel PC/équipement physique) correspond à chacun de ses ports. Quand il retransmet une trame, il sait donc parfaitement par quel port le faire passer, au lieu de le retransmettre sur tous ses ports.

En Ethernet sans-fil (Wi-Fi), c’est un peu plus délicat.
Théoriquement, tout le monde reçoit tout, puisque cela ne passe plus par câblage, mais par ondes. Le PC qui se trouve dans le « champ d’action » du PC émetteur voit forcément passer la trame.

Note : Le routeur se comporte comme un switch lorsqu’il reçoit une trame (pour des communications dans un même réseau). Il n’y touche pas et se contente de la retransmettre. Cela est notamment utile dans le cas de connexions Wi-Fi. En effet, si deux PC’s sont connectés en Wi-Fi à un routeur/box, mais qu’ils sont trop loin de l’autre (problème dit de la « station cachée »), c’est le routeur qui leur permettra de communiquer (car seul lui percevra les trames de l’un et de l’autre). Mais d’un point de vue conceptuel, le routeur ne fait rien, c’est bien le PC A du réseau qui communique directement avec le PC B.

Le scénario concret d’envoi/réception de trames dépend donc de la topologie du réseau.

/* Après quant à pouvoir la lire, cela est autre chose ! En effet, les trames envoyées par ondes nécessitent d’être chiffrées, puisqu’elles sont accessibles par n’importe quel équipement à proximité. Si la carte réseau ne parvient pas à déchiffrer (dans le cas où le paquet ne lui est pas destiné), elle ne peut alors pas traiter le paquet. */

Dans la plupart des captures d’écran réalisées, j’utiliserai le logiciel Wireshark, qui est certainement le sniffer (logiciel qui écoute le traffic sur le réseau) le plus réputé.
Un sniffer possède un atout majeur dans l’analyse du trafic d’un réseau : il place la carte réseau en mode promiscuous (promiscuité). Au lieu de n’accepter que les trames qui lui sont destinées, la carte réseau va accepter et « traiter » toutes les trames qui arrivent (à condition de pouvoir les lire). Selon le type de réseau, on va donc pouvoir voir passer plus ou moins de flux d’où la nécessité de configurer correctement son réseau (pour une entreprise par exemple).

Si vous voulez l’utiliser pour suivre mes captures, téléchargez sur Internet une version de Wireshark correspond à votre version d’OS. Puis apprenez à l’utiliser en regardant un tutoriel (par exemple ici).

Comme pour chaque protocole, le protocole Ethernet (couche 2 : liaison de données) ajoute son en-tête. Implémentant la sous-couche MAC, c’est lui qui renseigne (notamment) dans son en-tête l’adresse MAC Source et l’adresse MAC destination, qui vont permettre l’acheminement du paquet. Mais comme pour tout, il y a des limites. On ne peut pas envoyer un paquet de n’importe quelle taille sur le réseau.
Ainsi, sur chaque réseau et selon le protocole implémenté est définie une MTU (Maximum Transmission Unit).
Sur les réseaux implémentant Ethernet II (la majorité), la MTU est de 1500 octets, ce qui signifie qu’une trame envoyée sur le réseau n’excède pas 1500 octets.
La MTU comprend la charge utile transportée par le protocole Ethernet (données) ainsi que son en-tête. La charge utile (payload) va notamment contenir tout ce qui vient des couches au-dessus (réseaux, transport …).

Voici l’exemple d’une trame échangée entre deux PC’s :

Trame échangée entre deux PC’s

On voit bien dans l’en-tête Ethernet (II) l’adresse MAC Source et l’adresse MAC destination. On remarque également que l’en-tête contient une information sur le protocole transporté dans la charge utile (données). Ici, c’est le protocole IP version 4.

Notre en-tête mesure donc 14 octets (2 adresses MAC et 2 octets pour le protocole transporté).

b) Identification logique (adresses IP)

Pour hiérarchiser/structurer un réseau, on ne peut plus travailler avec des adresses physiques (qui dépendent du constructeur et du « numéro de série »). C’est pourquoi on utilise des adresses logiques qu’on associe à des adresses physiques. Ce sont les fameuses adresses IP (Internet Protocol), que les programmes informatique utilisent. Dans la suite, on prendra des exemples avec le protocole IPv4 toujours d’actualité (adresses IP codées sur 4 octets) et non avec IPv6 (adresses IP codées sur 16 octets).

IP est un protocole de la couche 3 (Réseau) du modèle OSI et de la couche Internet du modèle TCP/IP. Cette surcouche va permette de structurer et d’administrer un réseau ; c’est là que va intervenir la notion de routage (inter-réseaux). On emploie généralement le terme trame pour parler du flux de bits transmis sur le réseau (bloc d’informations), et de paquet ou datagramme IP pour parler d’un bloc de données.

L’en-tête IP ajouté au paquet mesure de 20 à 60 octets.
Les champs principaux qu’on y trouve sont :
– L’adresse IP Source : Adresse IP de l’émetteur du datagramme,
– L’adresse IP Destination : Adresse IP du destinataire du datagramme,
– Le champ TTL (Time To Live) : contient initialement le nombre maximum de routeurs par lesquels le datagramme peut passer. Ce champ est décrémenté à chaque fois qu’il passe un routeur. Lorsqu’il arrive à 0, il est détruit par le routeur. Dans ce cas-là, le routeur génère un paquet ICMP (Internet Control Message Protocol), protocole de couche 3, qui est envoyé à l’adresse IP Source, c’est-à-dire à l’émetteur du datagramme initial. Ce paquet contient notamment le type d’erreur ou de contrôle (echo, temps dépassé, demande d’adresse IP, etc.) accompagné d’un code d’erreur.

On trouve également d’autres champs :

– Un champ qui indique si le paquet est fragmenté : Comme nous l’avons vu plus haut, chaque réseau traversé par un paquet est caractérisé par une unité maximum de transfert (MTU). Si un paquet doit traverser deux réseau différents qui ont tous deux une MTU différente, il peut y avoir de la fragmentation. Par exemple, si un paquet vient d’un réseau implémentant le protocole Token Ring avec une MTU de 4000 octets, et qu’il doit passer sur un réseau implémentant Ethernet (1500 octets), le paquet IP va devoir être fragmenté par le routeur en plusieurs paquets plus petits. Le paquet initial est alors fragmenté.
– Un champ d’Options, pouvant aller de 0 à 40 octets. Si celui-ci n’est pas multiple de 4 octets, alors le protocole rajoute des octets de bourrage (padding).
Pour prendre un exemple, on peut définir la route (entière ou partielle) que doit prendre le paquet d’une source A vers une destination B (IP Source Routing). On peut dire, pour aller de A à B, fais passer le paquet par C. Le paquet réponse devra alors suivre le même chemin à l’inverse. Cela peut être un avantage pour faire de l’IP Spoofing (usurpation d’adresse IP). Si un pirate contrôle un routeur X, il peut envoyer un paquet IP au PC B en se faisant passer pour un autre PC A (en changeant l’adresse IP Source du datagramme), tout en ajoutant au datagramme l’obligation de passer par le routeur X. Lors de la réponse, il pourra alors lire le contenu du datagramme avant que celui-ci soit acheminé vers le véritable PC A.

Cela donne le schéma de paquet suivant (capture d’un schéma trouvé sur wikibooks):

Schéma Datagramme IP

c) Association Physique – Logique (ARP)

Pour pouvoir envoyer un paquet à un PC identifié par une adresse IP logique, il faut également connaître son adresse MAC (pour l’acheminement physique). Le protocole ARP (Address Resolution Protocol) intervient à ce moment-là.
Son but est de faire correspondre une adresse IP locale/privée à une adresse MAC. Grossièrement, ce protocole sert d’interface entre la couche liaison de données et la couche réseau. À cette fin, les systèmes d’exploitation implémentent une table ARP, qui maintient une liste de correspondances IP – MAC.
Vous pouvez la consulter en ouvrant l’invite de commandes et en tapant (aussi bien sous Windows que sous Linux) : arp -a.

J’obtiens par exemple ceci (qui correspond à l’adresse IP/adresse MAC de la passerelle par défaut, autrement dit, un routeur) :

Interface : 10.41.9.28 — 0x2
Adresse Internet Adresse physique Type
10.41.0.1 00-14-1b-33-21-80 dynamique

Si je souhaite communiquer avec un autre PC de mon réseau local, je vais devoir connaître son adresse MAC, pour l’insérer dans le champ adresse MAC Destination de mon paquet, afin qu’il soit acheminé physiquement vers ce suivant. Puisqu’on communique au sein du réseau local, le routeur n’intervient pas : il n’y a donc pas de routage effectué (seulement de la retransmission).
Voici les paquets générés par la commande ping 10.41.9.30 au sein de mon réseau local :

Note : La commande ping sert à tester si l’équipement désigné par l’adresse IP répond (s’il est bien connecté au réseau).

Échange ARP

Que s’est-il passé ? Pour connaître l’adresse MAC correspondant à l’adresse IP à « tester », ma carte réseau a émis un paquet ARP en broadcast ce qui se caractérise ici par l’adresse MAC Destination de l’entête Ethernet à FF:FF:FF:FF:FF:FF (tous les bits à 1). Dans l’entête ARP, elle a inséré en adresse IP Source mon adresse IP, en adresse MAC Source mon adresse MAC, en adresse IP Destination l’adresse IP à pinger, et a laissé le champ réservé à l’adresse MAC Destination à nul, puisque c’est cette adresse qu’on cherche.
L’équipement IP qui s’est reconnu (en regardant l’adresse IP destination de l’entête ARP), m’a répondu (unicast cette fois) avec un paquet ARP dans lequel il a précisé son adresse MAC Source. De plus, celui-ci enregistre dans son cache ARP la correspondance de mon adresse MAC/IP. Me trouvant maintenant en possession de cette adresse MAC, je peux « pinger » mon destinataire. On voit d’ailleurs sur cette capture également les paquets ICMP générés par la commande PING (echo, reply). Ce sont des messages de contrôle.

Dans ces paquets ARP, il n’y a pas de couche IP, puisqu’il n’y a à ce stade aucune communication au niveau IP. Le broadcast est donc effectué au niveau Ethernet (adresse MAC Destination).

On remarque ensuite, en consultant à nouveau et rapidement la table arp qu’une entrée a été ajoutée :

Interface : 10.41.9.28 — 0x2
Adresse Internet Adresse physique Type
10.41.0.1 00-14-1b-33-21-80 dynamique
10.41.9.30 00-23-26-8a-9b-a8 dynamique

Notons que cette correspondance est enregistrée de manière temporaire (timeout), car si le routeur fournit un serveur DHCP et que celui-ci est activé, alors les adresses IP, notamment, sont attribuées dynamiquement et ont une durée de vie limitée (bail).
Cela permet également de « réduire » les risques d’ARP Poisoning. Cette technique consiste, pour un utilisateur malintentionné, à envoyer un paquet ARP (unicast ou broadcast) en indiquant en adresse Source son adresse MAC et l’adresse IP qu’il veut usurper. Le(s) récepteur(s) de ce paquet enregistre(nt) alors cette correspondance dans leur cache ARP, bien que des protections soient mises en place pour éviter ceci (ne pas enregistrer une correspondance ARP si le paquet n’a pas été demandé explicitement). Si le récepteur se fait berner et qu’il veut communiquer avec le PC dont l’IP est celle qui a été usurpée par le pirate, il va alors envoyer ses paquets vers le pirate, et non vers le « possesseur » légitime de l’adresse IP.

Note : Dans l’exemple ci-dessus, on se trouve dans un réseau local. Le PC n’a donc pas besoin de faire passer son paquet par un routeur pour l’envoyer à la cible (vous comprendrez pourquoi plus tard). Si l’équipement distant a une adresse IP qui est externe au réseau, c’est le routeur connecté au réseau contenant l’ordinateur cible qui va faire ce travail (chercher l’adresse MAC du PC cible pour lui acheminer le paquet).

Pour connaître votre adresse MAC et votre adresse IP locale, ouvrez une console (Windows ou Linux) et tapez ipconfig /all sous Windows ou ifconfig sous Linux. Regardez ensuite les paramètres réseaux concernant votre carte réseau utilisée (adresse IP, adresse physique, etc.).

Exemple chez moi :

Table ARP

Conclusion : Toutes les machines sont identifiées physiquement sur un réseau local par une adresse physique (MAC). Toutefois, pour communiquer dans de bonnes conditions et pouvoir hiérarchiser/structurer les réseaux ont été établies des adresses logiques (IP). Cette adresse IP va permettre d’identifier les machines sur Internet cette fois-ci.
L’acheminement d’un paquet au niveau physique se fait grâce à l’adresse physique, cependant, le routage se fait au niveau logique avec les adresses IP. Le protocole ARP permet à partir d’une adresse IP de connaître l’adresse physique associée, ce qui facilite ces translations d’adresses qui sont transparentes pour l’utilisateur.

Laisser un commentaire