15/11/2024

Les scans de port via TCP : XMAS, Null et ACK

I. Présentation

Dans ce chapitre, nous continuerons à étudier les différentes méthodes de scan TCP proposées par Nmap. Nous allons ici étudier les méthodes XMAS, Null et ACK qui permettent, via des spécificités propres à TCP, de récupérer des informations sur les ports et services ouverts sur une cible donnée.

II. Le TCP XMAS scan

Le TCP XMAS Scan est un peu particulier, car il ne simule pas du tout un comportement normal d'utilisateur ou de machine au sein d'un réseau. En effet, le TCP XMAS Scan va envoyer des paquets TCP avec les flags "URG" (Urgent), "PSH" (Push), et "FIN" (Finish) à 1 dans le but de déjouer certains pare-feu ou mécanismes de filtrage.

Le nom “XMAS” vient du fait que voir ces flags allumés est inhabituel. Lorsque ces trois drapeaux sont activés simultanément dans un paquet TCP, il ressemble à un sapin de Noël allumé :

D'où le nom "XMAS" Scan.

Sans détailler le rôle de ces flags ici, il faut savoir que lors d'un envoi de paquet avec ces trois flags activés, un service actif derrière le port visé ne renverra aucun paquet. En revanche, si le port est fermé, nous recevrons un paquet TCP RST/ACK. On saura alors différencier le comportement d'un port ouvert et d'un port fermé pour lister les ports sur une machine :

Schéma des comportements lors d’un TCP XMAS Scan pour un port ouvert et fermé.
Schéma des comportements lors d’un TCP XMAS Scan pour un port ouvert et fermé.

En suivant toujours la même logique, j'ai effectué un scan réseau sur le port TCP/80 d'un hôte qui avait un serveur web actif sur celui-ci, voici le comportement que l'on peut donc observer lors de la détection d'un port ouvert (source de scan “10.10.14.84”) :

Capture réseau lors d’un TCP XMAS scan pour un port ouvert.
Capture réseau lors d’un TCP XMAS scan pour un port ouvert.

On voit donc que ma source de scan envoie deux paquets TCP XMAS (avec les flags FIN, PSH et URG à 1) à l’hôte “10.10.10.203” et que nous n'avons tout simplement aucun retour de la cible, on sait donc que le port est ouvert. À l'inverse, lorsque l'on effectue un TCP XMAS Scan sur un port fermé, voici ce que l'on peut voir :

Capture réseau lors d'un TCP XMAS scan pour un port fermé.
Capture réseau lors d'un TCP XMAS scan pour un port fermé.

Nous voyons donc que la réponse à notre paquet TCP est un TCP RST/ACK, le port est donc fermé. En utilisant Nmap, c'est l'option "-sX" (scan XMAS qui permet d'effectuer  un TCP XMAS Scan :

# Exécution d’un TCP XMAS Scan
nmap -sX 192.168.1.15

Il est important de signaler que le TCP XMAS scan n'est pas capable de détecter les pare-feu qui pourraient se trouver entre la cible et la machine de scan à l'inverse de certains autres types de scans comme le TCP SYN ou Connect. En effet, un pare-feu qui serait actif entre les deux hôtes ferait en sorte qu'aucun retour TCP ne soit fait si le port visé est filtré (c'est-à-dire protégé par le pare-feu). On est alors dans l'impossibilité, lors d'une non-réponse, de savoir s'il s'agit d'un port protégé par le pare-feu ou alors d'un port ouvert et actif. Il faut également savoir que, comme le TCP FIN scan décrit dans le chapitre, certaines applications ou OS comme les OS Windows peuvent fausser les résultats de ce type de scan.

III. Le TCP Null scan

À l'inverse du TCP XMAS scan, le TCP Null scan va envoyer des paquets TCP scan avec tous les flags à 0. Il s'agit là aussi d'un comportement que l'on ne trouvera jamais dans un échange normal entre des machines, car l'envoi d'un paquet TCP sans flag n'est pas spécifié dans le RFC décrivant le protocole TCP. C'est pourquoi il peut être détecté plus facilement.

L'utilisation de ce scan peut, comme le TCP XMAS scan, perturber certains firewalls ou modules de filtrage et alors laisser passer les paquets :

