Introduction
Beaucoup le diront, on ne peut pas devenir hacker sans maitriser les notions de bases de l'informatique. Les premiers articles de mon parcours seront donc liés à ces notions certes basiques, mais qu'il est bon d'avoir en tête et de connaitre au quotidien. Outre la partie système d'exploitation et la connaissance du fonctionnement de celui-ci, une compétences primordiale consiste en la connaissance du fonctionnement des réseaux informatiques.
Pourquoi c'est important ?
Parce que lors de tests d'intrusion, il est nécessaire d'effectuer un grand nombre de tâches en comprenant comment un réseau informatique fonctionne. Un exemple tout simple réside lors des premières étapes d'énumération et de découverte réseau, il ne sera pas possible d'identifier ses cibles si on n'est pas capable de scanner un réseau, d'identifier les ports accessibles ou encore à quoi correspondent ces ports !
Pas de cibles -> Pas de vulnérabilités -> Pas d'exploitation -> Pas de résultats.
Alors si tu découvres juste ou si tu as besoin d'un petit rafraichissement, plongeons ensemble dans les fondamentaux réseaux nécessaires.
Les différents modèles de communication
Dans le cadre de cet article, je ne reprendrais pas tout ce qui est historique, l'histoire d'internet etc... Je laisse ça pour les cours de réseaux en tant que tel qui sauront mieux le faire que moi !
Je vais suivre une approche allant du point de vue général au plus spécifique. C'est pourquoi je commence avec le modèle OSI.
OSI : Open Systems Interconnection
Il s'agit là d'une norme réseau qui a pour but d'unifier et de rationnaliser les méthodes de communication entre les différents systèmes informatiques. Chaque systèmes au début des réseaux ayant ses propres méthodes de communication, il était nécessaire à un moment de trouver une norme commune pour permettre la communication entre deux appareils de fabricants différents.
C'est pour cela que le modèle OSI a vu le jour en proposant un modèle standardisé basé sur une architecture en 7 couches qui se veulent distinctes et possédant chacune un rôle bien spécifique.
Couche Physique : Transmission et réception des signaux entre les différents interlocuteurs.
Couche Liaison de données : Communication entre deux interlocuteurs appartenant à la même couche de niveau 2 dite de commutation.
Couche Réseau : Communication entre des interlocuteurs situées sur des réseaux différents.
Couche Transport : Permet la mise en place des modalités de transport de bout en bout de la communication.
Couche Session : Permet la synchronisation des échanges entre les différents partis.
Couche Présentation : Permet l'encodage des données pour l'application.
Couche Application : Comme son nom l'indique, il s'agit de la gestion des services réseaux au niveau de l'application même.
Chacune de ces couches est indépendante par la volonté de pouvoir effectuer des modifications au niveau de l'une d'entre elles sans pour autant nécessité une modification profonde de toutes les autres. On peut de cette façon garantir une l'intéropérabilité du modèle et facilité les tâches de dépannage en cas de problème.
Aussi, chacun des couches n'échange des données qu'avec les couches adjacentes. Autrement dit, une couche N ne pourra pas envoyer des données à une couche N+2 mais seulement aux couches N+1 et N-1.
Néanmoins, ce modèle n'est qu'un modèle purement conceptuel et ne reflète pas nécessairement la réalité. Dans la réalité, les échanges ressembleront plus à un autre modèle qui est né plus tard le modèle TCP/IP
TCP/IP
Le modèle TCP/IP ne différe pas complétement du modèle OSI, la différence vient du nombre de couches qui composent le modèle. Là où le modèle OSI utilise 7 couches, TCP/IP est constitué de 4 couches :
Couche d'accès réseau <-> Couche 1 + 2 du modèle OSI
Couche Internet <-> Couche 3 du modèle OSI
Couche de Transport <-> Couche 4 du modèle OSI
Couche Applicative <-> Couche 5 + 6 + 7 du modèle OSI
Ce modèle plus simple est celui qui est majoritairement utilisé bien qu'il soit moins fiable que le modèle OSI. En outre, par une inter-dépendance entre les couches contraire à la volonté indépendance du modèle OSI.
La construction d'un message
Comme vu précédemment, les modèles de communication réseau sont composés en différentes couches. A chacune de ces couches sont associées des protocoles, applications, matériels, et autres éléments permettant de garantir le service fournit par la couche en question.
Lors du transfert d'un message, celui-ci va passer dans chacune des couches qui va ajouter des données pour permettre le transfert de ce message. Les informations ajoutées sont propres à chaque couche. On appelle ce processus : l'encapsulation.
Les informations ajoutées lors de ce processus d'encapsulation ont des objectifs propres à chaque couche et permettent au récepteur d'interpréter le message et de comprendre ce qu'il y'a à l'intérieur. De la même façon qu'un message est formé en passant de la couche 4 du modèle TCP/IP à la couche 1, celui-ci est lu dans le sens inverse par le récepteur de la 1ère couche à la dernière. C'est ce qu'on appelle la désencapsulation.
Le plus simple pour expliquer ces concepts est par un exemple. Tu lis actuellement un post sur mon blog, comment est-ce que du point de vue réseau c'est possible ?
Niveau 4 : L'application
Actuellement, tu es sur un navigateur web, le web utilise majoritairement le protocole HTTP. Lors d'une navigation sur le web, le navigateur et le serveur sont constamment en train d'échanger des informations au cours du parcours de l'utilisateur sur le site.
Je n'entrerais pas aujourd'hui dans le fonctionnement même du protocole HTTP (peut-être dans un article ultérieur ça peut être intéressant) mais globalement, au niveau réseau, l'interface réseau a formulé une demande pour transmettre la demande du navigateur au serveur via le protocole HTTP.
C'est ainsi que commence notre message avec comme charge initiale la requête HTTP du navigateur web au serveur.
Niveau 3 : Le Transport
Ce premier bout de message, la requête HTTP, est encapsulé une première fois dans ce qu'on appel un datagramme. Ce datagramme est constitué de notre message et d'une en-tête ajoutée par un protocole de transport.
On peut distinguer deux protocoles de transport : TCP et UDP.
Ces deux protocoles interviennent selon les cas en fonction de l'information à faire transiter. Si on souhaite faire passer de l'information de façon fiable et connecté on utilise TCP. A l'inverse, si on ne dispose de pré-requis particulier vis à vis de la fiabilité du transport, on utilise UDP.
Dans notre exemple, le protocole utilisé est TCP, c'est quand même mieux quand on meurt d'envie de lire un article de CtrlAltDefend que celui-ci arrive bien jusqu'à son PC sans corruption. Ainsi, le protocole crée un canal entre ton PC et le serveur par le biais de ports réseaux. On peut assimiler un port à une porte qui va être ouverte ou fermée en fonction des services. Dans le cadre du web, les ports les plus couramment utilisés sont les ports 80 pour HTTP et 443 pour HTTPS qui est une variante de HTTP plus sécurisé par le biais d'un processus de chiffrement.
On pourra retrouver ces informations dans l'en-tête TCP qui est ajouté à notre requête HTTP. Cette en-tête formée de 20 octets est composée d'un certain nombre d'informations. Parmi elles :
Port Source : Port à partir duquel l'information va être envoyé. Partie du canal de communication hébergée par le client.
Port Destination : Port vers lequel l'information va être envoyé. Partie du canal de communication hébergée par le serveur.
Numéro de séquence
Numéro d'acquittement
...
Les deux numéros cités ci-dessus sont liées aux fonctionnalités orientés connexion du protocole TCP qui permettent de garder le canal ouvert et de reprendre les échanges en cas d'erreur, d'où la fiabilité du protocole TCP.
En résumé, en sortie de la couche de Transport, le message ou datagramme est composé d'une en-tête TCP et de la charge, qui dans notre cas est notre requête HTTP.
Niveau 3 : Routage et adressage IP
Connaître le numéro de la porte à laquelle cogner c'est bien, mais encore faut-il savoir où se trouve notre porte exactement. Notre datagramme TCP est maintenant au niveau de notre couche Internet. Une nouvelle en-tête s'ajoute avec de nouvelles informations, et parmi elles, les adresses IP sources et destinations. C'est par ces adresses qu'il est possible de communiquer globalement et que de cette façon, chaque petit réseau, qu'il soit chez moi, chez toi, dans une école, une médiathéque ou autre peuvent interagir ensemble.
Les paquets IP comme on les appellent sont aiguillés par le biais de routeurs qui interconnectent plusieurs réseaux entre eux. Dans un réseau domestique, on a généralement un routeur fournit par notre FAI qui interconnecte notre réseau privé à internet. Cet aiguillage est rendu possible par les adresses IP.
Deux versions d'IP existent aujourd'hui IPv4, la plus répandue, codée sur 32 bits et IPv6 codée sur 128 bits. Ces deux versions sont respectivement représentées sous une forme décimale et hexadécimale.
IPv4 : 172.16.0.1
IPv6 : fe80::/10
Dans notre exemple, le serveur cible est le suivant https://ctrlaltdefend.org, on voit d'ailleurs dans l'url le protocole HTTPS qui est celui utilisé au niveau application. L'autre partie de l'url est composé du FQDN de mon site, il s'agit du nom DNS (autre protocole utilisé pour associer adresse IP et nom) associé à l'adresse IP du site. Un genre d'alias si on veut, c'est quand même plus pratique que de retenir une adresse IP.
Notre PC du coup, quand il va envoyer sa requête va d'abord vérifier à qui il doit l'envoyer et insérer l'adresse IP associée à la destination dans son en-tête IP dans le champ IP de destination.
Ci-dessous un petit exemple de à quoi ça ressemble. La commande nslookup permet d'émuler une requête DNS pour obtenir les adresses IP associées à un nom de domaine spécifique.
En sortie de couche 3, on a donc un paquet IP composé d'une en-tête IP et d'une charge constituée du datagramme TCP.
Niveau 2/1 : Commutation et adressage MAC
La couche de liaison de données décrit les modalités de transfert des données sur leur média de diffusion propre à la couche physique. Elle spécifie par exemple des informations d'adressage permettant de définir la source et la destination d'un message. Les interlocuteurs sont identifiés par une adresse, l'adresse MAC (Media Access Control), unique à chaque appareil est un identifiant stocké au niveau de la carte réseau.
Cette adresse est composée de 48 bits, soit 6 octets, et est représentée sous une forme hexadécimale. Si tu veux un exemple, tu peux vérifier l'adresse MAC associée à ton PC, si tu es sur PC, en ouvrant un invite de commande sous Windows ou un terminal sous Linux et MacOS.
Une fois la nouvelle fenêtre ouverte, tu peux taper une des commandes suivantes en fonction de ton environnement :
# Sous Windows
ipconfig /all
# Sous linux / MacOS
ip a
ifconfig
En entrant ces commandes, un certain nombre d'informations devrait s'afficher.
Dans mon cas, j'ai les informations suivantes :
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 50:c2:e8:4d:3d:25 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.10/24 brd 10.0.0.255 scope global dynamic noprefixroute wlan0
valid_lft 84294sec preferred_lft 84294sec
inet6 fe80::52c2:e8ff:fe4d:3d25/64 scope link noprefixroute valid_lft forever preferred_lft forever
La commande a listé l'existence de deux interfaces réseaux, lo et wlan0.
lo est l'interface de loopback. Il s'agit d'une interface virtuelle, interne à l'appareil, utilisée par le système pour communiquer avec lui même.
wlan0 est mon interface réseau accessible qui permet à mon système de communiquer avec l'extérieur. Le w indique wifi car sur mon portable je suis connecté en Wifi à mon réseau local.
Chaque carte à son adresse MAC qu'on peut retrouver aux lignes commençant par link/ether
lo : 00:00:00:00:00:00
wlan0 : 50:c2:e8:4d:3d:25
Ces adresses MAC sont utilisées sur la couche de niveau 2 pour permettre l'échange et la communication entre des appareils appartenant à un même réseau. Elles permettent aux commutateurs (switchs) de relayer les trames de niveau 2 au bon destinataire et permet aux périphériques de savoir quand est-ce qu'un message lui est destiné ou non.
Avant sa transmission, notre message vient alors s'aggrémenter d'une dernière en-tête qui comporte les informations d'accès réseau avec notamment les adresses MACs source et destination.
Conclusion
Cette article décrit de manière générale comment un message est transporté sur un réseau informatique. Il y'aurait encore énormément de choses à ajouter pour compléter les informations listées ci-dessus, je reviendrais sans doute dans d'autres articles sur les protocoles TCP/UDP ou encore les différentes types d'adressages IP et MAC qui nécessitent à eux seuls un ou plusieurs articles. Néanmoins, je pense que cet article aura pu, du moins je l'espère, t'éclairer sur le fonctionnement global d'un réseau.
Comentarios