Reverse-Engineering-Lab: Programme mit gdb, radare2, strace und ltrace in einer VM lesen
Dieses Lab zeigt, wie man ein Programm liest, das keinen Quelltext hat. Jede lernende Person bekommt eine Ubuntu-VM mit einem Compiler, dem Debugger gdb, dem Disassembler radare2, binutils, strace und ltrace sowie fünf kleinen Programmen, die für das Lab geschrieben wurden und von denen jedes einen Schlüssel versteckt. Die Lernenden finden die Schlüssel, indem sie sich die Programme ansehen, wie es Verteidiger der IT-Sicherheit oder Studierende des Compilerbaus tun würden, und tragen sie in eine Datei ein.
Es geht nur um Lesen und Verstehen, an Programmen, die das Lab selbst kompiliert hat. Auf dem Rechner der lernenden Person wird nichts installiert, und nichts hier lehrt Schadsoftware, das Umgehen der Lizenz echter Software, Schlüsselgeneratoren dafür, das Verstecken eines Programms vor einem Debugger, Exploits oder das Ansehen eines Programms, das nicht zum Lab gehört.
Was die Lernenden lernen
Eine Leiter aus fünf Programmen, jedes mit einem anderen Werkzeug gelesen. Das erste hält sein Passwort offen, was strings und objdump oder radare2 zeigen, ohne es auszuführen. Das zweite baut sein Passwort erst während des Laufs auf: Die Lernenden halten es in gdb beim Stringvergleich an und lesen die Antwort aus dem Speicher. Das dritte verlangt eine Zahl und prüft sie mit ein paar Rechenschritten, die die Lernenden im Disassembly lesen und rückwärts auflösen. Das vierte setzt zwei Hälften eines Schlüssels zusammen, die ltrace in einem Bibliotheksaufruf zeigt. Das fünfte sucht eine Datei, in deren Namen der Schlüssel steckt, was strace in einem Systemaufruf zeigt.
Dahinter steht die Lektion, die Verteidiger brauchen: Alles, was ein Programm zum Arbeiten wissen muss, kann ein Leser finden, also ist ein im Programm gehaltenes Geheimnis keines.
Schlüssel, die in jeder Kopie anders sind
Das Repository des Labs ist öffentlich, also steht dort kein Schlüssel. Wenn die VM einer lernenden Person zum ersten Mal startet, erzeugt das Setup neue Zufallsschlüssel, legt sie in einem Ordner ab, den nur der Administrator betreten kann, baut die Programme damit und löscht die Quelltexte. Das Setup gibt nie einen Schlüssel aus. Die Antworten werden mit den Schlüsseln der eigenen Kopie verglichen, daher verraten weder die Antworten von Mitlernenden noch die README noch die Dateien des Labs etwas. Wer auf der eigenen Maschine sudo benutzt, könnte die gespeicherten Schlüssel lesen: Das Lab vertraut den Lernenden auf ihrer eigenen Maschine, und die Schlüssel dienen dem Lernen, nicht der Geheimhaltung gegenüber der Person, der die VM gehört.
Im Browser ausführen
VM-Labs werden als Lab-Aufgabe in einem Modul gesetzt, und das Beispiel steht auf der Seite des Labs. Die Maschine ist klein: eine CPU, 1 GB Speicher und 10 GB Festplatte. Die Werkzeuge zusammen brauchen weit weniger als ein Zehntel dieses Speichers.
- Lab hinzufügen. Füge in einem Modul, das du unterrichtest, eine Aufgabe hinzu und wähle die Karte Ubuntu-VM-Lab. Die Seite zeigt statt einer Compose-Datei eine kurze Beschreibung der Maschine.
- Mit dem Beispiel beginnen. Die Seite bietet fertige Labs als Ausgangspunkt an. Wähle Reverse Engineering. Ein Beispiel zu verwenden ersetzt den Text, und Rückgängig bringt deinen zurück.
- Veröffentlichen und eigene Kopie starten. Veröffentliche, dann Starten. Das Setup-Skript des Labs installiert den Compiler, gdb, radare2, strace und ltrace aus dem Ubuntu-Archiv, erzeugt neue Zufallsschlüssel, baut die Programme damit und schreibt die README, beim ersten Start der VM, in wenigen Minuten.
- Terminal öffnen. Öffne das Terminal und lies README.md im Home-Ordner: Sie sagt, was zu tun ist, und gibt keine Antworten preis.
Eine Basics-Lektion zu diesem Lab
Reverse Engineering Basics ist eine kleine Lektion, die in diesem Lab durchgeführt wird, einer Ubuntu-VM. Sie hat einen Einstieg, ein Ich-kann-Ziel, die eine Regel, Schlüsselwörter, einen Start, eine Prüfung nach jeder Idee, einen häufigen Fehler und einen Abschlusscheck, und jeder Schritt hat eine Schaltfläche Ausführen, die ihren Befehl ins Terminal der Maschine tippt. Die lernende Person untersucht ein harmloses Programm mit file, strings, objdump, radare2, gdb, ltrace und strace.
Die Lektion verschafft einen Überblick über die Werkzeuge und überlässt die fünf Programme mit Schlüssel, die Aufgabe des Labs, den Lernenden, sie gibt also keine Antworten preis.
Wie bewertet wird
Das Lab hat eine Prüfung. Sie läuft auf einer Kopie der gespeicherten Maschine nach einem frischen Start und liest die Datei answers.txt im Home-Ordner der lernenden Person. Jeder der fünf Schlüssel muss der Schlüssel sein, der für die Kopie dieser Person und dieses Programm erzeugt wurde: Eine Vermutung, eine leere Zeile, der Schlüssel einer anderen Kopie oder ein Schlüssel beim falschen Programm besteht nicht. Die Prüfung probiert außerdem jedes Programm mit seinem eigenen Schlüssel aus, sodass ein verändertes Programm auffällt. Die erste Zeile der Ausgabe sagt, welches Programm falsch ist.
- Zuweisen. Weise das Lab wie jede Aufgabe zu, auf Wunsch mit Abgabedatum. Jede lernende Person bekommt eine eigene VM, die zwischen den Sitzungen erhalten bleibt, mit eigenen Schlüsseln.
- Prüfung ausführen. Klicke in der Klassenliste in der Zeile einer lernenden Person auf Prüfung ausführen. Sie startet eine Kopie der gespeicherten Maschine, die nicht zurückgespeichert wird, führt das Prüfskript des Labs als root aus und zeigt, ob es bestanden wurde, was es ausgab und wann. Die lernende Person erfährt das Ergebnis nicht.
- Bewerten. Lies die erste Zeile der Ausgabe der Prüfung: Sie nennt das erste Programm, dessen Schlüssel fehlt oder nicht der Schlüssel dieser Kopie ist. Gib die Arbeit mit einer Begründung zurück, wenn sie mehr braucht.
Die Definition auf GitHub
Die Datei ist die ganze Lab-Definition, derselbe Text, den die Plattform ausführt: Größe, Setup-Skript, Quelltexte der fünf Programme, README und Prüfung. Kopiere sie und ändere die Programme oder die Schlüssel, um ein längeres Lab zu bauen.
Dieses Lab ausprobieren, und was es kostet
Mit einem kostenlosen persönlichen Konto können Sie die Grundlagenlektionen in diesem Lab durcharbeiten, mit genug kostenlosem Guthaben pro Monat für die meisten Lektionen und ohne Karte. Für eine Klasse sind die ersten 365 Tage für eine Schule kostenlos, für bis zu 50 Lernende; danach zahlt sie je lernender Person und Jahr, alle Labs inklusive und Lehrkräfte kostenlos.
Häufige Fragen
- Braucht das Lab eine Lizenz oder besondere Software?
- Nein. Compiler, gdb, radare2, binutils, strace und ltrace sind quelloffen und kommen aus dem Ubuntu-Archiv, wenn die VM der lernenden Person startet. Wir verteilen nichts davon.
- Bringt das bei, in fremde Software einzubrechen?
- Nein. Die Programme sind die eigenen Spielzeuge des Labs, und jedes wird gelesen, um zu verstehen, wie ein Programm funktioniert, was Verteidiger, Entwickelnde ohne Quelltext und Studierende des Compilerbaus brauchen. Das Lab lehrt nie Schadsoftware, das Umgehen der Lizenz echter Software, Schlüsselgeneratoren, das Verstecken eines Programms vor einem Debugger, Exploits oder das Ansehen eines Programms, das nicht zum Lab gehört, und die Kopie einer lernenden Person kommt nicht ins Internet, um eines zu holen.
- Können Lernende etwas kaputt machen?
- Nur ihre eigene Kopie. Die Programme laufen mit den Rechten der lernenden Person, und die VM erreicht im kostenlosen Tarif nur das Ubuntu-Archiv. Programme zu lesen kann sie nicht beschädigen.
- Wurde das Lab in einer echten Lernenden-VM getestet?
- Das Setup, die Befehle der Lektion, die Prüfung und jede Art, sie zu täuschen, wurden in einem echten Ubuntu-26.04-Container ausgeführt, und jeder der fünf Schlüssel wurde mit dem vorgesehenen Werkzeug gefunden, als Benutzer ohne Administratorrechte. Eine wirklich gestartete Lernenden-VM mit dem Kernel der Maschine verdient vor einer Unterrichtsstunde einen Versuch.