Zumpyx's Blog

域内委派

addelegationred-team

在域中只有机器账户服务账户才具有委派属性,委派主要分为三种:

  1. 非约束性委派(Unconstrained Delegation,UD)
  2. 约束性委派(Constrained Delegation,CD)
  3. 基于资源的约束性委派(Resource Based Constrained Delegation,RBCD)

非约束性委派

配置了非约束委派属性的机器账户的 userAccountControl 属性的 Flag 位为 WORKSTATION_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION,其对应的值是 528384

配置了非约束委派属性的服务账户的 userAccountControl 属性的 Flag 位为 NORMAL_ACCOUNT | TRUSTED_FOR_DELEGATION,其对应的值是 524800

以下是非约束性委派流程:

image-20231012144513349

流程中,TGT 1 请求的 ST 用于访问 Server 1,TGT 2 请求的 ST 用于访问 Server 2。

但是此时 Server 1 可以使用 TGT2 以用户的身份访问任何用户可与访问的服务。

如果攻击者控制了 Server 1,则攻击者可以诱骗域管理员来访问 Server 1,然后攻击者可以在 Server 1 的机器上获取域管理员的 TGT,从而模拟管理员访问任意服务,例如域控。

约束性委派

服务只能获取该用户对指定服务的 ST,从而只能模拟该用户访问特定的服务。

配置了约束性委派账户的 msDS-AllowedToDelegateTo 属性会制定对哪个 SPN 进行委派。约束性委派的设置需要 SeEnableDelegationPrivilege 特权,该特权默认仅授予域管理员和企业管理员。

约束性委派有两种:

  1. 仅使用 Kerberos,不进行协议转换

    • 配置了仅使用 Kerberos 约束性委派的机器账户和服务账户的userAccountControl 属性和正常账户一样,但是其 msDS-AllowedToDelegateTo 属性会有允许被委派服务的 SPN
  2. 进行协议转换,可以使用任何身份验证协议

    • 配置了使用任何身份验证协议约束性委派的机器账户的 userAccountControl 属性的 Flag 位为 WORKSTATION_TRUST_ACCOUNT | TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION,其对应的值是 16781312,并且其 msDS-AllowedToDelegateTo 属性会有允许被委派服务的 SPN

约束性委派流程:

image-20231013090740200

从攻击角度看,如果攻击者控制了 Server 1的账户,并且 Server 1配置了到域控的 CIFS 的约束性委派,则可以利用 Server 以任意用户权限访问域控的 CIFS,相当于控制了域控

  1. S4u2Self 协议能够让配置为约束性委派的服务账户能够向 KDC 申请为任意用户请求访问自身的可转发 ST
  2. S4u2Proxy 协议使用上一步获得的可转发 ST 以用户的名义请求针对其他指定服务的 ST,重点:服务使用 S4u2Proxy 协议代表用户获得针对服务自身的 ST 的过程是不需要用户凭据的

基于资源的约束性委派

基于资源的约束性委派允许受信任的账户委派给自身。配置了基于资源约束性委派账户的 msDS-AllowedToActOnBehalfOfOhterIdentity 属性的值为被允许委派账户的 SID,并且委派属性没有任何值

基于资源的约束性委派流程:

202310180922701.png

由于基于资源的约束性委派账户的 msDS-AllowedToActOnBehalfOfOhterIdentity 属性的值为被允许委派账户的 SID。所以谁能修改 msDS-AllowedToActOnBehalfOfOhterIdentity 属性,谁就拥有配置基于资源的约束性委派的权限

基于资源的约束性委派攻击条件:

  • 拥有 Server A 的权限,只需一个普通域账户权限
  • 拥有在 Server B 上配置允许 Server A 的基于资源的约束性委派的权限,即拥有修改 Server B 的 msDS-AllowedToActOnBehalfOfOhterIdentity 属性的权限

从攻击角度看,无论服务账户的 UserAccountControl 属性是否被设置为 TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION 值,服务自身都可以通过调用 S4u2Self 来为任意用户请求自身的服务票据。当没有设置此属性时,请求到的 ST 是不可转发的,因此无法通过 S4u2Proxy 协议转发到其他服务进行约束性委派认证,但是在基于资源的约束性委派过程中,不可转发的 ST 仍然可以通过 S4u2Proxy 协议转发到其他服务进行委派认证,并且服务还会返回可转发的 ST,这是设计缺陷。

委派攻击防御

  • 高权限的用户设置为不能被委派
  • 主机账户需要设置委派时,只能设置为约束委派
  • Windows 2012 R2 及更高版本的系统创建了受保护的用户组,该组内的用户不允许被委派,将需要被保护的服务账户加入该组即可