Scan de ports : à la recherche de points d’entrée !

To the non-french speaker, note that you can translate the articles using the Google Trad widget situated at the bottom of all pages.


Le scan de ports permet de scanner les ports d’une machine présente sur un réseau dans le but d’obtenir des informations sur celle-ci. Ces informations sont les suivantes :

-L’OS utilisé par les machines
-Les ports ouverts/fermés
-Les services utilisés par les machines et leurs versions.

Légalement parlant il existe un flou juridique concernant cette pratique. Concrètement cette action est réalisable sans briser de sécurités donc on peut dire qu’il n’y a rien d’illégale. Par contre les informations que l’on récupère suite à ces scans peuvent mener à une intrusion ce qui serait donc illégale. Alors illégale ou pas ?

Partez du principe que oui. Même si ce n’est pas forcément le cas, ça vous forcera à être le plus discret possible. Pour cet article nous utiliserons le scanner le plus connu : Nmap mais avant de commencer la pratique, il va falloir faire un peu de théorie ahah !

I/ Ports et services

Un concept important à connaître en informatique (et surtout en réseau) est celui du port. Un port, c’est un point d’entrée/sortie sur votre machine (PC, serveur…) qui lui permet de communiquer avec d’autres matériels directement sur le réseau. Derrière chaque port on trouve un service (un programme) qui reçoit les données du réseau, les traite et les affiche à l’utilisateur.

Votre ordinateur dispose de 65635 ports, les 1023 premiers sont dits « Well Known » dans le sens ou on sait quels services sont utilisés par ces ports. Par exemple on sait que le port 80 est utilisé par le service HTTP, le port 23 est utilisé par TELNET et le port 443 par HTTPS.

Vous pouvez bien évidemment ouvrir les ports de votres ordinateur comme bon vous semble (avec netcat par exemple). Mais ce n’est pas recommandé puisque comme je vous l’ai dit, un port est un point d’entrée/sortie sur votre machine pour vous, votre routeur mais aussi votre voisin le pirate informatique ! Vous trouverez un récapitulatif des ports/services ici.

Mais du coup comment sont mises en place les communications entre deux ordinateurs/serveurs ? C’est ce que nous allons voir tout de suite !

II/ Mise en place d’une connexion

Qu’est ce qu’il se passe lorsque l’on se connecte à un site web ? Le plus simple c’est de voir en live via un outil de capture réseau tel que Wireshark. Si je me connecte à http://www.lemonde.fr, j’obtiens ceci :

trame
On retrouve plusieurs informations sur ces trames. Tout d’abord on a l’adresse IP (privée) de l’émetteur : 192.168.0.29, l’adresse IP (publique) du serveur qui héberge lemonde.fr : 93.184.220.239, les protocoles utilisés TCP et HTTP et… ACK ? SYN ? What ?

En fait ACK et SYN (ainsi que plusieurs autres que nous verrons plus tard) sont des flags du segment TCP :

entête tcp.png

Regardez au milieu, on retrouve URG, ACK, PSH, RST, SYN et FIN :

Urgent indique que le paquet est prioritaire.
Acknowledgment permet de confirmer la réception d’un paquet.
Push indique que toutes les données seront envoyés d’un coup.
Reset indique que la connexion est réinitialisée.
Synchronisation spécifie une demande de connexion.
Finish met fin à une connexion.

Tous ces flags permettent donc aux machines de se comprendre lorsqu’il y a besoin d’établir une connexion. Donc, lorsque j’ai initialisé la connexion entre mon PC et le serveur qui héberge lemonde.fr j’ai envoyé une requête SYN.

syn.png

Le serveur reçoit la demande de connexion et va renvoyer un paquet SYN/ACK pour indiquer au PC une demande de connexion ainsi qu’une confirmation de réception du précédent paquet :

synack

Puis le PC va envoyer une requête ACK pour confirmer la réception de la demande de connexion :

ack

La connexion est dorénavant établie. Maintenant plusieurs scénarios sont possibles. Soit il y a une requête HTTP GET qui permet de récupèrer la page HTML et son contenu (c’est notre cas). Soit il y a la mise en place d’un tunnel SSL/TLS dans le but de sécuriser les communications.

Ce cas là, c’est quand le port du serveur est ouvert et accepte les connexions. Cependant il peut arriver que la connexion ne soit pas acceptée et dans ce cas là le serveur, au lieu de renvoyer un paquet SYN/ACK, va renvoyer un paquet RST/ACK :

rstack.png

Pourquoi est ce que c’est important de savoir ça ? Eh bien parce que lorsque nous allons faire notre scan nous allons pouvoir utiliser plusieurs types de scan qui sont plus ou moins visibles et qui utilisent différentes combinaisons de flags.

III/ Les différents types de scan Nmap

Nmap est le scanner de port le plus connu et probablement le plus utilisé avec AngryIP. C’est un outil Open Source qui est apparu en septembre 1997 et qui permet donc de scanner les ports d’une machine afin de déterminer son OS ainsi que les services qui tournent. Nmap propose une interface graphique : Zenmap mais bon… On ne s’en servira pas.

La syntaxe générale est la suivante :

nmap [Types de scans] [ Options ] { spécifications des cibles }

Comme je vous l’ai dit, avec Nmap on peut lancer plusieurs types de scan. Il s’agira ici de  comprendre comment la plupart fonctionne et quels sont leurs avantages/inconvénients.

Scan TCP Full Connect :

Le scan TCP Full Connect ou Full Open correspond au schéma que nous avons vu plus tôt. Ce type de scan initialise complètement la connexion avec chacun des ports du serveur et est donc facilement répérable. Pour le lancer nous utiliserons cette commande :

nmap -sT -Pn -p- x.x.x.x

L’option -sT indique que nous utiliserons un scan Full Connect, l’option -Pn indique que l’on veut scanner tous les hôtes sans se soucier de savoir s’ils sont up ou non. Quant à l’option -p-, elle indique à Nmap que l’on souhaite scanner les 65635 ports (au lieu des 1000 par défaut)(on pourrait vouloir scanner un seul port en mettant -p 80 par exemple). Voici un example de scan TCP Full Connect :

stpnp

Le scan TCP Full Connect est donc le plus complet mais aussi le plus « bruyant ».

Scan TCP Syn Connect :

Le scan TCP Syn Connect ou Half Open est un scan beaucoup moins lourd que le Full Connect puisqu’il n’envoie pas de requête ACK après avoir reçu la requête SYN/ACK. Du coup on peut assez facilement savoir si un port est ouvert avec ce scan. En effet si le port est ouvert alors on va recevoir une requête SYN/ACK :

synack

En revanche s’il est fermé on recevra un RST/ACK :

rstack

Si le port est filtré par un firewall eh bien… On ne recevra rien :

firewall.png

Du coup Nmap nous indiquera qu’il a détecté un firewall en modifiant le state du port en « Filtered ».

Pour lancer ce scan on utilise la commande suivante :

nmap -sS -Pn -p- x.x.x.x

C’est un scan tout aussi efficace que le TCP Full Connect mais qui présente l’avantage d’être plus rapide et surtout moins lourd.

Scan FIN :

Le scan FIN ou Stealth est un scan qui se sert du comportement d’une machine afin de déterminer si un port est ouvert ou non. Pour cela il va tout simplement envoyer une requête FIN (une requête de fin de communication) sur chacun des ports de la machine ciblée. Si la machine ne répond pas c’est que le port est fermé :

finr

En revanche si la cible renvoie une réponse de type RST/ACK alors on saura que le port est ouvert :

finrstack.png

Pour lancer ce scan on utilisera la commande suivante :

nmap -sF -Pn -p- x.x.x.x

Scan UDP :

Le scan UDP est trop souvent laissé de côter et pourtant il est tout aussi important qu’un scan TCP Full Connect ou TCP Half Connect. En effet il existe deux protocoles de gestion des communications TCP et UDP. Le premier est utilisé dans le but de sécuriser la transmission de données en vérifiant l’intégrité des paquets par exemple. Tandis que le second est utilisé pour l’envoie de données massif et sans sécurité. Etant donnée que le protocole UDP ne se soucie pas de la réception des paquets, il n’y a pas de SYN, SYN/ACK et ACK.

Du coup le scan UDP se contente d’envoyer un header vide à chacun des ports de la machine ciblée. Si la machine nous renvoie un message ICMP de type 3 et de code 3, c’est à dire un « port unreachable » alors on saura que le port est fermé :

udpunreachable

La cible pourra d’ailleurs nous envoyer plusieurs autres code : 1, 2, 9, 10, et 13. Si c’est le cas alors on saura que le port est soit ouvert soit filtré :

udpreachable

Pour lancer ce scan on utilisera la commande suivante :

nmap -sU -Pn -p- x.x.x.x

Scan ACK :

