Ghost 是一个 shellcode 加载器项目,旨在绕过通常由 EDR 实现的多种检测功能
检测 1-内核回调
内核回调由 EDR 实现,用于利用内核级系统事件可见性,这意味着 edrs 可以查看线程或进程的执行尝试
ghost 利用 Fiber 线程来规避这种检测技术,Fiber 线程是用户空间唯一的执行单元,不会提醒任何已注册的内核回调
检测2-堆栈展开
堆栈展开是 EDR 实现的一项技术,用于检测异常函数调用,包括直接和间接系统调用
ghost 利用 2 个堆栈欺骗技术来逃避此类检测
1 - 第一个是返回地址欺骗,用于从调用堆栈中隐藏正常函数和间接系统调用调用 2 - 第二种技术是使用函数挂钩并在纤程线程之间切换,以在休眠期间隐藏整个信标调用堆栈(所有纤程切换对内核也是不可见的)
检测 3 - 内存扫描
检测软件经常利用内存扫描来识别进程内存空间中的恶意 shellcode
ghost 实现了最初由roshtyak实现的 shellcode 隐藏技术,即分配一个非常大的内存空间,使用 SystemFunction036 (RtlGenRandom) 用随机加密数据填充该内存,并将 shellcode 放置在所有加密数据之间的随机位置,使其在手动和自动扫描期间更难检测到
还实施了其他较小的规避技术,例如
-
利用暂停的进程和间接系统调用来删除 EDR 安装的任何函数挂钩
-
通过修补内存中的核心函数来阻止 ETW
-
用于解析函数和系统服务号码 (SSN) 的自定义 API 哈希
-
将 shellcode 放入资源中(这非常有效 xD)
笔记
Ghost 严重依赖于了解你的信标如何休眠,以防万一发生钴攻击,kernel32!Sleep 函数被挂钩并替换为光纤调用,以允许切换和隐藏信标调用堆栈
如果你想将它与其他 C2 信标一起使用,你将需要使用像 apimonitor 这样的工具来拦截你的“信标”的 API 调用,检测睡眠时调用的 API 并在 Ghost.cpp 中替换它以将其挂钩,例如对于 MDSec 的 NightHawk,需要挂钩其中一个 CreateThreadPool API
建造
要构建二进制文件,请使用build.py提供 shellcode 的 python 脚本
EX:
python3 build.py -i shellcode.bin
编译是在 Linux 上使用 MinGW 套件完成的
上面是 Beacons 堆栈在休眠期间隐藏的示例
资源
https://github.com/Kudaes/Fiber
https://github.com/LloydLabs/shellcode-plain-sight
https://decoded.avast.io/janvojtesek/raspberry-robins-roshtyak-a-little-lesson-in-trickery/
项目地址:
https://github.com/cpu0x00/Ghost
原文始发于微信公众号(Ots安全):Ghost 是一个 shellcode 加载器项目,旨在绕过通常由 EDR 实现的多种检测功能
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论