
Performing Indirect Clean Syscalls
HellsHall 是 HellsGate 与间接系统调用的结合。
首先,HellsHall 检查 系统调用地址 是否被挂钩,并通过检查是否存在以下字节来尝试获取系统调用编号:
0x4C, 0x8B, 0xD1, 0xB8 分别代表 mov r10,rcx && mov eax,SSn。这是每个系统调用应有的起始方式。
此时,HellsGate 只是获取系统调用 SSn(系统调用编号)并直接使用它,导致系统调用从 ntdll.dll 地址空间之外被调用。这本身就是一个 IoC(入侵指标),可用于检测此类系统调用。检测示例:
然而,HellsHall 会在系统调用函数地址附近搜索 syscall 指令,然后将该 系统调用指令的地址 保存到一个全局变量中,之后会跳转到该地址,而不是直接从 asm 文件中执行该指令。这将使系统调用函数在 ntdll.dll 地址空间内执行,唯一不同的是它未被挂钩。
可以使用 TartarusGate 进一步增强此技术。


使用 此 HellsHall 实现 绕过以下 EDR,该实现使用了 NtAllocateVirtualMemory、NtProtectVirtualMemory 和 NtCreateThreadEx 系统调用,并带有一个 RWX 内存区。

GitHub 仓库可在此处找到