
Performing Indirect Clean Syscalls
HellsHall es una combinación de HellsGate y syscalls indirectos.
Primero, HellsHall comprueba si la dirección del syscall está hookeada e intenta recuperar el número de syscall comprobando la presencia de los siguientes bytes:
0x4C, 0x8B, 0xD1, 0xB8 que representan mov r10,rcx && mov eax,SSn. Así debería comenzar todo syscall.
En este punto, HellsGate simplemente toma el SSn del syscall (Número de Syscall) y lo usa directamente, lo que da como resultado que un syscall se ejecute desde fuera del espacio de direcciones de ntdll.dll. Esto es en sí mismo un IoC y se puede utilizar para detectar tales syscalls. Ejemplos de detección:
Sin embargo, HellsHall buscará una instrucción syscall cerca de la dirección de la función del syscall y luego guardará la dirección de la instrucción del syscall en una variable global a la que se saltará más adelante, en lugar de ejecutar esta instrucción directamente desde el archivo asm. Esto hará que la función del syscall se ejecute desde dentro del espacio de direcciones de ntdll.dll, con la única diferencia de que no está hookeada.
TartarusGate se puede utilizar para mejorar aún más esta técnica.


Evadiendo el EDR de abajo mediante Esta Implementación de HellsHall que utiliza los syscalls NtAllocateVirtualMemory, NtProtectVirtualMemory y NtCreateThreadEx con una sección RWX.

El repositorio de Github se puede encontrar aquí