随着恶意软件检测技术的发展,攻击者用来逃避检测的方法也在不断改进。
VOIDMAW 是一种创新的内存扫描绕过技术,可以有效地隐藏有问题的代码,不让防病毒软件发现。
它支持多线程负载,并与所有命令和控制 (C2) 信标兼容。此外,VOIDMAW 可以运行任何非 .NET 可执行文件,使其成为攻击者手中的强大工具。
VOIDMAW 采用两个程序来实现其目标:
1. Dismantle
这是 VOIDMAW 过程的第一部分。该程序将有效载荷(例如Cobalt Strike信标或转换为 shellcode 的可执行文件(如Mimikatz))读入内存并开始记录其行为。
它记录执行的每条唯一指令及其在内存中的偏移量。这些数据稍后将用于生成头文件,这对于通过Voidmaw程序执行有效载荷至关重要。
Dismantle中的步骤如下:
PAGE_GUARD 保护:程序在保存有效载荷的内存页面上设置 PAGE_GUARD 保护。每当尝试在该页面上执行代码时,此保护都会触发异常。
向量异常处理程序 (VEH):安装 VEH 是为了处理 PAGE_GUARD 引发的异常。VEH 有两个主要职责:
STATUS_GUARD_PAGE_VIOLATION 处理:捕获已执行的指令,并将其保存在映射结构中,同时保持 PAGE_GUARD 保护。
EXCEPTION_SINGLE_STEP 处理:这会在记录每条指令后恢复 PAGE_GUARD,确保后续指令触发新的异常,从而允许连续的指令记录。
一旦记录了所有指令,就会使用INT3指令(软件断点)对其进行加密和屏蔽,以隐藏执行的代码。此过程的输出是一个头文件,其中包括:
1. 被屏蔽的原始有效载荷。
2. 用于解密指令的 XOR 加密密钥。
3. 包含加密指令及其偏移量的无序映射。
4. InitMap函数用于初始化第二个程序Voidmaw中的地图。
2.VOIDMAW
一旦有效载荷被 Dismantle 处理,它就可以被Voidmaw执行。该程序使用 Dismantle 生成的头文件动态解密并执行有效载荷,同时保持一定程度的隐蔽性,使内存扫描仪难以检测到。
执行过程如下:
InitMap函数:Voidmaw首先调用InitMap函数初始化加密指令的地图。
内存分配:创建一个内存区域,并将屏蔽的有效载荷写入该空间。
向量异常处理程序 (VEH):Voidmaw 安装了一个新的 VEH 来处理EXCEPTION_BREAKPOINT,只要程序在执行过程中遇到INT3指令就会触发该处理程序。
当 VEH 遇到INT3时,它会检查异常的偏移量并在无序映射中查找它。然后解密加密的汇编指令,在指令指针处恢复并执行。执行后,该指令再次用INT3屏蔽,每次只留下一条可见的汇编指令。
此过程对每个线程重复,使 Voidmaw 能够无缝处理多线程有效载荷。
这种技术可确保在任何给定时间内只有一条指令可见,这使得内存扫描器难以捕获整个恶意代码序列。
VOIDMAW 是一种用于逃避内存扫描的高级技术,它标志着恶意软件执行领域的新前沿。
它能够屏蔽执行的指令并处理多线程负载,使其成为绕过传统防病毒防御的绝佳工具。
由于 VOIDMAW 是开源的,可在GitHub上获取,因此其技术可供广泛的用户使用,既可用于研究,也可用于恶意目的。
VOIDMAW 代表了规避技术的重大进步。它能够绕过传统的内存扫描器,这引起了安全专业人员的担忧。
组织需要意识到这些先进的技术,并采取行为分析和异常检测等主动措施来应对这些不断演变的威胁。