
Performing Indirect Clean Syscalls
HellsHallは、HellsGateと間接システムコールの組み合わせです。
まず、HellsHallはシステムコールアドレスがフックされているかどうかを確認し、以下のバイトが存在するかどうかをチェックしてシステムコール番号を取得しようとします:
0x4C, 0x8B, 0xD1, 0xB8 は mov r10,rcx && mov eax,SSn を表します。これはすべてのシステムコールがこのように始まるべきであることを示しています。
この時点で、HellsGateは単にSyscall SSn(システムコール番号)を取得し、それを直接使用して、ntdll.dllのアドレス空間の外からシステムコールを呼び出します。これはそれ自体がIoCであり、そのようなシステムコールを検出するために使用できます。検出例:
一方、HellsHallはシステムコール関数のアドレスの近くでsyscall命令を探し、このシステムコール命令のアドレスをグローバル変数に保存します。その後、asmファイルから直接この命令を実行するのではなく、その変数にジャンプします。これにより、システムコール関数がntdll.dllのアドレス空間内から実行されることになり、唯一の違いはフックされていないことです。
このテクニックをさらに強化するために、TartarusGateを使用できます。


RWXセクションを持つNtAllocateVirtualMemory、NtProtectVirtualMemory、NtCreateThreadExシステムコールを使用しているこのHellsHall実装を使用して、以下のEDRをバイパスします。

GitHubリポジトリはこちらにあります。