logo 安全知识丨域渗透-委派攻击_北京华清信安科技有限公司

首页 > 枢密院社区 > 论坛区域 > 技术交流论坛
安全知识丨域渗透-委派攻击

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


一:域委派

简单明了:委派就是将域内用户的权限委派给服务账号,使得服务账号能以用户权限访问域内其他服务。将我的权限给服务账户。


委派流程


User(hqsec\jack)--访问-->websvc (以User身份)--访问-->Service(文件服务器)


需求:jack需要登陆到后台文件服务器,经过Kerberos认证的过程如下:

1. 域内用户jack以Kerberos协议认证登录,将凭证发送给websvc;

2. Web服务以websvc服务账号运行,websvc向KDC发起jack用户的票据申请;

3. KDC检查websvc用户的委派属性,如果被设置,KDC中AS则返回jack用户的可转发票据TGT;

4. websvc收到jack用户TGT后,使用该票据向KDC中的TGS申请访问文件服务器的服务票据ST;

5. KDC检查websvc的委派属性,如果可以委派,并且权限允许,那么返回jack访问服务的ST票据;

6. websvc使用jack的服务ST票据请求后台文件服务器,完成多跳级认证;


注意:在域中只有主机账号和服务账号才具有委派属性

· 主机账号:AD活动目录中Computers中的计算机也可以称为机器账号(一个普通域用户默认最多可以创建十个主机账号)

· 服务账号:Service Account是域内用户的一种类型,是服务器运行服务时所用的账号,将服务运行起来并加入域。例如SQL Server 在安装时会在域内自动注册服务账号SQLServiceAccount。也可以将域用户通过注册SPN变为服务账号。


使用前提

需要被委派的用户未设置不允许被委派属性。

administrator 用户设置了敏感账号不能被委派所以该用户不能被委派。


委派分类 

微信图片_20230509101240.png

二:委派攻击之非约束性委派

非约束性委派

对于非约束性委派Unconstrained Delegation服务账号可以获取被委派用户的TGT,并将TGT缓存到LSASS进程中,从而服务账号可使用该TGT模拟用户访问任意服务。非约束委派的设置需要SeEnableDelegation特权该特权通常仅授予域管理员 。


租房案例

1. 任意用户就是租客

2. WIN10$服务账户是中介

3. 任意服务是房东

租客把自己的钱交给中介,中介拿着钱交给房东申请租房。那么这个过程中,WIN10$是拥有了任意用户的"钱"(凭证)的。协议层面讲,用户A委派WIN10$访问WEB服务,那么用户会将TGT缓存在WIN10的lsass中,DM再模拟这个用户去访问服务。


非约束性委派流程

前提:在服务A上配置到服务B约束性委派(域管理员才有权限配置)

1. 用户访问机器B的某个服务,于是向KDC认证;KDC会检查机器B的机器账号的属性,发现是非约束性委派,KDC会将用户的TGT放在ST服务票据中。

2. 用户访问机器B时,TGT票据会和ST服务票据一同发送给机器B。

3. 这样B在验证ST服务票据的同时获取了用户的TGT并将TGT存储在LSASS进程中从而可以模拟用户访问任意服务。

ATTACK:从网络攻击的角度来看如果攻击者控制了机器B的机器账号并且机器B配置了非约束性委派。则攻击者可以诱骗管理员来访问机器B然后攻击者可以获取管理员的TGT从而模拟管理员访问任意服务即获得了管理员权限。


三:委派攻击之约束性委派

约束性委派

为了进行约束性委派,微软在 Kerberos 协议的 TGS_REQ & TGS_REP 阶段引入了两个扩展子协议 S4u2Self (Service for User to Self) 和 S4u2Proxy (Service for User to Proxy )。S4u2self 可以代表任意用户请求针对其自身的Kerberos服务票据(ST);S4u2Proxy可以以上一步用户的名义请求其它服务的服务票据。约束性委派就是限制了 S4u2Proxy 扩展的范围。


约束性委派流程

前提:在服务A上配置到服务B约束性委派(域管理员才有权限配置)