Schéma des comportements lors d’un TCP Null Scan pour un port ouvert et fermé.
Schéma des comportements lors d’un TCP Null Scan pour un port ouvert et fermé.

Voici ce que l'on peut observer sur le réseau lorsque l'on effectue un TCP Null scan sur un port ouvert :

Capture réseau lors d'un TCP Null scan pour un port ouvert.
Capture réseau lors d'un TCP Null scan pour un port ouvert.

On voit que la machine de scan envoie un paquet sans flag (qui se traduit par l'inscription [<None>] dans Wireshark) sans aucune réponse du serveur. À l'inverse, voici ce qu'il se passe lorsque le port visé est fermé :

Capture réseau lors d'un TCP Null scan pour un port fermé.
Capture réseau lors d'un TCP Null scan pour un port fermé.

En utilisant Nmap, c'est l'option "-sN" (scan Null) qui permet d'effectuer  un TCP Null scan :

# Exécution d’un TCP Null Scan
nmap -sN 192.168.1.15

Étant donné que la réponse quand un port est ouvert et quand un firewall est actif (c'est-à-dire aucun retour du serveur dans les deux cas), le TCP Null scan est incapable de détecter la présence d'un pare-feu. De plus, le pare-feu peut même fausser le résultat en faisant croire qu'un port est ouvert, car il ne répond pas aux paquets TCP sans flags alors que celui-ci est filtré et donc protégé. C'est une information à connaître lorsque l'on emploie des scans qui sont incapables de différencier un port ouvert d'un port filtré (protégé par un pare-feu) comme les scans TCP Null, XMAS ou FIN, afin de rester cohérent dans l'interprétation des résultats obtenus.

IV. Le TCP ACK scan

Le TCP ACK scan est utilisé pour détecter la présence d'un pare-feu sur l’hôte cible ou entre la cible et la source de scan.

En effet, contrairement aux autres scans, le TCP ACK scan ne va pas avoir pour objectif de voir quel port est ouvert sur l’hôte, mais plutôt de savoir si un système de filtrage est actif en répondant pour chaque port par "filtered" ou "unfiltered". Certains scans TCP comme les TCP SYN ou TCP Connect savent faire les deux en même temps alors que d'autres comme TCP FIN ou TCP XMAS ne permettent pas du tout de déterminer la présence d'un filtrage, c'est pourquoi le TCP ACK scan peut avoir un intérêt :

Schéma des comportements lors d'un TCP ACK Scan pour un port filtré et non filtré.
Schéma des comportements lors d'un TCP ACK Scan pour un port filtré et non filtré.

On utilisera l'option "-sA" de l’outil Nmap pour effectuer ce type de scan, voici le résultat que nous pourrons avoir lors de l'exécution de ce TCP ACK scan dans le cas où le port est filtré, c'est-à-dire bloqué et protégé par un pare-feu :

Affichage Nmap lors du TCP ACK Scan.
Affichage Nmap lors du TCP ACK Scan.

Nous voyons ici un exemple de résultat pour un hôte disposant d’un pare-feu et un autre n’en disposant pas. Nmap retourne un "filtered" sur les ports TCP/80 et TCP/81 de l’hôte “10.10.10.203”. Sur une analyse réseau via Wireshark, nous pourrions voir le comportement suivant :

Capture réseau lors d'un TCP ACK scan pour un port non filtré par un pare-feu.
Capture réseau lors d'un TCP ACK scan pour un port non filtré par un pare-feu.

On voit donc que la machine cible ne nous renvoie rien dans le cas où un pare-feu est présent.

En utilisant Nmap, c'est l'option "-sA" (scan ACK) qui permet d'effectuer  un TCP ACK Scan :

# Exécution d’un TCP Ack Scan 
nmap -sA 192.168.1.15

V. Conclusion

Nous avons ici vu trois méthodes différentes de scan via TCP en plus de celles vues précédemment. Ces différentes méthodes sont à utiliser dans des conditions et contextes bien précis, notamment dans le cadre de tests d’intrusion ou d’opération Red Team, durant lesquels des notions de discrétion sont présentes.

author avatar
Mickael Dorigny Co-founder
Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.