24

红队战术:流程监控技术

 4 years ago
source link: https://www.freebuf.com/articles/es/230273.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在这篇博文中,我们将探索著名的过程监控程序的功能,并演示Red Team在进攻性行动中如何使用这些工具背后的技术。为了能够从受损的端点收集详细的过程数据,我们编写了一系列过程工具,这些工具将这些高级过程程序的功能引入了C2框架(例如Cobalt Strike)。

这些工具(包括源代码)可以在这里找到:

https://github.com/outflanknl/Ps-Tools

Windows内部系统程序

我们将首先探讨哪些程序可用于从Windows计算机收集过程信息。然后,我们可以了解这些程序如何收集此类信息,以便随后可以在我们的工具中利用这些技术。

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

要收集详细信息,可以使用更高级的工具。例如, Sysinternals 套件中的系统程序。

7n2Ifmr.jpg!web

当对运行缓慢的服务器系统或可能受感染的客户端计算机进行故障排除时,大多数时候我会使用Process Explorer或Procmon之类的工具开始初步故障排除。

从取证的角度来看,这些工具对于恶意软件样本的基本动态分析以及在受感染系统上搜索伪像也非常有用。那么,为什么这些工具在系统管理员和安全专家中如此受欢迎?让我们通过显示一些有趣的过程信息来探索这一点,我们可以使用Process Explorer工具来收集这些信息。

使用Process Explorer

启动 Process Explorer 时,我们注意到的第一件事是系统上当前活动的所有进程的列表/树。这为我们提供了有关进程名称,进程ID,用户上下文以及进程和版本信息的完整性级别的信息。通过自定义列,可以在此视图中显示更多信息。

6V7bui6.jpg!web

如果启用下部窗格,则可以显示特定进程中加载的所有模块,或切换到句柄视图以显示进程正在使用的所有命名的句柄对象:

aY3imqQ.jpg!web

查看模块对于识别进程中正在加载的恶意库很有用,或者从Red Team的角度来看,如果有活动的安全产品(例如EDR)注入了用户模式API挂钩模块,则查看模块非常有用。

3ayaama.jpg!web

切换到句柄视图可让您查看流程中正在使用的所有命名对象的类型和名称。这对于查看打开了哪些文件对象和注册表项或用于进程间通信的命名管道可能很有用。

如果我们双击一个进程名称,将弹出一个包含更多详细信息的窗口。让我们探索一些选项卡以查看流程中的其他属性:

qAJzee2.jpg!web

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

vQNvaeq.jpg!web

线程选项卡提供有关在进程中运行线程的信息。选择一个线程,然后单击堆栈按钮,将显示该特定线程的调用堆栈。要查看以内核模式运行的线程/调用,Process Explorer使用内核驱动程序,该内核驱动程序在提升模式下运行。

从DFIR角度来看,线程信息对于检测内存注入技术(也称为无文件恶意软件)很有用。例如,未由磁盘上的文件支持的线程可能表明发生了混乱。为了对线程和内存有更多的了解,我强烈建议您也看看 Process Hacker 工具。

fEjQb27.jpg!web

Process Explorer中另一个有趣的标签是TCP / IP标签。这将显示与该过程有关的所有网络连接。从进攻角度看,这对于检测何时从我们控制的系统建立连接很有用。传入的PowerShell远程处理会话或RDP会话可能表明已开始调查。

利用技术

现在,我们已经研究了一些可以使用Process Explorer收集的有趣的过程信息,您可能想知道我们如何才能在我们最喜欢的C2框架中访问用户模式下的相同信息。当然,我们可以使用PowerShell,因为它为我们提供了非常强大的脚本语言,并允许访问Windows API。但是如今,由于PowerShell在严格的安全监视之下,因此我们尝试避免使用此方法。

Cobalt Strike中, 我们可以在信标上下文中使用ps命令。此命令显示系统上运行的所有进程的基本进程信息。与 @ r3dQu1nn ProcessColor aggressor 脚本结合使用,这可能是轻松收集过程信息的最佳方法。

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(例如对象句柄,网络连接)的详细句柄信息。

密码:显示活动Windows进程的窗口标题。

这些工具都以C语言编写为反射DLL,并且可以使用C2框架(如Cobalt Strike)(或允许反射DLL注入的任何其他框架)以反射方式在生成的进程中加载。对于Cobalt Strike,我们包含了一个攻击者脚本,该脚本可用于使用Cobalt Strike脚本管理器加载工具。

让我们探索在Cobalt Strike中运行的每个工具,以演示其功能以及可以使用该工具收集哪些信息:

Psx

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

3YjqYvz.jpg!web

如果我们有足够的权限打开该进程的句柄,则可以从其令牌中读取更多信息,例如用户上下文和完整性级别。枚举PEB及其相关结构使我们可以获得有关图像路径和命令行参数的信息:

jQve2er.jpg!web

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

NzMRbeY.jpg!web

Psk

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

nUbQriZ.jpg!web

MZNnQvU.jpg!web

Psc

该工具使用相同的技术来枚举Psx之类的活动进程,只是它仅显示具有活动网络连接(IPv4,IPv6 TCP,RDP,ICA)的进程:

UBNJfqR.jpg!web

Psm

该工具可用于列出有关特定过程的详细信息。它将显示进程和网络通信中正在使用的所有模块(dll)的列表:

3Qvyu2v.jpg!web

sh

与Psm相同,但不是加载模块,而是显示进程正在使用的句柄列表:

mauE7bI.jpg!web

Psw

最后但并非最不重要的是Psw工具。此工具将显示在用户桌面上打开了活动窗口句柄的进程列表,包括窗口标题。这对于确定用户打开哪些GUI应用程序而不必创建桌面屏幕快照很有用:

YNFRzyj.jpg!web

用例

那么,您可能想知道,这在进攻行动中有什么用?初次访问受损资产后,我们通常将此信息用于以下目的:

在受到威胁的资产上检测安全工具。不仅按过程信息名称,而且按加载的模块。

通过加载的模块识别用户登陆挂钩引擎。

寻找横向移动(通过网络会话)和特权升级的机会。

初步妥协后,您可以定期轮询详细的过程信息并开始构建触发器。例如,我们将这些信息自动输入到我们的工具 RedELK中 。然后,我们可以开始针对流程信息中的可疑更改生成警报,例如:

安全调查工具已启动或已安装新的端点安全产品。

安全部门通过RDP或PowerShell远程处理的传入网络连接。

另一个过程为我们的一个恶意软件伪像(例如,用于持久性的文件)打开了句柄。

结论

在此博文中,我们演示了如何使用诸如Sysinternals Process Explorer之类的工具来获取有关系统上运行的进程的更多详细信息,以及该信息如何帮助管理员和安全专业人员对可能的与安全性或性能相关的问题进行故障排除和调查。

相同的信息对于在评估过程中能够访问受感染系统的红队也非常相关和有用。它有助于从目标中更好地了解系统和IT基础结构,并且定期轮询此信息使Red Team可以对IT环境中的可能更改做出反应(例如,调查触发)。

我们复制了诸如Process Explorer之类的工具提供的某些功能,因此我们可以从进攻性行动中获得相同的信息。为此,我们创建了几个过程监视工具,这些工具可在C2框架(如Cobalt Strike)中使用。我们演示了如何使用这些工具以及可以使用这些工具收集哪些信息。

这些工具 可从我们的GitHub页面上获得 ,并准备在Cobalt Strike中使用。

参考来源: outflank ,FB小编周大涛编译,转载请注明来自FreeBuf.COM


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK