iQ Overview
Elie aka Lupin Bursztein
L.S.E
(elie@bursztein.net)
Table of Contents
1 Introduction
1.1 Qu'est-ce que iQ ?
iQ veut dire ICMP Query (Requete ICMP). C'est un utilitaire employé pour identifier un système d'exploitation (SE) à distance.
C'est un preneur d'empreinte de SE actif.
1.2 Comment marche iQ ?
iQ utilise les défauts d'implémentation d'ICMP pour déterminer
le SE distant.
En construisant différents paquets, il crée un signature du SE distant et la compare à sa base de données.
1.3 Pourquoi avoir créé iQ ?
iQ répond à plusieurs besoins :
-
La prise d'empreinte classique (TCP/IP) fait trop de "bruit" (9 tests utilisé dans NMAP). iQ n'utilise aucun paquet malformé, et pratique entre 1 et 5 tests seulement (la plupart des prises d'empreintes se font en 2 tests) ce qui le rend particulièrement discret.
- La prise d'empreinte TCP/IP n'est pas assez précise. Elle ne peut pas indiquer, par exemple, si l'ordinateur distant est un Win 98/Se ou un Win2k, là où iQ le peut.
- La seul implémentation de la prise d'empreinte ICMP est Xprobe qui possède un arbre de décision codé en dur, ce qui le rend difficile à étendre et à corriger. iQ utilise un système de signatures.
2 Prise d'empreinte ICMP avec iQ
Sachant que pour chaque SE la pile IP est implémentée différemment,
chaque pile peut répondre de manière différente à une même situation.
5 tests sont utilisés actuellement pour déterminer le SE distant, mais après
chaque test la liste des OS restants est vérifiée. S'il n'en reste qu'un
iQ s'arrête et affiche le résultat.
Généralement la prise d'empreinte est effectuée en 2 tests seulement.
./iQ -v 192.168.x.x
Test 1: Sending UDP Packet
Test 2: Sending ICMP echo
OS Guessed : Windows 2k. SP1, SP2
./iQ -v 192.168.x.y
Test 1: Sending UDP Packet
Test 2: Sending ICMP echo
OS Guessed : Linux 2.4.5+
2.1 Tests effectués
Voici la liste des 5 tests effectués :
-
U: un paquet UDP sur un port fermé pour récupérer un paquet "ICMP unreachable" avec un TOS spécifique et le drapeau DF (Ne pas fragmenter) activé.
On recherche dans ce paquet les informations suivantes:
-
Type de service (TOS)
- Temps de vie du paquet (TTL)
- Longueur du paquet IP
- L'IP ID
- Drapeau de fragmentation (DF) IP
- Drapeau de fragmentation (DF)IP encapsulé dans les données ICMP
- Longueur du paquet IP encapsulé dans les données ICMP
- Somme de contrôle IP encapsulé
- Somme de contrôle UDP encapsulé
- I1: Envoi d'une demande ICMP écho avec le drapeau DF activé, un TOS et un code ICMP spécifique. On recherche dans ce paquet les informations suivantes:
-
Type de service (TOS)
- Temps de vie du paquet (TTL)
- Longueur du paquet IP
- L'IP ID
- Drapeau de fragmentation (DF) IP
- Code ICMP
- I2: Envoi d'une requête ICMP timestamp. On regarde s'il y a réponse ou non.
- I3: Envoi d'une requête ICMP info request. On regarde s'il y a réponse ou non.
- I4: Envoi d'une requête ICMP masque d'adresse. On regarde s'il y a réponse ou non.
2.2 Le fichier de signatures
iQ utilise un fichier pour sauvegarder sa base de signatures (icmp_os_fingerprint.txt). Le parser utilisé pour lire le fichier est généré
grâce à GNU Flex.
La structure d'une signature ressemble beaucoup à celle de NMAP. En voici une :
Fingerprint Windows NTsp3-:
U(Resp=Y, Tos=!192, E_ILEN=98, IP_LEN=!112)
I1(Resp=Y, ICMP_CODE=0, Tos=!0)
I2(Resp=N)
I4(Resp=Y)
-
Fingerprint Windows NTsp3-: Spécifie de quel SE on parle, ici WinNT. La ligne commence par Fingerprint et fini par :
- U(Resp=Y, Tos=!192, E_ILEN=98, IP_LEN=!112) premier test, le paquet UDP.
-
Resp=Y spécifie que le SE distant répond. La valeur peut être Y ou N
- Tos=!192 indique que le Tos a une valeur différente de 192. La valeur est un (!)entier
- E_ILEN=98 indique que le champ indiquant la longueur de l'IP encapsulé a pour valeur 98. La valeur peut être (!<>)entier
- IP_LEN=!112 indique que la longueur du paquet IP est différente de 112. La valeur peut être (!<>)entier
- I1(Resp=Y, ICMP_CODE=0, Tos=!0) Deuxième test, la réponse écho.
ICMP_CODE=0 indique que l'ICMP_CODE est égal à 0. La valeur peut
être (!)entier.
- I2(Resp=N) troisième test ; indique qu'il n'y a pas de réponse à ce paquet.
3 Conclusion
iQ est un outil utile pour deviner un SE distant. Il offre une alternative à la prise d'empreinte TCP/IP.
iQ utilisant une base de signatures, il est très facile de mettre à jour la base de données des SE.
iQ a encore besoin d'améliorations mais c'est déjà un utilitaire fonctionnel.
Nous serions très heureux d'avoir des comptes-rendus de vos expériences à : iq@bursztein.net
iQ est Téléchargeable ici:
http://www.bursztein.net/secu
http://www.epita.fr/lse
4 Equipe
IQ est un projet du LSE (Laboratoire Système de l'EPITA). http://www.epita.fr/lse.
-
Idée, code et article de Elie aka Lupin Bursztein (elie@bursztein.net).
- Code de Bertrand aka BeBert Payet (payet_b@epita.fr).
- Fichier Flex pour le parser de Jérome aka Banawe Bana (bana_j@epita.fr).
- Basé sur ICMP Usage In Scanning Research project d'Ofir Arkin.
- Arbre de decision basé sur celui d'xprobe, d'Ofir Arkin et Fyodor.
This document was translated from LATEX by
HEVEA.