
Performing Indirect Clean Syscalls
HellsHall ist eine Kombination aus HellsGate und indirekten Syscalls.
Zuerst prüft HellsHall, ob die Syscall-Adresse gehookt ist, und versucht, die Syscall-Nummer abzurufen, indem es das Vorhandensein der folgenden Bytes prüft:
0x4C, 0x8B, 0xD1, 0xB8, die mov r10,rcx && mov eax,SSn repräsentieren. So sollte jeder Syscall beginnen.
An diesem Punkt übernimmt HellsGate einfach die Syscall-SSn (Syscall-Nummer) und verwendet sie direkt, was dazu führt, dass ein Syscall außerhalb des Adressraums von ntdll.dll aufgerufen wird. Das ist an sich ein IoC und kann verwendet werden, um solche Syscalls zu erkennen. Erkennungsbeispiele:
HellsHall hingegen sucht nach einer syscall-Anweisung in der Nähe der Adresse der Syscall-Funktion und speichert dann die Adresse dieser syscall-Anweisung in einer globalen Variablen, zu der später gesprungen wird, anstatt diese Anweisung direkt aus der asm-Datei auszuführen. Dadurch wird die Syscall-Funktion innerhalb des Adressraums von ntdll.dll ausgeführt, mit dem einzigen Unterschied, dass sie nicht gehookt ist.
TartarusGate kann verwendet werden, um diese Technik weiter zu verbessern.


Umgehen der unten abgebildeten EDR mit dieser HellsHall-Implementierung, die die Syscalls NtAllocateVirtualMemory, NtProtectVirtualMemory und NtCreateThreadEx mit einem RWX-Abschnitt verwendet.

Das GitHub-Repository ist hier zu finden.