
Performing Indirect Clean Syscalls
HellsHall, HellsGate और अप्रत्यक्ष syscalls का एक संयोजन है।
सबसे पहले, HellsHall जाँचता है कि क्या syscall पता hooked है और निम्नलिखित bytes की उपस्थिति की जाँच करके syscall नंबर प्राप्त करने का प्रयास करता है:
0x4C, 0x8B, 0xD1, 0xB8 जो mov r10,rcx && mov eax,SSn को दर्शाते हैं। हर syscall इसी प्रकार शुरू होना चाहिए।
इस बिंदु पर, HellsGate केवल Syscall SSn (Syscall Number) को पकड़ता है और इसे सीधे उपयोग करता है, जिसके परिणामस्वरूप syscall ntdll.dll के address space के बाहर से कॉल किया जाता है। यह अपने आप में एक IoC है और इसका उपयोग ऐसे syscalls का पता लगाने के लिए किया जा सकता है। पता लगाने के उदाहरण:
हालाँकि, HellsHall syscall फ़ंक्शन के पते के पास एक syscall instruction खोजेगा और फिर इस syscall की instruction के पते को एक global variable में सहेज लेगा, जिस पर बाद में jump किया जाएगा, बजाय इस instruction को सीधे asm फ़ाइल से निष्पादित करने के। इससे syscall फ़ंक्शन ntdll.dll address space के अंदर से निष्पादित होगा, केवल इतने अंतर के साथ कि यह unhooked होता है।
इस तकनीक को और बेहतर बनाने के लिए TartarusGate का उपयोग किया जा सकता है।


निम्नलिखित EDR को यह HellsHall Implementation का उपयोग करके बायपास करना, जो NtAllocateVirtualMemory, NtProtectVirtualMemory, और NtCreateThreadEx syscalls को RWX section के साथ उपयोग करता है।

Github repo यहाँ पाया जा सकता है।