C’est le dernier type de scan que l’on verra dans cet article : le scan ACK. Le but de ce scan est de détecter s’il y a un firewall qui filtre les communications. Pour cela, Nmap va envoyer une requête ACK. Si la machine lui répond avec un RST c’est que le port est ouvert et non filtré :

rst.png

En revanche s’il n’y a pas de réponses c’est que le port est filtré :

ackr.png

Pour lancer ce scan on utiliera la commande suivante :

nmap -sA -Pn -p- x.x.x.x

Voilà pour les différents types de scan. Il en exite encore quelques uns (Xmas et Null entre autres) mais je ne les détaillerai pas dans cet article. En revanche vous trouverez toutes les informations nécessaires ici !

Ok, on sait comment fonctionnent les différents scans, on sait faire la différence entre un port ouvert, fermé ou filtré, en revanche il nous manque encore quelques informations comme l’OS de la machine ainsi que les services qui tournent derrière chacun des ports.

IV/ Déterminer l’OS et les services d’une machine

Pour cela on dispose de plusieurs options. La première c’est l’option -A qui permet d’activer la recherche de l’OS des machines ciblées ainsi que la recherche des services et de leurs version.

Par exemple si j’entre cette commande :

nmap -sT -A -Pn -p- 192.168.0.*

J’obtiendrai (entre autres) :

result.png

On retrouve bien les ports ouverts ainsi que leurs versions. Cependant on remarque aussi que Nmap n’a pas pu détecter l’OS utilisé sur ma machine. C’est compréhensible, j’utilise Parrot OS qui est peu connu donc… En revanche un Windows est très bien reconn par Nmap.

Par ailleurs si vous avez absolument besoin de connaître l’OS de votre cible vous pouvez toujours spécifier l’option suivante –osscan-guess. Nmap dressera une liste des potentiels OS.

D’ailleurs il est intéressant de savoir que pour détecter l’OS, Nmap regarde plusieurs paramètres et notamment le TTL des paquets émis par la cible. En effet chaque OS utilise un TTL par défaut différent. Par exemple les OS Cisco utilisent un TTL de 30 tandis que les OS Windows utilisent un TTL de 128 depuis NT0.4 (plus d’infos ici ).

Dernières options : -T[1 à 5], elle permet de spécifier l’intensité du scan avec 1 étant le scan le plus faible (plus long mais moins repérable) et 5 étant le plus fort (rapide mais facilement repérable) et -S permet d’usurper une adresse IP (attention il faut que l’hôte que vous usurpez soit up pour que ça fonctionne).

IV/ Méthodologie d’un scan

Comment réaliser un scan le plus furtif possible ? La première chose à faire c’est de bien se renseigner sur la cible via l’étape de reconnaissance qui est primordiale. Ensuite il va falloir détecter les machines up sur le réseau. Pour cela on va d’abord faire un scan ICMP via l’option -sP. Nmap va tout simplement envoyer un ping à chacune des machines présentes sur le réseau et nous dire qui est UP ou DOWN.

Le plus simple reste ensuite de créer un fichier dans lequel vous listerez les IP des machines UP. Lorsque vous lancerez votre scan il faudra juste spécifier à Nmap qu’il doit scanner les IP présentes dans le fichier via l’option -iL :

nmap -sS -Pn -p- -iL "chemin du fichier"

Deux possibilités s’offrent maintenant à vous. Soit vous faites une liste des ports à scanner soit vous les scannez tous. J’aime bien scanner l’ensemble des ports car je sais (par expérience) que les administrateurs systèmes et réseaux sont suffisament malins pour utiliser un service sur un port autre que les « Well Known ». L’idée étant bien évidemment d’éviter de se faire scanner et attaquer par la suite.

Une fois le scan Nmap vous aurez donc les OS, les services et leurs versions. Il faudra donc passer à la phase d’exploitation que l’on verra dans un prochain article.

V/Se protéger face au scan de ports

La première chose à faire pour se protéger de ce genre de scan c’est justement d’en faire ! En effet vous verrez directement quels sont les ports ouverts non utilisés et donc vulnérables. Souvent des ports sont ouverts alors que personne ne s’en sert !!! Il faut donc les fermer. Vous ne laisseriez pas la porte de votre appartement grande ouvert right ?

Pareil pour les services. S’ils ne sont pas utilisés, désactivez les. Vous pouvez aussi monter des firewalls, même si vous avez bien vu qu’on peut facilement déduire si un port est ouvert ou non.

Enfin la méthode la plus simple pour éviter tout dégâts c’est de mettre vos machines, serveurs et services à jour !

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s