冰凌汇编

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 114|回复: 0
收起左侧

[原创] 进程注入检测:Malfind和get-InjectedThread.ps1

[复制链接]
Alibaba 发表于 2022-1-17 15:22:12
进程注入检测:Malfind和get-InjectedThread.ps1 - Alibaba_冰凌汇编

对于今天的安全分析师来说,在日常操作中利用许多众所周知的免费开源工具和脚本是很常见的。在某些情况下,理解工具用来得出结论的逻辑和标准可能变得至关重要。当信息安全社区不断地产生大量的开放源码工具时,了解您正在运行的代码总是一个好主意。

在这篇博客文章中,我将研究当前用于检测进程虚拟地址空间内潜在注入内存部分的两种方法。虽然这些方法有着相同的目标,但它们之间存在一些关键差异,引起了一些有趣的讨论。第一种方法是著名的名为Malfind的插件,用于波动性和Rekall记忆取证框架。易变性是一个用Python编写的开源工具,它一直是对捕获的内存图像进行分析的标准。Rekall项目最初是作为一个新的代码分支而启动的,它是从Volativatives源代码中分离出来的,因此与波动性有许多相似之处。Rekall还包括Malfind插件,但它的重点是“端到端”的内存分析框架,这与波动性不同,从而导致了它对实时内存运行的标志性能力。

波动性和Rekall存在于“真正的”内存取证领域,并且使用原始内存手动查找和解析数据结构,通常是在操作系统级别。Malfind和其他许多易变插件的过程从解析内核调试器块开始。KDGB是一种内核级数据结构,其目的是允许内核调试器定位其他操作系统数据结构。Rekall匹配此步骤之后的波动性,但采用不同的初始过程,它不依赖于KDBG(RekallForesnics博客-我们需要内核调试器块吗?).


进程注入检测:Malfind和get-InjectedThread.ps1 - Alibaba_冰凌汇编

KDBG包含一个名为PsActiveProcessHead的元素,它指向一个双链接的_EPROCESS结构列表,每个结构对应于系统上的一个活动进程。

进程注入检测:Malfind和get-InjectedThread.ps1 - Alibaba_冰凌汇编

每个EPROCESS结构中感兴趣的成员是Vadroot,它不是链接列表,而是指向自平衡二叉树的根。该二叉树由虚拟地址描述符组成,每个描述符对应于相应进程虚拟地址空间中的虚拟内存段。这些VAD包括有关其内存部分的信息,包括虚拟范围、分配的保护和附加标志。

进程注入检测:Malfind和get-InjectedThread.ps1 - Alibaba_冰凌汇编

每个VAD中包含的信息是Malfind插件用来确定内存部分是否可能是恶意注入的结果。Malfind最终将输出基于VAD的内存部分,这些VAD具有EXECUTE_ReadWread权限,包含某些标记,并且已经提交。在进程运行期间,可以保留虚拟内存,这将预留一系列虚拟地址,但不提交物理资源。这通常是在处理刚开始很小但具有指数增长潜力的动态结构时完成的。当额外的内存范围准备好使用时,它们就会被提交,并获得对物理资源的必要访问。动态内存也可以在同一个函数调用中保留和提交,但是,这些细节是从高级语言的程序员中抽象出来的。一个经常被忽略的关键事实是,VAD中包含的保护信息是初始分配的保护,如果更改保护,则不会更新保护信息。如果我要在一个进程中分配内存,并执行EXECUTE_READ,然后更新为EXECUTE_READ_WARD,那么VAD内部的记录保护仍然是EXECUTE_READ这是一种记录了恶意软件使用实例的策略,但是,我总是感到惊讶的是,它没有被更频繁地使用,并且会对您可能拥有的任何见解非常感兴趣。

在所有步骤中,Malfind创建的输出包含匹配定义条件的每个内存节的信息,包括该节中初始数据的十六进制和反汇编值。


进程注入检测:Malfind和get-InjectedThread.ps1 - Alibaba_冰凌汇编

正在检查的另一个工具是Jared Atkinson的PowerShell脚本getInjectedThread.ps1。作为一个脚本,getInjectedThread运行在它正在执行的Windows系统上.它使用WindowsAPI调用的组合来检测可能的进程注入,而不是纯内存取证。这些系统API调用的目的是获取与现有线程的起始地址相对应的每个虚拟内存块的信息。每个现有线程都必须在其包含进程的有效虚拟内存中的某个位置开始它的执行,并且这个内存部分的属性允许get-InjectedThread来确定它是否可能是恶意注入的结果。

这个脚本使用的一系列API调用以CreateToolhel32Snapshot开始,它用于在被调用时创建请求的系统信息的快照。


