LDAP Signing&Channel Binding

1. 枚举

┌──(root㉿kali)-[~/Desktop/htb/Pirate]
└─# nxc ldap dc01.pirate.htb -u a.white_adm -p 'Admin123' 
LDAP        10.129.190.148  389    DC01             [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:pirate.htb) (signing:None) (channel binding:Never)

2. 介绍

NTLM中继攻击可针对的另一个关键协议是 LDAP。成功中继到域控制器上的 LDAP 服务可用于收集域信息,例如用户、组、计算机及其属性、组成员资格、信任关系、域策略等。
如果 ms-DS-MachineAccountQuota 未设置为 0 ,中继到 LDAP 还可用于创建攻击者控制的计算机账户,这是在 AD 中获得立足点的非常常见的方式,因为它不需要攻击者对 NTLMv2 密码哈希执行离线密码破解。当特权账户被中继时,中继到 LDAP 更加危险,因为它可用于各种可能导致域被攻陷的攻击,例如创建新用户并授予该账户复制权限。然后,该账户可用于执行 DCSync 攻击,获取域中所有账户的 NTLM 密码哈希。

2.1. LDAP 签名

启用 LDAP 签名后,服务器将拒绝未通过签名请求完整性验证的 LDAP 绑定。未签名的 LDAP 流量容易受到重放攻击,攻击者可以拦截身份验证尝试并获取票据。冒充其签发的合法用户。LDAP 签名适用于通过 TCP 端口 389 的 LDAP。

文档KB935834

服务器端配置

  • 组策略Computer Configuration > Policies > Windows Settings > Security Settings > Local Policies > Security Options > Domain controller: LDAP server signing requirements
  • 注册表HKLM\System\CurrentControlSet\Services\NTDS\Parameters\LDAPServerIntegrity (DWORD)
含义
1 None(默认)— 不要求签名
2 Require Signing — 拒绝未签名的 SASL 绑定和明文简单绑定

客户端配置

  • 组策略Network security: LDAP client signing requirements
  • 可设为 Negotiate signing 或 Require signing

安全事件

  • 2886 — 启动时提醒尚未启用签名要求
  • 2887 — 24小时未签名绑定统计(策略为 None 时)
  • 2888 — 24小时被拒绝的未签名绑定统计(策略为 Require 时)
  • 2889 — 每次未签名绑定的详细记录(需日志级别 ≥ 2)

2.2. LDAP 通道绑定

LDAP 通道绑定将 TLS 隧道和 LDAP 应用层绑定在一起,创建一个称为通道绑定令牌(CBT)的唯一指纹。启用后,LDAP 通信无法在不建立新 TLS 隧道的情况下被重复使用。新隧道将使初始 LDAP 通信的 CBT 失效,从而有效防止中继身份验证。LDAP 通道绑定适用于通过端口 636 的 SSL/TLS(也称为 LDAPS)的 LDAP。

文档KB4034879 + KB4520412

注册表HKLM\System\CurrentControlSet\Services\NTDS\Parameters
键名LdapEnforceChannelBinding (DWORD)

含义
0 禁用(默认)— 不执行通道绑定验证
1 启用(When Supported) — 支持 CBT 的客户端必须提供,不支持的可放行
2 启用(Always) — 所有客户端必须提供 CBT,否则拒绝认证

安全事件

  • 3039 — 客户端绑定失败(CBT 验证不通过)
  • 3040 — 24小时内未受保护的 LDAPS 绑定统计
  • 3041 — 提醒 CBT 策略设为 Never
  • 3074/3075 — 审计事件(2023年8月起,Server 2022/2019)

攻击影响:当值为 0 时,NTLM Relay 攻击(如 ntlmrelayx)可以将 LDAPS 认证中继到 DC。设为 2 可防止此类中间人攻击。

2.3. 对比

功能特性 用途目的 受影响的协议 是否需要以此停止 LDAP 中继?
LDAP 签名 (LDAP Signing) 完整性检查(可缓解篡改及部分中继攻击) LDAP (端口 389)
LDAP 通道绑定 (LDAP Channel Binding) 将 TLS 与身份验证绑定(缓解通过 LDAPS 的中间人攻击/中继攻击) LDAPS (端口 636) 是的(如果启用了 LDAPS)
同时使用两者 完全缓解所有 LDAP 中继路径 LDAP + LDAPS

3. 修复

3.1. 检测

检测LDAP签名

Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters" -Name "LDAPServerIntegrity"

ldapserverintegrity 值的含义如下:

  • 0 - 无需签名(易受 LDAP 中继攻击)
  • 1 - 支持签名但非必需(仍易受 LDAP 中继攻击)
  • 2 - 必须签名(可防御 LDAP 中继攻击)

检查 LDAP 通道绑定
默认情况下,除非通过组策略或直接手动配置,或通过更新或安全基线更改添加,否则此注册表值不存在
如果该值不存在。这可能是因为域控制器未更新,或者该设置在组策略中未定义。

随微软公告 AVD190023 添加。截至 2020 年 3 月 10 日的 Server 2019 累积更新,LDAP 通道绑定设置 LdapEnforceChannelBinding 开始支持并通过注册表和组策略进行配置

Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters" -Name "LdapEnforceChannelBinding"

当 LdapEnforceChannelBinding 存在时,其可能的取值为:

  • 0 - 已禁用(易受 LDAPS 中继攻击)
  • 1 - 兼容模式(安全性不完整)
  • 2 - 已强制实施通道绑定(可防御 LDAPS 中继攻击)

3.2. 修复

3.2.1. 修复 LDAP 签名

可以通过修改 LDAPServerIntegrity 注册表项来启用 LDAP 签名,也可以通过Invoke-Command 跨域控制器远程应用

推荐使用组策略,如 Default Domain Controller Policy 策略
该设置位于: Computer Configuration --> Policies --> Windows Settings --> Security Settings --> Local Policies --> Domain controller: LDAP server signing requirements
Pasted image 20260303215457.png
然后执行 gpupdate

3.2.2. 修复 LDAP 通道绑定

LDAP 通道绑定也可以通过注册表启用,但仍推荐使用组策略进行配置
在 Default Domain Controller Policy 启用设置 Domain controller: LDAP server channel binding token requirements
Pasted image 20260303215553.png
然后还是gptupdate