首页 运维 安全 Mitre ATT&CK矩阵中的三种进程注入手法

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

Nov 26, 2019 am 10:02 AM
矩阵

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

Mitre ATT&CK矩阵中的三种进程注入手法:经典的进程注入、Process HollowingProcess Doppelgänging

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

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

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

OpenProcess -> VirtualAllocEx -> WriteProcessMemory -> CreateRemoteThread

10.jpg

二:Process Hollowing

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

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

实现思路:

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

1 (2).jpg

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

11.jpg

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

12.jpg

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)

13.jpg

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

14.jpg

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

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

15.jpg

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

16.jpg

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

17.jpg

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

18.jpg

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

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

对抗思路:

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

总结

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

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

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

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

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

以上是Mitre ATT&CK矩阵中的三种进程注入手法的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

探索人工智能历史与矩阵:人工智能教程(二) 探索人工智能历史与矩阵:人工智能教程(二) Nov 20, 2023 pm 05:25 PM

在本系列的第一篇文章中,我们讨论了人工智能、机器学习、深度学习、数据科学等领域的关联和区别。我们还就整个系列将使用的编程语言、工具等做出了一些艰难的选择。最后,我们还介绍了一点矩阵的知识。在本文中,我们将深入地讨论人工智能的核心——矩阵。不过在此之前,我们先来了解一下人工智能的历史我们为什么需要了解人工智能的历史呢?历史上曾出现过多次人工智能热潮,但在很多情况下,对人工智能潜力的巨大期望都未能达成。了解人工智能的历史,有助于让我们看清这次人工智浪潮是会创造奇迹,抑或只是另一个即将破灭的泡沫。我们

计算矩阵右对角线元素之和的Python程序 计算矩阵右对角线元素之和的Python程序 Aug 19, 2023 am 11:29 AM

一种受欢迎的通用编程语言是Python。它被应用于各种行业,包括桌面应用程序、网页开发和机器学习。幸运的是,Python具有简单易懂的语法,适合初学者使用。在本文中,我们将使用Python来计算矩阵的右对角线之和。什么是矩阵?在数学中,我们使用一个矩形排列或矩阵,用于描述一个数学对象或其属性,它是一个包含数字、符号或表达式的矩形数组或表格,这些数字、符号或表达式按行和列排列。例如−234512367574因此,这是一个有3行4列的矩阵,表示为3*4矩阵。现在,矩阵中有两条对角线,即主对角线和次对

如何使用Python中的numpy计算矩阵或ndArray的行列式? 如何使用Python中的numpy计算矩阵或ndArray的行列式? Aug 18, 2023 pm 11:57 PM

在本文中,我们将学习如何使用Python中的numpy库计算矩阵的行列式。矩阵的行列式是一个可以以紧凑形式表示矩阵的标量值。它是线性代数中一个有用的量,并且在物理学、工程学和计算机科学等各个领域都有多种应用。在本文中,我们首先将讨论行列式的定义和性质。然后我们将学习如何使用numpy计算矩阵的行列式,并通过一些实例来看它在实践中的应用。行列式的定义和性质Thedeterminantofamatrixisascalarvaluethatcanbeusedtodescribethepropertie

Python程序使用多维数组相乘两个矩阵 Python程序使用多维数组相乘两个矩阵 Sep 11, 2023 pm 05:09 PM

矩阵是按行和列排列的一组数字。m行n列的矩阵称为mXn矩阵,m和n称为其维度。矩阵是一个二维数组,在Python中使用列表或NumPy数组创建。一般来说,矩阵乘法可以通过将第一个矩阵的行乘以第二个矩阵的列来完成。这里,第一矩阵的列数应等于第二矩阵的行数。输入输出场景假设我们有两个矩阵A和B,这两个矩阵的维度分别为2X3和3X2。相乘后得到的矩阵将有2行1列。[b1,b2][a1,a2,a3]*[b3,b4]=[a1*b1+a2*b2+a3*a3][a4,a5,a6][b5,b6][a4*b2+a

C程序用于比较两个矩阵是否相等 C程序用于比较两个矩阵是否相等 Aug 31, 2023 pm 01:13 PM

用户必须输入两个矩阵的顺序以及两个矩阵的元素。然后,比较这两个矩阵。如果矩阵元素和大小都相等,则表明两个矩阵相等。如果矩阵大小相等但元素相等不相等,则显示矩阵可以比较,但不相等。如果大小和元素不匹配,则显示矩阵无法比较。程序以下是C程序,用于比较两个矩阵是否相等-#include<stdio.h>#include<conio.h>main(){  intA[10][10],B[10][10];  in

Python程序:交换矩阵中第一个和最后一个元素在列之间的位置 Python程序:交换矩阵中第一个和最后一个元素在列之间的位置 Sep 08, 2023 pm 04:29 PM

矩阵是由许多按行和列形式排列的数字组成的二维数组。Python没有任何数据类型来表示矩阵,但我们可以使用嵌套列表或NumPy数组作为矩阵。请参阅以下输入输出场景,了解如何互换矩阵的第一列和最后一列元素。输入输出场景假设我们有一个使用列表列表表示的3X3矩阵。输出矩阵将是交换第一列和最后一列元素的结果矩阵。Inputmatrix:[1,3,4][4,5,6][7,8,3]Outputmatrix:[4,3,1][4,5,6][3,8,7]让我们考虑另一个行和列不相等的矩阵。Inputmatrix:

矩阵间的账号如何进行倒流?矩阵倒置是什么意思? 矩阵间的账号如何进行倒流?矩阵倒置是什么意思? Mar 27, 2024 pm 12:16 PM

在社交媒体运营中,矩阵账号倒流是一种常见的策略,通过在不同账号之间相互引导流量,实现粉丝的互相补充和活跃度的提升。矩阵账号之间的倒流需要精心策划和执行,不是一件简单的事情。本文将详细探讨如何在不同账号之间实现倒流,以及矩阵倒置的意义。一、矩阵间的账号如何进行倒流?在矩阵账号中,选择一个主线账号至关重要,它将成为主要的流量来源和核心内容发布的平台。内容规划是根据账号特点和目标受众,制定相应的内容计划,以确保内容质量和风格统一。3.互推互赞:在矩阵账号之间进行互推互赞,通过合理的布局和安排,引导粉丝

抖音账号矩阵怎么搭建好?做矩阵怎么解决账号问题? 抖音账号矩阵怎么搭建好?做矩阵怎么解决账号问题? Mar 25, 2024 pm 11:01 PM

随着短视频行业的飞速发展,抖音已成为国内最受欢迎的短视频平台之一。许多企业和个体户都希望通过搭建抖音账号矩阵来扩大自己的影响力。那么,如何搭建好抖音账号矩阵呢?本文将为你解答这个问题,并介绍解决账号问题的方法。一、抖音账号矩阵怎么搭建好?在建立抖音账号矩阵时,首要任务是准确地确定每个账号的定位。根据品牌或个人的特色,明确各账号的主题和风格,从而能够吸引目标受众。确定内容策略很关键,它包括内容主题、发布频率和拍摄技巧等方面。这些步骤能够帮助账号矩阵充分发挥效益。3.账号间互动:在各个账号之间建立良

See all articles