talha-nazeef-ahmed/ALPC-Enumerator

GitHub: talha-nazeef-ahmed/ALPC-Enumerator

Windows 用户态 ALPC 端口枚举工具,通过动态解析对象类型索引和回退查询 PPL 保护信息,解决了标准工具无法枚举受保护端口而导致的 IPC 通信盲区问题。

Stars: 0 | Forks: 0

# 感知 PPL 的 ALPC 端口枚举器 image image image image 一款 Windows 用户态工具,用于枚举和分类高级本地过程调用(ALPC)端口,包括在标准句柄复制失败时,由 PPL(Protected Process Light)进程拥有的端口。 标准的枚举工具通常会完全跳过受保护或拒绝访问的端口,从而产生盲区。该工具动态解析 ALPC 端口对象类型索引,并回退到 `NtQueryInformationProcess`,以准确分类那些拒绝标准复制请求的端口。 ## 实际应用场景 该工具消除了标准 Windows IPC 枚举中的盲区,主要服务于两类受众: * **威胁狩猎与 DFIR:** 通过 ALPC 通信的恶意软件可能会 hook 或拒绝 `PROCESS_DUP_HANDLE` 访问以隐藏其活动。标准工具会悄无声息地丢弃这些端口。该工具能够捕获失败情况,转而查询 `PS_PROTECTION` 结构。如果一个进程拒绝访问但返回的 Type 和 Signer 为 `0`(None),则它不是合法的 Windows PPL 进程,这种情况极度异常,应被标记以进行立即调查。 * **漏洞研究:** 准确映射未公开的 RPC/ALPC 攻击面需要绝对的精确性。仅依赖句柄复制必然会导致遗漏系统中最高特权(也是最有价值)的目标。 ## 执行摘要与原始数据 在运行的 Windows 11 系统上进行测试时,该工具遍历了 **58,916 个打开的句柄**,并分离出了 **2,618 个 ALPC 端口**: * **52 个受保护的端口** * **260 个具名端口** * **346 个路径命名端口** * **1,960 个匿名端口** ## 内核验证 为了证明用户态枚举的准确性,该工具的输出已针对 Windows 内核调试器(WinDbg)进行了手动验证。对象地址和 PPL 签名者级别与内核真实状态完全匹配。 * 查看 [VERIFICATION.md](./VERIFICATION.md) 获取对比证明。 * 查看 [alpc_verification_log.txt](./alpc_verification_log.txt) 获取原始 WinDbg 会话日志。 ## 构建与运行 1. 在 Visual Studio 中打开 `main.cpp` 或通过 MSVC 进行编译。 2. 在 `Release` 模式(x64)下构建。 3. 以管理员身份运行(需要 `SeDebugPrivilege`)。 ## 技术方案 该工具没有对 ALPC 对象类型索引进行硬编码(这会在不同的 Windows 版本中失效),而是创建了一个临时的 ALPC 端口并动态查询其类型,以隔离宿主系统正确的索引(例如,索引 46)。当标准句柄复制失败时,它会解码 `PS_PROTECTION` 以提取确切的 Type 和 Signer,从而在不依赖访问权限的情况下对端口进行分类。 完整的详细技术分析,请访问此 Medium 文章链接:https://medium.com/@sphinx_321/userland-alpc-enumeration-dynamic-ppl-aware-approach-283541194102 ## 许可证 [MIT](LICENSE)
标签:ALPC, 安全意识培训, 情报收集, 数字取证, 漏洞研究, 端点可见性, 自动化脚本, 进程枚举