
Performing Indirect Clean Syscalls
HellsHall est une combinaison de HellsGate et de syscalls indirects.
Tout d'abord, HellsHall vérifie si l'adresse du syscall est hookée et tente de récupérer le numéro du syscall en vérifiant la présence des octets suivants :
0x4C, 0x8B, 0xD1, 0xB8 qui représentent mov r10,rcx && mov eax,SSn. C'est ainsi que chaque syscall devrait commencer.
À ce stade, HellsGate récupère simplement le SSn (numéro de syscall) et l'utilise directement, ce qui entraîne l'appel d'un syscall depuis l'extérieur de l'espace d'adressage de ntdll.dll. Cela constitue en soi un IoC et peut être utilisé pour détecter de tels syscalls. Exemples de détection :
HellsHall, quant à lui, recherche une instruction syscall à proximité de l'adresse de la fonction syscall, puis enregistre l'adresse de l'instruction de ce syscall dans une variable globale qui sera utilisée plus tard pour effectuer un saut, plutôt que d'exécuter cette instruction directement depuis le fichier asm. Cela permet d'exécuter la fonction syscall depuis l'intérieur de l'espace d'adressage de ntdll.dll, avec pour seule différence qu'elle n'est pas hookée.
TartarusGate peut être utilisé pour améliorer davantage cette technique.


Contournement de l'EDR ci-dessous en utilisant cette implémentation de HellsHall qui utilise les syscalls NtAllocateVirtualMemory, NtProtectVirtualMemory et NtCreateThreadEx avec une section RWX.

Le dépôt Github peut être trouvé ici