探索ShellGhost:隐形的内存逃避艺术
ShellGhost是一种创新的技术,它以独特的方式让shellcode在进程启动到结束的过程中始终保持无形。这个开源项目旨在分享一个自我注入的Proof-of-Concept(PoC),展示了如何利用内存中的规避策略,以应对反病毒软件和端点检测与响应系统(AV/EDR)。
项目简介
ShellGhost是基于向量异常处理结合软件断点的内存逃避技术。其目标是在执行过程中创建一种“隐形”shellcode,使其从内存扫描器的角度来看始终不可见。该项目的核心是一个名为“Shellcode Mapping”的方法,这种方法能周期性地停止线程执行,加密并替换shellcode指令,然后再解密后恢复执行,确保内存保护为RX状态。所有的这些操作都在一个初始设置为可读写的私有内存页面中完成。
技术解析
ShellGhost依赖于 vectored exception handling 和软件断点来控制线程执行流程。每个shellcode指令的位置对应内存页上的特定断点。通过计算线程RIP寄存器和内存分配基地址之间的相对虚拟地址(RVA),并将该地址加上加密shellcode的基础地址,可以确定要替换的断点位置。RC4 加密用于对shellcode进行保护,防止完整代码暴露在内存中。
此外,ShellGhost引入了一个名为CRYPT_BYTES_QUOTA
的数据结构,用于存储每条shellcode指令的RVA和所需的字节数(quota)。这使得shellcode能够按需解密和执行,而无需一次性解密整个代码。
应用场景
ShellGhost技术适用于红队渗透测试,特别是在面对严格的安全环境时。例如,当需要隐蔽执行恶意代码而不引起反恶意软件的警报时,或者在不留下传统IOC( Indicator of Compromise)的情况下进行网络侦查和横向移动时,ShellGhost都能发挥关键作用。
项目附带了示例,展示了一种情况:在运行反恶意软件扫描时,即使逆向shell正在执行,Moneta和PE-Sieve也无法检测到壳码的存在。
项目特点
- 高效规避:通过内存中的断点替代和加密shellcode实现高级规避。
- 灵活支持:兼容Metasploit shellcode,适应多种操作场景。
- 无函数挂钩:无需直接修改或挂钩系统API,降低了被检测的风险。
- 动态调整:智能识别并调整WinAPI参数,确保shellcode正确执行。
需要注意的是,虽然ShellGhost提供了一种强大的技术,但它并不能完全避免所有EDE的检测,因为仍然需要在某个时刻拥有可执行的内存空间。对于高级的EDE解决方案,内存扫描仅是其中的一部分。
结语
ShellGhost是红队工具箱中的一个重要补充,为对抗日益复杂的终端安全挑战提供了新的思路。如果你有兴趣探索更深层次的内存逃避技术,或希望提升你的渗透测试技巧,ShellGhost绝对值得尝试。立即加入开源社区,一起体验这项独特的技术吧!
注:编译项目时,记得禁用增量链接,项目已经预设了必要的编译器和链接器选项。