Technique de l' IP id scanning Par patrice salnot -
uid@42sec.net
Cette méthode permet d'identifier les
services ouverts sur une cible sans laisser de traces ou tout au
moins sans laisser apparaître son adresse IP.
Pour
appréhender cette méthodologie il est nécessaire de comprendre
comment réagis une cible lorsqu'on audit ses services. Il est
également nécessaire de comprendre à quoi correspond un numéro d'ID
dans une trame IP et comment il évolue dans certaines
implémentations. Nous allons donc segmenter l'analyse de cette
méthode en trois parties :
* Comportement de la pile IP
standard face à une requête. * Évolution du champ ID. *
Description de la méthode.
Analyse du comportement de la
pile IP face à une requête
A
--------SYN--------DPRT 23----SPRT 2048-------> B Phase
1
A <-------RST------SPRT 2048---DPRT 23---------- B Phase
2
Schéma D.
A -----SYN-------DPRT 23-SPRT
2048-------------> B Phase 1
A <-------SYN/ACK---DPRT
23-SPRT 2048----------- B Phase 2
Schéma
E.
Prenons en considération le contexte du schéma
D. La machine A fait une requête sur le port vingt trois de la
machine B. Si le port est fermé la machine B va renvoyer un
paquet à destination de la machine A avec un flag RST. Par contre
si le port vingt trois est ouvert la machine B renverra un paquet
contenant le FLAG SYN/ACK à destination de la machine A (cf. schéma
E.) .
Évolution du champ ID
0 1 2 3 0 1 2
3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Ver=
4 |IHL= 5 |Type of Service| Total Length = 276
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
Identification = 111 |Flg=1| Fragment Offset = 0
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
Time = 119 | Protocol = 6 | Header Checksum
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
source address
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
destination address
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
data
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
data | \ \ \ \ | data
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
data
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Schema
F Présentation d'une en-tête IP.
Le champ identification
de la trame IP permet de caractériser de manière unique chaque
paquet émis. La RFC 791 spécifie que le numéro doit être
déterminé par la couche supérieure (à savoir TCP UDP ou
ICMP). Dans les implémentations dérivées de Berkeley (notamment
4.2BSD) ce champ est incrémenté d'une unité à chaque trame
émise.
Description de la méthode
A
--------SYN--------DPRT 23----SPRT 2048-------> B Phase
1
A <-------SYN/ACK--SPRT 2048---DPRT 23---------- B Phase
2
A --------ACK--------DPRT 23----SPRT 2048-------> B
Phase 3
Schéma G.
En nous plaçant dans le contexte
définis au schéma D, nous voyons que l'envoi d'une trame TCP
contenant un flag SYN à destination du port vingt trois de la
machine B va provoquer l'envoi d'une trame contenant un FLAG RST de
la machine B vers la machine A. La machine A en recevant cette
trame contenant un FLAG RST ne va générer aucun paquet. Par
contre si le port vingt trois est ouvert sur la machine B, celle ci
va y faire face en générant une trame contenant un FLAG
SYN/ACK. La machine A en recevant cette trame va renvoyer un
paquet contenant un FLAG ACK pour conclure la phase de
synchronisation(Cf. schéma G). En générant cette trame la machine
A va incrémenter d'une unité son champ ID dans le cas d'une
implémentation de la pile IP dérivée de Berkeley.
Supposons
maintenant l'existence d'une machine T qui génère des paquets en
usurpant l'adresse IP de A. L'envoi d'une trame TCP contenant un
FLAG SYN venant de la machine T usurpant l'adresse IP de A sur le
port vingt trois de la machine B va provoquer l'envoi d'une trame
contenant un FLAG SYN/ACK à destination de la machine A si le port
est ouvert. La machine A en recevant ce paquet va y répondre en
envoyant un paquet RST à destination de la machine B. L'envoi de
ce paquet va incrémenter d'une unité la valeur du champ ID de la
machine A.
Dans la même situation si le port vingt trois de
la machine B est fermé elle va envoyer une trame contenant un FLAG
RST à destination de la machine A pour résilier la connexion. La
machine A en recevant ce paquet contenant une demande de résiliation
de connexion ne va pas y répondre et par conséquent la valeur
contenue dans le champ ID ne sera pas incrémenté.
La machine
T en observant l'évolution des valeurs du champ ID de la machine A
peut donc déterminer quels ports de la machine B sont
ouverts.
Aucune trace de l'adresse IP de la machine T
ne sera générée sur la machine
B.
|