• 15 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 14/09/2023

Scannez une machine avec l'idle port scan

Qu’est-ce que l’idle port scan ?

Comme dit précédemment, cette technique vous permettra de scanner une autre machine en vous faisant passer pour quelqu’un d’autre.

Idle en anglais veut dire, à peu de choses près, inactif. Le principe est donc de scanner quelqu’un en faisant semblant d’être inactif.

Comment est-ce possible ?

Pour tous ceux qui ont déjà essayé de se faire passer pour quelqu’un d’autre sur un réseau, vous savez d’ores et déjà que ce n’est pas simple.
Le principal problème est que si j’envoie un paquet sur le réseau en me faisant passer pour mon voisin, les réponses vont être envoyées à mon voisin, je ne les verrai pas, et cela ne me servira donc à rien...

Découvrez la théorie du scan de port

Comment scanner un port, sans recevoir les réponses ?

Imaginons que nous voulions nous faire passer pour notre voisin vis-à-vis de Mme Michu, pour scanner un de ses ports.

Étant donné que nous allons envoyer le premier SYN en nous faisant passer pour notre voisin, Mme Michu va lui répondre, et nous ne saurons pas quelle est sa réponse.
Il serait nécessaire pour nous de savoir si elle a répondu, et surtout ce qu’elle a répondu !

Deux cas sont possibles :

  • soit son port est ouvert, et elle a répondu SYN+ACK ;

  • soit son port est fermé, et elle a répondu RST.

Quelle différence y a-t-il entre ces deux cas ?

Une différence énorme !

  1. Dans le premier cas, mon voisin qui jusqu’à maintenant n’a rien demandé à personne va recevoir un segment SYN+ACK venant de Mme Michu. Étant donné qu’il n’a rien demandé, il va le faire savoir en renvoyant un RST, vu qu’il ne veut pas parler à Mme Michu.

  2. Dans le second cas, il ne va rien répondre du tout. Il reçoit une demande de réinitialisation de connexion pour une connexion qu’il n’a jamais sollicitée. Il ne va donc pas répondre à une demande de fermeture de connexion qu’il n’a jamais demandé d’ouvrir ! Sinon, cela pourrait faire une loooooooongue partie de ping-pong.

Premier cas : il répond.
Deuxième cas : il ne répond pas.

Cette différence est-elle extraordinaire ?
OUI !

La question à se poser est donc :

Qu’est-ce qui change dans ma machine quand je réponds à un paquet ?

L’IPID

L’IPID est normalement incrémenté de 1 à chaque envoi.
Donc dès que j’envoie un paquet, l’IPID envoyé dans l’en-tête IP est incrémenté de 1 par rapport au paquet précédent.

Par exemple :

  • j’envoie un paquet : IPID = 2145 ;

  • j’envoie un autre paquet : IPID = 2146 ;

  • j’envoie encore un paquet : IPID = 2147 ;

  • j’envoie encore un autre paquet : IPID = 2148...

Vous avez saisi ?

Nous sommes bien avancés, mais dans notre problème initial, nous voulions savoir si notre voisin avait envoyé un paquet. Pour cela, il faudrait connaître la valeur de l’IPID avant et après notre envoi (celui où l’on se faisait passer pour Mme Michu).

Peut-on connaître l’IPID de notre voisin ?

La réponse est... peut-être.
Pour cela, il faudrait pouvoir l’obliger à nous envoyer un paquet pour pouvoir lire l’IPID dans l’en-tête IP de la réponse.

Comment obliger notre voisin à nous envoyer un paquet ?

Il suffit a priori de lui envoyer un segment SYN sur un port TCP ouvert. Dans ce cas, il nous répondra avec un segment SYN+ACK, et nous pourrons lire dans l’en-tête de couche 3 l’IPID !
Il suffit donc que le voisin ait une application en écoute sur sa machine en TCP, ce qui est pratiquement toujours le cas... tant qu’il n’a pas de firewall activé.

Comment savoir si notre voisin a des ports ouverts ?

Il suffit de faire un scan de ports.
Si nous trouvons au moins un port ouvert, c’est gagné !
Nous pouvons donc maintenant connaître l’IPID de notre voisin à un instant t. Nous avons tout ce qu’il faut, c’est à nous de jouer !

Le déroulement du scan complet

  • Je trouve un voisin ayant un port ouvert (ou toute autre machine sur Internet...).

  • Je lui envoie une demande de connexion avec un SYN.

  • Il me répond avec SYN+ACK et je lis dans l’en-tête de couche 3 son IPID qui vaut, par exemple, 100.

  • J’envoie un SYN à Mme Michu avec comme adresse IP source l’adresse de mon voisin (Mme Michu pense donc que cette demande de connexion vient de mon voisin).

Il y a maintenant deux cas possibles :

  • 1- Le port scanné de Mme Michu est ouvert.

  • 2- Le port scanné de Mme Michu est fermé.

Cas numéro 1 :
Mme Michu répond à mon voisin avec un SYN+ACK. Mon voisin s’empresse de répondre avec un RST, son IPID a donc augmenté de 1 et vaut 101.
Je renvoie alors un SYN à mon voisin sur son port ouvert. Il me répond avec SYN+ACK et je lis son IPID qui vaut maintenant... 102 ! (Puisqu’il vient d’envoyer un nouveau paquet pour me répondre !)

