Le logiciel dont nous allons parler ici est nmap. Afin de détecter quel OS utilise une machine sur le réseau, nmap va réaliser une empreinte de la machine par l’intermédiaire de la stack TCP/IP. Chaque OS à sa propre façon de gérer les paquets TCP/IP lorsque leurs champs ont des valeurs incongrues. Dans le but d’identifier le comportement de chaque OS, nmap embarque une base de données que l’on peut consulter dans le fichier suivant : /usr/share/nmap/nmap-is-db
Voici un extrait de cette base de données :
# Windows 10 Enterprise
# Version 1511
Fingerprint Microsoft Windows 10 1511
Class Microsoft | Windows | 10 | specialized
CPE cpe:/o:microsoft:windows_10:1511 auto
SEQ(SP=FD-107%GCD=1-6%ISR=103-10D%TI=I%CI=I%II=I%SS=S%TS=A)
OPS(O1=M5B4NW8ST11%O2=M5B4NW8ST11%O3=M5B4NW8NNT11%O4=M5B4NW8ST11%O5=M5B4NW8ST11%O6=M5B4ST11)
WIN(W1=2000%W2=2000%W3=2000%W4=2000%W5=2000%W6=2000)
ECN(R=Y%DF=Y%T=7B-85%TG=80%W=2000%O=M5B4NW8NNS%CC=N%Q=)
T1(R=Y%DF=Y%T=7B-85%TG=80%S=O%A=S+%F=AS%RD=0%Q=)
T2(R=N)
T3(R=N)
T4(R=Y%DF=Y%T=7B-85%TG=80%W=0%S=A%A=O%F=R%O=%RD=0%Q=)
T5(R=Y%DF=Y%T=7B-85%TG=80%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
T6(R=Y%DF=Y%T=7B-85%TG=80%W=0%S=A%A=O%F=R%O=%RD=0%Q=)
T7(R=N)
U1(DF=N%T=7B-85%TG=80%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)
IE(DFI=N%T=7B-85%TG=80%CD=Z)
Fingerprint Microsoft Windows 10 1511
Cette ligne fait office de séparateur entre toutes les empreintes de la base de données. Elle indique au parseur l’entrée dans un nouveau bloc, et donc la fin du précédent. L’information contenue dans cette ligne s’organise comme suit : Vendeur, OS, version. L’information n’a pas pour objectif d’être parsée, mais plutôt d’être lisible pour les humains. Il existe plusieurs standards de syntaxe pour cette ligne, mais les champs conservent la même organisation.
Il faut savoir que des machines possédant le même OS peuvent réagir de manières différentes en fonction notamment des drivers network. Il est donc généralement utile de créer plusieurs fingerprints pour un même OS lorsque les comportements varient trop.
De la même manière, une empreinte peut ne pas être déterminante dans la discrimination d’un OS. Les constructeurs peuvent développer de nouveaux OS ou de nouvelles versions d’OS en conservant la gestion de la stack IP de produits antérieurs.
Class Microsoft | Windows | 10 | specialized
Cette partie est semblable à la précédente, à l’exception près qu’elle est faite pour être facilement parsable, et qu’il peut y en avoir plusieurs par empreinte. Elle est utilisée par d’autres scripts (NSE par exemple) ou application qui opèrent d’autres analyses à partir de ces informations. Ces informations suivent le standard suivant : Vendeur | famille d’OS | génération d’OS | type d’appareil. Il faut autant de ligne Class que d’OS représenté par l’empreinte.
Grâce à cette classification, lorsque plusieurs tests sont infructueux, et qu’il en résulte donc une importante quantité d’OS possibles, nmap va considérer comme match le plus bas nÅ“ud commun à tous les matchs.
CPE cpe:/o:microsoft:windows_10:1511 auto
La CPE (Common Platform Enumeration) est schema de nommage pour informer les systèmes. La syntaxe se base sur celle l’URI (Uniform Resource Identifier). La CPE se structure de la manière suivante : cpe:/<part>:<vendor>:<product>:<version>:<update>:<edition>:<language>
Une Class peut posséder plusieurs lignes CPE, et elles se réfèrent toutes à la première ligne Class qui les précède.
Le flag qui suit la CPE auto indique qu’elle a été automatiquement générée. Lorsqu’elle est rentrée manuellement, aucun flag n’apparaît.
Les lignes suivantes correspondent aux tests (SEQ, …, IE) qu’il est nécessaire de réaliser pour définir s’il s’agit effectivement de l’OS désigné par l’empreinte. Chaque test attend une réponse précise de la part de l’host analysé, si elle est reçue, les tests qui se trouvent dans les parenthèses du test sont lancés et le résultat attendu de chaques sous-tests doit obtenir une réponse précise renseignée après le signe ‘=’.
Tous ces tests, s’ils sont fructueux, permettent l’identification de l’OS. Sinon, en fonction du nombre de tests réussis, nmap conserve que cette fingerprint est un succès à un pourcentage donné pour éventuellement le proposé à l’utilisateur si aucun autre OS n’est à 100% identifié.