diff --git a/Assignment_001/flag_printer.jar b/Assignment_001/flag_printer.jar index 7600f4d..e34f172 100644 Binary files a/Assignment_001/flag_printer.jar and b/Assignment_001/flag_printer.jar differ diff --git a/Assignment_002/files.zip b/Assignment_002/files.zip new file mode 100644 index 0000000..48fd96c Binary files /dev/null and b/Assignment_002/files.zip differ diff --git a/Assignment_002/readme.md b/Assignment_002/readme.md index 6083234..0760066 100644 --- a/Assignment_002/readme.md +++ b/Assignment_002/readme.md @@ -1,40 +1,37 @@ -# Assignment: Importe mit rabin2 untersuchen (payload_1) +# Assignment: Dateien mit `file` untersuchen (files.zip) -**🎓 Benotetes Assignment 🎓** - -📆 **FĂ€llig: 08.10.2024** 📆 + [Musterlösung](solution/) -In diesem Assignment geht es darum, durch die statisch Analyse einer Datei Aussagen ĂŒber deren FunktionalitĂ€t und die Intentionen des Programmierers zu machen. Hierzu werden wir das `rabin2`-Tool aus dem Radare 2 Paket verwenden. +In diesem Assignment werden Sie unbekannte Dateien mit dem `file`-Werkzeug untersuchen. Hierbei geht es darum, in einem allerersten Schritt einer Analyse herauszufinden, um was fĂŒr Dateien es sich handeln _könnte_. -## Radare 2 - -FĂŒr diese Übung werden wir das Kommandozeilen-Reverse-Engineering-Werkzeug Radare 2 einsetzen. Sie finden Tipps zur Installation und Verwendung in der [Kurzanleitung](../help/radare2.md). - ## Aufgabe -Das Werkzeug `rabin2` kann dazu verwendet werden, die importierten Funktionen einer BinĂ€rdatei zu untersuchen. Damit sind die Funktionen gemeint, die das Programm zur Laufzeit aus der Standardbibliothek importiert und benutzt. Die Importe lassen sich mit `rabin2 -i DATEINAME` ausgeben. +Das Werkzeug `file` kann dazu verwendet werden, um den Typ einer Datei zu erkennen. Hierzu analysiert `file` den Inhalt und vergleicht ihn mit einer Datenbank von bekannten Dateitypen. Die Ausgabe ist zwar nicht absolut zuverlĂ€ssig, immerhin aber ein erster Hinweis auf den Inhalt. Mit dieser Information kann man dann weitere Analysen durchfĂŒhren, die zu dem jeweiligen Dateityp passen. -Nehmen Sie sich die folgende Datei vor und verwenden Sie `rabin2`, um sich die Importe anzeigen zu lassen. +Gegeben sind die folgenden unbekannten Dateien in Form eines Archivs, die Sie in einem ersten Schritt mit `file` untersuchen werden: - * [payload_1](payload_1) + * [files.zip](files.zip) +Entpacken Sie das Archiv und wenden Sie dann auf jede Datei das `file`-Kommando an. -## Hinweis +Sie bekommen zu einer Datei Informationen, Ă€hnlich der folgenden: -Bei dem Executable handelt es sich um ein Programm unbekannter FunktionalitĂ€t, wie man sie z.B. bei der Untersuchung von kompromittierten Rechner finden könnte. Es kann gut sein, dass es sich um eine _Malware_ handelt, welche bei der AusfĂŒhrung Schaden verursacht, bis hin zur Zerstörung aller Daten auf dem Rechner. Deswegen sollten Sie die Datei __auf keinen Fall__ ohne Schutzmaßnahmen (virtuelle Maschine etc.) __ausfĂŒhren__. Die hier vorgenommene Analyse kommt ohne AusfĂŒhrung der Datei aus und ist insofern sicher auch ohne Schutzmaßnahmen durchfĂŒhrbar. +```console +$ file files.zip +files.zip: Zip archive data, at least v2.0 to extract, compression method=deflate +``` -Sie mĂŒssen in der RealitĂ€t damit rechnen, dass die Malware Schwachstellen in den von Ihnen verwendeten Werkzeugen nutzt, um bei einem Reverse-Engineering Ihren Rechner anzugreifen. Da wir uns hier in einem Übungskontext befinden, ignorieren wir dieses Problem. +Schauen Sie sich die Informationen zu jeder Datei an und notieren Sie sich Ihre Erkenntnisse. -Sie werden eine Reihe von Funktionen aus der C-Standard-Bibliothek sehen. Rufen Sie die Hilfeseiten zu den Funktionen auf, z.B. `man memset`, oder googeln Sie die Funktionsnamen. Versuchen Sie aus diesen Informationen abzuleiten, was das Programm möglicherweise tut. +Ausgehend von den gewonnenen Erkenntnissen können Sie versuchen, die Dateien mit Ihnen bekannten Werkzeugen weiter zu untersuchen, z.B. können Sie Bilddateien in einem Bildbetrachter ansehen. **Auf keinen Fall sollten Sie ohne Vorsichtsmaßnahmen Dateien ausfĂŒhren, da sie ein Risiko darstellen könnten!*** -Hinweis: Da Malware oft versucht, die Importe ĂŒber diverse Techniken zu verschleiern, bedeutet die Abwesenheit von "gefĂ€hrlichen" Bibliotheksfunktionen nicht zwingend, dass ein Programm gutartig ist. Im vorliegenden Fall macht es Ihnen das Programm aber einfach und verwendet keine Techniken zur Verschleierung der Importe. ## Abgabe - * Schreiben Sie auf, was Sie ĂŒber die Datei herausgefunden haben. - * Geben Sie eine EinschĂ€tzung ab, ob es sich möglicherweise um eine Malware handelt. - * Welche Art von Malware könnte vorliegen? Was macht sie wahrscheinlich? + * Schreiben Sie auf, um welchen Dateityp es sich wahrscheinlich handelt. + * Nennen Sie weitere Werkzeuge, mit denen Sie die Datei untersucht haben. + * Beschreiben Sie, was Sie zum Inhalt der Datei herausgefunden haben, falls dies möglich war. Die Abgabe erfolgt ĂŒber das Repository, das Ihrem Team zugeordnet ist. \ No newline at end of file diff --git a/Assignment_002/solution/readme.md b/Assignment_002/solution/readme.md new file mode 100644 index 0000000..c698cbe --- /dev/null +++ b/Assignment_002/solution/readme.md @@ -0,0 +1,84 @@ +# Lösung: Dateien mit `file` untersuchen (files.zip) + +Nach dem Auspacken des Archivs kann man durch den Aufruf von `file *` die entsprechenden Dateien analysieren. + +| Datei | Ausgabe von `file` | Werkzeug | Inhalt | +|---|---|---|---| +| `a` | PNG image data, 100 x 100, 8-bit gray+alpha, non-interlaced | Bildbetrachter | Rick Astley | +| `b` |JPEG image data, ... , 250x157, components 3 | Bildbetrachter | JPG-Bild eines Egg Mac Muffins | +| `c` | PE32 executable (DLL) (console) Intel 80386 (stripped to external PDB), for MS Windows | `rabin2` | Shared Library fĂŒr Windows mit nur zwei Exports: `GetDiskKey` und `GetDiskKey_Version` | +| `d` | PE32 executable (GUI) Intel 80386, for MS Windows | `rabin2` | AusfĂŒhrbare Datei fĂŒr Windows. Symbole und Strings können mit `rabin2` ausgegeben werden. AusfĂŒhren der Datei ist zu riskant. | +| `e` | ELF 64-bit LSB shared object, ... , not stripped | `rabin2` | Bibliothek (shared object) fĂŒr Linux x86, nicht gestrippt | +| `f` | ELF 64-bit LSB pie executable, ... , not stripped | `rabin2` | AusfĂŒhrbares Programm fĂŒr Linux. AusfĂŒhren der Datei ist zu riskant. | +| `g` | ELF 64-bit LSB shared object, ... , stripped | `rabin2` | Bibliothek (shared object) fĂŒr Linux x86, gestrippt | +| `h` | ELF 64-bit LSB pie executable, ... , stripped | `rabin2` | AusfĂŒhrbares Programm fĂŒr Linux. AusfĂŒhren der Datei ist zu riskant. | +| `i` | ELF 64-bit LSB relocatable, ... , not stripped | `rabin2` | Objekt-Datei mit der Main-Funktion eines Programms. | +| `j` | Compiled Java class data, version 61.0 | `javap` | Java-Klasse mit dem Namen `FlagPrinter`, die nur eine `main`-Methode enthĂ€lt. | +| `k` | ASCII text | `less` | Rick Astley Song | +| `l` | data | `hexyl` | BinĂ€rdaten: ff ff 00 00 ca fe ba be 00 00 00 | +| `m` | Atari ST M68K contiguous executable | `strings` | Teil des Softwarepaketes Degas | +| `n` | gzip compressed data, was "n" ... | `gzip`, `less` | Komprimierte Version von k | + +## zu `e`, `f`, `g`, `h` + +Betrachtet man die Build-IDs, die von `file` ausgegeben werden sieht man: + +```console +e: ELF ... BuildID[sha1]=82d337f3906e7639b404001a5c501e9308848c80 +f: ELF ... BuildID[sha1]=94fbda07657d2a358c1844e7682632621affde92 +g: ELF ... BuildID[sha1]=82d337f3906e7639b404001a5c501e9308848c80 +h: ELF ... BuildID[sha1]=94fbda07657d2a358c1844e7682632621affde92 +``` + +`e` + `g` und `f` + `h` haben jeweils dieselben Build-IDs. Dies deutet darauf hin, dass es auch dieselben Programme bzw. Bibliotheken sind -- nur einmal jeweils gestrippt. + +## Zu `j` + +`javap` braucht den Namen der Java-Klasse, um sie zu laden und auszugeben. Den Namen kann leicht mit dem `strings`-Kommando finden, weil der Namen der Quelldatei ebenfalls in der Klasse gespeichert ist. + +```console +$ strings j +... +SourceFile +FlagPrinter.java +... +``` + +Damit kann man die Datei umbenennen und `javap` verwenden: + +```console +$ cp j FlagPrinter.class +$ javap -cp . FlagPrinter +Compiled from "FlagPrinter.java" +public class FlagPrinter { + public FlagPrinter(); + public static void main(java.lang.String[]) throws java.lang.Exception; + static {}; +} +``` + +## zu `l` + +Der Inhalt der Datei kann einfach mit einem Hexeditor, z.B. `hexyl` oder `hexedit` angesehen werden: + +```console +$ hexyl l +┌────────┬─────────────────────────┬─────────────────────────┬────────┬────────┐ +│00000000│ ff ff 00 00 ca fe ba be ┊ 00 00 00 │××00××××┊000 │ +└────────┮─────────────────────────┮─────────────────────────┮────────┮────────┘ +``` + +## zu `m` + +Da es sich um ein sehr altes Format handelt (1980er Jahre), kommen die normalen Werkzeuge damit nicht klar. Man kann allerdings zumindest die enthaltenen Strings ausgeben lassen. + +```console +$ strings -n 10 +... +D:\DEGASART\ART1.SCPD:\DEGASART\PICS\D:\DEGASART\DEGASART.RSCTITLE.PC1 +... +``` + +## zu `n` + +Nach dem Auspacken sieht man, dass `n` nur eine komprimierte Version von `k` ist. diff --git a/Assignment_002/payload_1 b/Assignment_003/payload_1 similarity index 100% rename from Assignment_002/payload_1 rename to Assignment_003/payload_1 diff --git a/Assignment_003/readme.md b/Assignment_003/readme.md index 9f19147..6083234 100644 --- a/Assignment_003/readme.md +++ b/Assignment_003/readme.md @@ -1,4 +1,4 @@ -# Assignment: Exports und Imports mit rabin2 untersuchen (payload_2.so) +# Assignment: Importe mit rabin2 untersuchen (payload_1) **🎓 Benotetes Assignment 🎓** @@ -14,13 +14,11 @@ FĂŒr diese Übung werden wir das Kommandozeilen-Reverse-Engineering-Werkzeug Rad ## Aufgabe -Das Werkzeug `rabin2` kann dazu verwendet werden, die exportierten und importierten Funktionen einer BinĂ€rdatei zu untersuchen. Damit sind die Funktionen gemeint, die das Programm zur Laufzeit aus der Standardbibliothek importiert und benutzt. Die Importe lassen sich mit `rabin2 -i DATEINAME` ausgeben, die Exporte mit `rabin2 -s DATEINAME`. +Das Werkzeug `rabin2` kann dazu verwendet werden, die importierten Funktionen einer BinĂ€rdatei zu untersuchen. Damit sind die Funktionen gemeint, die das Programm zur Laufzeit aus der Standardbibliothek importiert und benutzt. Die Importe lassen sich mit `rabin2 -i DATEINAME` ausgeben. -Da es sich hier um eine Shared-Library (Dateiendung unter Linux `.so`) handelt, die möglicherweise zu einer Malware gehört, sind insbesondere die Funktionen interessant, die von der Bibliothek exportiert werden. +Nehmen Sie sich die folgende Datei vor und verwenden Sie `rabin2`, um sich die Importe anzeigen zu lassen. -Nehmen Sie sich die folgende Datei vor und verwenden Sie `rabin2`, um sich die Importe und Exporte anzeigen zu lassen. - - * [payload_2.so](payload_2.so) + * [payload_1](payload_1) ## Hinweis @@ -29,8 +27,7 @@ Bei dem Executable handelt es sich um ein Programm unbekannter FunktionalitĂ€t, Sie mĂŒssen in der RealitĂ€t damit rechnen, dass die Malware Schwachstellen in den von Ihnen verwendeten Werkzeugen nutzt, um bei einem Reverse-Engineering Ihren Rechner anzugreifen. Da wir uns hier in einem Übungskontext befinden, ignorieren wir dieses Problem. - -Sie werden bei den Symbolen eine Reihe von Funktionen aus der C-Standard-Bibliothek sehen. Rufen Sie die Hilfeseiten zu den Funktionen auf, z.B. `man memset`, oder googeln Sie die Funktionsnamen. Versuchen Sie aus diesen Informationen abzuleiten, was das Programm möglicherweise tut. +Sie werden eine Reihe von Funktionen aus der C-Standard-Bibliothek sehen. Rufen Sie die Hilfeseiten zu den Funktionen auf, z.B. `man memset`, oder googeln Sie die Funktionsnamen. Versuchen Sie aus diesen Informationen abzuleiten, was das Programm möglicherweise tut. Hinweis: Da Malware oft versucht, die Importe ĂŒber diverse Techniken zu verschleiern, bedeutet die Abwesenheit von "gefĂ€hrlichen" Bibliotheksfunktionen nicht zwingend, dass ein Programm gutartig ist. Im vorliegenden Fall macht es Ihnen das Programm aber einfach und verwendet keine Techniken zur Verschleierung der Importe. diff --git a/Assignment_003/payload_2.so b/Assignment_004/payload_2.so similarity index 100% rename from Assignment_003/payload_2.so rename to Assignment_004/payload_2.so diff --git a/Assignment_004/readme.md b/Assignment_004/readme.md new file mode 100644 index 0000000..9f19147 --- /dev/null +++ b/Assignment_004/readme.md @@ -0,0 +1,43 @@ +# Assignment: Exports und Imports mit rabin2 untersuchen (payload_2.so) + +**🎓 Benotetes Assignment 🎓** + +📆 **FĂ€llig: 08.10.2024** 📆 + + +In diesem Assignment geht es darum, durch die statisch Analyse einer Datei Aussagen ĂŒber deren FunktionalitĂ€t und die Intentionen des Programmierers zu machen. Hierzu werden wir das `rabin2`-Tool aus dem Radare 2 Paket verwenden. + + +## Radare 2 + +FĂŒr diese Übung werden wir das Kommandozeilen-Reverse-Engineering-Werkzeug Radare 2 einsetzen. Sie finden Tipps zur Installation und Verwendung in der [Kurzanleitung](../help/radare2.md). + +## Aufgabe + +Das Werkzeug `rabin2` kann dazu verwendet werden, die exportierten und importierten Funktionen einer BinĂ€rdatei zu untersuchen. Damit sind die Funktionen gemeint, die das Programm zur Laufzeit aus der Standardbibliothek importiert und benutzt. Die Importe lassen sich mit `rabin2 -i DATEINAME` ausgeben, die Exporte mit `rabin2 -s DATEINAME`. + +Da es sich hier um eine Shared-Library (Dateiendung unter Linux `.so`) handelt, die möglicherweise zu einer Malware gehört, sind insbesondere die Funktionen interessant, die von der Bibliothek exportiert werden. + +Nehmen Sie sich die folgende Datei vor und verwenden Sie `rabin2`, um sich die Importe und Exporte anzeigen zu lassen. + + * [payload_2.so](payload_2.so) + + +## Hinweis + +Bei dem Executable handelt es sich um ein Programm unbekannter FunktionalitĂ€t, wie man sie z.B. bei der Untersuchung von kompromittierten Rechner finden könnte. Es kann gut sein, dass es sich um eine _Malware_ handelt, welche bei der AusfĂŒhrung Schaden verursacht, bis hin zur Zerstörung aller Daten auf dem Rechner. Deswegen sollten Sie die Datei __auf keinen Fall__ ohne Schutzmaßnahmen (virtuelle Maschine etc.) __ausfĂŒhren__. Die hier vorgenommene Analyse kommt ohne AusfĂŒhrung der Datei aus und ist insofern sicher auch ohne Schutzmaßnahmen durchfĂŒhrbar. + +Sie mĂŒssen in der RealitĂ€t damit rechnen, dass die Malware Schwachstellen in den von Ihnen verwendeten Werkzeugen nutzt, um bei einem Reverse-Engineering Ihren Rechner anzugreifen. Da wir uns hier in einem Übungskontext befinden, ignorieren wir dieses Problem. + + +Sie werden bei den Symbolen eine Reihe von Funktionen aus der C-Standard-Bibliothek sehen. Rufen Sie die Hilfeseiten zu den Funktionen auf, z.B. `man memset`, oder googeln Sie die Funktionsnamen. Versuchen Sie aus diesen Informationen abzuleiten, was das Programm möglicherweise tut. + +Hinweis: Da Malware oft versucht, die Importe ĂŒber diverse Techniken zu verschleiern, bedeutet die Abwesenheit von "gefĂ€hrlichen" Bibliotheksfunktionen nicht zwingend, dass ein Programm gutartig ist. Im vorliegenden Fall macht es Ihnen das Programm aber einfach und verwendet keine Techniken zur Verschleierung der Importe. + +## Abgabe + + * Schreiben Sie auf, was Sie ĂŒber die Datei herausgefunden haben. + * Geben Sie eine EinschĂ€tzung ab, ob es sich möglicherweise um eine Malware handelt. + * Welche Art von Malware könnte vorliegen? Was macht sie wahrscheinlich? + +Die Abgabe erfolgt ĂŒber das Repository, das Ihrem Team zugeordnet ist. \ No newline at end of file diff --git a/readme.md b/readme.md index 910e1af..cba2fc5 100644 --- a/readme.md +++ b/readme.md @@ -16,8 +16,9 @@ Hinweise zur nötigen Softwareausstattung finden Sie [hier](help/software.md). | # | Ausgabe | Thema | FĂ€llig am 📆 | Musterlösung | |-----|------------|----------------------------------------------------------------------------------------|----------------|----------------| | 1. | 02.10.2024 | [Java-Klasse analysieren und patchen](Assignment_001/readme.md) | | [✅](Assignment_001/solution/) | -| 2. | 02.10.2024 | [Importe mit rabin2 untersuchen (payload_1)](Assignment_002/readme.md) | **08.10.2024** | | -| 3. | 02.10.2024 | [Exports und Imports mit rabin2 untersuchen (payload_2.so)](Assignment_003/readme.md) | **08.10.2024** | | +| 2. | 02.10.2024 | [Dateien mit `file` untersuchen (files.zip)](Assignment_002/readme.md) | | [✅](Assignment_002/solution/) | +| 3. | 02.10.2024 | [Importe mit rabin2 untersuchen (payload_1)](Assignment_003/readme.md) | **08.10.2024** | | +| 4. | 02.10.2024 | [Exports und Imports mit rabin2 untersuchen (payload_2.so)](Assignment_004/readme.md) | **08.10.2024** | | ## 🎓 Benotung