1. 用户访问服务A于是向域控进行kerberos认证域控返回ST1服务票据给用户用户使用此服务票据访问服务A。

2. 若该服务A允许委派给服务B则A能使用S4U2Proxy协议将用户发送给自己的可转发的ST1服务票据以用户的身份再转发给域控制器。于是域控返回给服务A一个ST2服务票据。

3. 服务A便能使用获得的ST2服务票据以用户的身份访问服务B。


从网络攻击的角度来看如果攻击者控制了服务A的账号并且服务A配置了到域控的CIFS服务的约束性委派。则攻击者可以利用服务A以administrator身份访问域控的CIFS服务即相当于控制了域控。


S4u2Self

当用户以其他方式(如NTLM认证、基于表单的认证等方式)与Web服务进行认证后用户是无法向Web服务器提供请求该服务的ST服务票据的因而服务器也无法进一步使用S4U2Proxy协议请求访问服务B。S4U2Self协议便是解决该问题的方案被配置为约束委派的服务能够调用S4U2Self向KDC为任意用户请求访问自身的可转发的服务票据此后便可通过S4U2Proxy使用这张ST票据向域控制器请求访问B的票据。这里需要注意的是服务代表用户获得针对服务自身ST票据这个过程是不需要用户的凭据的。


S4U2Self的过程如下图所示(请求服务之前需要申请可转发的 TGT 即需要向域控认证账户密码)

微信图片_20230509101250.png


步骤1中,TGS_REQ的请求包的padata中有PA_FOR_USER字段,类型为S4u2Self,并且在KDC-options协商中设置返回的ST票据为可转发 forwardable 。向KDC请求 代表administrator用户访问自身服务 的ST服务票据,我们称之为ST1。


步骤2中,KDC检验通过后将ST服务票据的 票证标志 字段设置为可转发,发送给服务账号。主要检验以下几点

· TGT是否是可以转发的

· 服务是否配置了约束委派属性

· 服务是否请求了可转发选项


S4u2Proxy

S4U2Proxy 使得服务1可以使用来自用户的授权( 在S4u2self阶段获得),然后用该ST1票据(放在AddtionTicket里面)向KDC请求访问服务2的TGS,并且代表用户访问服务2,而且只能访问服务2。

S4u2Proxy过程入下图所示:


微信图片_20230509101254.png


步骤1中,服务1试图代表用户获取服务2的服务票证。服务1发送 TGS_REQ 消息,并将上一步获得的ST1服务票证作为请求中的 AddtionTicket。

步骤2中,KDC返回以administrator用户访问服务2的ST服务票据。


四:委派攻击之基于资源的约束性委派

传统的委派,在设置的过程中其实都是需要SeEnableDelegation特权,而这个特权需要域管理员才能设置。相对于传统的委派,基于资源的约束委派它不需要域管理员设置,而是机器本身。


约束委派和基于资源的约束委派的区别

约束委派:

通过服务A委派到服务B,实际是在服务A上增加TRUSTED_FOR_DELEGATION字段,TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION和msDS-AllowedToDelegateTo 字段来达到委派的目的。


基于资源的约束委派:

通过服务B允许服务A委派到服务B,实际是通过服务B自身赋予相应字段,从而允许服务A对服务B的基于资源的约束委派。


所以当利用到基于资源的约束委派的时候,服务A的两个字段是没有赋值的,当这两个字段没有被赋值的时候,通过S4U2Self得到的ST服务票证是不可被转发的,而S4U2Proxy的作用就是将可转发的ST票据转发到其他服务进行委派认证的。但是:在基于资源的约束委派过程中,不可转发的ST仍可以通过S4U2Proxy转发到其他服务进行委派认证,并且最后还会返回一张可转发的ST服务票证。


因此,如果能够在服务B上配置允许服务A的基于资源的约束委派,那么就可以通过控制服务A使用S4U2Self向域控请求任意用户访问自身的服务票据,最后再使用S4U2Proxy转发此ST票据去请求访问服务B的可转发的ST服务票据,那么我们就可以模拟任意用户访问服务B了。这里可以以普通域用户的身份去创建机器账号作为服务A。


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