进程注入检测:Malfind和get-InjectedThread.ps1 - Alibaba_冰凌汇编

通过传递dwFlag参数的值(对应于TH32CS_SNAPTHREAD),函数调用将生成由所有系统线程组成的系统快照。返回值是此创建的快照数据结构的句柄,它包含每个线程的THREADENTRY 32结构。

进程注入检测:Malfind和get-InjectedThread.ps1 - Alibaba_冰凌汇编
根据创建的快照类型,将系统快照的句柄传递给相应的快照枚举函数,以便与其进行交互。在本例中,在脚本中调用Thread32First和Thread32Next函数来创建循环,该循环遍历快照中的每个线程。

进程注入检测:Malfind和get-InjectedThread.ps1 - Alibaba_冰凌汇编

进程注入检测:Malfind和get-InjectedThread.ps1 - Alibaba_冰凌汇编

在这个循环中,每个线程被检查,以确定它和它的启动内存区域是否可能是进程注入的结果。$Thread变量中包含的THREADENTRY 32数据结构包含线程id th32ThreadID的一个元素,它拥有进程ID th32OwnerProcessID。线程的PID用于检查,以确保它不等于0或4,后者对应于系统空闲进程和系统进程,而不是进程注入的目标。接下来,使用TID调用OpenThread来打开线程的句柄。如果对OpenThread的调用是成功的,那么脚本将开始深入研究其NtQueryInformationThread的细节。ThreadQuerySetWin32StartAddress的值传递给ThreadInformationClass参数,以确定线程的起始地址。

进程注入检测:Malfind和get-InjectedThread.ps1 - Alibaba_冰凌汇编

然后将返回的虚拟地址和拥有进程的句柄传递给VirtualQueryEx,这是一个非常有用的函数,它返回有关进程请求的虚拟内存部分的信息。

进程注入检测:Malfind和get-InjectedThread.ps1 - Alibaba_冰凌汇编

根据返回的Memory_Basic_Information结构,如果线程启动地址包含在已提交的内存段中,而不是MEM_Image类型,则可能是恶意注入的结果。此逻辑之所以工作,是因为线程应该在进程加载的代码模块中开始执行,该代码模块将被标记为MEM_Image。就像Malfind插件一样,保留但不提交的内存部分也会被过滤掉。

进程注入检测:Malfind和get-InjectedThread.ps1 - Alibaba_冰凌汇编

在根据此标准识别潜在的代码注入部分之后,将收集有关内存部分和线程的附加信息以供输出。收集前100个字节以及有关令牌的详细信息,包括线程是否使用与其拥有进程的令牌不同的标记。此收集的信息创建了为任何标识节输出的大量信息。

进程注入检测:Malfind和get-InjectedThread.ps1 - Alibaba_冰凌汇编
这两种工具的总体目标都是相同的,即检测传统的过程注入。波动\Rekall的优势在于它们真正的记忆取证模式,从而避免了对系统API的依赖。受影响的机器通常会挂起它的API,从而隐藏恶意的指示符。这是真正的内存取证的最大论据之一;因为结构是手动解析和扫描的,所以攻击者很难回避这种分析。另一方面,虽然GET-InjectedThread脱离了真正的内存取证领域,但它获得了即时可伸缩性的能力。Malfind可以轻松地在30秒内运行,但它需要将工具移动到系统或提取其内存。然而,GET-InjectedThread在几秒钟内执行,并且能够利用Powershell的远程功能,甚至可以在EDR平台内运行。这些工具之间的另一个关键区别是,getInjectedThread的逻辑不以EXECUTE_READ_WILD权限或一般权限为基础。这意味着,它将不会错过注入策略,利用失联领先的初始或甚至战略性地改变权限。值得注意的是,在网络安全方面,没有什么是灵丹妙药,而且有许多先进的方法可以绕过这两种方法中的一种或两种。然而,经典的注入仍然是非常普遍的,因为它的可靠性和这两个工具提供了丰富的价值寻找恶意注入。通过直接理解它们所使用的逻辑,分析师能够在适当的情况下充分利用两者。
冰凌汇编免责声明
以上内容均来自网友转发或原创,如存在侵权请发送到站方邮件9003554@qq.com处理。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|站点统计|Archiver|小黑屋|RSS|冰凌汇编 ( 滇ICP备2022002049号 滇公网安备 53032102000029号)|网站地图

GMT+8, 2022-10-6 21:19 , Processed in 0.122880 second(s), 9 queries , Redis On.

冰凌汇编 - 建立于2021年12月20日

Powered by Discuz! © 2001-2022 Comsenz Inc.

快速回复 返回顶部 返回列表