:: News .:. Documents .:. Forum .:. Downloads .:. Bibliographie .:. Liens .:. Contact  :: 


Home
  :. News
  .: Documents
    .: Notions
    .: Protocoles
    .: Sécurité
    .: Architecture
    .: Prog
    .: Systèmes
  :. Forum
  .: Downloads
  :. Bibliographie
  .: Liens
  :. Contact

Chat

  Nickname:


irc: #guill.net

Forum



 
IP Spoofing  
 

 

I - Généralités

Présentation

L'IP spoofing est un mécanisme qui consiste à se faire passer pour une personne ayant une adresse IP attribuée, on falsifie donc l'adresse IP. Ceci n'est que la partie émergée d'un iceberg, car les mécanismes mis en œuvre sont en fait assez complexes.

Quels sont les acteurs lors d'un mécanisme d'IP spoofing?

A: un ordinateur cible ou victime
B: un serveur ou une machine qui a confiance en A
X: une machine ayant une adresse forgée (ou spoofée)
Z: une machine attaque

Représentation du séquencement des trames dans ce document

Temps @1 Action @2
1 A --SYN--> B

L'unité de temps représente le séquencement des trames telles qu'elles doivent avoir lieu
@A symbolise la machine A
L'action représente l'information échangée

II - Pré-requis

Pour comprendre le fonctionnement de l'IP spoofing, mieux vaut avoir quelques notions sur les systèmes d'exploitation et le fonctionnement des réseaux. Les quelques points suivant permettent de clarifier de façon succincte les mécanismes utiles à la compréhension du spoofing.

Relations de confiance:
Dans le monde informatique, il est fréquent que certaines personnes aient des droits sur des ressources alors que d'autres personnes n'y ont pas accès.

Rlogin:
Ce protocole client serveur basé sur TCP permet de se connecter d'une machine A sur une machine B à distance et cela en tenant compte de la relation de confiance, c'est à dire que si le client est identifié (par son adresse IP) dans ce cas, on ne lui demande pas de mot de passe, la connexion est directement établie.

IP:
Comme IP travaille en mode datagramme, il n'y a pas de maintien de connexion fait à ce niveau. La couche IP est chargée de router les datagramme sans se soucier ni de la destination, ni de la source du datagramme. On voit bien ici que la falsification d'un datagramme IP ne l'empêche pas de circuler sur le réseau.

TCP:
TCP est fiable et orienté connexion. Plusieurs mécanismes de fiabilité sont présents mais seulement deux ont de l'importance pour ce présent document : le séquencement des paquets et leur acquittement. Ces mécanismes rendent l'en-tête TCP nettement plus difficile à falsifier que le datagramme IP.

Séquencement et acquittement:
En affectant un numéro de séquence à chaque paquet TCP et en demandant un acquittement à la réception, il est possible de ré-émettre les paquets perdus. Les numéros de séquence servent au récepteur pour ordonner les paquets reçus. Ainsi, même en passant par des routes différentes les paquets TCP sont automatiquement réordonnés. Les numéros de séquence sont codés sur un champ de 32 bits. Chaque champ comprend le numéro de séquence des quatres premiers octets de donnée. Le numéro d'acquittemnt d'une entité attend toujours le numéro de séquence de l'autre entité.

Etablissement de connexion TCP:
Un mécanisme basé sur TCP comme une connexion d'un client Rlogin de la machine A sur un démon Rlogin sur la machine B a lieu comme-suit:

Temps @1 Action @2
1 A --SYN--> B
2 A <--ACK/SYN-- B
3 A --ACK--> B

En (1) le client demande une connexion au serveur en positionnant son numéro de séquence dans l'en-tête TCP. Pour cela, il utilise le ISN (initial sequence number). A la réception de ce paquet (2), le serveur répond avec son bit SYN et ACK, il place également son ISN dans l'entête et un numéro d'acquittement (qui correpond à ISN+1 du client). Le client accepte l'ISN serveur (3). Dès lors, les transferts peuvent commencer.

Incrémentation de numéro de séquence et ISN :
Au démarrage de la machine, l'ISN est initialisé à 1. A chaque seconde écoulée, l'ISN s'incrémente de 128 000 et à chaque connexion établie il s'incrémente également de 64 000. Ce mécanisme d'incrémentation automatique est utilisé pour éviter qu'une ancienne connexion TCP établie vienne perturber (par un nombre de données important) une connexion TCP avec des numéros de séquence trop proches.

Ports :
Pour autoriser plusieurs connexions simultanées, TCP utilise des ports. Ces ports sont utilisés par la pile IP pour identifier les communications réseau. Combinés avec une adresse IP, les ports TCP permettent ainsi d'identifier clairement l'utilisation du paquet et sa destination. Pour identifier les serveurs, on leur attribue des numéros de port spécifiques suivant le service fourni, comme par exemple le port 513 pour le rlogin.

III - L'attaque

