Aller au contenu principal

Comprendre un scan de ports : ce qu'un attaquant voit de votre serveur en premier

Avant de forcer une porte, on regarde quelles portes existent. Un attaquant fait la même chose avec un serveur : en quelques secondes, il sait ce qui répond, et à quoi.

Petite vérification​

Avant de commencer, vérifiez si vous savez encore réaliser ces 3 actions très simples, sur la séance précédente consacrée au pare-feu :

  1. citer la commande qui liste les ports TCP en écoute sur une machine Linux
  2. donner le code retour de curl --max-time 3 face à un port dont les paquets sont jetés par drop, puis face à un port refusé par reject
  3. donner le mot-clé de politique par défaut qui refuse tout ce qui n'est pas explicitement autorisé
📌 Réponse attendue

TP pour réfléchir et résoudre des problèmes​

Votre défi pour aujourd'hui consiste à balayer les ports d'un serveur comme le ferait un attaquant, à repérer ce qu'il révèle, puis à réduire ce qu'il peut voir

info

L'association « Les Jardins Partagés » et son serveur sont fictifs, construits pour l'exercice. Pour tout faire seul(e) sur une seule VM, vous scannez votre propre machine (127.0.0.1).

attention

Scanner les machines d'un tiers sans autorisation écrite peut être assimilé à une tentative d'intrusion (articles 323-1 et 323-7 du code pénal). Dans ce TP, la seule cible est votre propre VM (127.0.0.1). N'indiquez jamais une autre adresse.

L'association « Les Jardins Partagés » héberge un site web sur un petit serveur Linux. Le bénévole qui l'administre vous dit : « Je n'ai installé que le site et une interface d'administration, il n'y a rien d'autre. » Vous allez vérifier cette affirmation de l'extérieur, comme le ferait un attaquant.

Étape 1 — Préparer le serveur de l'association​

Dans le terminal de votre VM Debian, installez les outils et créez les dossiers de travail :

sudo apt install nmap curl nftables
mkdir -p ~/tp-scan/site ~/tp-scan/admin ~/tp-scan/export
cd ~/tp-scan
echo "Site public des Jardins Partages" > site/index.html
echo "Interface d'administration" > admin/index.html
printf 'nom;prenom;email\nDurand;Alice;alice@exemple.example\nMartin;Hugo;hugo@exemple.example\n' > export/adherents_2025.csv

Lancez les services du serveur. Le troisième a été démarré un jour pour « partager rapidement un fichier » et jamais arrêté ; le bénévole ne s'en souvient plus :

python3 -m http.server 8080 --bind 127.0.0.1 --directory site &
python3 -m http.server 8081 --bind 127.0.0.1 --directory admin &
python3 -m http.server 8090 --bind 127.0.0.1 --directory export &

Rien à rendre pour cette étape : passez à la suivante sans consulter l'état des services. Vous jouez l'attaquant, qui ne connaît pas la configuration du serveur.

Étape 2 — Premier balayage​

Scannez une plage de ports autour des ports habituels des services web :

nmap -p 8070-8100 127.0.0.1
  1. Combien de ports sont ouverts, et lesquels ?
  2. Que signifie la ligne Not shown: ... closed tcp ports (reset) ?
  3. L'affirmation du bénévole (« il n'y a que le site et l'administration ») est-elle exacte ?
📌 Réponse attendue

Étape 3 — Identifier ce qui répond​

La colonne SERVICE de l'étape précédente est une supposition, déduite du numéro de port. Demandez à nmap de dialoguer avec chaque service pour l'identifier réellement :

nmap -sV -p 8080,8081,8090 127.0.0.1
  1. Quel service et quelle version nmap identifie-t-il sur chacun des trois ports ?
  2. En quoi les noms affichés à l'étape 2 (http-proxy, blackice-icecap...) étaient-ils trompeurs ?
  3. Pourquoi cette information (nom et version) intéresse-t-elle un attaquant ?
📌 Réponse attendue

Étape 4 — Regarder derrière le port oublié​

L'attaquant se demande ce que contient le port 8090. Interrogez-le comme un navigateur le ferait :

curl -s http://127.0.0.1:8090/
curl -s http://127.0.0.1:8090/adherents_2025.csv
  1. Que trouve-t-on sur ce port ?
  2. De quel type de données s'agit-il, et que pourrait en faire un attaquant ?
  3. Quelles obligations cette découverte déclenche-t-elle pour l'association ?
📌 Réponse attendue

Étape 5 — Poser un pare-feu et scanner à nouveau​

Le bénévole protège l'interface d'administration avec un filtre (comme dans la séance précédente), puis vous rescannez :

sudo nft add table inet filtre_tp
sudo nft add chain inet filtre_tp entrant '{ type filter hook input priority 0 ; policy accept ; }'
sudo nft add rule inet filtre_tp entrant tcp dport 8081 drop
nmap -p 8070-8100 127.0.0.1
  1. Quel état nmap affiche-t-il pour le port 8081 ?
  2. Que peut en déduire l'attaquant, et que ne peut-il pas savoir ?
  3. Le port 8090 est-il protégé ?
📌 Réponse attendue

Étape 6 — Réduire ce que l'attaquant voit​

Le meilleur moyen de protéger un service inutile est de ne plus l'offrir. Arrêtez le service oublié, puis rescannez :

pkill -f "http.server 8090"
nmap -p 8070-8100 127.0.0.1

Quand vous avez terminé, nettoyez :

sudo nft delete table inet filtre_tp
pkill -f "http.server"
  1. Que voit désormais l'attaquant sur le port 8090 ?
  2. Pourquoi arrêter le service est-il préférable à le filtrer seulement ?
📌 Réponse attendue

