Update of exercises

master
Thomas Smits 2024-10-02 15:11:46 +02:00
parent 7f4e0dbfc9
commit cd0ae6e843
9 changed files with 152 additions and 30 deletions

Binary file not shown.

Binary file not shown.

View File

@ -1,40 +1,37 @@
# Assignment: Importe mit rabin2 untersuchen (payload_1)
# Assignment: Dateien mit `file` untersuchen (files.zip)
<!-- Points: 5 -->
**🎓 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)<!-- binary -->
* [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.

View File

@ -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.

View File

@ -1,4 +1,4 @@
# Assignment: Exports und Imports mit rabin2 untersuchen (payload_2.so)
# Assignment: Importe mit rabin2 untersuchen (payload_1)
<!-- Points: 5 -->
**🎓 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)<!-- binary -->
## 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.

View File

@ -0,0 +1,43 @@
# Assignment: Exports und Imports mit rabin2 untersuchen (payload_2.so)
<!-- Points: 5 -->
**🎓 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.

View File

@ -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