前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何绕过现代Process Hollowing检测机制

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

作者头像
FB客服
发布2018-02-26 11:50:13
1K0
发布2018-02-26 11:50:13
举报
文章被收录于专栏:FreeBufFreeBuf

Process Hollowing技术简介

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

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

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

RISCyPacker下载地址:【阅读原文】

工作机制

目前,绝大多数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。 下载地址:https://github.com/RISCYBusiness/RISCYpacker PoC程序(密码为“notinfected”): http://riscy.business/wp-content/uploads/2017/11/POC.7z

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Process Hollowing技术简介
  • 工作机制
    • 使用高优先级创建本地线程:
      • 将远程进程的线程优先级设为低优先级:
        • RISCyPacker的Process Hollowing技术流程图如下所示:
        • 关于RISCyPacker
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档