红队战术:进攻性行动中的先进流程监控技术

再一次问好。Pentest前夕渗透测试实践”为您翻译了另一本有趣的材料。




在本文中,我们将了解著名的过程监视实用程序的功能,并演示如何将这些工具所基于的技术用于Red Team进攻行动。

对我们所依赖的系统有良好的技术了解是决定下一步操作方向的关键标准。收集和分析有关受感染系统中正在运行的流程的数据可为我们提供大量信息,并有助于我们了解目标组织的IT基础结构如何工作。此外,定期请求的过程数据可帮助我们应对环境变化并在调查开始时接收触发信号。

为了能够收集有关受损端点上的流程的详细数据,我们创建了一组工具,这些工具将高级流程实用程序和C2框架(例如Cobalt Strike)的功能结合在一起。

工具(及其源代码)可以在此处找到

Windows内部系统实用程序


首先,我们将弄清楚可以使用哪些实用程序来收集有关Windows上计算机进程的信息。然后,我们将学习这些实用程序如何收集信息,以便以后可以在Red Team工具箱中使用它们。

Windows操作系统配备了许多现成的实用程序,用于管理系统。尽管提供的大多数工具都适合于基本的系统管理目的,但其中一些工具没有用于高级故障排除和监视的必要功能。例如,Windows任务管理器为我们提供了有关系统中所有正在运行的进程的基本信息,但是如果我们需要更详细的信息,例如对象描述符,网络连接或作为特定进程的一部分加载的模块,该怎么办?

为了收集此类信息,有一个更高级的工具。例如,Sysinternals程序包的系统实用程序。作为在网络和系统管理方面拥有丰富经验的Red Team成员,我一直是Sysinternals的忠实拥护者。

在对运行缓慢的服务器系统或受感染的客户端计算机进行故障排除时,我通常会使用Process Explorer或Procmon等工具开始故障排除。
从数字取证的角度来看,这些工具对于进行恶意软件样本的基本动态分析以及在受感染系统中搜索伪像似乎也非常有用。那么,为什么这些工具在系统管理员和安全专家中如此受欢迎?让我们弄清楚,深入研究一些可以使用Process Explorer工具获得的过程信息。

使用流程浏览器


启动Process Explorer时,我们首先看到的是系统所有正在运行的进程的列表/树。这为我们提供了有关进程名称,它们的标识符,用户上下文以及进程和版本信息的完整性级别的信息。通过相应地调整列,还可以反映其他信息。



如果使用底部面板,我们将能够查看由特定进程加载的所有模块,或切换到查看描述符,以便熟悉该进程使用的所有命名描述符对象:



在搜索过程中加载的恶意库时,浏览模块很有用,或者对于Red Team来说,这是一个主动的安全产品(例如EDR),已实现了用于在用户模式下通过API连接的模块。



切换到查看描述符可以让您熟悉过程中使用的所有命名对象的类型和名称。这对于找出打开了哪些文件和注册表项,哪些命名管道用于进程间通信非常有用。
如果双击进程名称,将显示一个包含更多详细信息的窗口。让我们看一下一些选项卡以了解对象的其他属性:图像



选项卡显示有关二进制路径,工作目录和命令行选项的信息。此外,它还显示有关用户上下文,父进程,图像类型(x86或x64)等信息。



线程”选项卡包含有关在进程中运行线程的信息。当您选择一个流然后单击它时,堆栈按钮将反映该特定流的调用堆栈。要查看以内核模式启动的线程/调用,Process Explorer使用内核驱动程序,该内核驱动程序在提升模式下安装。

从DFIR的角度来看,线程信息可用于检测内存中的注入,例如,在存在无文件病毒的威胁时。因此,没有由磁盘上的文件支持的流可以发出可疑行为的信号。有关线程和内存的更多信息,我强烈建议您关注Process Hacker工具



Process Explorer中另一个有趣的标签是TCP / IP标签。在它上面,您将看到与此过程关联的所有网络连接。从攻击的角度来看,这对于了解何时从受感染的系统建立连接很有用。传入的PowerShell远程会话或RDP会话可能表示已经开始调查。

使用讨论的方法进行攻击


既然我们已经学到了一些有关流程的有趣知识,以及我们可以使用Process Explorer收集的有关流程的信息,您可能想知道如何从我们最喜欢的C2框架中访问这些信息。当然,我们可以使用PowerShell,因为这将使我们有机会使用功能强大的脚本语言和Windows API。但是,今天PowerShell受安全服务的不断监督,因此我们尝试避免使用此方法。

Cobalt Strike中,我们可以在信标上下文中使用ps命令。该命令基于系统中运行的所有进程显示有关该进程的基本信息。结合脚本@r3dQu1nn ProcessColor,此方法可能是获取过程数据的最佳方法。

ps 命令的输出对于快速排序正在运行的进程很有用,但是它们不包含有助于您更好地了解系统的详细信息。为了收集更多详细信息,我们创建了自己的实用程序来获取有关流程的信息。在他们的帮助下,我们可以收集和丰富从受感染系统获得的信息。

PS工具


复制诸如Process Explorer之类的工具提供的功能和信息并不容易。首先,我们需要找出这些工具是如何在后台(以及在用户模式下)工作的,然后我们需要了解如何更好地在控制台中而不是在图形界面中反映此信息。

