Webserver-Härtungslab: eine schwache nginx-Konfiguration reparieren und mit curl prüfen

Dieses Lab gibt jeder lernenden Person eine kleine Website, die von nginx mit einer Konfiguration ausgeliefert wird, die mit Absicht schwach ist. Sie zeigt ihre Versionsnummer, listet ihre Ordner auf, sendet keine Sicherheits-Header und gibt einen .git-Ordner, eine Backup-Datei und einen offenen Admin-Bereich preis. Die lernende Person sieht sie sich mit curl an, repariert die Konfiguration im laufenden Container, lädt nginx neu und sieht zu, wie jede Prüfung von FAIL auf PASS wechselt.

Das Lab haben wir allein auf Basis des öffentlichen nginx-Images entworfen, es gibt also keine verwundbare Anwendung anzugreifen: nur einen Server, der sicherer gemacht werden soll. Die Lab-Kopie hat keine Verbindung zum Internet und keine zu anderen Lernenden.

Was Lernende hier lernen

Was ein Webserver Besuchenden ungefragt verrät: seine genaue Version, die Dateien in einem Ordner, Dateien, die niemand veröffentlichen wollte. Sie lesen Antwort-Header mit curl -I, fügen die vier gängigen Sicherheits-Header hinzu, schalten die Ordnerauflistung und die Versionsnummer ab, verweigern einen .git-Ordner und eine Backup-Datei und schließen einen Admin-Bereich für Besuchende. Außerdem üben sie, eine Konfiguration mit nginx -t zu testen, mit nginx -s reload zu laden und das Ergebnis mit einem Werkzeug zu prüfen. Das Lab passt zu Einheiten über sichere Konfiguration und Systemadministration; prüfen Sie den genauen Wortlaut in der Einheit Ihrer eigenen Prüfungsorganisation.

Im Browser ausführen

Die Website ist der Dienst namens web, und das Terminal des Labs erreicht ihn unter diesem Namen. Ein docker-Befehl im Terminal kann den Dienst des Labs ansehen, betreten, neu starten und dessen Logs lesen: Er kann nichts erstellen, herunterladen oder entfernen. Der Konfigurationsordner ist ein benanntes Volume, sodass das, was die lernende Person speichert, nach dem Stoppen und erneuten Starten des Labs noch da ist.

  1. Container-Seite öffnen. Wählen Sie in der Leiste „Entwickeln“ und dann „Einen Container ausführen“. Die Seite kann jeder öffnen, und das Git-Lab und das SQL-Lab starten ohne Konto. Jedes andere Lab braucht ein kostenloses Konto: Erstellen Sie eines, melden Sie sich an und wählen Sie dann „Starten“.
  2. Lab finden. Die Karte „Beispiel-Labs“ listet alle Beispiele auf. Suchen Sie „Einen Webserver härten (nginx)“.
  3. „Starten“ wählen. „Starten“ führt das Lab unverändert mit einem Klick aus. „Zuerst die Datei bearbeiten“ öffnet die Compose-Datei, damit Sie sie vor dem Start ändern können.
  4. Öffnen. Öffnen Sie auf der Seite des Labs das Terminal neben dem Lab. Führen Sie curl -I http://web aus, um die Header zu sehen, und docker exec web lab-check, um neun PASS- oder FAIL-Zeilen zu sehen. Dann öffnet docker exec -it web sh eine Shell im Server: Bearbeiten Sie /etc/nginx/conf.d/default.conf, testen Sie sie mit nginx -t und laden Sie sie mit nginx -s reload. Der Link des Labs, The bakery’s website, öffnet die Website in einem Tab.

Was Lernende abgeben sollten

Die Ausgabe von curl -I http://web vorher und nachher sowie von docker exec web lab-check am Ende, sodass die Änderung im eigenen Terminal der lernenden Person sichtbar ist. Zu jeder Reparatur ein Satz in eigenen Worten, was die Schwachstelle einer angreifenden Person geboten hat und was die Einstellung bewirkt. Die Prüfung sagt, ob sich der Server richtig verhält; nur die Erklärung sagt, ob es verstanden wurde. Für anspruchsvollere Arbeiten verlangen Sie die gesamte Konfigurationsdatei.

