Idle Host Scan

Par 4n9e le 09-10-2005



Description du scan de type Idle Host, et son application pratique avec Nmap. Video incluse.



Sommaire :
I. Principe
II. Pratique
III. Nmap Idle Host Scan
IV. Conclusion


I. Principe
De nos jours, quel que soit le type de scan, tout bon firewall saura le bloquer dans le meilleur des cas, ou au moins le noter dans son journal.
On peut donc considérer avec précaution les notions de scan "stealth", invisible. Les plus courants sont par exemple les NULL scan, Xmas scan et autres.
Mais chacun d'eux est un envoi de paquets avec l'ip de l'attaquant, necessairement. Si le firewall detecte une activité suspecte, alors son administrateur n'aura aucun mal a retrouver cette ip dans ses journaux d'activité.

Il reste toutefois un autre type de scan, réellement invisible car totalement passif vis a vis de la cible.
L'idlescan, puisque c'est de lui qu'il s'agit, consiste a faire faire son scan par une autre machine, appellée zombie. Ainsi, comme ce n'est pas l'attaquant qui scanne, mais une machine zombie, ce scan est peut etre detectable, mais impossible de savoir d'où il vient.
Du moins est il impossible de trouver l'origine de l'attaque tant que la cible n'a pas le moyen de verifier les journaux du zombie...

Le principe va donc etre de se servir d'un host pour faire son scan a la place de l'attaquant.

Dit comme ca, on peut penser dans un premier temps a utiliser un proxy. Cependant, cette solution pose plusieurs problemes :
d'une part, un proxy agit au niveau applicatif, et ne va pas forcement relayer tous les protocoles dont on a besoin lors d'un scan.
d'autre part, les proxies loggent quasi systématiquement l'activité sur leur relais. Disons carrement systématiquement, par defaut, mieux vaut ne pas y faire confiance.
enfin, les proxies vont le plus souvent rediriger le traffic via les ports 80, 3128, 8080 etc... bien connus de tous et donc tres facilement detectables par la cible. Et comme en général ils ne veulent pas d'ennui, il y a un fort risque qu'ils fournissent les logs sur demande de la cible lorsque cela est possible.


Le fait d'utiliser une machine standard sensible à la prediction de numero de sequence TCP/IP (IPID number) a plusieurs interets :

- d'une part pouvoir envoyer quasiment tout paquet necessaire au scan
- d'autre part s'assurer d'envois lancés depuis des ports anodins
- de pouvoir aussi esperer moins de risques de logs sur le zombie que sur un proxy officiel (attention, ceci n'est pas sur, notament dans le cas d'un zombie derriere un firewall)
- enfin pouvoir imaginer contourner une regle de firewall mal definie qui laisserait passer les requetes d'un zombie bien choisi au sein du reseau de la cible, si par exemple celui-ci fait partie de la dmz.



II. Pratique
En pratique, on va utiliser le principe de base du spoofing :
Il va s'agir de déduire, d'apres les réactions du zombie, ce qui se passe sur la cible.

L'idée est qu'un zombie utilisable est celui qui a un numéro de séquence IPID prévisible. On va donc tout simplement lui parler, afin d'obtenir un numero de séquence initial, puis parler à la cible en se faisant passer pour le zombie.
A ce moment là, la cible ( si elle répond ) va donc répondre non pas à l'attaquant, mais à celui qui, croit-elle, a envoyé la demande (c'est à dire le zombie)
Ce zombie, qui n'avait rien demandé, va fermer la connexion. Ceci va modifier son numero de séquence.
Il ne reste qu'à reparler au zombie afin de voir son nouveau numero de sequence :
Comme on ne lui a parlé qu'une fois, si il n'a pas eu d'activité alors ce numero ne devrait etre incrémenté que d'une unité (cette unité peut etre +1, +256, peu importe).
Mais si entre temps il a eu une activité, son numero de sequence est incrémenté de deux unités. On sait donc que la cible lui a répondu, indiquant ainsi qu'elle est en activité.

Voici ceci sous la forme de shémas :

idle1.jpg
On envoie un paquet à notre zombie afin de...

idle2.jpg
...récupérer son numero de sequence IPID initial.

idle3.jpg
Puis on envoie une requete directement à la cible, en faisant croire que celle ci vient du zombie.
Evidement, ainsi la cible ne nous répondra pas directement, puisqu'elle croit que ca vient du zombie.

idle4.jpg
Si le port auquel est adressée cette requete est ouvert, alors la cible répond comme prévu normalement lors de l'établissement d'une connexion, mais au zombie.
Si le port est fermé, la cible ferme la tentative de connexion.

idle5.jpg
Si le port était ouvert, et que la cible a répondu au zombie, celui ci (qui n'avait rien demandé) est surpris, et ferme la connexion. ceci a pour effet d'augmenter son numero de séquence.

idle6.jpg
Reste alors à l'attaquant a relever ses filets : on interroge encore une fois le zombie, afin de récupérer son numero de sequence actuel.

idle7.jpg
Dans tous les cas, le zombie va répondre. Mais dans un cas, on constate que son numero de sequence a augmenté anormalement, indiquant qu'il a bien discuté avec la cible.
Dans l'autre, le numero de sequence est augmenté normalement, il ne s'est donc rien passé avec la cible. On en deduit...

idle8.jpg
... Que dans un cas la cible à le port scanné ouvert, et dans l'autre que le port en question est fermé.



III. Nmap Idle host scan
Nmap automatise grandement ce type de scan. L'argument utilisé est le suivant :

-sI <zombie(:port)> : permet un scan de type TCP. Nmap effectue lui meme la comparaison des IPID sur le zombie et l'envoi des paquets de tests spoofés sur la cible.
L'interet alternatif de cette méthode est aussi de voir comment différents zombies percoivent la meme cible au sein d'un reseau.
Ainsi, en comparant les resultats, on peut en déduire certaines regles de securité et de filtrage au sein de ce reseau. L'attaquant peut ainsi determiner quelles sont les machines les plus utiles à son attaque future.
Le parametre de port, optionnel, permet de preciser suel port ecouter sur le zombie pour predire les numeros de sequence.

L'étape la plus difficile est donc de trouver dans un premier temps les zombies utilisables. Pour ca, pas de secrets, il faut chercher.
On lancera donc des scans classiques de type SYN scan sur un ensemble de cibles potentielles, jusqu'a trouver des machines comme celle ci :

idle9.jpg
Comme le montre l'image ci dessus, un bon candidat est celui sur lequel tourne un système d'exploitation a séquence facilement prévisible. C'est par exemple le cas ici avec un serveur d'impression JetDirect.
La classification "Trivial Joke" signifie que Nmap ne fera qu'une bouchée de ce zombie. Evidement, si il est classifié "Good Luck !", passez votre chemin (cas des Win Xp Sp2 par exemple)...




IV. Conclusion


La vidéo suivante (4.07 Mo, Xvid) montre ce principe, et un scan idle effectué avec Nmap.

Idlescan


4N9e pour FutureZone, 2005
Credits visuels : http://www.irongeek.com