Sans titre
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |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.
Par Patrice Salnot - uid
|