Cas numéro 2 :
Mme Michu répond à mon voisin avec un RST. Mon voisin ne répond pas, son IPID reste donc à 100.
Je renvoie alors un SYN à mon voisin sur son port ouvert. Il me répond avec SYN+ACK et je lis son IPID qui vaut maintenant 101 ! (Puisqu’il vient d’envoyer un nouveau paquet pour me répondre.)

La différence entre les deux ?

Dans le premier cas, où le port de Mme Michu était ouvert, je reçois un IPID de 102.
Dans le second cas, où le port de Mme Michu était fermé, je reçois un IPID de 101.

Mais... pour que cette attaque fonctionne, il faut se trouver dans certaines conditions favorables.

  • Il faut trouver un voisin avec un port ouvert.

  • Il faut en plus que les IPID de ce voisin augmentent exactement de 1 à chaque envoi (Ce n’est pas toujours le cas. Notamment, la plupart des systèmes modernes ont des IPID aléatoires et non incrémentaux comme au bon vieux temps. Cependant, c’est plus rarement le cas sur des systèmes simples comme ceux des imprimantes ou autres périphériques réseau...).

  • Il faut qu’il y ait peu de trafic vers ce voisin, sinon l’IPID peut augmenter à cause d’autres requêtes, et les résultats seront faussés.

Si ces conditions sont réunies (ce qui n’est pas bien compliqué à trouver), alors banco !

Limitations

Je peux donc scanner la maison blanche et faire porter le chapeau à mon voisin ?

Malheureusement, non, ce serait trop beau.
Déjà, même si Mme Michu ne voit rien venir de vous, votre voisin, lui, a toutes les informations pour remonter jusqu’à vous.
Si jamais la machine de votre voisin n’enregistre rien, les routeurs de son fournisseur d’accès eux le feront et permettront très facilement de remonter à vous.
Donc comme pour les scans de ports simples, l’idle scan nécessite d’être effectué dans un environnement que vous maîtrisez et que vous connaissiez les conséquences associées.

La mise en pratique

La mise en pratique est on ne peut plus simple étant donné que l’outil Nmap intègre déjà cette fonctionnalité.
Donc allons-y  !

Étape 1 : trouver un voisin

Pour cela, nous allons scanner une plage d’adresses pour voir les machines présentes dessus, en les pingant.

