Kerberos认证
Kerberos认证
认证流程:

其中包含三次加密的过程:
注意:AS_REP包含两部分Login Session Key和 TGT
1.在AS_REP阶段,用用户密码的哈希值加密用户与TGS通信的会话密钥,然后发送 Login Session Key
2.在AS_REP阶段,AS会生成TGT (包含用户身份、TGS Session Key、有效期等),用DC的krbtgt账户哈希加密后发送给用户
3.在TGS_REP阶段,用户用TGT向票据授予服务器(TGS)申请服务票据(ST)时,TGS 会生成 “用户与目标服务通信的会话密钥(Service Session Key)”,并用目标服务的账户哈希加密成ST后返回给用户
攻击手法:
1.用户名枚举: 用户存在与不存在进行AS的预认证时回显不一样,所有可以枚举出有效的域内用户名
2.AS_REP Roasting攻击:当被攻击用户设置了“不需要Kerberos预身份认证”时,AS_REP可以伪造用户任意的请求票据,然后AS返回的Login Session Key使用该用户密码的哈希加密的,即可枚举爆破明文密码
3.黄金票据攻击: TGT都是利用krbtgt账户的哈希加密后生成的,如果我们能拿到krbtgt的哈希值,即可伪造任意用户的票据去向TGS发起请求
4.kerberoast攻击:针对的是注册了SPN的域用户,先利用一个低权限的域用户去枚举注册了SPN的用户,然后请求ST服务票据,ST是用该服务账户的哈希加密的,再去枚举爆破用户的哈希
5.白银票据攻击:如果未配置PAC,就可以伪造ST来访问服务
6.委派:域内用户权限委派给服务账户,使得服务账号能以用户的权限在域内开展活动,在域内只有机器账户和服务账户才有委派属性,域用户可以通过注册SPN也能成为服务账号,主要攻击手法有非约束委派攻击,约束委派攻击,基于资源委派攻击
7.非约束委派攻击:服务账号可以获取被委派用户的TGT,并将TGT缓存到LSASS进程中,从而服务账号可使用该TGT, 模拟该用户访问任意服务。非约束委派的设置需要SeEnableDelegation特权

配置了非约束性委派属性的机器账号的userAccountControl 属性有个Flag位 WORKSTATION_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION,其对应的数是0x81000=528384。
配置了非约束性委派属性的服务账号的userAccountControl 属性有个Flag位 NORMAL_ACCOUNT | TRUSTED_FOR_DELEGATION, 其对应的数是0x80200=524800。
可以利用这个特性去寻找非约束委派的账户
从攻击角度来说:如果攻击者拿到了一台配置了非约束委派的机器权限,可以诱导管理员来访问该机器,然后可以得到管理员的TGT,从而模拟管理员访问任意服务,相当于拿下了整个域环境。
adfind查询非约束委派
非约束委派的主机:
1 | |
非约束委派的用户:
1 | |
诱导管理员来访问是比较困难的,还可以利用Spooler打印机服务让DC主动连接被控的服务,从而拿到域管理员的TGT,从而dcsync拿哈希接管整个域
8.约束委派攻击:相比于约束委派,严格限制了服务账号可以代表用户访问的服务,这种限制通过 AD 账号的 msDS-AllowedToDelegateTo 属性实现
原理:

user访问serviceA,向DC发起kerberos认证,域控返回user的TGT和ST1票据,user使用ST1票据对
serviceA进行访问如果配置了serviceA到serviceB的约束委派,则serviceA能使用S4U2Proxy协议将用户发给自己的可转发的ST1票据以用户的身份发给DC。域控返回serviceA一个用来访问serviceB的ST2票据,这样serviceA就能以用户的身份对serviceB发起访问
攻击原理:
由于服务用户 只能获取某个用户(或主机)的服务的ST1而非TGT , 所以只能模拟用户访问特定的服务 ,但是如果能拿到约束委派用户(或主机)的密码或者Hash,就可以伪造S4U的请求,伪装成服务用户以任意用户的权限申请访问指定服务的ST2

攻击过程:
使用命令查询约束用户(即可以被我们恶意访问的服务)
1 | |
然后用服务账号的ntml或者密码去请求tgt
1 | |
再利用tgt去伪造S4U请求代域管用户发起访问的请求获取st(这一步是利用kekeo或者Rubeus工具实现)
1 | |
最后把st导入内存就可以访问该服务了
基于资源的约束委派:
与传统的约束委派相比,它不再需要域管理员权限去设置相关属性。RBCD把设置委派的权限赋予了机器自身,既机器自己可以决定谁可以被委派来控制我,所以一般自己创造一个完全可控的机器用户,再去打约束委派
GenericWrite,具有这个权限就可以自己配置可控机器用户到目标用户的委派。