Das Passwort war 123456
Auf der Mitarbeiterseite einer kleinen Firma darf jeder jedes Passwort wählen. Die Hälfte hat 123456 genommen.
An einem Abend probiert jemand eine kurze Liste häufiger Passwörter für jeden Namen der Mitarbeiterliste. Nach wenigen Minuten ist er als Leiter der Buchhaltung drin. Die Seite begrenzte die Versuche nicht.
Die eine Regel
Warnung
Dieses Lab ist eine Sammlung von Lektionen, die absichtlich unsicher sind. Greifen Sie nur Ihre eigene, private Kopie an und nichts sonst. Sie hat keine Verbindung ins Internet. Dieselben Versuche bei einem fremden System sind eine Straftat. Das gilt auch dann, wenn Sie nichts beschädigen wollen.
Am Ende dieser Lektion
Notiz
Ich kann sagen, was eine Anmeldung oder eine Sitzung schwach macht.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Sitzung | die Zeit, in der sich eine Seite merkt, dass Sie angemeldet sind | |
| Cookie | ein kleiner Wert, den der Browser behält und der Seite zurücksendet | |
| Token | ein Wert, der beweist, dass Sie sich angemeldet haben | eine lange Zeichenkette |
| Hash | ein Wert fester Länge, aus dem Passwort berechnet, der sich nicht zurückrechnen lässt | |
| Brute Force | viele Versuche nacheinander durchprobieren | |
| Ablauf | der Zeitpunkt, ab dem eine Sitzung oder ein Token nicht mehr gilt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Schwache Passwörter fallen dem Raten zum Opfer
Menschen wählen kurze, häufige Passwörter. Ein Angreifer braucht keinen Einfall, nur eine Liste der häufigen und eine Seite, die endlose Versuche zulässt. Das ist Brute Force.
Drei Schutzmaßnahmen wirken zusammen. Verlangen Sie Länge, nicht ausgefallene Zeichen. Lehnen Sie Passwörter von einer Liste häufiger ab. Bremsen oder sperren Sie wiederholte Fehlversuche.
Beispiel: vier Passwörter beurteilen
| Passwort | Urteil | Warum |
|---|---|---|
| 123456 | Ablehnen | Steht auf jeder Liste häufiger Passwörter |
| Sommer2025! | Schwach | Wort, Jahr und Zeichen ist ein Muster, das Rater kennen |
| brotwagen-sieben-huete | Gut | Lang und kein Muster |
| lena | Ablehnen | Zu kurz und gleich dem Nutzernamen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine Seite speichert einen Hash, nicht das Passwort
Eine Seite darf Passwörter nie so speichern, wie sie getippt wurden. Gelangen ihre Daten nach außen, sind alle Konten offen.
Sie speichert einen Hash des Passworts und mischt vorher ein zufälliges Salz (Salt) bei, damit zwei Menschen mit demselben Passwort verschiedene Hashes haben. Dafür gibt es eigens langsame Verfahren wie bcrypt oder Argon2. Bei der Anmeldung hasht sie den Versuch mit demselben Salz und vergleicht.
Ein Sitzungscookie ist ein Schlüssel
Nach der Anmeldung gibt die Seite Ihrem Browser ein Sitzungscookie und erkennt Sie bei jeder Anfrage daran. Wer diesen Wert besitzt, gilt für die Seite als Sie.
Darum muss er zufällig und lang sein, nur über HTTPS gehen, mit HttpOnly vor Skript verborgen sein und ablaufen. Bei der Anmeldung stellt die Seite außerdem einen frischen aus.
Die Sitzungen in Ihrem Lab
Ihr Lab betreibt WebGoat. Starten Sie es und warten Sie eine Minute. Diese drei Runs sehen sich die Eingangstür an, ohne anzumelden. Der zweite fragt eine Seite ab, die eine Anmeldung braucht. Der dritte zeigt das Cookie, das das Lab dafür setzt.
Ist die Anmeldeseite erreichbar?
curl -s -o /dev/null -w "%{http_code} %{redirect_url}\n" http://web/WebGoat/loginHier 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, die eine Anmeldung braucht
curl -s -o /dev/null -w "%{http_code} %{redirect_url}\n" http://web/WebGoat/welcome.mvcHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Cookie dieser Antwort
curl -s -I http://web/WebGoat/welcome.mvc | grep -i "^set-cookie"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Was die drei Ausgaben sagen
Die erste gibt 200 und keine Adresse aus. Die zweite gibt 302 und die Adresse der Anmeldung aus: Eine Seite hinter der Anmeldung schickt Fremde zur Tür. Die dritte gibt ein JSESSIONID-Cookie mit Path=/WebGoat; HttpOnly aus.
Der Wert ist zufällig und ändert sich jedes Mal. HttpOnly ist da. Secure fehlt, weil dieses Lab einfaches HTTP nutzt.
Ein häufiger Fehler
Warnung
Viele glauben, ein Token aus zufällig wirkenden Buchstaben sei verborgen. Kodieren ist aber kein Verschlüsseln. Ein Token, das nur den Nutzernamen kodiert, kann jeder lesen und ändern. Nutzen Sie eine zufällige Sitzungskennung, die der Server nachschlägt, oder ein Token mit einer Signatur, die der Server prüft. Prüfen Sie auch den Ablauf.
Ein Token muss signiert sein und ablaufen
Manche Seiten geben ein signiertes Token mit Nutzername, Rolle und Ablaufzeit. Der Server prüft die Signatur, bevor er irgendetwas darin glaubt.
Ein Token ohne Signatur, eines, das der Server nicht prüft, oder eines, das nie abläuft, ist schwach. Lehnen Sie alle drei ab.
Beispiel: drei Token
| Das Token sagt | Signiert? | Urteil |
|---|---|---|
| Nutzerin lena, Rolle Kunde, läuft morgen ab | Ja | Annehmen |
| Nutzerin lena, Rolle admin, läuft morgen ab | Nein | Ablehnen: niemand bürgt für admin |
| Nutzerin lena, Rolle Kunde, vorige Woche abgelaufen | Ja | Ablehnen: abgelaufen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.