使用Go汇编进行AV/EDR规避的间接系统调用
作者:Sec-Labs | 发布时间:
项目地址
https://github.com/f1zm0/acheron

Acheron是一个受到SysWhisper3/FreshyCalls/RecycledGate启发的库,其中大部分功能都是用Go汇编实现的。
acheron包可以用于为您的Golang工艺添加间接系统调用的功能,以绕过使用用户模式钩子和instrumentation callbacks检测不返回到ntdll.dll的异常系统调用的杀毒软件/EDR。当调用从内核转换回用户态时。
主要特性
- 无依赖性
- 纯Go和Go汇编实现
- 支持自定义字符串加密/哈希函数以抵抗静态分析
创建新的系统调用代理实例时,会执行以下步骤:
-
遍历PEB以获取内存中ntdll.dll的基址
-
解析导出目录以获取每个导出函数的地址
-
计算每个
Zw*函数的系统服务号码 -
枚举ntdll.dll中未被钩取/清除的
syscall;ret片段,用作跳板 -
创建代理实例,可用于进行间接(或直接)系统调用
快速入门
将acheron集成到您的安全工具中非常简单。您可以使用以下命令安装该包:
shellCopy codego get -u github.com/f1zm0/acheron
然后,只需调用acheron.New()创建一个系统调用代理实例,并使用acheron.Syscall()对Nt*API进行间接系统调用。
package main
import (
"fmt"
"unsafe"
"github.com/f1zm0/acheron"
)
func main() {
var (
baseAddr uintptr
hSelf = uintptr(0xffffffffffffffff)
)
// creates Acheron instance, resolves SSNs, collects clean trampolines in ntdll.dlll, etc.
ach, err := acheron.New()
if err != nil {
panic(err)
}
// indirect syscall for NtAllocateVirtualMemory
s1 := ach.HashString("NtAllocateVirtualMemory")
if retcode, err := ach.Syscall(
s1, // function name hash
hSelf, // arg1: _In_ HANDLE ProcessHandle,
uintptr(unsafe.Pointer(&baseAddr)), // arg2: _Inout_ PVOID *BaseAddress,
uintptr(unsafe.Pointer(nil)), // arg3: _In_ ULONG_PTR ZeroBits,
0x1000, // arg4: _Inout_ PSIZE_T RegionSize,
windows.MEM_COMMIT|windows.MEM_RESERVE, // arg5: _In_ ULONG AllocationType,
windows.PAGE_EXECUTE_READWRITE, // arg6: _In_ ULONG Protect
); err != nil {
panic(err)
}
fmt.Printf(
"allocated memory with NtAllocateVirtualMemory (status: 0x%x)\n",
retcode,
)
// ...
}
示例
该存储库包含以下示例:
| 示例 | 描述 |
|---|---|
| sc_inject | 非常简单的进程注入概念验证,支持直接和间接系统调用 |
| process_snapshot | 使用间接系统调用对进程进行快照 |
| custom_hashfunc | 使用acheron的自定义编码/哈希函数示例 |
其他使用acheron的项目:
贡献
欢迎贡献!以下是一些未来可能有用的功能:
- 32位支持
- 其他解析器类型(例如HalosGate/TartarusGate)
- 更多示例
如果您有任何建议或想法,请随时提出问题或PR。
参考资料
- Golang UK 2016大会 - Michael Munday - 在汇编中嵌入Go函数
- https://github.com/am0nsec/HellsGate
- https://sektor7.net/#!res/2021/halosgate.md
- https://github.com/trickster0/TartarusGate
- https://github.com/klezVirus/SysWhispers3
- https://github.com/crummie5/FreshyCalls
- https://github.com/boku7/AsmHalosGate
- https://github.com/thefLink/RecycledGate
- https://github.com/C-Sto/BananaPhone
- https://winternl.com/detecting-manual-syscalls-from-user-mode/
- https://www.usenix.org/legacy/events/vee06/full_papers/p154-bhansali.pdf
- https://redops.at/en/blog/direct-syscalls-a-journey-from-high-to-low
标签:工具分享, 免杀工具, 免杀技巧, 主机安全