
Unauffälligere Variante der Module-Stomping- und Module-Overloading-Injektionstechniken, die Speicher-IoCs reduziert. Implementiert in Python ctypes.
Dieses Tool wurde vorgestellt auf dem 2023 x33fcon talk: "Improving the stealthiness of Memory Injection Techniques" [Video] [Blogpost]
ModuleShifting ist eine heimlichere Variante der Module-Stomping- und Module-Overloading-Injektionstechnik. Es ist in Python ctypes implementiert, sodass es vollständig im Speicher über einen Python-Interpreter und Pyramid ausgeführt werden kann, wodurch die Verwendung kompilierter Loader vermieden wird.
Die Technik kann mit PE- oder Shellcode-Payloads verwendet werden, die heimlichere Variante ist jedoch für Shellcode-Payloads gedacht, die funktional unabhängig vom endgültigen Payload sein müssen, den der Shellcode lädt.
ModuleShifting führt bei Verwendung mit Shellcode-Payload die folgenden Operationen durch:

Bei Verwendung eines PE-Payloads führt ModuleShifting die folgenden Operationen durch:
ModuleShifting kann verwendet werden, um einen Payload zu injizieren, ohne dynamisch Speicher zuzuweisen (d.h. VirtualAlloc), und ist im Vergleich zu Module Stomping und Module Overloading heimlicher, da es die Anzahl der von der Injektionstechnik selbst erzeugten IoCs verringert.
Es gibt 3 Hauptunterschiede zwischen Module Shifting und einigen öffentlichen Implementierungen von Module Stomping (eine von Bobby Cooke und WithSecure)
Die Unterschiede zwischen Module Shifting und Module Overloading sind die folgenden:
Mit einem funktional unabhängigen Shellcode-Payload wie einem AceLdr Beacon Stageless Shellcode-Payload ist ModuleShifting in der Lage, lokal zu injizieren, ohne dynamisch Speicher zuzuweisen, und erzeugt derzeit null IoCs bei einem Moneta- und PE-Sieve-Scan. Mir ist bewusst, dass die AceLdr-Schlaf-Payloads mit anderen großartigen Tools wie Hunt-Sleeping-Beacon erkannt werden können, aber der Fokus liegt hier auf der Injektionstechnik selbst, nicht auf dem Payload. In unserem Fall ermöglicht die funktionale Unabhängigkeit des Shellcodes mehr Heimlichkeit bei der Injektion, sodass die geschriebenen bösartigen Bytes auf ihren ursprünglichen Inhalt zurückgesetzt werden können, wodurch die Spuren der Injektion effektiv gelöscht werden.
Alle Informationen und Inhalte werden nur zu Bildungszwecken bereitgestellt. Befolgen Sie die Anweisungen auf eigenes Risiko. Weder der Autor noch sein Arbeitgeber haften für direkte oder indirekte Schäden oder Verluste, die durch eine Person oder Organisation entstehen.
Diese Arbeit wurde ermöglicht durch das Wissen und die Werkzeuge, die von unglaublichen Menschen wie Aleksandra Doniec @hasherezade, Forest Orr und Kyle Avery geteilt wurden. Ich habe Moneta, PeSieve, PE-Bear und AceLdr intensiv während meines gesamten Lernprozesses genutzt und sie waren entscheidend für mein Verständnis dieses Themas.
ModuleShifting kann mit Pyramid und einem Python-Interpreter verwendet werden, um die lokale Prozessinjektion vollständig im Speicher auszuführen und so kompilierte Loader zu vermeiden.
git clone https://github.com/naksyn/Pyramid
python3 pyramid.py -u testuser -pass testpass -p 443 -enc chacha20 -passenc superpass -generate -server 192.168.1.2 -setcradle moduleshifting.pyhttps://github.com/naksyn/ModuleShifting/assets/59816245/67fcf888-3385-47da-b828-8a2dafeeb1e2
Um diese Technik erfolgreich auszuführen, sollten Sie einen Shellcode-Payload verwenden, der in der Lage ist, einen zusätzlichen eigenständigen Payload in einem anderen Speicherbereich zu laden. ModuleShifting wurde mit dem AceLdr-Payload getestet, der eine vollständige Kopie von Beacon auf dem Heap laden kann, wodurch die funktionale Abhängigkeit vom initialen Shellcode aufgehoben wird. Diese Technik würde mit jedem Shellcode-Payload funktionieren, der ähnliche Fähigkeiten hat. Der anfängliche Shellcode wird nach der Ausführung nutzlos, und es gibt keinen Grund, ihn als IoC im Speicher zu behalten.
Es sollte auch eine Hosting-DLL mit ausreichend Platz für den Shellcode im Zielabschnitt gewählt werden, sonst schlägt die Technik fehl.
Module Stomping und Module Shifting müssen Shellcode in den Speicherbereich einer legitimen DLL schreiben. ModuleShifting beseitigt diesen IoC nach der Bereinigungsphase, aber Indikatoren könnten von Scannern mit Echtzeit-Inspektionsfunktionen erkannt werden.