En bref

L'IP spoofing nécessite plusieurs étapes. Premièrement, l'attaquant doit choisir sa victime (un serveur). Ensuite, il doit trouver une configuration pour laquelle la victime autorise une connexion avec une machine de confiance. L'intérêt réside alors dans le but de se faire passer pour cette machine autorisée. Pour cela, la machine autorisée est rendue invalide (pour ne pas pouvoir réagir), les numéros de séquence du serveur sont analysés. Une connexion simulée avec des paquets falsifiés de l'attaquant est alors demandée au serveur avec des numéros de séquence devinés. Si la connexion est établie, l'attaquant modifie alors des informations pour permettre de revenir plus facilement ultérieurement.

En détails

En général, une attaque par IP spoofing est menée d'un compte root vers un autre compte root.

Attaque à l'aveugle :
Un point qu'il ne faut pas oublier dans l'IP spoofing est que les attaques se font en aveugle. En effet, comme l'attaquant subtilise l'identité d'une machine de confiance pour contourner la sécurité d'un serveur, les datagrammes renvoyés par le serveur sont à destination de la machine de confiance (qui a été invalidée) car les datagrammes IP fonctionnent sans connexion, donc l'attaquant ne les voit jamais. Comme la machine de confiance a été au préalable rendue inopérationnelle, elle n'est pas capable de répondre aux datagrammes reçus et c'est donc à l'attaquant d'être suffisamment documenté sur l'état de la communication des machines pour pouvoir prédire ce que le serveur attend en retour.

1 - Configuration de confiance :
Une fois que la cible a été choisie, encore faut-il que celle-ci accepte tout utilisateur comme ayant certains droits, sinon, l'attaque prend fin ici. Cela peut ne pas être facile mais des commandes telles que 'showmount -e' ou 'rpcinfo' peuvent aider dans cette tâche, le but étant ici de récupérer le maximum d'informations.

2 - Invalidation de la machine de confiance :
Pour éviter que la machine de confiance ne puisse répondre au serveur lorsque celui-ci répond aux datagrammes falsifiés, il est important d'invalider la machine de confiance. Ceci est généralement effectué par le biais d'un mécanisme appelé TCP SYN flooding (connexions en masse). Quand une connexion est demandée avec le bit SYN activé, le récepteur renvoie un SYN/ACK et attend le ACK de la part de l'émetteur. Tant que l'émetteur n'a pas renvoyé son ACK, la connexion n'est pas établie.
Il y a cependant une limite du nombre de requêtes SYN qui peuvent être effectuées sur une même socket, cette limite s'appelle le backlog et représente la longueur de la file d'attente des transmissions incomplètes. Si cette limite est atteinte, les futures connexions TCP sont tout simplement ignorées jusqu'à ce que des connexions en attente soient établies. L'implémentation du backlog dépend du système d'exploitation mais est couramment de 5. L'attaquant envoie ainsi plusieurs requêtes SYN sur le port TCP qu'elle veut invalider. L'attaquant doit s'assurer que les paquets envoyés sont encore une fois falsifiés comme provenant d'une machine inatteignable (unreachable host) car sinon celle-ci renverrait un ReSeT (bit RST positionnée) à chaque SYN/ACK ce qui rendrait vains tous les efforts. L'attaque a lieu comme suit :

Temps @1 Action @2
1 Z(X) --SYN--> B
2 center>Z(X) --SYN--> B
3 Z(X) --SYN--> B
....      
M X <--ACK/SYN-- B
M+1 X <--ACK/SYN-- B
....      
N X <--RST-- B

En (1), l'attaquant envoie toute une multitude de requêtes SYN pour remplir le backlog.
En (M), la cible renvoie des paquets TCP SYN/ACK à ce qu'elle croit être l'émetteur. Cette phase dure un petit moment et pendant ce temps, aucune connexion sur le port TCP utilisé n'est prise en compte.
En (N), lorsqu'un certain temps s'est écoulé la machine cible décide d'annuler la connexion.

3 - Echantillonnage des numéros de séquence et prédiction :
L'attaquant doit avoir une idée du nombre contenu dans le numéro de séquence de la cible (le serveur), pour cela il va se connecter sur un port TCP de la machine cible (par exemple SMTP) et analyser les trames qui transitent. Ce processus est recommencé plusieurs fois et à chaque fois on conserve le numéro de séquence de la cible de façon à établir des statistiques sur l'incrémentation (dépendant du temps de transfert). L'attaquant possède alors toute les clés : le dernier numéro de séquence émis, les données de changement ISN (128 000/seconde et 64 000/connexion) et le temps nécessaire. Aussitôt après avoir pris connaissance de ces paramètres, l'attaque est lancée. Plusieurs cas peuvent alors se produire :
-le numéro d'acknowledge correspond parfaitement, et dans ce cas les données sont placées en attente dans le buffer TCP
-si le numéro d'acquittement est inférieur au numéro attendu, alors le paquet est supprimé (considéré comme une ré-émission)
-si le numéro est supérieur à ce qui est attendu mais reste dans la limite acceptable par la fenêtre de transmission, dans ce cas il est maintenu en attente des paquets intermédiaires sinon il est purement supprimé. Voici le mécanisme de l'attaque :

