Le spoofing IP (en français mystification) est une technique permettant à un pirate d'envoyer à une machine des paquets
semblant provenir d'une adresse IP autre que celle de la machine du pirate.
Le spoofing IP n'est pas pour autant
un changement d'adresse IP. Plus exactement il s'agit d'une mascarade
de l'adresse IP au niveau des paquets émis, c'est-à-dire une modification des paquets envoyés
afin de faire croire au destinataire qu'ils proviennent d'une autre machine.
Ainsi, certains tendent à assimiler l'utilisation d'un proxy (permettant de masquer d'une certaine façon l'adresse IP) avec du spoofing IP.
Toutefois, le proxy ne fait que relayer les paquets, ainsi
même si l'adresse est apparemment masquée, un pirate peut facilement être retrouvé grâce
au fichier journal (logs) du proxy.
Comme l'indique le schéma ci-dessus, la technique du spoofing (difficile à mettre en oeuvre)
peut permettre à un pirate de faire passer des paquets sur un réseau sans que ceux-ci ne soient interceptés par le système
de filtrage de paquets (firewall). En effet un firewall fonctionne grâce à des règles de filtrage indiquant quelles adresses IP sont autorisées
à communiquer avec les machines internes. Ainsi, un paquet spoofé avec l'adresse IP d'une machine interne semblera provenir du réseau interne et sera
transmis à la machine cible, tandis qu'un paquet contenant une adresse IP externe sera automatiquement rejeté par le firewall.
Cependant, le protocole TCP
(protocole assurant principalement le transport fiable de données
sur Internet) repose sur des liens d'authentification et d'approbation entre les machines d'un réseau,
ce qui signifie que pour accepter le paquet, le destinataire doit auparavant accuser réception auprès de l'émetteur,
ce dernier devant à nouveau accuser réception de l'accusé de réception.
Sur internet, les informations circulent grâce au protocole IP, qui assure l'encapsulation des données dans
des structures appelées paquets (ou plus exactement datagramme IP). Voici la structure d'un datagramme :
Version |
Longueur d'en-tête |
type de service |
Longueur totale |
Identification |
Drapeau |
Décalage fragment |
Durée de vie |
Protocole |
Somme de contrôle en-tête |
Adresse IP source |
Adresse IP destination |
Données |
Masquer son adresse IP avec la technique du spoofing revient à modifier le champ source afin de simuler un datagramme
provenant d'une autre adresse IP (donc d'une autre machine). Toutefois, sur internet, les paquets sont généralement transportés
par le protocole TCP, qui assure une transmission dite fiable.
Ainsi, avant d'accepter un paquet, une machine doit auparavant accuser réception de celui-ci auprès de la machine émettrice,
et attendre que cette dernière confirme la bonne réception de l'accusé.
Le protocole TCP est un des principaux protocoles de la couche transport du modèle TCP/IP.
Il permet, au niveau des applications, de gérer les données en provenance (ou à destination) de la couche inférieure du
modèle (c'est-à-dire le protocole IP).
Le protocole TCP permet d'assurer le transfert des données de façon fiable, bien qu'il utilise le protocole IP (
qui n'intègre aucun contrôle de livraison de datagramme) grâce à un système d'accusés de réception (ACK) permettant au client
et au serveur de s'assurer de la bonne réception mutuelle des données.
Les datagrammes IP sont encapsulés dans un paquet TCP (appelé segment) dont voici la structure :
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
Port Source |
Port destination |
Numéro d'ordre |
Numéro d'accusé de réception |
Décalage données |
réservée |
URG |
ACK |
PSH |
RST |
SYN |
FIN |
Fenêtre |
Somme de contrôle |
Pointeur d'urgence |
Options |
Remplissage |
Données |
Lors de l'émission d'un segment, un numéro d'ordre (appelé aussi numéro de séquence) est associé, et un échange de segments
contenant des champs particuliers (appelés drapeaux, en anglais flags) permet de synchroniser le client et le serveur.
Ce dialogue (appelé poignée de mains en trois temps) permet d'initier la communication, il se déroule en trois temps, comme sa dénomination l'indique:
- Dans un premier temps, la machine émettrice (le client) transmet un segment dont le drapeau SYN est à 1 (pour signaler qu'il s'agit d'un segment de synchronisation), avec un numéro d'ordre N, que l'on appelle numéro d'ordre initial du client
- Dans un second temps la machine réceptrice (le serveur) reçoit le segment initial provenant du client, puis lui envoie un accusé de réception, c'est-à-dire un segment dont le drapeau ACK est non nul (accusé de réception) et le drapeau SYN est à 1 (car il s'agit là encore d'une synchronisation). Ce segment contient un numéro de séquence égal au numéro d'ordre initial du client.
Le champ le plus important de ce segment est le champ accusé de réception (ACK) qui contient le numéro d'ordre initial du client, incrémenté de 1
- Enfin, le client transmet au serveur un accusé de réception, c'est-à-dire un segment dont le drapeau ACK est non nul, et dont le drapeau SYN est à zéro (il ne s'agit plus d'un segment de synchronisation). Son numéro d'ordre est incrémenté et le numéro d'accusé de réception représente le numéro de séquence initial du serveur incrémenté de 1
Revenons plutôt à la technique du spoofing. Lorsque la machine cible va recevoir le paquet spoofé, cette dernière va envoyer un accusé de réception à l'adresse IP de la machine spoofée (l'adresse IP modifiée dans le champ source du datagramme IP), et la machine spoofée va répondre avec un paquet TCP dont le drapeau RST (reset) est non nul, ce qui mettra fin à la connexion.
Dans le cadre d'une attaque par spoofing, l'attaquant n'a aucune information car les réponses de la machine cible
vont vers une autre machine du réseau (on parle alors d'attaque à l'aveugle, en anglais blind attack).
De plus, la machine spoofée prive le hacker de toute tentative de connexion, car elle envoie systématiquement
un drapeau RST à la machine cible. Ainsi, le travail du hacker consiste alors à invalider la machine spoofée en la
rendant injoignable pendant toute la durée de l'attaque.
Lorsque la machine spoofée est invalidée, la machine cible attend un paquet contenant l'accusé de réception et le bon
numéro de séquence. Tout le travail du pirate consiste alors à "deviner" le numéro de séquence à
renvoyer au serveur afin que la relation de confiance soit établie.
Pour cela, les pirates utilisent généralement le source routing, c'est-à-dire qu'ils utilisent le champ
option de l'en-tête IP afin d'indiquer une route de retour spécifique pour le paquet. Ainsi, grâce au sniffing, le pirate sera
à même de lire le contenu des trames de retour ...
Ainsi, en connaissant le dernier numéro de séquence émis, le pirate établit des statistiques concernant son
incrémentation et envoie des accusés de réception jusqu'à obtenir le bon numéro de séquence.
|