该攻击由国外安全研究员Elad Shami提出:Wagging the Dog: Abusing Resource-Based Constrained Delegation to Attack Active Directory,他在文章中指出无论服务账号的 UserAccountControl 属性是否被设置为 TrustedToAuthForDelegation值,服务自身都可以通过调用S4U2Self来为任意用户请求自身的服务票据。但是当没有设置该属性时,KDC通过检查服务账号的TrustedToAuthForDelegation位和msDS-AllowedToDelegateTo 这两个字段,发现没有被赋值,所以服务自身通过S4U2Self请求到的ST服务票据是不可转发的,因此不可转发的ST服务票据是无法通过S4U2Proxy转发到其他服务进行约束性委派认证的。


但是!在基于资源的约束委派过程中,不可转发的ST服务票据仍然可以通过S4U2Proxy转发到其他服务进行委派认证,并且最后服务还会返回一张可转发的ST服务票据!因此,如果我们能够在服务B上配置允许服务A的基于资源的约束委派,那么我们就可以通过控制服务A使用S4U2Self向域控请求任意用户访问自身的服务票据,最后再使用S4U2Proxy转发此ST票据去请求访问服务B的可转发的ST服务票据,那么我们就可以模拟任意用户访问服务B了。这里我们可以以普通域用户的身份去创建机器账号作为服务A。


攻击步骤:

微信图片_20230509101258.png


前提:在服务2上配置服务1到服务2的基于资源的约束性委派(机器自身有权限可配置)

1. 服务1 使用自己的账号密码向KDC申请一个可转发的TGT票据。

2. 服务1 代表用户申请一个获得针对服务1自身的ST服务票据。这一步就是S4U2Self,这一步区别于传统的约束性委派,在S4U2Self里面提到,返回的ST票据可转发的一个条件是服务1配置了传统的约束委派。KDC会检查服务1 的TrustedToAuthForDelegation位和msDS-AllowedToDelegateTo 这个字段。这里由于基于资源的约束委派,是在服务2上配置的,服务2的msDS-AllowedToActOnBehalfOfOtherIdentity属性配置了服务1 的SPN,服务1并没有配置 TrustedToAuthForDelegation 位和 msDS-AllowedToDelegateTo 字段。因此当KDC检查服务1 的TrustedToAuthForDelegation 位和 msDS-AllowedToDelegateTo 这两个字段时,发现并未赋值。因此返回的ST票据是不可转发的。


3.  服务1可以使用来自用户的授权( 在S4U2Self阶段获得的不可转发的ST票据),然后将该不可转发的ST票据(放在AddtionTicket里面)向KDC请求访问服务2的可转发的ST服务票据。


基于资源的约束委派攻击危害

通过利用基于资源的约束委派攻击,攻击者能够使普通域用户以域管理员身份访问远程计算机CIFS等服务,实现本地权限提升。但是仅仅是本地提权,并不能执行域管理员的其他操作!


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

利用基于资源的约束委派(RBCD)需要2个条件:

· 拥有将域机器加入域的域用户的权限。(将机器B加入域的域用户拥有修改机器B的msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限。)

· 一个任意服务账户或者一个机器账户(每一个域用户都可以添加10个机器账户)

基于资源的约束委派攻击拓扑图:


在企业中,一般会有一个专门将计算机加入域的账号,如果我们获取到了该账号的权限,则可以通过基于资源的约束委派攻击获取 通过该账号加入域的所有机器 的 最高权限。


0条评论    浏览量:342
400-067-1560
  • 公司地址: 北京市朝阳区东大桥8号院SOHO尚都北塔B座10层、20层 (北京总部)
  • 联系电话:400-067-1560
  • Email:contact@hqsec.com
  • 离职员工背景调查(邮箱):hq-hr@hqsec.com
关注我们
Copyright © 北京华清信安科技有限公司 2023 京工信ICP备16018918号-1