Le site d'un garage qui en dit trop
Le site d'un garage fonctionne très bien. Pourtant, il annonce à chaque visiteur la version exacte du logiciel qui le fait tourner. Il liste tous les fichiers d'un dossier de tarifs. Il sert même une vieille sauvegarde d'un fichier de réglages.
Personne ne l'a attaqué. On ne lui a simplement jamais demandé d'en dire moins.
La règle unique
Attention
Ce laboratoire est un serveur web volontairement fragile. Travaillez sur votre copie privée, et rien d'autre : elle n'a aucune sortie vers Internet. Sonder un serveur qui n'est pas le vôtre, ou sans permission de test, est un délit dans presque tous les pays.
À la fin de cette leçon
Remarque
Je peux dire ce qu'un serveur web doit cacher et ce qu'il doit refuser.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Durcissement | régler un système pour qu'il en dise et en permette moins | |
| En-tête | une ligne au début d'une réponse qui dit au navigateur comment la traiter | Server: nginx |
| Liste de dossier | une page qui énumère tous les fichiers d'un dossier | |
| TLS | le système qui chiffre les échanges entre un navigateur et un site | |
| Certificat | un fichier signé qui prouve qu'un site est bien celui qu'il annonce | |
| HSTS | un en-tête qui demande aux navigateurs de n'utiliser que l'adresse sécurisée |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un serveur doit en dire moins
Chaque mot de trop aide un attaquant. Un numéro de version lui dit quelles failles connues essayer. Une liste de dossier lui montre des fichiers que personne ne voulait publier.
Durcir, c'est retirer le superflu. Il faut ôter la version dans l'en-tête Server, les listes de dossiers, les sauvegardes et fichiers de réglages, et toute zone d'administration ouverte à tous.
Regardez le serveur de votre laboratoire
Votre laboratoire fait tourner le petit site d'un garage sous nginx. Démarrez-le, puis lancez ces quatre commandes. Elles ne font que lire.
La première montre la ligne d'état. La deuxième montre l'en-tête Server. La troisième compte un en-tête de sécurité. La quatrième lit la page d'un dossier.
La ligne d'état
curl -s -I http://web | head -n 1Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
L'en-tête Server
curl -s -I http://web | grep -i "^server"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Combien d'en-têtes X-Frame-Options ?
curl -s -I http://web | grep -ci "x-frame-options"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Le titre d'une page de dossier
curl -s http://web/files/ | grep -o "Index of [a-z/]*"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Exemple travaillé : lire les quatre réponses
| Commande | Affiche | Ce que cela veut dire |
|---|---|---|
| Ligne d'état | HTTP/1.1 200 OK | Le site répond |
| En-tête Server | Server: nginx/1.27.5 | Il donne sa version exacte à tout le monde |
| X-Frame-Options | 0 | Cet en-tête protecteur n'est pas envoyé du tout |
| Page de dossier | Index of /files/, deux fois | Le serveur liste un dossier au lieu de refuser : une fois dans le titre, une fois dans l'intitulé |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Des en-têtes qui guident le navigateur
Quelques en-têtes ne coûtent rien et ferment des familles entières de problèmes. X-Content-Type-Options: nosniff empêche le navigateur de deviner le type d'un fichier. X-Frame-Options empêche d'autres sites d'afficher votre page dans un cadre.
Content-Security-Policy limite les scripts permis. Referrer-Policy limite l'adresse transmise aux autres sites.
Une erreur fréquente
Attention
Beaucoup pensent que cacher le numéro de version rend un serveur sûr. Cela ne cache qu'un indice. Un vieux serveur dont la faille est connue reste faible. Cachez l'indice, mais tenez aussi le logiciel à jour et retirez ce qui ne sert pas.
Les échanges doivent être chiffrés en TLS récent
TLS a des versions. SSL 3, TLS 1.0 et TLS 1.1 sont anciens et ne sont plus sûrs. N'autorisez que TLS 1.2 et 1.3.
Une bonne configuration a aussi un certificat de confiance, non expiré. Elle renvoie l'adresse non sécurisée vers l'adresse sécurisée. Elle envoie HSTS pour que les navigateurs s'en souviennent.
Exposer le moins possible
Ne servez que les fichiers dont le site a besoin. Gardez les sauvegardes, les dossiers de gestion de versions et les fichiers de réglages hors du dossier web. Mettez la zone d'administration derrière une connexion ou une limite de réseau.
Chaque chose retirée est une chose de moins à protéger.