TP – Scanner, noter, prioriser, corriger, prouver
BTS SIO SISR 2e année – Bloc 3 – S13 – en binôme : un tape, l'autre lit ; on échange les rôles à chaque partie
Note
But. Réaliser un scan sur une cible de laboratoire, calculer des scores CVSS, prioriser les failles d'un rapport fictif (Atelier Verdier), puis corriger et prouver la correction par un nouveau scan.
Durée : 3 h 10. Prérequis : cours S13 lu ; S02 (échelles et dossier Atelier Verdier) ; S10.
Note
Comment ce TP fonctionne. Tu anticipes (« J'anticipe »), tu manipules, tu notes ce que tu constates, puis tu expliques (« Je comprends »). Un bilan de compétences clôt la séance.
Binôme : ____________ / ____________
Warning
Tu ne scannes que la cible du laboratoire, et seulement après avoir rempli l'autorisation de la partie A. Scanner une autre machine (celle d'un camarade hors laboratoire, le réseau de l'établissement, un site extérieur) est une infraction (séance S04, loi Godfrain).
Le laboratoire
Deux machines virtuelles Debian sur un réseau interne isolé, avec un compte sudo :
| Machine | Adresse | Rôle |
|---|---|---|
cible |
10.50.0.20 |
Serveur de laboratoire : SSH et un petit site web mal réglé |
scan |
10.50.0.10 |
Poste de l'auditeur : nmap, nikto |
Contraintes. Instantané des deux machines ; tu notes la sortie de chaque commande (capture datée).
Partie A – Cadrer le scan (≈ 20 min)
J'anticipe. Que peut-il se passer si tu scannes une machine sans prévenir son responsable ? ______________________
Remplis l'autorisation de scan (une par binôme, signée par l'enseignant qui joue le rôle du responsable) :
| Élément | À remplir |
|---|---|
| Périmètre (adresses) | |
| Dates et horaires | |
| Outils utilisés | |
| Ce qui est interdit (déni de service, exploitation, accès aux données) | |
| Contact en cas d'incident | |
| Signatures |
Je comprends. Pourquoi demande-t-on les horaires et un contact ? ______________________
Partie B – Préparer et scanner la cible (≈ 50 min)
B1 – Construire la cible
Sur cible :
sudo apt install -y nginx openssh-server
sudo rm -f /etc/nginx/sites-enabled/default
sudo mkdir -p /var/www/lab/backup
echo "<h1>Intranet de laboratoire</h1>" | sudo tee /var/www/lab/index.html
echo "db_password=Secret-Lab-1" | sudo tee /var/www/lab/backup/config.bak
sudo tee /etc/nginx/conf.d/lab13.conf <<'CONF'
server {
listen 80 default_server;
root /var/www/lab;
autoindex on;
}
CONF
sudo nginx -t && sudo systemctl restart nginx
Note
Le mot de passe de config.bak est fictif : le fichier représente une sauvegarde de configuration oubliée sur un serveur web, une erreur très fréquente.
B2 – Scanner
Sur scan :
nmap -sV -p 1-1000 10.50.0.20
nmap -p 80 --script http-enum 10.50.0.20
nmap -p 22 --script ssh2-enum-algos 10.50.0.20
nikto -h http://10.50.0.20
nmap -sV: liste les ports ouverts et devine les versions ;--script: lance des vérifications ciblées ;nikto: cherche des faiblesses web courantes.
J'anticipe. Avant de lire : quels ports seront ouverts ? Que pourrait trouver http-enum ? ______________________
Relève au moins quatre constats (en copiant la ligne du rapport) :
| # | Constat (ligne du rapport) | Outil | Faille de logiciel ou de configuration ? |
|---|---|---|---|
| 1 | |||
| 2 | |||
| 3 | |||
| 4 |
Je comprends. Un des constats est grave et ne porte aucune note CVSS dans le rapport. Lequel ? Pourquoi un scanneur ne l'a-t-il pas noté ? ______________________
Point de contrôle : captures des sorties de nmap -sV et de nikto.
Partie C – Calculer un score CVSS (≈ 35 min)
C1 – À la main
Pour chaque vecteur, devine la qualification (faible, moyenne, élevée, critique) avant tout calcul :
| Vecteur | Description | Ma qualification |
|---|---|---|
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N |
Un inconnu lit un fichier confidentiel par Internet | |
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
Un utilisateur du poste devient administrateur | |
AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N |
Un script s'exécute dans le navigateur d'un autre utilisateur |
C2 – Avec l'outil
Sur scan, crée cvss.py :
#!/usr/bin/env python3
# Calcul du score de base CVSS v3.1 : python3 cvss.py "AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
import sys, math
def arrondi(x): # arrondi au dixieme superieur
n = round(x * 100000)
return n / 100000.0 if n % 10000 == 0 else (math.floor(n / 10000) + 1) / 10.0
def score(vecteur):
m = dict(p.split(":") for p in vecteur.replace("CVSS:3.1/", "").split("/"))
av = {"N": 0.85, "A": 0.62, "L": 0.55, "P": 0.2}[m["AV"]]
ac = {"L": 0.77, "H": 0.44}[m["AC"]]
ch = m["S"] == "C"
pr = {"N": 0.85, "L": 0.68 if ch else 0.62, "H": 0.5 if ch else 0.27}[m["PR"]]
ui = {"N": 0.85, "R": 0.62}[m["UI"]]
imp = {"H": 0.56, "L": 0.22, "N": 0.0}
iss = 1 - (1 - imp[m["C"]]) * (1 - imp[m["I"]]) * (1 - imp[m["A"]])
impact = 7.52 * (iss - 0.029) - 3.25 * (iss - 0.02) ** 15 if ch else 6.42 * iss
expl = 8.22 * av * ac * pr * ui
if impact <= 0:
return 0.0
return arrondi(min(1.08 * (impact + expl), 10)) if ch else arrondi(min(impact + expl, 10))
if __name__ == "__main__":
print(score(sys.argv[1]))
python3 cvss.py "AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N"
python3 cvss.py "AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H"
python3 cvss.py "AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
| Vecteur | Score | Qualification | Ma devinette était-elle juste ? |
|---|---|---|---|
| 1 | |||
| 2 | |||
| 3 |
Je comprends. Choisis un critère (par exemple AV) et modifie-le dans un vecteur : de combien le score change-t-il ? Quel critère fait le plus varier la note ? ______________________
Partie D – Prioriser le rapport de l'Atelier Verdier (≈ 50 min)
Voici le résultat fictif d'un scan autorisé du réseau de l'Atelier Verdier (séance S02) : les notes sont calculées avec l'outil de la partie C ; les colonnes « exploitation » et « correctif » viennent d'une veille fictive.
| Id | Actif | Constat | Vecteur | Note | Exposition | Exploitation connue | Correctif |
|---|---|---|---|---|---|---|---|
| V01 | Box / accès distant | Bureau à distance (port 3389) ouvert sur Internet, mot de passe seul | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
9,8 | Internet | Oui (tentatives automatisées courantes) | Réglage |
| V02 | 3 PC de machines à commande numérique | Windows 7 en fin de support : exécution de code à distance | AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
8,1 | Réseau interne | Oui | Aucun (fin de support) |
| V03 | NAS de sauvegarde | Interface d'administration avec identifiants par défaut | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
9,8 | Réseau interne | Oui (trivial) | Réglage |
| V04 | Serveur de fichiers | Protocole SMBv1 activé : exécution de code à distance | AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
8,1 | Réseau interne | Oui | Réglage |
| V05 | 8 PC du bureau | Lecteur de PDF obsolète : exécution de code à l'ouverture d'un fichier | AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
7,8 | Réseau interne | Oui | Mise à jour |
| V06 | Serveur de fichiers | Élévation de privilèges locale | AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
7,8 | Réseau interne | Non connue | Mise à jour |
| V07 | Serveur de fichiers | Protocole de chiffrement ancien (TLS 1.0) accepté sur l'administration | AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N |
4,2 | Réseau interne | Non connue | Réglage |
| V08 | Imprimante réseau | Version du micrologiciel divulguée | AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N |
5,3 | Réseau interne | Non | Mise à jour |
J'anticipe. Sans calcul, quelles trois failles corrigerais-tu en premier ? ______________________
D1 – Priorité
Pour chaque ligne, attribue une priorité selon la règle du TP :
| Priorité | Critère |
|---|---|
| P1 | Exposée à Internet et exploitée ; ou exploitée et actif essentiel (sauvegarde, serveur de fichiers, machines de production) |
| P2 | Exploitée, actif non essentiel ; ou note ≥ 7 sur un actif essentiel |
| P3 | Non exploitée, note ≥ 4, avec un impact direct sur un actif |
| P4 | Le reste (simple divulgation d'information, note < 4) |
Note
Cette règle est propre au TP, pour s'exercer : chaque organisation écrit la sienne (séance S03).
| Id | Priorité | Justification en une ligne | Action | Délai |
|---|---|---|---|---|
| V01 | ||||
| V02 | ||||
| V03 | ||||
| V04 | ||||
| V05 | ||||
| V06 | ||||
| V07 | ||||
| V08 |
Délais de laboratoire, à adapter : P1 sous 48 heures, P2 sous 2 semaines, P3 sous 2 mois, P4 au fil de l'eau.
Je comprends.
- Deux failles ont la même note (9,8) mais pas la même urgence : lesquelles, et pourquoi ? ______________________
- La faille V02 n'a aucun correctif : quelle réponse proposes-tu, avec quelle séance du cours ? ______________________
- Une faille à 4,2 peut-elle passer avant une faille à 7,8 ? Dans quel cas ? ______________________
- Quelles sont les corrections rapides et gratuites (celles qui sont de simples réglages) à faire immédiatement ? ______________________
Partie E – Corriger et prouver (≈ 35 min)
Retour sur la cible de laboratoire. Parmi les constats de la partie B, corrige au moins trois points.
E1 – Les corrections
Sur cible :
# 1. Retirer le fichier de sauvegarde oublie
sudo rm -rf /var/www/lab/backup
# 2. Remplacer la configuration du site
sudo tee /etc/nginx/conf.d/lab13.conf <<'CONF'
server {
listen 80 default_server;
root /var/www/lab;
autoindex off;
server_tokens off;
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
}
CONF
sudo nginx -t && sudo systemctl restart nginx
Je comprends. Explique ce que corrige chaque ligne (rm, autoindex off, server_tokens off, chaque en-tête). Laquelle est indispensable et lesquelles sont du durcissement ? ______________________
E2 – Prouver
Sur scan, refais exactement les mêmes scans que la partie B :
| Constat de la partie B | Corrigé ? | Preuve (ligne du nouveau rapport) |
|---|---|---|
| 1 | ||
| 2 | ||
| 3 | ||
| 4 |
Je comprends. Un constat subsiste après correction (cherche dans la sortie de nikto) : lequel, et que décides-tu : le corriger, le compenser, ou accepter le risque ? ______________________
Point de contrôle : captures « avant » et « après » côte à côte.
Partie F – Rendre compte (≈ 20 min)
F1 – Tableau de bord
| Indicateur | Valeur |
|---|---|
| Failles du rapport Verdier par priorité (P1, P2, P3, P4) | |
| Failles qui exigent un réglage (rapide, gratuit) | |
| Failles sans correctif | |
| Failles de la cible de laboratoire : avant / après correction |
F2 – Note à la direction
Rédige dix lignes pour le dirigeant de l'Atelier Verdier (qui n'est pas informaticien) : les trois premières actions, ce qu'elles coûtent en temps (pas en euros), ce qu'on ne corrige pas tout de suite et pourquoi, et comment on vérifiera que c'est fait. N'utilise aucun sigle non expliqué.
Retour en entreprise (si ta situation le permet)
- Observer : ton entreprise scanne-t-elle ses machines ? Avec quel outil, à quelle fréquence, et qui lit le rapport ?
- Documenter : compare avec le cycle du cours.
Rendu
Compte rendu PDF, nommé RENDU-B3A2-S13-NOM.pdf, contenant l'autorisation de la partie A, les captures datées des parties B et E, les tableaux de C et D, et la note de F2.
Bilan de la séance
| Compétence du référentiel | Ce que j'ai fait dans cette séance | Niveau |
|---|---|---|
| B3.4 – Garantir la disponibilité, l'intégrité et la confidentialité des services informatiques et des données de l'organisation face à des cyberattaques | ||
| B3.5A – Assurer la cybersécurité d'une infrastructure réseau, d'un système, d'un service |
Note
Je sais faire, sans aide :
- Distinguer vulnérabilité, correctif, exposition et exploitation ;
- Lire un vecteur CVSS et en expliquer les limites ;
- Faire un scan autorisé et lire le résultat ;
- Prioriser avec plusieurs critères ;
- Prouver une correction par un nouveau scan.
Ce que je dois reprendre : ______________________