Temps @1 Action @2
1 Z(A) --SYN--> B
2 A <--ACK/SYN-- B
3 Z(A) --ACK--> B
4 Z(A) --PUSH--> B
....      

En (1), l'attaquant simule l'adresse IP de la personne de confiance (qui subit une attaque de déni de service) et envoie sa connexion sur le port 513 (Rlogin est le plus utilisé) de la victime.
En (2), la cible répond à la machine falsifiée qu'elle autorise la communication. Comme la machine falsifiée est " un peu perdue ", elle supprime le paquet au lieu de renvoyer un RST comme elle aurait du le faire.
En (3), l'attaquant renvoi un paquet avec le numéro de séquence de la cible prédit + 1 puisqu'on l'acquitte.
Si la prédiction est bonne, la cible accepte le ACK, et la sécurité est alors compromise puisque les transfert peuvent commencer (4).

Une méthode permet de ne pas attaquer en aveugle, c'est l'utilisation du source routing. En effet, avec l'utilisation des champs options du datagramme IP, il est possible de spécifier une route pour un paquet de donnée. Ainsi, il suffit que l'attaquant rajoute ce champ option avec un chemin de retour passant par lui de façon à ce qu'il puisse voir le contenu de tous les messages à destination de la machine usurpée. Dans ce cas, l'utilisation devient nettement plus simple, puisque l'attaquant n'a plus besoin de faire de prédiction de numéro de séquence et il peut contrôler la validité de tous les messages envoyés et reçus.

Généralement, l'attaquant laisse une porte ouverte (backdoor) derrière lui de façon à pouvoir revenir plus tard de façon beaucoup plus simple. Une modifiaction du fichier rhost est souvent effectuée pour permettre un accès ultérieur.

IV- Mesures préventives

Ne pas faire confiance

Une solution permettant d'empêcher ce type d'attaque est de ne pas se baser sur une authentification par adresse IP. Désactiver toutes les commandes r* (permettant à une machine distante d'effectuer des actions) comme rsh (ouverture de shell), rlogin (ouverture de terminal), supprimer tous les fichiers .rhosts (liste des utilisateurs ayant des droits) et vider le fichier /etc/host.equiv. Cela obligera les utilisateurs à ce conecter par d'autres moyens (telnet, SSH…)

Filtrer les paquets

Dans le cas d'une connexion directe sur Internet, la méthode la plus utilisé consiste à filtrer les paquets entrants au niveau du routeur d'accès de façon à ce qu'une connexion extérieure au réseau ne puisse pas avoir une adresse IP qui soit interne au réseau. Comme les relations de confiance sont souvent attribuées au sein même du réseau, cela prémunit relativement bien contre les attaques.

Désactiver le source routing

Comme l'utilisation du source routing permet de faciliter considérablement l'utilisation de l'IP Spoofing, il est préférable de désactiver le source routing sur tous les routeurs d'accès de l'entreprise de façon à ce qu'une route destinée à un ordinateur interne au réseau ne passe pas par le réseau externe.

Utiliser le chiffrement

Une méthode évidente pour se protéger contre l'IP spoofing consiste à chiffrer ou authentifier toutes les données qui circulent sur le réseau interne. Cependant cette méthode n'est pas encore un standard….

Utiliser un numéro de séquence initial aléatoire

Les attaques par IP spoofing fonctionnent parce que les numéros de séquence peuvent être devinés. Pour résoudre ce problème, il faudrait une modification de l'implémentation de la pile IP qui tienne compte de l'adresse comme le montre la formule suivante : ISN=M+F(localhost,localport,remotehost,remoteport). M est ici le compteur de la machine et F est un algorithme de Hash qui ne doit pas être visible de l'extérieur.

David Bizeul
 




Sondage

Quel est votre connexion à Internet aujourd'hui ?
 
RTC 56Kbps
ADSL simple de 128 à 2048 Kbps
ADSL + Téléphonie (+TV) de 128 à 2048 Kbps
ADSL simple jusqu'à 20Mbps
ADSL + Téléphonie (+TV) jusqu'à 20Mbps
Autres (RNIS, Satellites bi-directionnel...)
Total :
2646

Recherche


Docs
   Pflogsumm (Analyseur de log mail pour Postfix)
   Proftpd (Mise en service d'un serveur FTP avec proftpd sous Linux)
   Openldap (Mise en service d'un serveur LDAP sous Linux)
   Gestion des périphériques en c++ builder (Communication RS232 en C++ Builder)
   Les sockets windows (Windows Sockets : un cours accéléré)

guill.net©1999-2017