SuperdEye:一款基于纯Go实现的间接系统调用执行工具

作者:Alpha_h4ck来源:FreeBuf
关于SuperdEye


SuperdEye是一款基于纯Go实现的间接系统调用执行工具,该工具是TartarusGate 的修订版,可以利用Go来实现TartarusGate 方法进行间接系统调用。


图片


该工具的目标是为了扫描挂钩的NTDLL并检索Syscall编号,然后使用它来执行间接系统调用,从而允许绕过基于函数钩子的AV/EDR。


工具功能


该工具将扫描已挂钩的 NTDLL。一旦找到目标函数,如果该函数被 AV 或 EDR 挂钩,将扫描上下相邻函数,直到找到干净的系统调用。这将允许计算目标函数的 ssn。一旦找到 ssn,就会构建一个间接系统调用。


工具运行原理如下图所示:


图片


工具要求


Golang


工具安装


由于该工具基于Go开发,因此我们首先需要在本地设备上安装并配置好最新版本的Go语言环境。


接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:


git clone https://github.com/almounah/superdeye.git


工具使用


该工具的使用非常简单,我们只需要直接导入包并使用即可。


SuperdEye 包公开了SuperSyscall,并可直接将其用于执行间接系统调用:



import (
"fmt"
"unsafe"

"github.com/almounah/superdeye"
)
...

NTSTATUS, err = superdeye.SuperdSyscall("NtCreateThreadEx", uintptr(unsafe.Pointer(&hThread)), uintptr(0x1FFFFF), uintptr(0), handleProcess, pBaseAddress, uintptr(0), uintptr(0), uintptr(0), uintptr(0), uintptr(0), uintptr(0))
if err != nil {
        fmt.Println("Syscall was not executed... Likely the Syscall was not found or a bug...")
fmt.Println(err.Error())
}
fmt.Println("Syscall NtCreateThreadEx Made with NTSTATUS ", NTSTATUS)

为了更好的可用性,一些系统调用已经跟官方包golang.org/x/sys/windows封装到一起以实现更好的兼容性:


import (
"fmt"
"unsafe"

"github.com/almounah/superdeye"
"golang.org/x/sys/windows"
)
...
pBaseAddress, NTSTATUS, err := superdeye.NtAllocateVirtualMemory(windows.Handle(handleProcess), uintptr(0), uintptr(len(payloadClearText)), windows.MEM_COMMIT|windows.MEM_RESERVE, windows.PAGE_EXECUTE_READWRITE)
if err != nil {
        fmt.Println("Syscall was not executed... Likely the Syscall was not found or a bug...")
fmt.Println(err.Error())
}
fmt.Println("Syscall NtAllocateVirtualMemory Made with NTSTATUS ", NTSTATUS)
...

未来将有更多 Syscalls 与官方 Windows 包兼容(欢迎贡献superdwrapper.go的代码)。


工具运行效果


图片


项目地址


SuperdEye:

https://github.com/almounah/superdeye


信天辰微信公众号
|
|
|
|
咨询合作电话:0531-88762231
地址:山东省济南市历下区舜泰广场8号楼西座9层