Pourquoi voudriez-vous faire cela?
Déterminer quel système d'exploitation une machine ou un périphérique est en cours d'exécution peut être utile pour de nombreuses raisons. Premièrement, jetons un coup d’œil sur une perspective quotidienne, imaginons que vous souhaitiez passer à un nouveau fournisseur d’accès Internet offrant un accès Internet non plafonné à 50 $ par mois, de sorte que vous puissiez tester son service. En utilisant les empreintes de système d’exploitation, vous découvrirez bientôt qu’ils disposent de routeurs de déchets et offrent un service PPPoE offert sur un ensemble de machines Windows Server 2003. Ne semble plus être une si bonne affaire, hein?
Une autre utilisation de cette méthode, bien que peu éthique, est le fait que les failles de sécurité sont spécifiques à un système d’exploitation. Par exemple, si vous effectuez une analyse de port et trouvez le port 53 ouvert et que la machine exécute une version obsolète et vulnérable de Bind, vous avez une chance unique d’exploiter le trou de sécurité puisqu’une tentative infructueuse ferait planter le démon.
Comment fonctionne la prise d'empreinte de système d'exploitation?
Lors de l'analyse passive du trafic actuel ou même lors de la saisie d'anciennes captures de paquets, l'un des moyens les plus simples et les plus efficaces de réaliser une empreinte de système d'exploitation consiste simplement à regarder la taille de la fenêtre TCP et la durée de vie (TTL) dans l'en-tête IP du premier paquet dans une session TCP.
Voici les valeurs pour les systèmes d'exploitation les plus populaires:
Système opérateur | Temps de vivre | Taille de la fenêtre TCP |
Linux (noyau 2.4 et 2.6) | 64 | 5840 |
Google Linux | 64 | 5720 |
FreeBSD | 64 | 65535 |
Windows XP | 128 | 65535 |
Windows Vista et 7 (Server 2008) | 128 | 8192 |
iOS 12.4 (routeurs Cisco) | 255 | 4128 |
La principale raison pour laquelle les systèmes d’exploitation ont des valeurs différentes est due au fait que les RFC pour TCP / IP ne stipulent pas de valeurs par défaut. Une autre chose importante à garder à l'esprit est que la valeur TTL ne correspond pas toujours à une valeur du tableau, même si votre périphérique exécute l'un des systèmes d'exploitation répertoriés, vous voyez lorsque vous envoyez un paquet IP sur le réseau le système d'exploitation du périphérique émetteur. définit le TTL sur le TTL par défaut pour ce système d'exploitation, mais lorsque le paquet traverse des routeurs, la durée de vie est réduite de 1. Par conséquent, si vous voyez une durée de vie de 117, vous pouvez vous attendre à un paquet envoyé avec une durée de vie de 128 et a traversé 11 routeurs avant d'être capturé.
Tshark.exe est le moyen le plus simple de voir les valeurs. Une fois que vous avez capturé un paquet, assurez-vous que Wireshark est installé, puis accédez à:
C:Program Files
Maintenant, maintenez le bouton Maj enfoncé, cliquez avec le bouton droit de la souris sur le dossier wirehark et sélectionnez Ouvrir la fenêtre de commande ici dans le menu contextuel
tshark -r 'C:UsersTaylor GibbDesktoplah.pcap' 'tcp.flags.syn eq 1' -T fields -e ip.src -e ip.ttl -e tcp.window_size
Assurez-vous de remplacer «C: Utilisateurs Taylor Gibb Desktop blah.pcap» par le chemin absolu vers la capture de votre paquet. Une fois que vous avez appuyé sur Entrée, tous les paquets SYN de votre capture s’afficheront dans un format de tableau plus facile à lire.
- Mon réseau local est 192.168.0.0/24
- Je suis sous Windows 7
Si vous regardez la première ligne du tableau, vous verrez que je ne mens pas. Mon adresse IP est 192.168.0.84. Mon temps de transmission est 128 et ma taille de fenêtre TCP est 8192, ce qui correspond aux valeurs de Windows 7.
La prochaine chose que je vois est une adresse 74.125.233.24 avec une durée de vie de 44 et une taille de fenêtre TCP de 5720, si je regarde ma table, il n’existe aucun système d’exploitation avec une durée de vie de 44, mais il est dit que les serveurs Linux que Google exécutez une taille de fenêtre TCP 5720. Après une recherche rapide sur le Web de l’adresse IP, vous verrez qu’il s’agit bien d’un serveur Google.