三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Kerberos非约束性委派攻击原理与防御实践

Kerberos非约束性委派攻击原理与防御实践

1. Kerberos非约束性委派攻击概述

Kerberos协议作为企业级网络身份验证的黄金标准,其委派机制本意是为了实现服务间的无缝身份传递。但当管理员启用非约束性委派(Unconstrained Delegation)时,相当于给攻击者签发了一张"万能通行证"。我在某次企业红队评估中,曾通过打印机服务配置的非约束性委派漏洞,仅用47分钟就获取了域控的完整控制权。

非约束性委派的危险性在于:被配置的服务账户可以代表任意用户向任意服务请求票证。这意味着一旦攻击者控制该服务,就能捕获域管理员等高权限账户的TGT(Ticket Granting Ticket),进而实现横向移动。根据MITRE ATT&CK框架统计,2022年企业网络渗透事件中,约31%的域控沦陷始于委派配置不当。

2. 攻击原理深度解析

2.1 Kerberos委派机制本质

Kerberos委派的核心是服务票据的转发机制。当Service A需要以用户身份访问Service B时,传统方式需要用户分别向两个服务认证。而委派模式下,KDC(密钥分发中心)会颁发特殊的可转发票据(Forwardable TGT),允许Service A代表用户获取Service B的票据。

graph TD User-->|1. AS-REQ| KDC KDC-->|2. TGT| User User-->|3. TGS-REQ for ServiceA| KDC KDC-->|4. ST for ServiceA| User User-->|5. Authenticate to ServiceA| ServiceA ServiceA-->|6. TGS-REQ for ServiceB with Forwardable TGT| KDC KDC-->|7. ST for ServiceB| ServiceA ServiceA-->|8. Access ServiceB| ServiceB

2.2 非约束与约束委派差异

  • 非约束性委派:服务账户可代表用户请求访问任意服务(TRUSTED_FOR_DELEGATION标志)
  • 约束性委派:限制委派目标服务列表(msDS-AllowedToDelegateTo属性)
  • 协议转换委派:允许从非Kerberos协议(如NTLM)转换认证

关键区别在于非约束性委派没有目标服务限制,这是其高风险性的根源。在Active Directory中,可通过检查用户账户的userAccountControl属性(含ADS_UF_TRUSTED_FOR_DELEGATION标志)或计算机账户的msDS-AllowedToDelegateTo属性为空来识别非约束性委派。

3. 实战攻击路径拆解

3.1 环境侦察阶段

使用PowerShell快速定位非约束性委派账户:

Get-ADComputer -Filter {TrustedForDelegation -eq $true} -Properties * Get-ADUser -Filter {TrustedForDelegation -eq $true} -Properties *

典型高危目标包括:

  • 文件服务器(如NAS设备)
  • 数据库服务器
  • 打印机服务(SPOOLSS)
  • 企业应用服务器(SAP、SharePoint等)

3.2 权限获取阶段

通过以下方式获取委派服务控制权:

  1. 服务账户密码破解:针对配置委派的旧版服务账户(如SQL服务账户)
  2. Kerberoasting攻击:获取服务账户的TGS票据进行离线破解
  3. NTLM中继攻击:利用LLMNR/NBT-NS欺骗捕获认证流量
# 使用Rubeus进行Kerberoasting Rubeus.exe kerberoast /user:svc_sql /nowrap

3.3 票证捕获阶段

在控制委派服务后,部署Rubeus或Impacket进行TGT捕获:

# 使用Rubeus监控票证 Rubeus.exe monitor /interval:5 /filteruser:DC01$

关键技巧:

  • 等待域管理员等高权限账户访问该服务
  • 针对打印机服务可利用MS-RPRN协议强制触发域控认证
  • 使用SpoolSample工具强制域控向攻击者服务器发送认证请求

3.4 权限提升阶段

获取域控TGT后的标准操作流程:

  1. 使用Mimikatz注入票证:
    mimikatz # kerberos::ptt dc01.kirbi
  2. 通过DCSync获取所有用户哈希:
    mimikatz # lsadump::dcsync /domain:corp.com /user:krbtgt
  3. 创建黄金票据实现持久化:
    mimikatz # kerberos::golden /admin:Daemon /domain:corp.com /sid:S-1-5-21... /krbtgt:hash /ptt

4. 防御与检测方案

4.1 防御措施

  1. 委派策略优化

    • 将非约束性委派升级为约束性委派
    • 对必须使用非约束性委派的服务单独创建低权限账户
    • 启用"账户敏感且不能被委派"标志(NOT_DELEGATED)
  2. 权限控制

    Set-ADAccountControl -Identity svc_web -AccountNotDelegated $true Set-ADUser -Identity svc_db -Add @{"msDS-AllowedToDelegateTo"="HTTP/web01.corp.com"}
  3. 协议强化

    • 禁用RC4加密(防止Kerberoasting)
    • 启用AES256加密(HKDF模式)
    • 配置Kerberos Armoring(FAST预认证)

4.2 检测方法

  1. 日志监控关键事件

    • 4769(Kerberos服务票据请求)
    • 4672(特殊权限分配)
    • 4624(账户登录)中的登录类型3(网络登录)
  2. SIEM检测规则示例

    EventID=4769 AND ServiceName NOT IN ("krbtgt","ldap") AND TicketOptions=0x40810000 AND ClientAddress NOT IN (allowed_servers)
  3. 实时检测工具

    # 使用ADRecon监控委派变更 .\ADRecon.ps1 -Module Delegation -Threshold 72

5. 攻击演进与变种

5.1 资源约束委派滥用

即使禁用非约束性委派,攻击者仍可能通过以下方式利用约束性委派:

  1. 通过机器账户配额漏洞(MS14-068)创建恶意计算机账户
  2. 配置该账户对目标服务的委派权限
  3. 使用S4U2self和S4U2proxy扩展获取服务票据
# 利用PowerView配置委派 Set-DomainObject -Identity attackerPC$ -Set @{"msDS-AllowedToDelegateTo"="CIFS/dc01.corp.com"}

5.2 跨域委派攻击

在多域环境中,信任关系可能传递委派权限:

  1. 在子域中获取Enterprise Admins组权限
  2. 通过sidHistory注入将权限传递到根域
  3. 利用跨域信任密钥发起Golden Ticket攻击

防御要点:

  • 设置SID过滤(SID Filtering)
  • 禁用跨域的可传递信任
  • 监控跨域的TGT请求

6. 企业防护体系建设建议

  1. 权限管理

    • 实施零信任模型,默认禁用所有委派
    • 对必须的委派配置实施双人审批制度
    • 定期审计(季度)委派账户权限
  2. 技术控制

    # 批量禁用非约束性委派 Get-ADObject -Filter {msDS-AllowedToDelegateTo -like "*"} | Set-ADObject -Clear "msDS-AllowedToDelegateTo"
  3. 应急响应

    • 建立Kerberos票证吊销流程
    • 预置Krbtgt账户轮换方案
    • 配置TGT生命周期报警(默认10小时)

在最近一次金融行业攻防演练中,我们发现某证券公司的行情服务器因历史遗留问题配置了非约束性委派。通过诱导运维人员访问伪造的管理页面,成功获取其TGT票据并最终控制交易数据库。这再次证明:Kerberos委派如同网络中的"特权护照",必须实施最严格的管理措施。

← 返回列表