So analysieren und kategorisieren Sie ausführbare Dateien
- Wir müssen oft wissen, ob ein Dateiobjekt bestimmte Operationen ausführt oder nicht
- Es gibt Tools und Techniken, mit denen wir schnell feststellen können, ob Code eine verdächtige Funktion oder ein verdächtiges Muster verwendet
- Das Definieren unseres Zwecks ist der schwierigste Teil des gesamten Prozesses
- Entwickeln Sie Ihre eigenen Tools, erkunden Sie alle Optionen und verwenden Sie sie, um Ihren Code in einer isolierten Umgebung zu analysieren
Manchmal müssen wir während unserer Projekte ein Stück Software gründlich untersuchen, ohne Zugriff auf den Quellcode zu haben. Zum Beispiel müssen wir möglicherweise verstehen, wie eine mobile Anwendung funktioniert, prüfen, ob sie bestimmte Operationen ausführt oder nicht, oder einfach sehen, ob es uns erlaubt, Operationen auszuführen, die nicht beabsichtigt sind.
Zum Beispiel erklärt Tommaso Vasella in Mobile Application Analysis, wie man eine Android-Anwendung mit Reverse-Engineering-Techniken analysiert (für eine grundlegende Einführung in Reverse Engineering siehe Reverse Engineering von Ralph Mayer). Der Artikel zeigt, wie einige sehr komplexe Techniken und Technologien verwendet werden können, die ein normaler IT-Anwender wahrscheinlich nicht verwenden könnte oder für die er keine Zeit hätte, wenn er es eilig hätte.
Während tcpdump nicht das erste Tool ist, das Sie verwenden sollten, wenn Sie ein Netzwerkproblem haben, gibt es einige grundlegende Schritte, die Sie unternehmen können, bevor Sie Ghidra starten und anfangen, durch den Code hin und her zu springen.
Wenn Sie eine ausführbare Datei erhalten, ist Ihr erster Gedanke wahrscheinlich: Wo fange ich an? Wenn Sie nur wissen möchten, ob eine Bedrohung vorliegt oder nicht, denken wir, dass ein Antivirenprogramm ein guter Ausgangspunkt ist. Es kann jedoch noch mehr getan werden.
Die Analyse kann grob in statische und dynamische unterteilt werden, wie wir in Reverse Engineering:?labs.20211202 gesehen haben. Im Gegensatz zur dynamischen Analyse, die sich auf die Aktivität des Objekts konzentriert, betrachtet die statische Analyse das Erscheinungsbild des Objekts. Da die statische Analyse keine laufenden Programme erfordert, ist sie viel einfacher und sicherer. Diese Art der Analyse ist jedoch keine exakte Wissenschaft. Jeder von uns entwickelt im Laufe der Zeit persönliche Fähigkeiten und Methoden, aber die Aufgabe besteht im Wesentlichen darin, die durch den Code verbreiteten Informationen zu suchen, zu sammeln und zusammenzustellen. Es gibt keine Checkliste, der Sie folgen müssen, aber es gibt bekannte Muster und Tools, die Sie verwenden können.
Die zu befolgenden allgemeinen Schritte sind logisch und einfach:
- entscheiden, was wir wissen wollen
- Lassen Sie uns herausfinden, womit wir es zu tun haben
- Finden Sie einen effizienten Weg, um die Antwort zu finden
- Finden Sie ein oder mehrere Tools, die uns helfen können
- die Analyse durchführen
Dies ist die schwierigste Phase des Verfahrens. Zweifellos werden wir viele Hinweise finden, wenn wir anfangen, „nach etwas zu suchen“, aber sie werden entweder nicht nützlich sein, oder wir haben viel Zeit damit verbracht, nutzlose Hinweise zu sammeln.
Daher müssen wir zumindest allgemein den Bereich definieren, an dem wir interessiert sind: Netzwerk-, Dateisystem- oder Registrierungszugriff, Überwachung, Verschleierungs- oder Umgehungsmethoden usw. So können wir das Objekt nach Verweisen auf bestimmte Funktionen scannen und schnell entscheiden, ob wir es weiter untersuchen oder zum nächsten Punkt übergehen wollen.
Die Dinge sind nicht immer so einfach; Die Programmierer dieser Objekte wenden bestimmte Taktiken an, um die Untersuchung zu erschweren und die Aktivitäten, die das Objekt ausführen soll, so lange wie möglich zu verbergen. Sie verwenden beispielsweise Verschleierungsmethoden (z. B. Wrapping) oder versuchen bei der dynamischen Analyse herauszufinden, ob ein Benutzer tatsächlich mit dem Objekt arbeitet, ob er in einer Sandbox läuft oder ob jemand versucht, das Objekt zu leeren der Aktivitätsmonitor des Objekts. Dies sind nur einige der Techniken, die verwendet werden, um zu vermeiden, dass sie von modernen Sicherheitssystemen als Bedrohung identifiziert werden.
Lassen Sie uns nun den Umfang unserer Untersuchung definieren. Wir wollen feststellen, ob das Objekt:
- verwendet ein Verschleierungsmodell
- Injektionsmuster verwendet
- Netzwerkzugang
Um eine schnelle erste Antwort zu erhalten – idealerweise innerhalb von Minuten – wenden wir nur eine statische Analyse an, bevor wir entscheiden, ob wir zur dynamischen Analyse oder sogar zu Demontagetechniken übergehen.
Das Instrumentarium hängt von der Situation ab. Wählen Sie Ihre Tools aus, erkunden Sie ihre Optionen im Detail und verwenden Sie sie, um das Objekt in einer isolierten Umgebung zu analysieren, normalerweise einer virtuellen Maschine ohne permanente Netzwerkverbindung. Abgesehen von der Untersuchung bestimmter Objekte, wie z. B. .NET, kann der statische Teil auf jedem Betriebssystem ausgeführt werden. Wir bevorzugen REMnux, eine dedizierte Linux-Distribution, die die meisten unserer Lieblingstools enthält. Unter Windows haben wir die entsprechende Version der meisten Tools zur Verfügung, und wie Mark Russinovich gerne sagt, führen Sie im Zweifelsfall procmon aus!
Für die Experimente wurde folgendes Objekt sample_01.exe verwendet. Es wird empfohlen, dass Sie die URL nach dem Lesen des Artikels besuchen, wenn Sie mit MalwareBazaar (oder anderen Websites ähnlicher Art) nicht vertraut sind, um die Bedeutung der präsentierten Daten besser einschätzen zu können.
remnux@remnux:~/Desktop/malware/Injecting$ 7z e 24797d733e9fdd39bcf5b3910438bb449c84428082325f27652330019be683b3.zip 7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 Bit, 2 Intel(R) Core(TM) Prozessoren i7-8550U CPU @ 1.80GHz (806EA),ASM,AES-NI) Scanning the drive for archives: 1 file, 204544 bytes (200 KiB) Extracting archive: 24797d733e9fdd39bcf5b3910438bb449c84428082325f27652330019be683b3.zip — Path = 24797d733e9fdd39bcf5b3910438bb449c84428082325f27652330019be683b3.zip Type = zip Physical Size = 204544 Passwort eingeben (wird nicht wiederholt): >infected< Alles ist OK Größe: 208384 Komprimiert: 204544 remnux@remnux:~/Desktop/malware/Injecting$ mv 24797d733e9fdd39bcf5b3910438bb449c84428082325f33025fexe27025
Der erste Schritt besteht darin, zu verstehen, was wir sehen. Wir neigen dazu zu glauben, dass die exe-Erweiterung mit Windows verbunden ist, aber es gibt tatsächlich mehrere Formate von ausführbaren Dateien, die die exe-Erweiterung verwenden. Wir können verschiedene Tools verwenden, aber die einfachsten sind File oder TrID:
emnux@remnux:~/Desktop/malware/Injecting$ file sample_01.exe sample_01.exe: Ausführbare PE32-Datei (GUI) Intel 80386, für MS Windows, UPX-komprimiert remnux@remnux:~/Desktop/malware/Injecting$ trid sample_01. exe.exe TrID/32 – Datei-ID v2.24 – (C) 2003-16 Von M.Pontello Gefundene Definitionen: 14978 Analysiere… Daten werden aus Datei gesammelt: sample_01.exe 63,4 % (.EXE) UPX-komprimierte ausführbare Win32-Datei (27066/9/6) 11,8 % (.EXE) Win16 NE Ausführbare Datei (generisch) (5038/12/1) 10,5 % (.EXE) Win32 Ausführbare Datei (generisch) (4505/5/1) 4,7 % (. EXE) Ausführbare OS/2-Datei (generisch) (2029/13) 4,6 % (.EXE) Generische ausführbare Win/DOS-Datei (2002/3)
Dieses Objekt ist eine portable ausführbare Datei für MS Windows, und wir können sofort ein Detail bemerken: Es enthält komprimierten Code. Der Komprimierungsmechanismus ist in diesem Fall bekannt: UPX, und wir können den komprimierten Teil leicht extrahieren:
remnux@remnux:~/Desktop/malware/Injecting$ upx -d sample_01.exe -o sample_01.exe_upx_unpacked Ultimate Packer for eXecutables Copyright (C) 1996 – 2020 UPX 3.96 Markus Oberhumer, Laszlo Molnar & John Reiser 23. Januar 2020 Verhältnis von Dateigröße Formatname ——————– —— ———– —— — — upx: sample_01.exe: FileAlreadyExistsException: sample_01.exe_upx_unpacked: Datei existiert bereits Entpackte 0 Dateien. remnux@remnux:~/Desktop/malware/Injecting$ file sample_01.exe_upx_unpacked sample_01.exe_upx_unpacked: Ausführbare PE32-Datei (GUI) Intel 80386, für MS Windows
Nach der Dekomprimierung können wir uns den Inhalt ansehen:
remnux@remnux:~/Desktop/malware/Injecting$ binwalk -B sample_01.exe_upx_unpacked DEZIMAL HEXADEZIMAL BESCHREIBUNG ———————— ————– ———————————— ————– – 0 0x0 Microsoft Executable, Portable (PE) 146968 0x23E18 CRC32-Polynomtabelle, Little Endian 151840 0x25120 Microsoft Executable, Portable (PE) 462541 0x70ECD mcrypt 2.5 verschlüsselte Daten, Algorithmus: „sProcessorFeaturePresent“, Schlüsselgröße: 1069 Byte, Modus: „Q“, 463648 0x71320 CRC32-Polynomtabelle, Little Endian 470260 0x72CF4 XML-Dokument, Version: „1.0“ 483616 0x76120 Microsoft ausführbar, portierbar (PE) 562449 0x89521 verschlüsselter Datenalgorithmus,5 m : „sProcessorFeaturePresent“, Schlüsselgröße: 1069 Byte, Modus: „, 566944 0x8A6A0 XML-Dokument, Version: „1.0“ 572512 0x8BC60 XML-Dokument, Version: „1.0“
Wie wir bereits wissen, ist dies eine Microsoft Portable Executable (PE)-Datei, aber diese Zeichenfolge erscheint dreimal! Das Objekt enthält höchstwahrscheinlich mehrere ausführbare Dateien. Bei Bedarf können die verschiedenen ausführbaren Dateien extrahiert und unabhängig voneinander analysiert werden (es gibt zwei DLL-Dateien):
remnux@remnux:~/Desktop/malware/Injecting$ ll total 980 drwxrwxr-x 2 remnux remnux 4096 Aug 29 03:28 ./ drwxrwxr-x 8 remnux remnux 4096 Aug 27 05:22…
Add Comment