Qu’est-ce que le port scanning ?
Les ports jouent un rôle majeur, car ils veillent à ce que les paquets de données parviennent à la destination souhaitée. Ils font office d‘interface entre les ordinateurs et les services ou programmes système, et sont utilisés par les protocoles réseau TCP et UDP. Grâce à l‘adresse IP, le système d‘exploitation peut savoir non seulement à quel ordinateur il envoie le flux de données, mais aussi à quel programme il doit transférer les paquets.
Qu’est-ce que le port scanning ?
Les systèmes d’exploitation utilisent les ports pour pouvoir transmettre les paquets de données entrants et sortants aux bonnes applications. Ainsi, les ports servent d’interface gérée par le système d’exploitation entre les programmes en cours et Internet. Pour qu’une application puisse communiquer via un port, celui-ci doit d’abord être ouvert, c’est-à-dire débloqué. Cela pose toutefois un problème : chaque port ouvert est un accès potentiel pour les pirates si l’application concernée présente des failles de sécurité. Pour minimiser le risque d’une attaque, vous devriez toujours garder un œil sur les ports ouverts sur votre système et sur les applications qui se cachent derrière.
Le terme port scanning (en français « balayage de ports ») désigne le processus devérification des ports ouverts sur un système informatique, à l’aide d‘outils spéciaux. Pour effectuer ce type d’analyse, il n’est pas nécessaire d‘être enregistré dans le système cible, mais seulement d‘y être connecté, par exemple via un réseau local ou Internet. À l‘aide du balayeur de ports, il est possible de tester l‘envoi de paquets de données précis aux différents ports, et de recevoir des réponses ou des messages d‘erreur que l‘outil analyse et évalue. Selon l‘étendue des fonctions du programme de numérisation utilisé, on obtient ainsi des informations sur les ports ouverts ou fermés, mais également sur les services ou applications qui utilisent les ports respectifs.
Le port scanning constitue un moyen très efficace pour les administrateurs système de surveiller le trafic sur un réseau et identifier les potentielles vulnérabilités. Dans certains cas, il permet également de résoudre des problèmes de réseau concrets. De plus, ces outils n’ont aucune influence perceptible sur la performance des systèmes examinés : ils peuvent donc être utilisés sans hésitation.
Le port scanning est également utile sur les ordinateurs personnels : dès que vous utilisez des applications qui nécessitent une connexion Internet, les ports sont automatiquement ouverts si votre pare-feu ne l’empêche pas. Un balayage de ports vous aide à garder une vue d’ensemble et vous montre les ports qui ne sont plus utilisés et que vous pouvez ensuite fermer afin de minimiser le risque de sécurité.
- Protection contre les attaques par ransomware
- Analyses antivirus régulières
- Sauvegardes automatiques et restaurations faciles
Comment fonctionne le port scanning ?
Les balayeurs de ports offrent différentes méthodes par défaut, dont la plupart sont basées sur le protocole TCP. Il est utile de jeter un coup d‘œil rapide à la configuration générale du protocole TCP afin de comprendre les processus de base lors du port scanning.
- Dans le cadre du processus de handshake à trois voies, le client envoie d‘abord un paquet SYN (pour synchroniser) au port cible correspondant.
- S‘il arrive à une application de cette façon, il récupère un paquet combiné SYN/ACK (synchronize acknowledge = « confirmer la synchronisation »), qui confirme la connexion.
- À la troisième et dernière étape, le client renvoie un paquet ACK (acknowledge = « confirmer »), qui permet d’établir la connexion et de commencer l‘échange de données.
- Si un port fermé est contacté, le client reçoit un paquet RST (reset = « réinitialiser ») à la deuxième étape, après laquelle le handshake est annulé.
Dans la mesure où il serait très complexe et coûteux d‘échanger des données avec les différentes applications, le port scanning se limite à de simples tentatives de connexion, telles que l’illustrent les méthodes de balayage communes présentées ci-dessous.
Scan TCP SYN
Le scan TCP SYN est souvent appelé « scan semi-ouvert » parce qu‘il ne vise pas à établir une connexion TCP complète. On utilise cette méthode avec le balayeur de ports pour envoyer des paquets SYN communs aux ports individuels en attendant la réponse de l‘hôte cible. S‘il renvoie un paquet SYN/ACK, il signale que le port correspondant est ouvert et qu‘une connexion peut être établie. Si la réponse consiste en un paquet RST, cela signifie que le port est fermé. S’il n’y a pas de réponse, il est probable qu’un filtre de paquets, tel qu‘un pare-feu, soit situé en amont.
Les scans TCP SYN ne sont pas visibles pour les applications analysées, et ne génèrent donc pas de données log, c‘est pourquoi ils sont également appelés « scans furtifs ».
Scan TCP Connect
Pour effectuer une analyse de connexion, il est conseillé d’utiliser son propre balayeur de ports, de ne pas envoyer ou générer soi-même les paquets de données, mais d’utiliser plutôt l‘appel système de connexion. Ceci est disponible sur la majorité des systèmes d‘exploitation. Un établissement de connexion réussi est considéré comme une confirmation que le port correspondant est ouvert. Si la connexion échoue, le port est marqué comme fermé. Les fichiers journaux des applications respectives avec ports ouverts montrent que cette méthode d‘analyse a été utilisée lorsque la connexion est complètement établie. Toutefois, il ne fournit aucune information sur les programmes de filtrage utilisés. Si vous ne disposez pas des droits pour envoyer des paquets de données brutes, l‘analyse TCP Connect reste une alternative utile à l’analyse SYN.
Les scans TCP-FIN, Xmas et Null
Ces trois méthodes de port scanning permettent également de distinguer les ports ouverts et fermés. Pour ce faire, on utilise deux principes de TCP qui sont mentionnés dans le RFC 793“) correspondant :
- Les paquets entrants qui ne sont pas des paquets RST doivent toujours répondre par un port fermé avec leur propre paquet RST
- Tous les paquets qui ne sont pas marqués comme SYN, RST ou ACK doivent être ignorés par un port ouvert.
Les trois types de scan exploitent cette situation lors du port scanning des systèmes conformes au RFC avec leurs paquets individuels :
- Le scan Null n’utilise pas de marquage spécifique.
- Le FIN Scan permet au balayeur de ports d’envoyer des paquets FIN (finish = « finir »).
- Les scans Xmas reposent sur une combinaison de marqueurs FIN, PSH (push = « faire avancer ») et URG (urgent), qui illuminent le scanneur tel un sapin de Noël, d’où son nom. Les trois méthodes d’analyse fonctionnent exactement de la même manière. Les paquets de test envoyés s’assurent qu’un port fermé réponde par un paquet RST, et qu’un port ouvert ne renvoie pas de réponse, à cause des réglementations RFC. Toutefois, puisque seuls quelques routeurs signalent un message d’erreur lors du filtrage d’un port, l’absence de réponse peut également indiquer qu’il s’agit d’un port filtré. Si les procédures sont encore plus discrètes que les scans SYN, elles présentent toutefois l‘inconvénient de ne pas fonctionner si les systèmes n‘adhèrent pas exactement à la RFC 793. Windows en est le représentant principal.
UDP-Scan
Un scan UDP envoie des en-têtes UDP vides, c’est-à-dire ne contenant aucune donnée, à tous les ports cibles. Lorsqu’un service répond à son tour par un paquet UDP, ceci confirme que le port en question est ouvert. Si le balayeur de port reçoit un message d‘erreur “port inaccessible” (type 3, code 3), ceci lui indique que le port est fermé. D‘autres messages d‘erreur peuvent indiquer que le port est bloqué par un filtre de paquets. L’inconvénient principal du test de port UDP réside dans les durées d’analyse très longues. En effet, pour des raisons de sécurité, les messages d‘erreur peuvent prendre beaucoup de temps sur de nombreux systèmes pour être générés, et les ports ouverts ne répondent que de façon très irrégulière. Par exemple, le noyau Linux limite le nombre de messages à un par seconde, ce qui implique environ 18 heures d‘analyse pour 65 535 ports.
Quels sont les balayeurs de ports disponibles ?
S’il existe des scanneurs relativement variés, présentant des fonctionnalités différentes, la plupart des outils disponibles sont freeware ou open source. Nombre d’entre eux sont des programmes de ligne de commande classiques, dont on peut également se servir via des interfaces utilisateur graphiques séparées. Par ailleurs, il existe sur le Web de nombreuses solutions permettant de scanner les ports directement depuis un navigateur. Ces services sont toutefois limités sur le plan fonctionnel, puisqu’ils ne permettent d’analyser les ports que de façon individuelle. C’est par exemple le cas du balayeur de ports de DNStools. C‘est la raison pour laquelle ils sont plus adaptés à une utilisation occasionnelle, comme des contrôles rapides à domicile.
Netcat, le plus ancien des outils réseau
Netcat (abrégé en NC) a été publié en 1996 par un développeur anonyme, sous le pseudonyme « Hobbit ». Écrit à l‘origine pour les plateformes UNIX, il existe maintenant diverses options de portage pour d‘autres systèmes comme Windows, et de nombreux développements telles que GNU Netcat, OpenBSD Netcat, Cryptcat ou Netcat6 (compatible avec IPv6), qui sont implémentées par défaut dans de nombreuses distributions Linux. La version de base de l‘outil en ligne de commande est principalement utilisée pour envoyer ou lire des données via les connexions réseau TCP et UDP, mais peut également être utilisée pour le port scanning simples. Par exemple, on peut utiliser une commande simple telle que :
nc -zv localhost 20-30
bashCeci permet de vérifier l‘état des ports 20 à 30 sur le système d‘exécution. L’analyse des ports UDP a besoin du paramètre additionnel -u. Il est également possible d’entrer les noms d’hôtes ou les adresses IP de systèmes externes à la place de localhost, si vous les connaissez.
Une analyse réseau illimitée avec Nmap
Network Mapper 1997, mieux connu sous le nom de Nmap, est un outil beaucoup plus puissant, qui convainc principalement grâce à sa fonction de balayeur de ports. Le programme, développé pour les systèmes unixoid, est publié sous licence GPL. Depuis 2000, il est également disponible pour les systèmes Windows, avec quelques limites toutefois. Par exemple, l‘analyse TCP Connect dure très longtemps, à cause de l‘API réseau Windows, et il n’est possible d’effectuer une analyse des ports système qu’en passant par des méthodes détournées. Par défaut, Nmap peut être exploité depuis la ligne de commande. Toutefois, avec Zenmap, il existe une interface utilisateur graphique puissante grâce à laquelle on peut utiliser l‘outil réseau de façon encore plus pratique.
L‘inventeur de Nmap, Gordon Lyon, ainsi que l‘équipe de développeurs de Nmap font constamment évoluer le programme et ses capacités de port scanning, ce qui explique la grande variété de fonctionnalités. Par exemple, des techniques comme l‘identification des empreintes digitales de l‘OS (la reconnaissance du système d‘exploitation d‘un hôte cible en particulier), et la lecture des services qui sont cachés derrière un port font de Nmap l‘une des solutions de port scanning les plus appréciées. Cette diversité se reflète également dans les méthodes d’analyse disponibles, résumées dans le tableau suivant :
Méthode de port scanning | Commande Nmap | Description |
---|---|---|
Scan TCP-Connect | nmap -sT Host | verification classique pour les non-administrateurs |
Scan TCP-Syn | nmap -sS Host | méthode de vérification discrète et rapide pour les administrateurs |
Scan TCP-FIN-/XMAS-/Null | nmap -sF Host nmap -sX Host nmap -sN Host |
méthode qui permet de contourner le spare-feu |
Scan TCP-Ping | nmap -sP Host | ce n’est pas une méthode de port scanning classique ; permet de vérifier l’accessibilité d’un hôte |
Scan TCP-ACK | nmap -sA Host | détecte les ports filtrés, mais ne permet pas de distinguer les ports ouverts des ports fermés |
Scan TCP-Window | nmap -sW Host | similaire au scan ACK ; peut vérifier individuellement chaque port ouvert ou fermé |
Scan TCP-Maimon | nmap -sM Host | combinaison des scans FIN et ACK |
Scan TCP-Idle | nmap -sI Zombie-Host Host | méthode de scan la plus discrète, la plus complexe et donc la plus lente ; passe par un troisième ordinateur, appelé « zombie » par Nmap |
Scan UDP | nmap -sU Host | méthode de scan des ports UDP sans connexion |
Scan SCTP-Init | nmap -sY Host | port scanning avec SCTP, une alternative à TCP et UDP |
Scan IP-Protokoll | nmap -sO Host | ce n’est pas un balayeur de ports ; permet de vérifier quels protocoles IP sont compatibles avec le système cible |
Il est possible de télécharger Nmap et l’interface Zenmap pour le moteur de recherche de votre choix, à partir de la page officielle. Il y a deux versions disponibles : la version actuelle (stable) et la version bêta (development), qui est en cours de développement.
Pourquoi le port scanning n’est-il pas toujours légal ?
Un contrôle des ports n‘est pas toujours effectué dans un cadre légal et à des fins honnêtes, et toute tentative d‘exploitation ultérieure des résultats est passible de poursuites judiciaires. Si l‘on effectue un balayage intensif des ports qui conduit à paralyser un système, la situation juridique est moins claire. En raison du grand nombre de demandes de connexion, la méthode de contrôle impose parfois une charge importante au système cible, ce qui peut provoquer un crash. Par ailleurs, les responsables du système cible peuvent s’apercevoir du contrôle en cours avant même le plantage, et l’interpréter comme les premières étapes d‘une cyberattaque. Dans ce cas, d’éventuelles conséquences juridiques ne peuvent être exclues. Si le système externe est délibérément surchargé, il s‘agit d‘attaques dites DoS ou DDoS qui sont largement passibles de poursuites pénales.
Par conséquent, il est essentiel de toujours s’assurer que l’on est autorisé à effectuer un scan de port sur le système concerné, et que l’on n’utilise cette technologie qu‘à des fins de sécurité, et non par seule curiosité ou à des fins malveillantes. Les différentes manières d‘utiliser le port scanning illustrent à quel point il est important de garder un œil sur les ports de son propre ordinateur système ou réseau, ainsi que sur les différents services qui y accèdent.