
Performing Indirect Clean Syscalls
HellsHall — это комбинация HellsGate и косвенных сис-коллов (indirect syscalls).
Сначала HellsHall проверяет, перехвачен ли (hooked) адрес сис-колла, и пытается получить номер сис-колла, проверяя наличие следующих байтов:
0x4C, 0x8B, 0xD1, 0xB8, которые представляют собой mov r10,rcx && mov eax,SSn. Именно так должен начинаться каждый сис-колл.
На этом этапе HellsGate просто получает SSn (номер сис-колла) и использует его напрямую, в результате чего сис-колл вызывается извне адресного пространства ntdll.dll. Это само по себе является IoC-индикатором и может использоваться для обнаружения таких сис-коллов. Примеры обнаружения:
HellsHall, однако, ищет инструкцию syscall рядом с адресом функции сис-колла, а затем сохраняет адрес этой инструкции syscall в глобальную переменную, на которую будет совершён переход позже, вместо выполнения этой инструкции напрямую из asm-файла. Это приведёт к тому, что функция сис-колла будет выполнена изнутри адресного пространства ntdll.dll, с той лишь разницей, что она не перехвачена (unhooked).
TartarusGate можно использовать для дальнейшего улучшения этой техники.


Обход указанного ниже EDR с помощью этой реализации HellsHall, которая использует сис-коллы NtAllocateVirtualMemory, NtProtectVirtualMemory и NtCreateThreadEx с разделом RWX.

Репозиторий GitHub можно найти здесь