Ce qui suit est le postage original (ndt : du moins sa traduction) à bugtraq à propos de la méthode de scan usurpée/passive/indirecte. Voir le fichier HPING2-HOWTO pour plus d'informations. antirez --- Salut, J'ai découvert une nouvelle méthode de scan de ports TCP. Au contraire de toutes les autres elle vous permet de scanner en utilisant des paquets usurpés (ndt : dont l'adresse IP source est usurpée), ainsi les systèmes scannés ne peuvent pas voir votre adresse réelle. Afin de réaliser cela j'utilise trois particularités bien connues des mises en oeuvre TCP/IP de la plupart des OS. (1) * les systèmes répondent SYN|ACK à SYN si le port cible est ouvert, répondent RST|ACK si le port TCP cible est fermé. (2) * Vous pouvez connaître le nombre de paquets que les systèmes envoient en utilisant le champ id de l'entête IP. Voir mes précédents postages 'à propos de l'entête IP' dans cette mailing liste. (3) * les systèmes répondent RST à SYN|ACK, ne répondent rien à RST. Les joueurs: système A - le système malfaisant, l'attaquant. système B - le système silencieux. système C - le système victime. A est votre système. B est un système particulier : il ne doit envoyer aucun paquet pendant que vous scannez C. Il y a énormément de systèmes à 'trafic nul' sur Internet, spécialement la nuit :) C est la victime, il doit être vulnérable aux scans SYN. J'ai appelé cette méthode de scan 'scan du système muet' (ndt : l'autre traduction de 'dumb' est bête) en honneur des caractéristiques du système B. Comment elle fonctionne : Le système A surveille le nombre de paquets sortants depuis B en utilisant le champ id de l'entête IP. Vous pouvez faire ceci simplement en utilisant hping : #hping B -r HPING B (eth0 xxx.yyy.zzz.jjj): no flags are set, 40 data bytes 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=0 ttl=64 id=41660 win=0 time=1.2 ms 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=1 ttl=64 id=+1 win=0 time=75 ms 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=2 ttl=64 id=+1 win=0 time=91 ms 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=3 ttl=64 id=+1 win=0 time=90 ms 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=4 ttl=64 id=+1 win=0 time=91 ms 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=5 ttl=64 id=+1 win=0 time=87 ms -cut- .. . Comme vous pouvez le voir, les incréments du champ id sont toujours 1. Ainsi le système a la caractéristique que le système B doit posséder. Maintenant le système A envoie des paquets SYN au port X de C en usurpant l'adresse source de B. (en utilisant hping => 0.67 c'est très facile, http://www.kyuzz.org/antirez) si le port X de C est ouvert, le système C enverra SYN|ACK à B (oui, le système C ne sait pas que le véritable expéditeur est A). Dans ce cas le système B répond au SYN|ACK avec un RST. Si nous envoyons au système C quelques paquets SYN il répondra à B quelques paquet SYN|ACK, ainsi B répondra à C quelques RST... ainsi nous verrons que le système B est en train d'envoyer des paquets ! . .. -cut- 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=17 ttl=64 id=+1 win=0 time=96 ms 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=18 ttl=64 id=+1 win=0 time=80 ms 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=19 ttl=64 id=+2 win=0 time=83 ms 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=20 ttl=64 id=+3 win=0 time=94 ms 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=21 ttl=64 id=+1 win=0 time=92 ms 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=22 ttl=64 id=+2 win=0 time=82 ms -cut- .. . Le port est ouvert ! Cependant, si le port X de C est fermé alors en envoyant à C quelques paquets SYN avec l'adresse usurpée de B, il répondra avec des paquets RST à B, et B ne répondra pas (voir 3). Ainsi nous verrons que le système B n'est en train d'envoyer aucun paquet : . .. -cut- 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=52 ttl=64 id=+1 win=0 time=85 ms 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=53 ttl=64 id=+1 win=0 time=83 ms 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=54 ttl=64 id=+1 win=0 time=93 ms 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=55 ttl=64 id=+1 win=0 time=74 ms 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=56 ttl=64 id=+1 win=0 time=95 ms 60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=57 ttl=64 id=+1 win=0 time=81 ms -cut- .. . Le port est fermé. Tout ceci peut paraître compliqué à réaliser, mais utiliser deux sessions de hping dans des consoles virtuelles Linux ou sous X rend cela plus simple. Première session surveiller le système B : hping B -r Seconde session envoyer des paquets SYN spoofés : hping C -a B -S Désolé si mon anglais n'est pas clair. Cependant ce postage n'est pas adéquat pour décrire exhaustivement cette méthode de scan, ainsi j'écrirai un article à ce sujet, spécialement comment mettre en oeuvre ceci dans un scanner de ports (i.e. nmap), et à propos des caractéristiques des joueurs et des OS utilisés. bonne nouvelle année, antirez