如何绕过现代Process Hollowing检测机制

2017-11-25 219998人围观 ,发现 2 个不明物体 系统安全

r1.png

Process Hollowing技术简介

Process Hollowing是现代恶意软件常用的一种进程创建技术。一般来说,使用Process Hollowing技术所创建出来的进程在使用任务管理器之类的工具进行查看时,它们看起来是正常的,但是这种进程中包含的所码实际上就是恶意代码。

这种技术可以对运行中的进程进行动态修改,并且整个过程既不用挂起进程,也不需要调用额外的Windows API,即无需调用WriteProcessMemory, QueueUserApc, CreateRemoteThread和SetThreadContext。

近期,我在GitHub上发布了一款Process Hollowing封装工具(RISCyPacker)。虽然我没有用当前所有的反病毒产品对本工具进行测试,但这项绕过技术应该是不会被检测到的。我在本文末尾还给出了一份PoC代码,感兴趣的同学可以通过分析代码来了解其工作机制。

r2.png

r3.png

RISCyPacker下载地址:【GitHub传送门

工作机制

目前,绝大多数Process Hollowing技术的工作机制如下:挂起进程,写入远程内存,修改内容(SetThreadContext/CreateRemoteThread/QueueUserAPC),然后恢复进程运行。RISCyPacker技术对之前的ProcessHollowing技术进行了优化,它只需要修改内存内容(NtUnMapViewOfSection/NtMapViewOfSection)即可实现ProcessHollowing。

首先,我们需要确保我们的线程可以在远程线程被创建之前分配/释放(映射内存)远程可执行内存的内容。如果我们只能实现一半(例如只能释放内存内容),那么我们的技术就无法正常工作了,因为线程在创建之后线程的EIP将指向空内容。幸运的是,我们可以利用线程的优先级和亲和性(Affinity)来帮助我们实现这项技术:

使用高优先级创建本地线程:

r4.png

将远程进程的线程优先级设为低优先级:

r5.png

线程的亲和性设置是必须的,因为多核处理器可能会影响最终设置的进程计划优先级。通过设置不同的优先级,我们就能够正确地将进程排入执行队列中,并在远程线程访问内存之前对远程内容的内容进行修改。

RISCyPacker的Process Hollowing技术流程图如下所示:

r6.png

其中,注入的NOP中包含有加载和构建IAT的shellcode,之后这些内容需要注入到目标进程之中。

关于RISCyPacker

在使用这款封装工具时,有几点需要大家注意的。首先,目标进程必须要支持非挂起状态下的注入。有些进程会在你尝试动态注入内容的时候立即停止执行(例如xcopy.exe w/ no arguments),因此我们就无法对这类进程实现注入了。

注:目前RISCyPacker还不支持x64/TLS/Exports。

下载地址:https://github.com/RISCYBusiness/RISCYpacker

PoC程序(密码为“notinfected”): http://riscy.business/wp-content/uploads/2017/11/POC.7z

* 参考来源:RISCYBUSINESS,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

发表评论

已有 2 条评论

取消
Loading...
css.php