一种基于内存的逃避技术,可使 shellcode 在程序启动到结束期间保持隐形。
一种基于内存的逃避技术,使得 shellcode 从进程开始到结束都无法被发现。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------## 处理线程执行流程 __ShellGhost 依赖于向量化异常处理和软件断点结合使用,以循环停止线程执行,用 RC4 加密的 shellcode 指令替换执行的断点,解密指令并恢复内存保护后继续执行。当随后的 EXCEPTION_BREAKPOINT 发生时,异常处理程序会用新的断点替换之前的 shellcode 指令,这样分配就不会在未加密的状态下泄露完整的 shellcode。这发生在一个最初标记为 READ/WRITE 的私有内存页中。具有 RW PRV 分配的内存不会被内存扫描程序,如 PE-Sieve 和 Moneta,视为"入侵迹象"。当分配变为 RX 且页面被扫描时,将只发现断点。这发生在 shellcode 实际正在执行时。下图显示了一个反向 shell 正在运行,但 Moneta 没有发现 IOC (除了二进制文件未签名)。
使用 Pe-Sieve 扫描进程的结果更好:
暂无开放 Issues,或尚未同步最近议题。