Étape 7 — Conseiller l'association​

Le bénévole vous demande : « Comment éviter que cela se reproduise ? Et comment savoir ce que voit un attaquant, régulièrement ? » Que lui répondez-vous ?


Restitution orale​

Un étudiant (ou un binôme) vient présenter à la classe ce que le scan a révélé sur le serveur (étapes 2 à 4) et les mesures proposées à l'association (étapes 5 à 7).

  • Durée : 5 minutes de présentation + 2 à 3 minutes de questions.
  • Qui passe : un(e) étudiant(e) (ou un binôme) désigné(e) par l'enseignant.
  • Support : le travail réalisé pendant le TP, aucune préparation supplémentaire n'est nécessaire.
  • Ce qui est attendu :
    • rappeler le contexte (le serveur de l'association et l'affirmation du bénévole) ;
    • présenter la démarche suivie (balayage, identification, exploration) et les mesures proposées ;
    • répondre aux questions de la classe.
astuce

Cet exercice entraîne à l'oral technique court exigé par plusieurs épreuves du BTS (notamment E5 et E6) : clarté, structure, capacité à répondre à l'improviste.

📌 Une solution

Notions théoriques​

Vous venez de voir votre serveur depuis l'extérieur. Voyons ce qu'est un scan de ports, ce qu'il renvoie, et pourquoi il vient presque toujours en premier.

Qu'est-ce qu'un scan de ports ?​

Un port est une « porte numérotée » par laquelle un service d'une machine reçoit des connexions (22 pour SSH, 80 pour le web, 443 pour le web chiffré...). Un scan de ports consiste à tester une série de ports sur une machine pour savoir lesquels répondent. C'est la reconnaissance, la première étape de la plupart des attaques : on cartographie avant d'attaquer.

L'outil de référence est nmap, qui est aussi utilisé par les administrateurs pour contrôler leurs propres machines. L'outil n'est ni légal ni illégal en soi : c'est le but et l'autorisation qui comptent.

attention

Scanner un système sans autorisation peut être considéré comme une tentative d'accès frauduleux (articles 323-1 et 323-7 du code pénal). Un administrateur ne scanne que son propre périmètre, ou celui d'un client qui l'a autorisé par écrit.

Les états d'un port​

ÉtatCe que nmap a reçuCe que cela signifie
openUne réponse positiveUn service écoute et accepte les connexions
closedUn refus explicitePersonne n'écoute, mais la machine répond
filteredAucune réponse (ou une réponse d'un filtre)Un pare-feu bloque : on ne sait pas si un service écoute

Un port filtered ne dit pas qu'il n'y a rien : il dit que quelque chose a décidé de ne pas répondre. C'est pourquoi drop est souvent préféré à reject face à un scan : il ralentit l'attaquant et ne lui confirme rien.

Ce que révèle un scan​

InformationComment elle est obtenueIntérêt pour l'attaquant
Les ports ouvertsTest de connexion sur chaque portQuels services attaquer
Le nom du serviceTable des ports usuels (supposition), ou dialogue avec le serviceChoisir la technique adaptée
La version du logicielOption -sV : le service se présente lui-même (bannière)Chercher des failles connues pour cette version
Le système d'exploitationAnalyse du comportement réseau (option -O, droits administrateur)Adapter l'attaque
info

Une bannière est le message par lequel un service décline son identité à la connexion (« SimpleHTTPServer 0.6 »). On peut souvent la masquer ou la raccourcir dans la configuration du service, ce qui réduit ce que révèle le scan.

La surface d'attaque​

La surface d'attaque d'un système est l'ensemble des points par lesquels un attaquant peut tenter d'entrer : ports ouverts, services, comptes, applications web, versions vulnérables. Un scan en donne une image.

LevierActionEffet
SupprimerArrêter et désinstaller ce qui est inutileLa cible n'existe plus
FiltrerPare-feu avec politique par défaut dropLa cible n'est plus joignable
MasquerLimiter les bannièresMoins d'informations pour choisir l'attaque
CorrigerMettre à jour les logicielsLa faille connue n'existe plus

L'ordre est important : on supprime d'abord, on filtre ensuite, on corrige ce qui doit rester exposé.

Pour aller plus loin

Cette séance a montré que la version d'un logiciel est une information précieuse. Les failles connues y sont répertoriées dans des identifiants publics, les CVE : c'est ce qui rend les mises à jour si importantes.


Test de mémorisation/compréhension​


À quoi sert un scan de ports pour un attaquant ?


Que signifie l'état « open » affiché par nmap pour un port ?


Que signifie l'état « filtered » affiché par nmap pour un port ?


Que permet l'option -sV de nmap, et pourquoi intéresse-t-elle un attaquant ?


Qu'appelle-t-on la surface d'attaque d'un système ?


Un service inutile écoute sur un serveur. Quelle est la meilleure façon de protéger l'organisation ?


Un administrateur scanne les machines d'une autre entreprise, sans autorisation, « juste pour voir ». Que peut-on en dire ?



Bonnes pratiques​

  • Savoir ce qu'on expose : tenir à jour la liste des services et des ports ouverts de chaque serveur.
  • Arrêter et désinstaller ce qui ne sert plus, plutôt que de le laisser tourner « au cas où ».
  • Filtrer par défaut : politique drop au pare-feu, et ouvrir seulement les ports utiles.
  • Se scanner soi-même régulièrement, depuis l'extérieur, et expliquer chaque écart avec l'inventaire.
  • Réduire les bannières et tenir les logiciels à jour : une version visible n'est un problème que si elle est vulnérable.
  • Ne jamais scanner sans autorisation écrite : seule votre propre VM, ou une cible désignée par l'organisation, est un terrain légitime.