在这篇博文中,我们将探讨众所周知的进程监控实用程序的强大功能,并展示红队如何在进攻行动中使用这些工具背后的技术。
在交战期间,对我们所涉及的系统有良好的技术理解是决定下一步行动的关键条件。收集和分析受感染系统正在运行的进程的数据为我们提供了丰富的信息,并帮助我们更好地了解目标组织的 IT 格局是如何设置的。此外,定期轮询进程数据使我们能够对环境中的变化做出反应,或在调查进行时提供触发器。
为了能够从受损端点收集详细的过程数据,我们编写了一组过程工具,将这些高级过程实用程序的强大功能带入 C2 框架(例如 Cobalt Strike)。
该工具(包括源代码)可以在这里找到:
https://github.com/outflanknl/Ps-Tools
Windows 内部系统实用程序
我们首先将探索哪些实用程序可用于从 Windows 计算机收集进程信息。然后,我们可以了解这些实用程序如何收集此类信息,以便我们随后可以在红队工具中利用这些技术。
Windows 操作系统配备了许多现成的实用程序来管理系统。虽然这些工具中的大多数都适用于基本的系统管理,但有些工具缺乏我们进行更高级的故障排除和监控所需的功能。例如,Windows 任务管理器为我们提供了有关系统内运行的所有进程的基本信息,但如果我们需要更详细的信息,如特定进程内的对象句柄、网络连接或加载的模块,该怎么办?
要收集详细信息,可以使用更高级的工具。例如Sysinternals套件中的系统实用程序。作为一名在网络和系统管理方面拥有丰富经验的红队操作员,我一直是 Sysinternals 工具的忠实粉丝。
在对性能缓慢的服务器系统或可能被感染的客户端计算机进行故障排除时,大多数时候我都会使用 Process Explorer 或 Procmon 等工具开始进行初步故障排除。
从数字取证的角度来看,这些工具对于恶意软件样本的基本动态分析和在受感染系统上搜索伪影也非常有用。那么为什么这些工具在系统管理员和安全专业人员中如此受欢迎呢?让我们通过展示一些我们可以使用 Process Explorer 工具收集的有趣进程信息来探索这一点。
使用 Process Explorer
启动Process Explorer时,我们首先注意到的是系统上当前活动的所有进程的列表/树。这为我们提供了有关进程名称、进程 ID、进程的用户上下文和完整性级别以及版本信息的信息。通过自定义列,可以在此视图中显示更多信息。
如果我们启用下方窗格,我们可以显示特定进程内加载的所有模块,或者切换到句柄视图以显示进程正在使用的所有命名句柄对象:
查看模块有助于识别进程中加载的恶意库,或者从红队角度来看,是否存在注入用户模式 API 挂钩模块的安全产品(例如 EDR)。
切换到句柄视图可让您查看进程内正在使用的所有命名对象的类型和名称。这可能有助于查看打开了哪些文件对象和注册表项或用于进程间通信的命名管道。
如果我们双击进程名称,将会弹出一个包含更多详细信息的窗口。让我们探索一些选项卡以查看进程的其他属性:
图像选项卡向我们显示有关二进制路径、工作目录和命令行参数的信息。此外,它还显示有关用户上下文、父进程、图像类型(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 命令的输出对于快速分类正在运行的进程很有用,但缺少可以帮助我们更好地了解系统的详细信息。为了收集更详细的信息,我们编写了自己的进程信息实用程序来收集和丰富我们可以从我们入侵的系统中收集的信息。
Outflank Ps 工具
尝试复制 Process Explorer 等工具提供的功能和信息并非易事。首先,我们需要弄清楚这些工具在后台(以及在用户模式下)是如何工作的,接下来我们需要找出从控制台而不是 GUI 显示这些信息的最佳方法。
在分析公开的代码后,很明显许多低级系统信息工具都严重依赖本机NtQuerySystemInformation API。尽管 API 和相关结构没有完整记录,但此 API 允许您收集有关 Windows 系统的大量信息。因此,以 NtQuerySystemInformation 为起点来收集有关系统中运行的所有进程的整体信息,然后我们使用各个进程的PEB来收集有关每个进程的更详细信息。使用NtQueryInformationProcess API,我们可以使用其进程句柄从进程中读取 PROCESS_BASIC_INFORMATION 结构并找到 PebBaseAddress。从那里我们可以使用 NtReadVirtualMemory API 读取 RTL_USER_PROCESS_PARAMETERS 结构,这使我们能够读取进程的 ImagePathName 和 CommandLine 参数。
以这些API作为我们代码的基本基础,我们编写了以下流程信息工具:
-
Psx:显示系统上运行的所有进程的详细列表。
-
Psk:显示详细的内核信息,包括已加载的驱动模块。
-
Psc:显示所有已建立 TCP 连接的进程的详细列表。
-
Psm:显示特定进程 ID 的详细模块信息(例如已加载的模块、网络连接)。
-
Psh:显示特定进程 ID 的详细句柄信息(对象句柄、网络连接等)。
-
Psw:显示具有活动窗口的进程的窗口标题。
这些工具都是用 C 语言编写的反射 DLL,可以使用 Cobalt Strike 等 C2 框架(或允许反射 DLL 注入的任何其他框架)在生成的进程中进行反射加载。对于 Cobalt Strike,我们包含了一个攻击者脚本,可用于使用 Cobalt Strike 脚本管理器加载工具。
让我们探索 Cobalt Strike 中运行的每个单独的工具,以展示其功能以及可以使用该工具收集哪些信息:
Psx
此工具显示系统上运行的所有进程的详细列表。输出可与 Process Explorer 主屏幕的输出进行比较。它向我们显示进程名称、进程 ID、父 PID、创建时间以及与进程二进制文件相关的信息(例如架构、公司名称、版本)。如您所见,它还显示系统上运行的活动内核的有趣信息,例如内核基址,这些信息在进行内核利用(例如计算 ROP 小工具偏移量)时很有用。这些信息都可以从普通用户(非提升)上下文中收集。
如果我们有足够的权限打开进程的句柄,我们就可以从其令牌中读取更多信息,例如用户上下文和完整性级别。枚举PEB及其相关结构使我们能够获取有关图像路径和命令行参数的信息:
您可能已经注意到,我们正在从进程二进制映像中读取和显示版本信息,例如公司名称和说明。使用公司名称可以很容易地枚举系统内所有活动的安全产品。使用此工具,我们将所有活动进程的公司名称与知名安全产品供应商列表进行比较,并显示结果摘要:
Psk
此工具显示有关正在运行的内核的详细信息,包括所有已加载的驱动程序模块。与 Psx 工具一样,它还提供来自知名安全产品的所有已加载内核模块的摘要。
Psc
该工具使用与 Psx 相同的技术来枚举活动进程,但它仅显示具有活动网络连接(IPv4、IPv6 TCP、RDP、ICA)的进程:
Psm
此工具可用于列出特定进程的详细信息。它将显示进程和网络通信所使用的所有模块 (dll) 的列表:
Psh
与 Psm 相同,但不显示已加载的模块,而是显示进程正在使用的句柄列表:
Psw
最后但并非最不重要的是 Psw 工具。此工具将显示在用户桌面上打开了活动窗口句柄的进程列表,包括窗口标题。这对于确定用户打开了哪些 GUI 应用程序很有用,而无需创建桌面屏幕截图:
使用案例
那么,你可能会想知道,这在进攻行动中有什么用处?在首次访问受感染资产后,我们通常将这些信息用于以下目的:
-
检测受损资产上的安全工具。不仅通过进程信息名称,还通过加载的模块。
-
通过加载的模块识别用户空间的挂钩引擎。
-
寻找横向移动(通过网络会话)和权限提升的机会。
在初步入侵后,您可以定期轮询详细的流程信息并开始构建触发器。例如,我们将这些信息自动输入到我们的工具RedELK中。然后,我们可以开始针对流程信息的可疑变化构建警报,例如:
-
已启动安全调查工具或安装了新的端点安全产品。
-
通过 RDP 或 PowerShell 远程处理来自安全部门的传入网络连接。
-
另一个进程已打开我们其中一个恶意软件工件(例如用于持久性的文件)的句柄。
结论
https://github.com/outflanknl/Ps-Tools
原文始发于微信公众号(Ots安全):红队战术:进攻行动中的高级流程监控技术
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论