Das Passwort in der Datei vom letzten Jahr
Ein Entwickler fügt das Zahlungspasswort eines Shops in eine Datei ein, um etwas zu testen. Er speichert die Datei im Code-Archiv. Am nächsten Morgen löscht er die Zeile und speichert erneut.
Alle denken, es sei weg. Ein Jahr später liest ein Fremder die alte Version der Datei. Das Passwort funktioniert noch.
Die eine Regel
Warnung
Dieses Lab ist eine Anwendung, die absichtlich falsche Geheimnisse versteckt. Durchsuchen Sie nur Ihre eigene, private Kopie und nichts sonst. Sie hat keine Verbindung ins Internet. Wer auf fremden Seiten oder in fremden Archiven nach Geheimnissen sucht und sie nutzt, begeht eine Straftat.
Am Ende dieser Lektion
Notiz
Ich kann ein Geheimnis am falschen Ort finden und sagen, wohin es gehört.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Geheimnis | ein Passwort, ein Schlüssel oder ein Token, das privat bleiben muss | |
| Umgebungsvariable | eine benannte Einstellung, die ein Programm beim Start bekommt | DB_PASSWORT |
| Geheimnisspeicher | ein verschlossener Speicher, der Geheimnisse nur an erlaubte Programme gibt | |
| Versionsverlauf | alle früheren Fassungen aller Dateien in einem Code-Archiv | |
| Rotieren | ein Geheimnis durch ein neues ersetzen | |
| Container-Image | eine gepackte Kopie eines Programms und seiner Dateien |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Geheimnisse gelangen an vielen Orten nach außen
Ein Geheimnis ist verloren, sobald jemand, für den es nicht bestimmt war, eine Kopie lesen kann. Code ist nur ein Ort.
Es kann in einer Quelldatei stehen, in alten Fassungen oder in einem Container-Image. Es kann in einer Einstellungsdatei stehen, in einem Protokoll oder in einem Skript, das jeder Besucher bekommt. Ein Geheimnis, das der Browser braucht, kennt jeder.
Beispiel: wo jede Kopie liegt
| Ort | Wer es lesen kann | Besser |
|---|---|---|
| Eine Quelldatei | Jeder mit dem Code | Aus der Umgebung lesen |
| Alte Fassungen | Jeder mit einer Kopie des Verlaufs | Rotieren, dann den Verlauf bereinigen |
| Ein Container-Image | Jeder, der das Image laden kann | Zur Laufzeit geben, nicht beim Bauen |
| Ein Skript für Browser | Jeder Besucher | Auf dem Server behalten |
| Eine Protokolldatei | Jeder, der Protokolle liest | Geheimnisse nie ausgeben |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Anwendung in Ihrem Lab
Ihr Lab betreibt WrongSecrets. Starten Sie es und führen Sie dann diese drei Befehle aus. Sie sehen nur hin. Der erste fragt, ob die Anwendung gesund ist. Der zweite fragt, welche Verwaltungsseiten sie jedem anbietet. Der dritte zeigt die ersten Zeichen eines Skripts, das sie jedem Besucher schickt.
Ist die Anwendung gesund?
curl -s -w "\n" http://wrongsecrets:8080/actuator/healthHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Welche Verwaltungsseiten bietet sie an?
curl -s http://wrongsecrets:8080/actuator | grep -o 'actuator/[a-z]*' | sort -uHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Der Anfang des Skripts für jeden Besucher
curl -s http://wrongsecrets:8080/js/index.js | head -n 1 | cut -c 1-120Hier 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 eine kurze Zeile aus, die mit "status":"UP" endet. Die zweite gibt drei Namen aus: auditevents, health und info. Fragen Sie sich, welche davon ein Fremder nicht lesen sollte.
Die dritte gibt unleserlich wirkenden Code aus. Er ist verschleiert, nicht verschlossen. Der Browser muss ihn ganz lesen, um ihn auszuführen, und Sie können es auch.
Ein häufiger Fehler
Warnung
Viele glauben, ein Geheimnis sei weg, wenn man es aus der Datei löscht. Das stimmt nicht. Alte Fassungen bleiben im Verlauf, in jeder Kopie und in jedem früher gebauten Image. Behandeln Sie jedes Geheimnis, das je offen lag, als verbraucht. Rotieren Sie es zuerst. Räumen Sie danach auf.
Ein Geheimnis gehört in einen Speicher
Das Programm fragt beim Start nach dem Geheimnis. Der Geheimnisspeicher prüft, wer fragt, und gibt es heraus. Nichts steht im Code oder im Image.
Geben Sie jedem Programm nur die Geheimnisse, die es braucht. Rotieren Sie sie nach Plan, damit ein Verlust nur kurze Zeit etwas nützt.
Geheimnisse haben Formen, die ein Programm findet
Viele Geheimnisse sehen ähnlich aus. Eine Zugangskennung für AWS (Access Key ID) beginnt mit AKIA und hat 20 Großbuchstaben und Ziffern. Eine Datei mit einem privaten Schlüssel beginnt mit einer Zeile aus Strichen und dem Wort BEGIN. Eine Zeile wie passwort = "..." enthält einen Wert.
Scanner suchen diese Formen in Code und Verlauf. Sie finden viele, aber nicht alle. Sehen Sie einen Fund als Anlass zum Rotieren.
Ein winziger Scanner
zeilen = [
"name = laden",
"schluessel = AKIAABCDEFGHIJKLMNOP",
"passwort = hunter22",
]
# Fügen Sie eine vierte Zeile mit einer Geheimnisform ein und führen Sie den Block aus.
nummer = 0
for zeile in zeilen:
nummer = nummer + 1
if "AKIA" in zeile or "passwort" in zeile:
print("Zeile prüfen:", nummer)