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

科技   2025-01-19 10:02   上海  


关于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


FreeBuf粉丝交流群招新啦!
在这里,拓宽网安边界
甲方安全建设干货;
乙方最新技术理念;
全球最新的网络安全资讯;
群内不定期开启各种抽奖活动;
FreeBuf盲盒、大象公仔......
扫码添加小蜜蜂微信回复「加群」,申请加入群聊】





FreeBuf
中国网络安全行业门户
 最新文章