Mitre ATT&CK矩阵中的三种进程注入手法

发布时间 - 2019-11-26 00:00:00    点击率:

mitre att&ck矩阵中的三种进程注入手法:经典的进程注入、process hollowingprocess doppelgänging

恶意软件使用进程注入的主要目的大致是为了躲避杀软的检测或者进行提权操作。这里我们将主要针对第一种情况下的3种手段进行详细的讨论。

一:经典的进程注入(DLL注入)

这是最为经典的手段,流程也十分简洁明了即:

OpenProcess -> VirtualAllocEx -> WriteProcessMemory -> CreateRemoteThread

二:Process Hollowing

这是一种相当古老的手段了,中文一般译为”创建傀儡进程”,使用该手法创建的进程可以伪装为任意的合法进程,比如伪装为IE,在内存中使用process hacker查看时其图标资源、描述、数字签名均为IE的值。这样应急响应人员在进行排查的时候可能难以发现。

用简洁的语言概括该手法,即恶意进程首先创建一个挂起状态的进程,然后取消其原先的内存映射并替换成事先准备的恶意代码,在对修改后的映像文件进行重定向后再恢复该进程的运行状态。

实现思路:

1、通过CreateProcess创建目标进程,传入参数CREATE_SUSPENDED使进程挂起

2、通过NtQueryProcessInformation获取目标进程内存中映像文件的基地址。(PEB块数据结构)

3、通过NtUnmapViewOfSection清空目标进程的内存数据(section),传入参数为进程句柄和映像文件的基地址

4、通过VirtualAllocEx申请新的内存(起始地址为之前映像文件的基地址,大小则为payload的大小)

5、通过WriteProcessMemory向内存写入payload

6、将写入内存中的payload进行基址重定向

7、通过GetThreadContext获取目标线程的上下文,将上下文的eax寄存器修改为正确的代码入口点

8、通过SetThreadContext设置入口点

9、通过ResumeThread唤醒进程,执行payload

对抗思路:

从实现思路中可以看出,步骤1、4、5、6、7、8、9是常规的创建一个进程然后自己注入的手段。只有步骤2、3是比较特殊的。用常规的检测手段如Hook关键函数进行判断即可检测。

三:Process Doppelgänging

这是一种比较新的注入手段,首次提出于2017年的欧洲black hat大会。该手段在原理及表现上与Process Hollowing是类似的,利用Process Doppelgänging创建的进程在内存中使用process hacker查看时其图标资源、描述、数字签名均为指定的目标程序。

该手法利用了windows事务(TxF)的特性,在事务中使用恶意文件覆盖合法文件,此时不提交事务(即覆盖不会在磁盘上发生),然后创建一个section(当前事务的拷贝)。在获得了section的句柄后,就将事务回滚,防止恶意文件在磁盘上真正地覆盖合法文件。之后就使用内存中section的句柄进行进程创建操作。而创建的进程是拥有合法可执行文件的信息的。

可以看到,由于需要在事务中覆盖文件,所以该手法需要对目标文件有写权限。

实现思路:

1、创建一个TxF事务对象(NtCreateTransaction)

2、以事务API打开合法可执行文件,即在事务对象中加入文件(CreateFileTransacted)

3、打开恶意文件并为其分配内存空间(CreateFile、GetFileSizeEx -> NtAllocateVirtualMemory -> ReadFile)

4、用内存中的恶意文件覆盖事务中的合法可执行文件(WriteFile)

5、创建当前事务的section(NtCreateSection)

6、回滚事务,使刚刚的覆盖恢复成合法可执行文件(NtRollbackTransaction)

7、使用内存中的section来创建进程对象(NtCreateProcessEx)

8、获取恶意文件的入口点,创建进程参数块,然后将进程块写入进程内存中(NtQueryInformationProcess -> RtlInitUnicodeString -> RtlCreateProcessParametersEx)

9、更新PEB中的进程参数块,为目标进程对象创建线程,执行恶意代码(NtCreateThreadEx)

对抗思路:

从步骤上看,Hook关键函数(如NtCreateThreadEx)进行判断即可检测该手法。

总结

从上述3种手法的演变上可以看到几点趋势。

第一点,内存中的隐蔽能力越来越强,由最开始的毫无隐蔽性可言,到现在可以做到在内存中表现得与合法程序一致。

第二点,payload释放到内存中的手段越来越难以检测,最初payload是直接拷贝到内存中的,现在攻击者可以利用一些特性(如TxF)来进一步隐蔽释放过程。

第三点,最终阶段的关键函数几乎没有变化,即使payload的释放越来越隐蔽,但是最终还是要释放到内存中并且调用执行的。通过对有限的关键函数进行Hook,应该就能dump出最终的payload。

更多相关教程推荐:web服务器安全


# 数据结构  # 线程  # 对象  # windows  # 句柄  # 创建一个  # 可执行文件  # 均为  # 可以看到  # 这是一种  # 看时  # 挂起  # 恶意代码  # 法利 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: iOS中将个别页面强制横屏其他页面竖屏  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  EditPlus中的正则表达式 实战(4)  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  公司网站制作需要多少钱,找人做公司网站需要多少钱?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  如何用花生壳三步快速搭建专属网站?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Laravel storage目录权限问题_Laravel文件写入权限设置  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  香港服务器如何优化才能显著提升网站加载速度?  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  如何选择PHP开源工具快速搭建网站?  如何获取上海专业网站定制建站电话?  北京的网站制作公司有哪些,哪个视频网站最好?  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  如何在建站主机中优化服务器配置?  高防服务器租用首荐平台,企业级优惠套餐快速部署  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  如何在IIS中配置站点IP、端口及主机头?  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  Laravel如何实现用户注册和登录?(Auth脚手架指南)  Laravel如何处理和验证JSON类型的数据库字段  使用豆包 AI 辅助进行简单网页 HTML 结构设计  php485函数参数是什么意思_php485各参数详细说明【介绍】  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  网站制作免费,什么网站能看正片电影?  如何打造高效商业网站?建站目的决定转化率  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  浅谈javascript alert和confirm的美化  Android仿QQ列表左滑删除操作  Internet Explorer官网直接进入 IE浏览器在线体验版网址  微信公众帐号开发教程之图文消息全攻略  大型企业网站制作流程,做网站需要注册公司吗?  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  如何在Ubuntu系统下快速搭建WordPress个人网站?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  在centOS 7安装mysql 5.7的详细教程  Laravel如何实现数据库事务?(DB Facade示例)  如何用狗爹虚拟主机快速搭建网站?  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  高端建站三要素:定制模板、企业官网与响应式设计优化  Python进程池调度策略_任务分发说明【指导】  Laravel如何使用Collections进行数据处理?(实用方法示例)