Shinigami ist ein experimentelles Tool zum Erkennen und Entpacken von Malware-Implantaten, die über Process Hollowing oder generische Packer-Routinen eingeschleust werden.
Das Tool bindet NT-Funktionen im Zusammenhang mit Process Hollowing ein und markiert neu ausführbare Speicherseiten mit dem Seitenschutzbit. Mit dieser Technik kann Shinigami indirekte Flussänderungen erkennen, die typischerweise durch Shellcode oder entpackten Code verursacht werden und oft auf Malware hinweisen. Shinigami erstellt die ausführbare Zieldatei im angehaltenen Zustand und fügt eine DLL-Bibliothek namens „Ichigo“ ein. Diese Bibliothek bindet automatisch alle notwendigen Funktionen ein, um das Implantat zu erkennen und zu extrahieren. Sobald das Artefakt vollständig extrahiert ist, bricht das Tool den Prozess ab.
Die Wirksamkeit von Shinigami kann je nach der spezifischen Malware, auf die es abzielt, variieren. Es ist jedoch eine wertvolle Ergänzung zu jedem Malware-Analyse-Toolkit und kann sich bei der Erkennung und Analyse von Malware als nützlich erweisen, die Process Hollowing oder generische Packer-Routinen verwendet.
Wichtig: Dies ist ein dynamisches Entpacktool und sollte nicht auf Ihrem persönlichen Computer oder in einem statischen Analyselabor ausgeführt werden
Shinigamis Kernmethode zum Extrahieren von Implantaten, die mithilfe der Prozessaushöhlung injiziert wurden, besteht darin, zwei NT-Funktionen einzubinden: NtResumeThread und NtWriteVirtualMemory. So funktioniert es:
NtResumeThread
Hook
NtWriteVirtualMemory
Hook
--stop-at-write
übergeben wird. Das generische Entpacker-Modul von Shinigami markiert neu zugewiesene Speicherbereiche mit dem PAGE_GUARD-Bit. Es wendet dieses Bit auch an, wenn der Schutz eines vorhandenen Speicherbereichs durch eine ausführbare Datei ersetzt wird. Durch die Verwendung von Schutzseiten kann verfolgt werden, welcher Speicherbereich für die Zuweisung einiger Shellcode- oder PE-Bilder verwendet wird.
Für jeden erkannten Shellcode speichert Shinigami den rohen Shellcode selbst auf der Festplatte. Außerdem wird dieser Speicherbereich nach PE-Dateien durchsucht und diese ebenfalls gespeichert. Shinigami behandelt jede unterschiedliche Shellcode-Ausführung als eine neue Phase, sodass Sie am Ende Ihr Arbeitsverzeichnis mit Dateien namens filename_shellcode_STAGENUM.bin or .exe
haben.
Das Tool bietet mehrere Optionen:
Usage: Shinigami [--help] [--version] [--output VAR] [--stop-at-write] [--verbose] [--only-executables] [--exported VAR] program_name
Positional arguments:
program_name Name of the program to execute
Optional arguments:
-h, --help shows help message and exits
-v, --version prints version information and exits
-o, --output Directory to dump artefacts
--stop-at-write Unhollow: Stop the execution when the PE file is being to be written
--verbose Display a verbose output
-p, --only-executables Only extract PE artefacts
-e, --exported Exported Function: Choose a exported function to execute if the target is a DLL (rundll will be used)
Einige wichtige Optionen sind:
-o, --output : Gibt das Verzeichnis an, in dem die extrahierten Artefakte ausgegeben werden sollen. Standardmäßig werden extrahierte Artefakte in einem Verzeichnis namens „output“ im aktuellen Arbeitsverzeichnis gespeichert. Sie können ein anderes Verzeichnis angeben, indem Sie dessen Pfad als Argument übergeben.
--stop-at-write : Dieses Argument wird beim Entpacken eines ausgehöhlten Prozesses verwendet. Wenn Shinigami erkennt, dass die PE-Datei in den ausgehöhlten Prozess geschrieben wird, stoppt es die Ausführung und speichert die extrahierte PE-Datei. Diese Option kann nützlich sein, wenn Sie die Ausführung des gesamten ausgehöhlten Prozesses vermeiden möchten und nur den entpackten Code extrahieren müssen.
--verbose : Zeigt eine ausführliche Ausgabe an. Dies kann nützlich sein, um Fehler zu beheben oder das Innenleben von Shinigami zu verstehen.
Testen gegen Dridex |
Nachdem die Extraktion abgeschlossen ist, wird der Prozess abgebrochen und Sie erhalten (hoffentlich) das extrahierte PE:
Implantat entsorgt |
Das erkannte Implantat wird gemäß dem im Abschnitt „Erkennungsmethoden“ beschriebenen Format ausgegeben
Das Auspacken eines zufälligen Ladeprogramms wird hier beschrieben |
Im obigen Beispiel hat Shinigami automatisch das Verhalten eines generischen Loaders erkannt und alle darin enthaltenen ausgeführten Shellcodes und Bilder extrahiert, ohne dass spezielle Schalter zum Aktivieren oder Deaktivieren der Entpackroutine erforderlich waren. Dies war möglich, weil Shinigami einige Funktionen mit dem Unhollow-Modul teilt und dabei gemeinsame Hooks verwendet, die von der Gancho-Bibliothek bereitgestellt werden.
Entpacken der Emotet-DLL |
Shinigami bietet außerdem DLL-Unterstützung und die Möglichkeit, eingefügte Binärdateien mithilfe von abgetrennten DOS-Headern neu zu erstellen. Insbesondere Malware-Beispiele wie Emotet nutzen diese Technik, um In-Memory-PE-Scanner zu umgehen. Shinigami erkennt solche fehlenden Teile (DOS-Header) und rekonstruiert sie mithilfe von Heuristiken.
Holen Sie sich Ihren Geschmack auf der Release-Seite.
Es wäre großartig, wenn Sie diesem Projekt helfen würden. Wenn Sie möchten, finden Sie hier die Abhängigkeiten und Schritte
Bitte öffnen Sie ein Problem oder eine Pull-Anfrage für alle Änderungen, die Sie vornehmen möchten.
Dieses coole Maskottchenbild wurde von Bleach inspiriert und von Dall-E erstellt.