Was ist ein Geheimnis im Quellcode?
Ein Geheimnis im Quellcode ist ein Passwort, ein Schlüssel oder ein Token, das jemand fest in eine Datei eines Programms geschrieben hat. Automatische Suchprogramme finden solche Dateien auf öffentlichen Seiten oft nach wenigen Minuten.
Du lernst, wo Geheimnisse versehentlich landen, wie man sie erkennt und wo sie hingehören. Du übst nur an deiner eigenen Kopie.
Am Ende dieser Lektion
Notiz
Ich kann ein Geheimnis in Programmtext finden und sagen, wo es stattdessen liegen soll.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Geheimnis | ein Passwort, Schlüssel oder Token, das niemand sonst kennen darf | |
| Quellcode | der Text, den Menschen für ein Programm schreiben | |
| Umgebungsvariable | ein Wert, den das System dem Programm von außen gibt | DB_PASSWORT |
| Base64 | eine Schreibweise für Daten, die jeder zurückübersetzen kann | |
| Token | ein langer Text, der wie ein Passwort für ein Programm wirkt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Wo landen Geheimnisse aus Versehen?
Meist ist es keine böse Absicht. Jemand will nur schnell testen, schreibt das Passwort in die Datei und vergisst es.
Dann liegt es im Quellcode, in einer Einstellungsdatei, in einer alten Fassung im Verlauf der Versionsverwaltung, in einem Chat oder auf einem Foto vom Bildschirm.
Wo ein Geheimnis liegen darf und wo nicht
| Ort | Gut oder schlecht | Warum |
|---|---|---|
| Fest im Quellcode | Schlecht | Jede Person mit dem Code kennt es |
| In einem Chat | Schlecht | Der Chat bleibt lange gespeichert |
| In einer Umgebungsvariable | Besser | Der Code enthält es nicht |
| In einem Passwortspeicher des Dienstes | Am besten | Nur bestimmte Programme dürfen es lesen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die eine Regel für dieses Lab
Warnung
Such nur in deiner eigenen Kopie des Labs und nie in den Dateien anderer ohne Erlaubnis. Ein gefundenes fremdes Passwort benutzt man nicht, man meldet es. Die Geheimnisse im Lab sind erfunden. Du übst, sie zu finden, damit du eigene nicht verlierst.
Bevor du anfängst
Notiz
Drück oben in der Leiste auf Lab starten und warte, bis es läuft. Auf Öffnen siehst du die Anwendung WrongSecrets. Lies dort nur die Erklärung von Challenge 0. Die Befehle unten erscheinen im Terminal neben dem Lab, wenn du auf Ausführen drückst.
Eine kleine Übungsdatei anlegen
printf 'db_passwort = "kaffee2024"\n' > demo.txtHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Nach dem Wort passwort suchen
grep -n passwort demo.txtHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Wie findet man ein Geheimnis in einer Datei?
Geheimnisse haben ein Muster: links steht ein Name wie passwort, key oder token, dann ein Gleichheitszeichen, rechts ein Text.
Das Werkzeug grep sucht ein Wort in einer Datei und zeigt jede Zeile damit. Mit -n zeigt es auch die Zeilennummer. Ein Suchprogramm für Geheimnisse tut nichts anderes, nur mit mehr Mustern.
Beispiel: Zeilen und ihr Befund
| Zeile | Geheimnis? | Warum |
|---|---|---|
| passwort = "kaffee2024" | Ja | Name passt, Wert steht fest da |
| passwort = os.environ["PW"] | Nein | Der Wert kommt von außen |
| max_token = 100000 | Nein | Nur eine Zahl, ein Fehlalarm |
| url = "postgres://app:geheim@host/db" | Ja | Nutzer und Passwort stecken in der Adresse |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele denken, ein Geheimnis in Base64 sei versteckt. Base64 ist aber keine Verschlüsselung. Jeder kann es mit einem Befehl zurückübersetzen. Ein Geheimnis ist erst geschützt, wenn es gar nicht im Code steht.
Einen Base64-Text zurückübersetzen
echo 'a2FmZmVlMjAyNA==' | base64 -dHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Wo gehört ein Geheimnis hin?
Der Code liest das Geheimnis zur Laufzeit von außen: aus einer Umgebungsvariable oder aus dem Passwortspeicher des Dienstes. Im Code steht nur der Name.
Ist ein Geheimnis doch einmal veröffentlicht worden, löscht man es nicht nur aus dem Code. Man tauscht es sofort aus, denn es steht noch im Verlauf. Das nennt man ein Geheimnis erneuern.
Beispiel: ein Passwort von außen lesen
import os
# Der Code kennt nur den Namen, nie den Wert.
passwort = os.environ["DB_PASSWORT"]
Weiterführend: Fehlalarme verringern
Ein Suchprogramm, das bei jeder Zahl Alarm schlägt, wird bald ignoriert. Überleg dir drei Zeilen, bei denen dein Programm ein Geheimnis meldet, obwohl keines da ist.
Wie würdest du die Regel ändern, ohne echte Geheimnisse zu übersehen?