使用WinDbg攻破内核对象:ALPC端口指针计数深度分析

3 阅读3分钟

使用WinDbg调试器分析内核对象

首先,我们需要安装WinDbg,并在必要时设置符号路径。如果没有符号,你将无法查看内核中加载模块的信息。

在"文件"菜单中,你可以设置内核调试 → 附加到内核。

![附加到内核设置界面1] ![附加到内核设置界面2]

在Process Explorer(进程资源管理器)中,你可以识别对象并获取它们在内核空间中的地址。通过点击任意句柄,你可以查看相应的内存地址。

![Process Explorer操作界面]

WinDbg信息解析与屏幕截图:

object 0xFFFFE2843B1B0090: 此命令要求WinDbg显示位于内存地址0xFFFFE2843B1B0090的内核对象信息。

Object: ffffe2843b1b0090 Type: (ffffe28434ff72a0) ALPC Port: 这一行告诉你内存地址ffffe2843b1b0090持有一个类型为"ALPC端口"的对象。ALPC(高级本地过程调用)是Windows操作系统内部使用的一种通信方法,用于实现进程间更快、更安全的通信。Type指针(ffffe28434ff72a0)指向该ALPC端口对象的类型信息,帮助系统妥善管理该对象。

ObjectHeader: ffffe2843b1b0060 (new version): Windows内核中的每个对象都有一个ObjectHeader(对象头),其中包含关于该对象的元数据。位于地址ffffe2843b1b0060ObjectHeader包含关键信息,如引用计数、句柄计数,以及可能的安全或审计信息。

HandleCount: 1 PointerCount: 29073: HandleCount指当前有多少个句柄(通过句柄的引用)打开指向此对象。本例中,此ALPC端口有1个句柄,意味着系统内有一个句柄显式引用了它。 PointerCount指指向此对象的指针或引用的数量,包括句柄和其他引用(如来自其他对象或系统组件的指针)。PointerCount为29073异常地高,表明此ALPC端口在系统内被广泛引用,这对于一个被众多组件使用的通信通道而言可能是典型情况。

![WinDbg输出界面1] ![WinDbg输出界面2]

你看到的输出来自WinDbg中使用的!findhandle命令。WinDbg是Windows环境中强大的调试器,尤其适用于内核调试。此命令通常用于在系统中搜索所有句柄或特定句柄,对系统故障排除和安全评估都非常有用。以下是该输出的分解说明:

这表明,在内存地址ffffe2843ad8c080的进程中,未找到引用指定对象地址(ffffe2843b1b0090)的句柄。这意味着该特定进程并未访问或使用此对象。

[ffffe2843ab71080 unsecapp.exe]: 这标识了位于内存地址ffffe2843ab71080的另一个进程(unsecapp.exe)。unsecapp.exe通常是与WMI(Windows Management Instrumentation)关联的系统进程,用于促进客户端应用程序与远程服务器上的WMI之间的通信。

1ac: Entry ffff8003244fe6b0 Granted Access 1f0001 (Inherit) (Audit): 此行详述了unsecapp.exe进程内的一个特定句柄(标识符1ac)。 Entry ffff8003244fe6b0指的是句柄表中的句柄条目。 Granted Access 1f0001指定授予此句柄的访问权限。十六进制值1f0001描述了具体的访问权限(如读取、写入、执行),包括继承(Inherit)和审计(Audit)标志。FINISHED CSD0tFqvECLokhw9aBeRqmTqKjMg7DMSECIQsr2pFIQfR38iZkitvkvpLmoXoqk6TVGUqcKKdN1plqLTJk8ysx0DXmWP/3LJ623yfnHlTV9eLIVY9Qsx0oCCFKygC1Hmp1Cpdt/bhMBsNRglx48AQg==