基于域委派的攻击


基于域委派的攻击

域委派

Identity delegation is a feature of Active Directo ry Federation Services (AD FS) that allows administrator-specified accounts to impersonate users. The account that impersonates the user is called the dele gate

This delegation capability is critical for many distributed applications for which there is a series of access control checks that must be made sequentially for each application, database, or service that is in the authorization chain for the originating request

Many real-world scenarios exist in which a Web application “front end” must retrieve data from a more secure “back end”, such as a Web service that is connected to a Microsoft SQL Server database.

域委派是大型网络中经常部署的应用模式,给多跳认证带来很大的便利,同时也带来很大的安全隐患,利用委派可获取域管理员权限,甚至制作深度隐藏的后门

域委派是指,将域内用户的权限委派给服务账号,使得服务账号能以用户权限开展域内活动。

服务账号(Service Account),域内用户的一种类型,服务器运行服务时所用的账号,将服务运行起来并加入域。例如 MS SQL Server 在安装时,会在域内自动注册服务账号 SqlServiceAccount,这类账号不能用于交互式登录。

一个域内普通用户 jack 通过 Kerberos 协议认证到前台 WEB 服后,前台运行 WEB 服务的服务账号 websvc 模拟(Impersonate)用户 jack,以 Kerberos 协议继续认证到后台服务器,从而在后台服务器中获取 jack 用户的访问权限,即域中跳或者多跳的 Kerberos 认证。

流程

  1. 域内用户 jack 以 Kerberos 方式认证后访问 Web 服务器;
  2. Web 服务以 websvc 服务账号运行,websvc 向 KDC 发起 jack 用户的票据申请;
  3. KDC 检查 websvc 用户的委派属性,如果被设置,则返回 jack 用户的可转发票据 TGT;
  4. websvc 收到 jack 用户 TGT 后,使用该票据向 KDC 申请访问文件服务器的服务票据 TGS;
  5. KDC 检查 websvc 的委派属性,如果被设置,且申请的文件服务在允许的列表清单中,则返回一个 jack 用户访问文件服务的授权票据 TGS;
  6. websvc 收到的 jack 用户的授权票据 TGS 后,可访问文件服务,完成多跳认证。

委派类型

域内委派主要有 3 种应用方式:

一是非约束性委派(Unconstrained Delegation),服务账号可以获取某用户的 TGT,从而服务账号可使用该 TGT,模拟用户访问任意服务

如果某个服务 A 的服务账号 B 被设置为非约束委派,当用户 C 通过 Kerberos 认证访问服务 A 时,KDC 会检查服务账号 B 的属性,发现是非约束性委派时,KDC 会将用户 C 的 TGT 放在 TGS 中,这样 B 在验证 TGS 的同时获取了 A 用户的 TGT,从而可以模拟用户 A 访问任意服务

二是约束性委派(Constrained Delegation),即 Kerberos 的扩展协议 S4U2Proxy,服务账号只能获取某用户的 TGS,从而只能模拟用户访问特定的服务;

三是协议传递,即 Kerberos 的扩展协议 S4U2Self,服务账号针对某一个特定服务,可查询获取任意用户的 TGS,从而能模拟任意用户访问该特定服务。

筛选具有委派属性的服务账号

服务账号被设置为非约束性委派时,其 userAccountControl 属性会包含为 TRUSTED_FOR_DELEGATION

当被设置为约束性委派时,其 userAccountControl 属性包含 TRUSTED_TO_AUTH_FOR_DELEGATION(T2A4D),且 msDS-AllowedToDelegateTo 属性会被设置为哪些协议

在域内的可以委派的账户有两种一种是主机账户(NetComputer)另一种是用 setspn 手动添加的服务账户(NetUser),不管是非约束还是约束的例子是以主机账户举例,因为用主机账户来委派的环境好搭并且便于理解,不过服务账户和主机账户从攻击委派这个视角来看是等价的。

可通过 PowerShell 脚本枚举域内所有的服务账号,查看哪些账号被设置了委派,以及是何种类型的委派设置

约束性委派的发现:

Get-DomainUser –TrustedToAuth -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto| fl
Get-DomainUser -TrustedToAuth -Domain beta.com
Get-DomainComputer -TrustedToAuth -Domain beta.com

非约束性委派的发现:

通过Import-Module PowerView.ps1加载PowerView脚本之后使用下面的命令进行查询。
查询域中配置非约束委派的账户:
Get-NetUser -Unconstrained -Domain <domain>

查询域中配置非约束委派的主机:
Get-NetComputer -Unconstrained -Domain <domain>

当一个用户具备对某个服务账号的 SeEnableDelegationPrivilege 权限时,表示可以更改服务账号的委派设置,一般情况下只有域管理员才具备这个权限。因此也可以利用 SeEnableDelegationPrivilege 属性,制作极其隐蔽的后门

攻击样例

已知被设置非约束性委派属性的服务账号的口令明文,则可以获取域管理权限

现在已知域内服务账号 sqlsvc 的口令明文,则可使用 keke 工具构造 sqlsvc 服务账号的票据。

tgt::ask /user:sqlsvc /domain:testlab.com /passw ord:1qaz@WSX3edc /ticket:sqlsvc.kirbi

由于 sqlsvc 被设置为非约束性委派,因此可以利用刚才伪造的 sqlsvc 票据,向域服务器发起申请访问域服务器 CIFS 服务的管理员权限的 TGS 的命令

Tgs::s4u /tgt:service_account_tgt_file /user:administrator@testlab.com /service:service_to_access

此时内存中已经有了访问域服务器 CIFS 服务的域管理员的 TGS 票据,需要将该票据注入当前的会话中,使用 mimikatz 的 kerberos::ptt 命令可完成票据的注入。注入票据后,当前的会话具备了访问域服务器 C 盘目录的权限

已控制非约束性委派服务账号所在的服务器

攻击者控制了服务器,与样例 1 类似。由于攻击者控制了服务器,可直接利用 mimikatz 从内存获取服务账号的 TGT,所以可以省去 tgt::ask 步骤,直接从 tgs:s4u 步骤开始,后续和样例 1 相同

已获取配置了约束性委派的服务账号的口令 NTLM

和样例 1 相同,样例 1 用明文口令生成 NTLM,然后向域服务器申请获取服务账号的 TGT。Kekeo 提供了该功能 ,可直接从 NTLM 开始,向域服务器申请 TGT。

一个主机账号被设置了约束性委派,已获取该主机账号的口令NTLM

方法和样例 1 也是类似,只不过样例 1 中是服务账号,而本样例中是主机账号。测试结果截图分别如下,不再过多解释。测试可在任何域内主机中进行,不需要在主机账号所在的主机。


文章作者: Geekby
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Geekby !
 上一篇
DCSync 攻击 DCSync 攻击
DCSync 攻击2015 年 8 月,Benjamin Delpy(神器 Mimikatz 的作者)和 Vincent Le Toux 发布了新版本的 Mimikatz,新增加了 DCSync 功能。模仿一个域控制器 DC,从真实的域控制
2020-05-07
下一篇 
基于域信任关系的域攻击 基于域信任关系的域攻击
基于域信任关系的域攻击域信任建立域之间的信任关系,是为了一个域的用户能方便地访问其他域的资源,同时也方便了对域网络的管理和维护。这种模式在带来便利的同时,也存在很多可以被恶意攻击者利用的地方。 域信任关系可以是单向\双向信任、可传递\不可传
2020-05-05
  目录