
간접 클린 시스콜 수행
HellsHall은 HellsGate와 간접 시스템 콜(indirect syscalls)의 결합입니다.
먼저 HellsHall은 시스템 콜 주소가 후킹되었는지 확인하고 다음 바이트들의 존재를 검사하여 시스템 콜 번호를 검색합니다:
0x4C, 0x8B, 0xD1, 0xB8 이는 mov r10,rcx && mov eax,SSn을 나타냅니다. 모든 시스템 콜은 이렇게 시작해야 합니다.
이 시점에서 HellsGate는 Syscall SSn(시스템 콜 번호)을 가져와서 직접 사용하므로 ntdll.dll의 주소 공간 외부에서 시스템 콜이 호출됩니다. 이 자체가 IoC이며 이러한 시스템 콜을 탐지하는 데 사용될 수 있습니다. 탐지 예시:
하지만 HellsHall은 시스템 콜 함수의 주소 근처에서 syscall 명령을 검색한 다음 이 시스템 콜 명령의 주소를 전역 변수에 저장하여, asm 파일에서 직접 이 명령을 실행하는 대신 나중에 해당 주소로 점프합니다. 이로 인해 시스템 콜 함수가 ntdll.dll 주소 공간 내부에서 실행되며, 유일한 차이점은 후킹되지 않았다는 점입니다.
TartarusGate를 사용하여 이 기법을 더욱 향상시킬 수 있습니다.


NtAllocateVirtualMemory, NtProtectVirtualMemory, NtCreateThreadEx 시스템 콜과 RWX 섹션을 사용하는 이 HellsHall 구현으로 아래 EDR을 우회합니다.

Github 저장소는 여기에서 찾을 수 있습니다.