# nmap -sP 10.8.98.0/24
Starting Nmap 4.62 ( http://nmap.org ) at 2010-02-11 15:36 CET
Host 10.8.98.98 appears to be up.
MAC Address: 00:08:02:4F:08:7E (Compaq Computer)
Host 10.8.98.99 appears to be up.
MAC Address: 00:08:02:4F:09:2F (Compaq Computer)
Host 10.8.98.100 appears to be up.
MAC Address: 00:08:02:3F:EE:E3 (Compaq Computer)
Host 10.8.98.156 appears to be up.
MAC Address: 00:08:02:3F:E0:B5 (Compaq Computer)
Host 10.8.98.172 appears to be up.
MAC Address: 00:08:02:42:B1:75 (Compaq Computer)
Host 10.8.98.235 appears to be up.
Host 10.8.98.238 appears to be up.
MAC Address: 00:08:02:37:AE:EE (Compaq Computer)
Host 10.8.98.240 appears to be up.
MAC Address: 00:15:00:37:9F:A5 (Intel Corporate)
Host 10.8.98.241 appears to be up.
MAC Address: 0C:EE:E6:B5:8A:21 (Unknown)
Nmap done: 256 IP addresses (9 hosts up) scanned in 2.715 seconds

Il y a le choix !
Nous allons maintenant essayer de voir si l’une de ces machines a un port ouvert pour nous permettre de jouer le rôle du voisin. Nous allons les scanner une par une, tout en essayant de connaître le système d’exploitation qui est installé.

# nmap -sS -O 10.8.98.98
Starting Nmap 4.62 ( http://nmap.org ) at 2010-02-11 15:40 CET
Interesting ports on 10.8.98.98:
Not shown: 1706 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
110/tcp  open  pop3
111/tcp  open  rpcbind
143/tcp  open  imap
901/tcp  open  samba-swat
993/tcp  open  imaps
2049/tcp open  nfs
MAC Address: 00:08:02:4F:08:7E (Compaq Computer)
Device type: general purpose
Running: Linux 2.6.X
OS details: Linux 2.6.13 - 2.6.24
Uptime: 34.971 days (since Thu Jan  7 16:21:17 2010)
Network Distance: 1 hop
OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.992 seconds

Nous avons ici une multitude de ports ouverts, mais malheureusement, la machine semble tourner avec un noyau Linux 2.6 ne permettant pas l’attaque, car les IPID de ce noyau sont aléatoires.
Recherchons plutôt un Windows.

# nmap -O 10.8.98.0/24
Starting Nmap 4.62 ( http://nmap.org ) at 2010-02-11 15:43 CET
Interesting ports on 10.8.98.98:
[Bla bla]
Running: Linux 2.6.X
[Bla bla]
Running: Linux 2.6.X
[Bla bla]
Running: Linux 2.6.X
[Bla bla]
Running: Linux 2.6.X

Interesting ports on 10.8.98.240:
Not shown: 1709 closed ports
PORT     STATE SERVICE
80/tcp   open  http
135/tcp  open  msrpc
139/tcp  open  netbios-ssn
443/tcp  open  https
445/tcp  open  microsoft-ds
1026/tcp open  LSA-or-nterm
MAC Address: 00:15:00:37:9F:A5 (Intel Corporate)
Device type: general purpose
Running: Microsoft Windows XP|2003
OS details: Microsoft Windows XP SP2, Microsoft Windows XP SP2 or Windows Server 2003 SP0/SP1
Network Distance: 1 hop
Nmap done: 256 IP addresses (9 hosts up) scanned in 21.354 seconds

Bingo ! Une des machines semble être sous Windows XP SP2.
Elle a les ports Windows standard ouverts et n’a donc pas de firewall activé.
Nous avons trouvé notre voisin idéal ! Le gagnant est 10.8.98.240 !

Etape 2 : réaliser l’idle scan

Il ne nous reste plus qu’à réaliser l’attaque, pour par exemple scanner l’adresse 10.8.98.98 dont nous avons déjà scanné les ports précédemment. Nous allons utiliser le port 445 trouvé ouvert sur notre voisin idéal.

# nmap -P0 -sI 10.8.98.240:445 10.8.98.98

Starting Nmap 4.62 ( http://nmap.org ) at 2010-02-11 15:52 CET
Idle scan using zombie 10.8.98.240 (10.8.98.240:445); Class: Incremental
Interesting ports on 10.8.98.98:
Not shown: 1706 closed|filtered ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
110/tcp  open  pop3
111/tcp  open  rpcbind
143/tcp  open  imap
901/tcp  open  samba-swat
993/tcp  open  imaps
2049/tcp open  nfs
MAC Address: 00:08:02:4F:08:7E (Compaq Computer)

Nmap done: 1 IP address (1 host up) scanned in 17.545 seconds

Cela a marché !
Revenons un peu sur la commande.

nmap -P0 -sI 10.8.98.240:445 10.8.98.98

Le -P0 est obligatoire, sinon notre machine envoie un ping à Mme Michu qui sait maintenant qui la scanne. Le -P0 oblige Nmap à ne pas faire de ping avant de scanner une machine.
Nous précisons ensuite l’option -sI (grand i et non pas L) indiquant que nous voulons faire un idle scan.
Puis qui sera notre voisin et quel port utiliser : 10.8.98.240:445.
Et enfin la victime, Mme Michu : 10.8.98.98.
Le résultat est conforme à ce que nous avons vu auparavant.

Un autre point est important dans le résultat :

Idle scan using zombie 10.8.98.240 (10.8.98.240:445); Class: Incremental

Le Class: Incremental ici est très important, et nous confirme que notre voisin incrémente bien les IPID de 1 et non aléatoirement.

Que se serait-il passé si nous avions essayé avec une machine Linux comme voisin ?

Malheureusement, il n’est pas possible d’utiliser un tel OS, car il utilise des IPID aléatoires...

# nmap -P0 -sI 10.8.98.99:80 10.8.98.98

Starting Nmap 4.62 ( http://nmap.org ) at 2010-02-11 16:01 CET
Idle scan zombie 10.8.98.99 (10.8.98.99) port 80 cannot be used because IP ID sequencability class is: All zeros.  Try another proxy.
QUITTING!

Le résultat est sans appel. Impossible de réaliser l’idle scan, les IPID du voisin ne sont pas bons...

Nous avons donc vu comment réaliser un idle scan.
L’intérêt d’un tel scan est de ne pas être vu directement par la machine scannée.
Cela peut être intéressant pour être furtif, mais aussi pour voir si un filtrage différent est appliqué en fonction des adresses IP sources. Par exemple pour voir si le filtrage est le même pour ma machine que pour celle d’un administrateur réseau...

Pour tous les fans de scans, je vous invite à poursuivre ce tuto par la lecture de l’excellent site Nmap qui vous en dira plus sur les différentes méthodes de scan disponibles.

Conclusion

Nous venons de réaliser une attaque réseau relativement avancée, mais ce qu’il faut retenir est que nous n’aurions pas pu comprendre cette attaque sans avoir une vision précise et détaillée du fonctionnement du protocole IP.

Certaines fonctionnalités des protocoles ne vous seront que très rarement utiles. Par contre, elles vous permettront de mieux comprendre le réseau dans sa globalité. Par ailleurs, si vous avez l’intention un jour de faire de la sécurité, il vous faudra connaître en détail les systèmes que vous allez étudier. Que ce soit en réseau, en systèmes, en programmation, ou dans tout domaine connexe à l’informatique.

Maintenant que nous connaissons en détail le fonctionnement du protocole IP, nous allons pouvoir étudier à son tour le protocole TCP.

Exemple de certificat de réussite
Exemple de certificat de réussite