Introduction au scan de ports
Formation
En Ligne
Avez-vous besoin d'un coach de formation?
Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.
Description
-
Typologie
Formation
-
Méthodologie
En ligne
Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.
Les Avis
Le programme
Vous avez peut-être entendu parler de scan de port. Mais peu de gens savent exactement de quoi il en retourne.
Nous allons essayer dans ce tutoriel de comprendre les notions techniques associées aux scans de ports (ports, protocoles TCP, UDP, etc.) pour pouvoir ensuite comprendre comment se déroule un scan de port et savoir s'en servir efficacement.
Vous devez avoir des connaissances de base en réseau pour suivre ce tutoriel, notamment sur le protocole IP ou les protocoles TCP et UDP.
Je vous conseille d'être sous linux pour suivre ce tutoriel, même s'il est possible de mettre en œuvre la plupart des commandes utilisées sous windows. Les exemples donnés seront cependant effectués sous linux debian etch, en tant que root. Si vous avez peur de faire des bêtises avec root, ne les faites pas, mais lancer ces commandes avec un utilisateur quelconque ne vous servira pas à grand chose car seul root a les droits nécessaires pour la plupart des commandes utilisées.
Le scan de ports c'est quoi ?Heu... déjà, un port c'est quoi ?Un port est l'adresse d'une application sur une machine.
Par exemple, si j'installe et que je mets en marche un serveur web sur ma machine, le port 80 sera ouvert et permettra à des personnes de se connecter sur mon port 80 pour y voir mon site web. 80 sera l'adresse de mon application web.
Quand vous taperez le nom d'un site à joindre dans votre navigateur, celui-ci va automatiquement interroger le port 80 du serveur demandé.
Par défaut, la plupart des machines, qu'elles fonctionnent en tant que serveur ou client, ont des ports ouverts.
Comment voir les ports ouverts sur ma machine ?Il y a différentes façons, la plus simple étant de se mettre en ligne de commande. La commande est netstat. Mais elle doit être utilisée avec certaines options pour être lisible.
Par exemple:
# netstat -anOu mieux pour avoir des détails sur le PID, l'utilisateur et le processus:
# netstat -anpeOu pour seulement les ports TCP:
# netstat -antpConnexions Internet actives (serveurs et établies) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat User Inode PID/Program name tcp 0 0 0.0.0.0:1984 0.0.0.0:* LISTEN 106 6592 2313/hobbitd tcp 0 0 127.0.0.1:8833 0.0.0.0:* LISTEN 0 9802515 18481/python2.5 tcp 0 0 0.0.0.0:7009 0.0.0.0:* LISTEN 1004 8547414 17710/nxagent tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 108 9968900 7103/mysqld tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 0 9967684 6778/memcached tcp 0 0 127.0.0.1:654 0.0.0.0:* LISTEN 0 5963 2174/famd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 0 4547 1587/portmap tcp 0 0 0.0.0.0:113 0.0.0.0:* LISTEN 0 5581 2075/inetd tcp 0 0 0.0.0.0:39185 0.0.0.0:* LISTEN 0 4594 1598/rpc.statd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 7374 2482/sshd tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 0 5717 2143/master tcp 0 0 127.0.0.1:8833 127.0.0.1:40104 ESTABLISHED 0 9839967 18481/python2.5 tcp 0 0 127.0.0.1:47475 127.0.0.1:1984 TIME_WAIT 0 0 - tcp 0 0 127.0.0.1:22 127.0.0.1:59487 ESTABLISHED 0 8547256 17668/sshd: elalitt tcp 0 0 127.0.0.1:59487 127.0.0.1:22 ESTABLISHED 113 8547255 17667/nxssh tcp 0 0 127.0.0.1:40104 127.0.0.1:8833 ESTABLISHED 0 9839966 23013/python2.5 tcp 0 0 127.0.0.1:47476 127.0.0.1:1984 TIME_WAIT 0 0 - tcp 0 304 10.8.98.235:22 86.64.78.254:43580 ESTABLISHED 0 13183450 9490/0 tcp6 0 0 :::7009 :::* LISTEN 1004 8547413 17710/nxagent tcp6 0 0 :::139 :::* LISTEN 0 5914 2159/smbd tcp6 0 0 :::80 :::* LISTEN 0 6521 2298/apache2 tcp6 0 0 :::22 :::* LISTEN 0 7372 2482/sshd tcp6 0 0 :::445 :::* LISTEN 0 5912 2159/smbd tcp6 0 0 10.8.98.235:80 217.167.139.210:57864 TIME_WAIT 0 0 - udp 0 0 10.8.98.235:137 0.0.0.0:* 0 7247 2157/nmbd udp 0 0 0.0.0.0:137 0.0.0.0:* 0 5874 2157/nmbd udp 0 0 10.8.98.235:138 0.0.0.0:* 0 7248 2157/nmbd udp 0 0 0.0.0.0:138 0.0.0.0:* 0 5875 2157/nmbd udp 0 0 0.0.0.0:926 0.0.0.0:* 0 4575 1598/rpc.statd udp 0 0 127.0.0.1:161 0.0.0.0:* 0 6087 2170/snmpd udp 0 0 0.0.0.0:68 0.0.0.0:* 0 4905 2439/dhclient3 udp 0 0 0.0.0.0:35693 0.0.0.0:* 0 4591 1598/rpc.statd udp 0 0 0.0.0.0:111 0.0.0.0:* 0 4541 1587/portmap udp 0 0 10.8.98.235:123 0.0.0.0:* 0 8371469 32456/ntpd udp 0 0 127.0.0.1:123 0.0.0.0:* 0 8371468 32456/ntpd udp 0 0 0.0.0.0:123 0.0.0.0:* 0 8371461 32456/ntpd udp6 0 0 fe80::208:2ff:fe3f::123 :::* 0 8371467 32456/ntpd udp6 0 0 ::1:123 :::* 0 8371466 32456/ntpd udp6 0 0 :::123 :::* 0 8371462 32456/ntpd Sockets du domaine UNIX actives(serveurs et établies) Proto RefCnt Flags Type State I-Node PID/Program name Chemin unix 2 [ ACC ] STREAM LISTENING 5996 2185/hald @/var/run/hald/dbus-UR5J4tXm98 unix 2 [ ACC ] STREAM LISTENING 8547689 17734/gnome-session /tmp/.ICE-unix/17734 unix 2 [ ACC ] STREAM LISTENING 5723 2143/master public/cleanup unix 2 [ ACC ] STREAM LISTENING 5730 2143/master private/tlsmgr unix 2 [ ACC ] STREAM LISTENING 5734 2143/master private/rewrite unix 2 [ ACC ] STREAM LISTENING 5738 2143/master private/bounceLa première partie nous donne les ports TCP ouverts, puis TCP sur IPv6, puis UDP, UDP sur IPv6. le reste ne nous intéressant pas.
Nous voyons donc que ma machine a un bon paquet de ports ouverts !
On peut d'ores et déjà remarquer la colonne Etat qui a des résultats différents pour nos différents ports. Mais que sont ces états ?
Que sont les états des connexions ?Quand vous utilisez le protocole TCP, chaque connexion doit être établie avant de pouvoir envoyer la moindre information. C'est comme quand vous utilisez le téléphone, vous ne parlez qu'après avoir dit Allo et avoir entendu votre correspondant vous répondre et que vous êtes sûr que la connexion est établie !
En TCP, c'est pareil ! TCP gère donc les états de la connexion. Nous n'allons pas rentrer dans les détails et allons nous concentrer sur deux états principaux, l'état LISTEN et l'état ESTABLISHED.
En état LISTEN, l'application est en écoute et en attente de requêtes de la part de clients sur Internet.
En état ESTABLISHED, l'application a établi la communication suite à une demande de requête et on considère donc la connexion comme établie.
Quand quelqu'un se connecte à un port (une application web sur un serveur par exemple) l'application va passer de l'état LISTEN à l'état ESTABLISHED.
Mais alors comment quelqu'un d'autre pourra se connecter en même temps ?
L'application va en fait se dupliquer !
Nous aurons une instance de l'application qui sera en état ESTABLISHED en cours de communication avec un client. Et une autre instance qui sera de nouveau en écoute en état LISTEN pour pouvoir recevoir de nouvelles connexions !
C'est ce que nous voyons ci-dessous (extrait du netstat précédent)
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 7374 2482/sshd tcp 0 304 10.8.98.235:22 86.64.78.254:43580 ESTABLISHED 0 13183450 9490/0La première ligne montre bien que le port 22 est en état LISTEN.
La seconde ligne montre qu'une connexion est établie en ce moment sur le port 22 entre la machine 86.64.78.254 et le serveur 10.8.98.235.
Nous voyons par ailleurs que la machine 86.64.78.254 écoute elle aussi sur le port 43580.
Quel est ce port bizarre ?
En fait, c'est le port choisi aléatoirement par le navigateur du client pour recevoir les réponses du serveur. Le client envoie ses requêtes sur le port 80 du serveur, et celui-ci lui répond sur le port aléatoire qu'il a choisi en initialisant la connexion.
Nous savons maintenant ce qu'est un port et nous avons vu que nos machine ont des ports ouverts.
Ceux qui sont en écoute car nous avons des services pour les autres (serveur web, serveur de messagerie, etc.)
Et ceux qui sont établis car nous sommes en train de communiquer avec une autre machine.
Donc revenons-en à nos moutons :
Qu'est-ce qu'un scan de port ?Un scan de port a pour objectif de m'indiquer quels sont les ports ouverts sur une machine.
Cette définition est cependant très vague, car qu'entendons-nous exactement par port ouvert ?
Un port ouvert est un port en état LISTEN s'il s'agit de TCP, ou simplement en écoute s'il s'agit d'UDP (UDP né gérant pas l'établissement de connexions).
Ainsi lors d'un scan de ports, nous ne verrons que les ports en état LISTEN. Ceux en état ESTABLISHED n'apparaîtront pas.
Et cela est normal puisque ces ports servent à une communication spécifique entre deux machines, une troisième machine n'a donc pas le droit d'entrer dans la conversation et de voir ces ports !
Maintenant que nous avons vu globalement ce qu'était un scan de ports, nous allons nous intéresser à son fonctionnement.
Comment fonctionne un scan de ports ?Pour comprendre comment fonctionne un scan de ports, nous allons d'abord devoir comprendre comment fonctionne une connexion, que ce soit en TCP ou UDP.
Fonctionnement d'une connexion en UDPImaginons que j'aie une application en écoute en UDP sur un port donné. Nous choisirons l'application DNS dans notre cas qui utilise le port UDP 53.
# netstat -anpe | grep tinydns udp 0 0 88.191.51.73:53 0.0.0.0:* 0 3421 2644/tinydnsNous voyons bien le port 53 en écoute.
Nous allons maintenant essayer d'interroger ce port en faisant une requête DNS vers notre service :
Et regardons ce qui s'est passé au niveau réseau :
# tcpdump -n -i eth0 udp and port 53...Avez-vous besoin d'un coach de formation?
Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.
Introduction au scan de ports