在分析源代码之后,很明显,许多用于提供系统信息的低级工具很大程度上基于本机的NtQuerySystemInformation API 。尽管API及其相关结构没有完整记录,但此API允许您收集有关Windows系统的大量信息。所以使用NtQuerySystemInformation作为收集有关系统中正在运行的进程的信息的起点,我们将使用各个进程PEB来收集有关每个进程的详细信息。使用NtQueryInformationProcess API 我们可以PROCESS_BASIC_INFORMATION使用过程描述符读取结构并找到它PebBaseAddress然后,我们使用NtReadVirtualMemoryAPI来读取结构RTL_USER_PROCESS_PARAMETERS,这将使我们能够找到参数ImagePathNameCommandLine过程。

使用这些API作为代码的基础,我们编写了以下工具来获取有关流程的信息:

  • Psx:显示系统上运行的所有进程的详细列表。
  • Psk:显示内核信息,包括已加载的驱动程序。
  • Psc: TCP-.
  • Psm: ( , ).
  • Psh: (, , ).
  • Psw: .

所有这些工具都是用C编写为反射DLL,并且可以使用C2框架(例如Cobalt Strike)(或支持反射DLL注入的任何其他框架)自反地嵌入到生成的过程中。对于Cobalt Strike,我们添加了一个攻击者脚本,该脚本可用于使用Cobalt Strike脚本管理器加载工具。

让我们看一下Cobalt Strike中启动的每个特定工具,以演示功能并显示可以使用该工具收集哪些信息:

聚苯乙烯


该工具显示了系统上正在运行的所有进程的详细列表。可以将输出与Process Explorer主屏幕上的信息进行比较。 Psx显示流程的名称,其ID,父PID,创建时间以及与该流程的二进制文件相关的信息(体系结构,公司名称,版本等)。如您所见,它还会显示来自系统活动内核的一些有趣信息,例如内核的基地址,这在操作内核时非常有用(例如,计算ROP小工具的偏移量)。所有这些信息都可以从普通用户上下文中收集(不提升特权)。



如果我们具有足够的权限来打开进程描述符,则可以阅读其他信息,例如用户的上下文及其令牌的完整性级别。枚举PEB和相关结构使您可以获得有关图像路径和命令行参数的信息:



您可能已经注意到,我们从二进制过程图像中读取和显示版本信息,例如公司名称和描述。知道公司名称后,您可以轻松列出系统中所有活动的安全产品。使用此工具,我们将所有活动过程的公司名称与安全产品的知名供应商列表进行比较,并显示结果:



Psk


该工具反映了有关正在运行的内核的信息,包括所有已加载的驱动程序模块。与Psx工具一样,它也提供了来自知名安全产品的所有已加载内核模块的摘要。



个人电脑


除了仅显示具有活动网络连接(IPv4,IPv6 TCP,RDP,ICA)的进程外, 此工具使用与Psx相同的方法来显示有关活动进程的信息



Psm


您可以使用此工具获取有关特定过程的详细信息。它将显示该进程和网络连接使用的所有模块(DLL)的列表:



sh


Psm相同,但不显示已加载的模块,而是显示过程描述符列表:



电源


最后但并非最不重要的Psw工具该工具将显示带有活动窗口句柄的进程列表,这些窗口句柄在用户的桌面上打开,包括窗口标题。这对于确定用户打开哪些图形应用程序界面而不必拍摄桌面屏幕快照非常有用:



用例


您可能会想:“这如何在进攻行动中帮助我们?” 在获得入侵资产后,我们通常将这些信息用于以下目的:

  • 检测受威胁资产上的安全工具。不仅通过过程信息,而且通过加载的模块。
  • 检测自定义钩引擎。
  • 搜索机会(通过网络会话)和特权升级。

第一次妥协后,您可以定期请求有关流程的类似信息并开始创建触发器。例如,我们自动将此信息输入RedELK然后,您可以创建有关过程信息中可疑更改的警报,例如:

  • 启动安全审核工具或安装新的端点安全产品。
  • 安全部门通过RDP会话或远程PowerShell的入站网络连接。
  • 在我们的一个恶意工件上打开另一个进程的句柄(例如,用于保留状态的文件)。

结论


在本文中,我们展示了如何使用诸如Sysinternals Process Explorer之类的工具来获取有关系统上运行的进程的详细信息,以及该信息如何帮助管理员和安全专业人员对系统进行故障排除并检查系统是否存在安全问题,或者性能。

相同的信息对于Red Team也是相关的并且有用的,Red Team在操作过程中可以访问受感染的系统。它有助于更​​好地了解您的目标系统和IT基础架构,并且定期询问此类系统使Red Team可以响应环境中可能发生的变化(例如,调查触发器)。

我们已经复制了诸如Process Explorer之类的工具提供的某些功能,因此我们可以在进攻性行动中使用相同的信息。为此,已创建了多个可用作C2框架一部分的过程监视工具,例如Cobalt Strike。我们展示了如何使用这些工具以及可以使用哪些信息来收集它们。

这些工具可在我们的GitHub页面找到,并可以作为Cobalt Strike的一部分使用。



了解有关该课程的更多信息。



All Articles