Introduction au scan de ports

Formation

En Ligne

Prix sur demande

Appeler le centre

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.

Questions / Réponses

Ajoutez votre question

Nos conseillers et autres utilisateurs pourront vous répondre

À qui souhaitez-vous addresser votre question?

Saisissez vos coordonnées pour recevoir une réponse

Nous ne publierons que votre nom et votre question

Les Avis

Le programme

Introduction du cours

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.

Introduction au scan de portsPré-requis

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 -an

Ou mieux pour avoir des détails sur le PID, l'utilisateur et le processus:

# netstat -anpe

Ou pour seulement les ports TCP:

# netstat -antp

Connexions 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/bounce

La 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/0

La 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 UDP

Imaginons 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/tinydns

Nous voyons bien le port 53 en écoute.
Nous allons maintenant essayer d'interroger ce port en faisant une requête DNS vers notre service :

# dig @88.191.51.73 www.itinet.fr ; <<>> DiG 9.3.4 <<>> @88.191.51.73 www.itinet.fr ; (1 server found) ;; global options:  printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61052 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3 ;; QUESTION SECTION: ;www.itinet.fr.                        IN        A ;; ANSWER SECTION: www.itinet.fr.                86400        IN        A        88.191.51.73 ;; AUTHORITY SECTION: itinet.fr.                259200        IN        NS        sd-8131.dedibox.fr. itinet.fr.                259200        IN        NS        sd-6555.dedibox.fr. ;; ADDITIONAL SECTION: sd-8131.dedibox.fr.        259200        IN        A        88.191.51.73 sd-8131.dedibox.fr.        259200        IN        A        88.191.51.73 sd-6555.dedibox.fr.        259200        IN        A        88.191.45.68 ;; Query time: 2 msec ;; SERVER: 88.191.51.73#53(88.191.51.73) ;; WHEN: Wed Dec 23 14:06:25 2009 ;; MSG SIZE  rcvd: 147

Et regardons ce qui s'est passé au niveau réseau :

# tcpdump -n -i eth0 udp and port 53...

Appeler le centre

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

Prix sur demande