
Esecuzione di syscall pulite indirette
HellsHall è una combinazione di HellsGate e syscall indirette.
In primo luogo, HellsHall controlla se l'indirizzo della syscall è hookato e tenta di recuperare il numero della syscall verificando la presenza dei seguenti byte:
0x4C, 0x8B, 0xD1, 0xB8 che rappresentano mov r10,rcx && mov eax,SSn. È così che ogni syscall dovrebbe iniziare.
A questo punto, HellsGate si limita a recuperare l'SSn della syscall (Syscall Number) e lo usa direttamente, facendo sì che una syscall venga chiamata dall'esterno dello spazio degli indirizzi di ntdll.dll. Questo è di per sé un IoC e può essere usato per rilevare tali syscall. Esempi di rilevamento:
HellsHall, invece, cerca un'istruzione syscall vicino all'indirizzo della funzione della syscall e poi salva l'indirizzo dell'istruzione della syscall in una variabile globale a cui verrà saltato in seguito, piuttosto che eseguire questa istruzione direttamente dal file asm. Ciò farà sì che la funzione della syscall venga eseguita dall'interno dello spazio degli indirizzi di ntdll.dll, con l'unica differenza che non è hookata.
TartarusGate può essere usato per migliorare ulteriormente questa tecnica.


Bypassare l'EDR qui sotto utilizzando questa implementazione di HellsHall che usa le syscall NtAllocateVirtualMemory, NtProtectVirtualMemory e NtCreateThreadEx con una sezione RWX.

Il repository GitHub può essere trovato qui