
Performing Indirect Clean Syscalls
HellsHall é uma combinação de HellsGate e syscalls indiretos.
Primeiro, o HellsHall verifica se o endereço do syscall está hookado e tenta obter o número do syscall verificando a presença dos seguintes bytes:
0x4C, 0x8B, 0xD1, 0xB8 que representam mov r10,rcx && mov eax,SSn. É assim que todo syscall deve começar.
Neste ponto, o HellsGate simplesmente captura o SSn do syscall (Número do Syscall) e o usa diretamente, resultando em um syscall sendo chamado de fora do espaço de endereço do ntdll.dll. Isso é um IoC em si e pode ser usado para detectar tais syscalls. Exemplos de detecção:
No entanto, o HellsHall procurará uma instrução syscall próxima ao endereço da função do syscall e salvará o endereço da instrução do syscall em uma variável global para a qual um salto será feito posteriormente, em vez de executar essa instrução diretamente do arquivo asm. Isso fará com que a função do syscall seja executada de dentro do espaço de endereço do ntdll.dll, com a única diferença de que ela não está hookada.
O TartarusGate pode ser usado para aprimorar ainda mais essa técnica.


Contornando o EDR abaixo usando esta implementação do HellsHall que usa os syscalls NtAllocateVirtualMemory, NtProtectVirtualMemory e NtCreateThreadEx com uma seção RWX.

O repositório do Github pode ser encontrado aqui