Dans ce labo, vous continuerez à appliquer les meilleures pratiques pour sécuriser un serveur web nginx sur serveurprof.com. Commencez par vous familiariser avec nginx en lisant ce court tutoriel.
Vous ĂȘtes prĂȘts? Allons-y! Pour ce labo, vous nâaurez pas besoin de machine virtuelle. Le serveur nginx est dĂ©jĂ installĂ© sur serveurprof.com et vous ferez toutes les manipulations directement sur le serveur. Vous pouvez ouvrir un terminal avec la combinaison des touches CTRL+ALT+T. Attention, il y aura des manipulations semblables Ă effectuer pour lâexamen pratique de la semaine 14 et vous n'aurez pas droit Ă Internet. Notez toutes vos manipulations et commandes et faites la remise sur Moodle. Assurez-vous de bien comprendre ce que vous faites.
Connectez-vous maintenant en SSH Ă serveurprof.com avec vos identifiants.
Tip
Pour faciliter votre travail, gardez trois onglets SSH ouverts. Un premier pour le processus actif du serveur, un deuxiÚme pour l'édition du fichier de config et finalement un troisiÚme pour les commandes du terminal.
Voici aussi un rappel des commandes disponibles pour contrĂŽler nginx dans le conteneur Podman :
Commande | Usage |
---|---|
nginx_start -p <no de port> | DĂ©marre ou redĂ©marre le serveur nginx sur le port de votre choix. Utilisez le mĂȘme port que dans votre configuration nginx, soit un port entre 1025 et 49151. Vous pouvez arrĂȘter le serveur avec les touches CTRL+C. |
nginx_reload | Recharge le serveur nginx aprĂšs une modification de la configuration. |
Dans votre répertoire utilisateur, vous trouverez les fichiers
login.html
et recherche.php
. Copiez ces
deux fichiers dans le répertoire public_html
.
Si vous obtenez un message dâerreur
403 Forbidden
lorsque vous ouvrez une
url, câest que vous devez modifier les permissions du rĂ©pertoire
public_html pour permettre la lecture et lâexĂ©cution du
répertoire et ses fichiers pour tout le monde.
Ouvrez la page suivante dans votre navigateur:
https://serveurprof.com:<no de port>/recherche.php
Le script PHP qui permet dâeffectuer une recherche nâest pas sĂ©curisĂ©. Ouvrez la page dans votre navigateur et effectuez une attaque XSS en injectant le script suivant dans le champ de recherche :
<script>alert("hacked!")</script>
Appuyez le bouton Rechercher et assurez-vous que la fenĂȘtre contextuelle d'alerte s'affiche bien.
De quel type dâattaque XSS sâagit-il?
Modifiez maintenant le fichier recherche.php
pour
que la requĂȘte soumise par lâutilisateur soit «nettoyĂ©e» avant
dâĂȘtre affichĂ©e. Pour se faire, utilisez la
fonction PHP htmlspecialchars()
et passez-lui en
paramĂštre la requĂȘte utilisateur, soit
$_GET['query']
.
Une fois les modifications effectuĂ©es, vĂ©rifiez qu'il n'est plus possible d'effectuer cette mĂȘme attaque.
Voyez-vous le gremlin maléfique en bas à droite de la page? Il est injecté par un script externe (sur un autre domaine).
Modifiez la configuration nginx pour que seuls les scripts
provenant du mĂȘme hĂŽte puissent ĂȘtre exĂ©cutĂ©s en modifiant le
Content Security Policy
que vous avez ajouté à l'étape
1. De cette façon, un attaquant ne pourra pas injecter un script
provenant dâun domaine autre que serveurprof.com.
Ouvrez maintenant la page de login dans votre navigateur :
https://serveurprof.com:<no de port>/login.html
Inspectez la source de la page en cliquant droit avec la souris et en sélectionnant Code Source de la page dans le menu contextuel. Regardez de plus prÚs le code html du formulaire de connexion.
Comment un attaquant récupÚre-t-il vos informations de login?
Modifiez la configuration du serveur pour que seuls les
iframe
provenant du mĂȘme domaine puissent ĂȘtre chargĂ©s.
Ajoutez la rĂšgle au Content Security Policy
créé Ă
l'étape 1. Si cela fonctionne, le formulaire ne devrait plus
s'afficher.
Caution
Bien qu'ils se ressemblent, les noms de domaine serveur.prof et serveurprof.com sont différents.
Lorsque votre serveur rĂ©pond Ă une requĂȘte HTTP, il expose la version de nginx installĂ©e sur le serveur. Cela donne des informations prĂ©cieuses Ă un Ă©ventuel attaquant. Il pourrait exploiter une faille de sĂ©curitĂ© connue dans la version de votre serveur, surtout si celui-ci n'a pas Ă©tĂ© mis Ă jour depuis un certain temps.
Dans un premier temps, identifiez la version de votre serveur nginx. Pour se faire, ouvrez l'URL suivant (n'importe quel URL valide de votre site fera l'affaire) :
https://serveurprof.com:<no de port>/
Cliquez droit avec la souris n'importe oĂč sur la page et
sélectionnez l'option Inspecter du menu déroulant. Cela
ouvrira les outils de développeur. Cliquez l'onglet Réseau.
Rechargez maintenant la page. Cliquez le premier élément affichant
/
comme fichier. Ă droite se trouve une fenĂȘtre donnant
les informations sur la requĂȘte effectuĂ©e. Trouvez les en-tĂȘtes de
réponse. L'étiquette Server:
expose la version de votre
serveur nginx.
Quelle est la version du serveur?
Vous devez maintenant trouver la bonne directive Ă ajouter Ă
votre configuration nginx afin de masquer la version du serveur. Une
fois que vous aurez effectué la modification et rechargé le serveur,
consultez à nouveau la page et trouvez l'étiquette
Server:
. Si vous avez réussi, la version de nginx ne
s'affiche plus.
Bravo! Vous avez terminé le labo!