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 :
- citer la commande qui liste les ports TCP en écoute sur une machine Linux
- donner le code retour de
curl --max-time 3face à un port dont les paquets sont jetés pardrop, puis face à un port refusé parreject - 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
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).
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
- Combien de ports sont ouverts, et lesquels ?
- Que signifie la ligne
Not shown: ... closed tcp ports (reset)? - 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
- Quel service et quelle version nmap identifie-t-il sur chacun des trois ports ?
- En quoi les noms affichés à l'étape 2 (
http-proxy,blackice-icecap...) étaient-ils trompeurs ? - 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
- Que trouve-t-on sur ce port ?
- De quel type de données s'agit-il, et que pourrait en faire un attaquant ?
- 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
- Quel état nmap affiche-t-il pour le port
8081? - Que peut en déduire l'attaquant, et que ne peut-il pas savoir ?
- Le port
8090est-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"
- Que voit désormais l'attaquant sur le port
8090? - 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.
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.
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
| État | Ce que nmap a reçu | Ce que cela signifie |
|---|---|---|
| open | Une réponse positive | Un service écoute et accepte les connexions |
| closed | Un refus explicite | Personne n'écoute, mais la machine répond |
| filtered | Aucune 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
| Information | Comment elle est obtenue | Intérêt pour l'attaquant |
|---|---|---|
| Les ports ouverts | Test de connexion sur chaque port | Quels services attaquer |
| Le nom du service | Table des ports usuels (supposition), ou dialogue avec le service | Choisir la technique adaptée |
| La version du logiciel | Option -sV : le service se présente lui-même (bannière) | Chercher des failles connues pour cette version |
| Le système d'exploitation | Analyse du comportement réseau (option -O, droits administrateur) | Adapter l'attaque |
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.
| Levier | Action | Effet |
|---|---|---|
| Supprimer | Arrêter et désinstaller ce qui est inutile | La cible n'existe plus |
| Filtrer | Pare-feu avec politique par défaut drop | La cible n'est plus joignable |
| Masquer | Limiter les bannières | Moins d'informations pour choisir l'attaque |
| Corriger | Mettre à jour les logiciels | La faille connue n'existe plus |
L'ordre est important : on supprime d'abord, on filtre ensuite, on corrige ce qui doit rester exposé.
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
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
dropau 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.