Die Prüfung gehört zum Lab: lab-check fragt den laufenden Server, es meldet also, was nginx tut, und nicht, was eine Datei sagt, und es endet nur dann erfolgreich, wenn alle neun Zeilen bestehen. Die README des Repositorys nennt außerdem zu jeder Reparatur ein curl in einer Zeile, um von überall zu prüfen. Nichts wird automatisch bewertet.

Eine Grundlagenlektion zu diesem Lab

Web Server Hardening Basics ist eine kleine Lektion, die in diesem Lab durchgearbeitet wird, wobei jeder Schritt erklärt wird und eine Schaltfläche „Ausführen“ seinen Befehl im Terminal der lernenden Person eintippt. Sie sieht sich die Header und eine Ordnerauflistung an, führt die Prüfung aus, behebt die Versionsnummer mit einem Befehl, lädt nginx neu und prüft erneut. Die übrigen Reparaturen bleiben der lernenden Person überlassen.

Ein kostenloses persönliches Konto erhält sie im Modul „Basics“ auf der Startseite, jede Einrichtung kann sie aus dem Ordner „Basics“ der Bibliothek kopieren, und eine neue Einrichtung startet mit ihr in einem Modul namens Lab Basics (Sample). Sie ist bewusst klein: Sie zeigt einer Lehrkraft, was eine in einem Lab durchgearbeitete Lektion ist, und das Lab erledigt den Rest. Kopieren Sie sie in ein eigenes Modul, um sie zu ändern.

Der Code auf GitHub

Die Compose-Datei führt das eigene öffentliche Image von nginx, auf eine Version festgelegt, als einzigen Dienst aus und schreibt beim Start die Website und die schwache Konfiguration. nginx steht unter BSD-2-Clause und wird von uns nicht verteilt. Der Test des Repositorys spielt eine lernende Person Reparatur für Reparatur durch das Lab, unter denselben Grenzen, die die Plattform anwendet. Nichts, worauf die Website außerhalb ihrer selbst verlinkt, kann abgerufen werden, denn das Lab hat keinen Weg ins Internet.

Als Arbeit stellen

Beschreiben Sie in der Aufgabe, welche Reparaturen vorzunehmen sind und was abzugeben ist.

  1. Lab erstellen. Fügen Sie in Ihrem Modul eine Aufgabe hinzu und wählen Sie die Karte „Container-Lab“, dann „In einem GitHub-Repository“. Geben Sie https://github.com/mitsurutech/lab-harden-nginx mit dem Branch main an. Die Compose-Datei ist standardmäßig compose.yaml. Forken Sie das Repository zuerst, wenn Sie sie ändern möchten.
  2. Veröffentlichen und ausprobieren. „Veröffentlichen“ legt den Commit fest, der Ihnen gezeigt wurde, sodass eine spätere Änderung im Repository ein bereits gestelltes Lab nicht verändert. Starten Sie zuerst Ihre eigene Kopie.
  3. Zuweisen. Weisen Sie es wie jede Aufgabe zu, auf Wunsch mit einem Fälligkeitsdatum, und beschreiben Sie in der Aufgabe, was zu tun ist und was abgegeben werden soll.
  4. Abgaben bewerten. Öffnen Sie die Kopie einer lernenden Person und ihre Abgabe, bewerten Sie sie und geben Sie sie mit einer Begründung zur Überarbeitung zurück, wenn mehr nötig ist.

Häufige Fragen

Was ist, wenn eine lernende Person einen Fehler in der Konfiguration speichert?
Das Lab startet trotzdem. Eine Konfiguration, die beim Start des Labs nginx -t nicht besteht, wird daneben als default.conf.broken aufbewahrt, und die schwache wird neu geschrieben. Um absichtlich mit der schwachen Konfiguration zu beginnen, entfernen Sie die Datei .seeded in /etc/nginx/conf.d und starten Sie den Dienst neu.
Muss die lernende Person etwas installieren oder ins Internet kommen?
Nein. nginx und curl sind im eigenen Image des Labs, das Terminal läuft im Browser, und die Lab-Kopie hat keinen Weg ins Internet.
Wie prüfen Lernende, ob ihre nginx-Härtung funktioniert hat?
Sie führen im Terminal des Labs docker exec web lab-check aus, das neun PASS- oder FAIL-Zeilen ausgibt und nur dann erfolgreich endet, wenn alle neun bestehen. Es fragt den laufenden Server, meldet also, was nginx tut, und nicht, was eine Datei sagt, und curl -I http://web zeigt die Header vorher und nachher.