Die Bäckerei, die Fremden zu viel verriet
Eine Bäckerei stellt ihre Webseite online. Niemand bricht ein. Doch jeder sieht, welche Software läuft, kann eine Sicherungsdatei lesen und einen Ordner mit Lieferantennamen auflisten.
Die Einstellungen waren die, mit denen die Software kam. Sichere Voreinstellungen sind die erste Aufgabe, wenn Sie einen Server ausliefern.
Am Ende dieser Lektion
Notiz
Ich kann die Einstellungen eines Webservers mit einer Checkliste prüfen.
Schlüsselbegriffe
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Härtung | Einstellungen so ändern, dass ein System weniger verrät und erlaubt | |
| Header | eine Zeile mit Angaben, die mit einer Antwort des Webservers reist | |
| Statuscode | die Zahl, die sagt, wie eine Anfrage verlief | 404 |
| Voreinstellung | die Einstellung, die gilt, wenn niemand eine gewählt hat | |
| Angriffsfläche | alles, was ein Fremder erreichen kann | |
| Neuladen | einen Server seine Einstellungen neu lesen lassen, ohne ihn zu stoppen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Server antwortet mit mehr als einer Seite
Jede Antwort eines Webservers trägt einen Statuscode und einige Header. Der Code sagt, wie es lief: 200 klappte, 404 nicht gefunden, 405 Methode nicht erlaubt.
Header können zu viel verraten. Jede Angabe, die ein Fremder erfährt, vergrößert Ihre Angriffsfläche ein wenig.
Ihr Lab hat den Webserver einer Bäckerei namens web. Diese drei Runs sehen nur an, was er sagt.
Die Header einer Antwort lesen
curl -s -I http://webHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Seite anfordern, die fehlt
curl -s -o /dev/null -w "%{http_code}\n" http://web/gibt-es-nichtHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Methode probieren, die eine statische Seite ablehnt
curl -s -o /dev/null -w "%{http_code}\n" -X DELETE http://web/Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Prüfung vergleicht Einstellungen mit einer Checkliste
Um einen Server zu härten, lesen Sie seine Einstellungen Zeile für Zeile und stellen jedes Mal dieselben Fragen. Verrät er zu viel? Erlaubt er zu viel? Schreibt er ein Log?
Eine Voreinstellung soll den Start leicht machen, nicht den Dauerbetrieb sicher. Die Tabelle nennt einige häufige Risiken.
Beispiel: eine Checkliste
| Einstellung | Risiko | Sicherere Wahl |
|---|---|---|
| Alte Protokollversionen | Bekannte Schwachstellen bleiben ausnutzbar | Nur die neueren erlauben |
| Keine Grenze für Uploads | Eine Person füllt die Platte | Eine passende Grenze setzen |
| Zugriffslog aus | Niemand sieht, was geschah | Zugriffe ins Log schreiben |
| Jede Seite darf die API rufen | Fremde Seiten lesen Ihre Daten | Erlaubte Seiten benennen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Einstellungen eines Shops zum Prüfen
server {
listen 443 ssl;
server_name buecher.example.com;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
client_max_body_size 0;
access_log off;
add_header Access-Control-Allow-Origin *;
location / {
proxy_pass http://127.0.0.1:3000;
}
}Ein häufiger Irrtum
Warnung
Viele glauben, das Verbergen der Versionsnummer mache einen Server sicher. Es verbirgt nur einen Hinweis. Ein Fremder kann weiter alle bekannten Fehler probieren. Verbergen Sie den Hinweis, halten Sie auch die Software aktuell und entfernen Sie, was nicht dort sein soll.
Erst testen, dann neu laden
Bei einem Neuladen liest der laufende Server neue Einstellungen, ohne einen Besuch zu verlieren. Ist die Datei fehlerhaft, lehnt nginx sie ab und läuft mit den alten weiter. Beim nächsten Neustart aber startet er gar nicht.
Darum testen Sie die Datei zuerst. nginx hat einen Test, der die Einstellungen liest und sagt, ob sie gültig sind. Erst dann laden Sie neu.
Ein Prüfskript macht aus jeder Regel der Checkliste ein Bestanden oder Durchgefallen, damit eine Maschine die Prüfung wiederholt. Das Lab hat eines, nutzen Sie es nach der Lektion.
Die Einstellungen testen, nichts ändern
docker exec web nginx -tHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Fragen, welche Version läuft
docker exec web nginx -vHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Weiterführend: eine siebte Regel
Ergänzen Sie in Ihrer Lösung der Aufgabe eine siebte Regel. client_max_body_size mit einem Wert über 100 Megabyte, etwa 500m oder 1g, ist hohes-upload-limit.
Schreiben Sie zwei eigene Tests: einen, bei dem client_max_body_size 500m; den Befund liefert, und einen, bei dem client_max_body_size 50m; keinen liefert.