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.