如何绕过现代Process Hollowing检测机制 -黑客内参


Process Hollowing技术简介

Process Hollowing是现代恶意软件常用的一种进程创建技术。一般来说,使用Process Hollowing技术所创建出来的进程在使用任务管理器之类的工具进行查看时,它们看起来是正常的,但是这种进程中包含的所码实际上就是恶意代码。接下来就由黑客内参带领大家来详细揭破一下此次事件!!

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

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




工作机制

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

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

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

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

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

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

优质内容筛选与推荐>>
1、2016 最新 linux centOS 命令学习笔记!
2、解决eclipse为什么不能查看源码
3、python5
4、Emmet基本使用方法
5、实验0 了解和熟悉操作系统


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号