前言
一年一度的国家级HW行动即将到来,现如今掌握内网渗透的技术手段已经逐渐成为每个安全人员必备的技能树之一,提到内网渗透中用到的很多横向移动手法其实都离不开我们内网中的一些身份鉴别协议。攻防的对抗永远拼的是基础,本文来给大家介绍内网中最基本的两个身份授权协议和一些常用的内网攻击技术手段,旨在帮助大家打牢内网渗透基础知识。
Kerberos协议
1.kerberos设计初衷:
Kerberos首先是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认 证,kerberos侧重于通信前双方身份的认定工作,帮助客户端和服务端解决身份信息的鉴定,客户端需 要确认即将访问的网络服务就是自己所想要访问的服务而不是一个伪造的服务器,而服务端需要确认这 个客户端是一个身份真实,安全可靠的客户端,而不是一个想要进行恶意网络攻击的用户。
2.kerberos协议中的角色
2.服务端:接受服务请求
3.KDC(密钥分发中心):由三部分组成分别为:
-
Kerberos Database:包含有所有客户端和服务的密码
-
AS:认证服务器,专门用来认证客户端的身份并发放客户用于访问TGS的TGT(访问TGS的票据)
-
TGS:票据授予服务器,用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据(访问服务的server ticket)
3.kerberos协议协商流程
1.客户端(Client)向KDC中的AS发起请求认证,发送自己使用客户端(Client)hash加密的身份信息。
2.AS接受到了请求,使用客户端的hash解密,解密结果如果正确返回用krbtgt hash加密的TGT票据,包含pac。
3.客户端(Client)使用刚刚获得的TGT向KDC中的TGS发送请求,请求自己需要得到的资源
4.KDC中的TGS使用krbtgthash解密TGT,解密结果正确返回用服务器的hash加密的server ticket(TGS)
5.客户端(Client)拿着获得的server ticket(TGS)去服务器请求资源
6.服务端:使用自己服务的Hash成功解密TGS后,然后拿着TGS中获取的PAC去访问KDC判断客户端是否有权限访问。KDC解密PAC后获取用户sid以及所在组的信息,并根据访问控制表(ACL)判断权限。若符合,server返回资源给client。
4.常见的基于kerberos协议的攻击有如下几种(攻击阶段请参考上图)
PTH:如果找到了某个用户的ntlmhash,就可以拿这个ntlmhash当作凭证进行远程登陆了(在kerberos协议第一阶段发起的攻击)
PTK:若某个用户的加密方式是aeskey,那么就是拿到他的PTK就可以当作凭证进行远程登陆了(在kerberos协议第一阶段发起的攻击)
黄金票据:得到krbtgt的NTLMHash,就可以伪造TGT和LogonSession Key来进入下一步客户端与TGS的交互。(在kerberos协议第二阶段发起的攻击)
白银票据:白银票据的利用过程是伪造TGS,通过已知的授权服务密码生成一张可以访问该服务的TGS。因为在票据生成过程中不需要使用KDC(即没有前四步),所以可以绕过域控制器(在kerberos协议第五阶段发起的攻击)
MS14-068:KDC对pac校验算法上有缺陷,畸形TGT包可以解析而且服务器没有向域控DC验证pac,客户端可以伪造域管的权限来访问服务器(在kerberos协议第六阶段发起的攻击)
S4U2self/S4U2proxy协议:
1.概念
S4U2self/S4U2proxy协议是Kerberos协议的一个扩展,他的用处是在于当某个用户没有使用kerberos认证登陆了service,当这个用户想访问域内资源的时候,由于没有Kerberos的TGT就无法获取TGS进而 无法继续访问其他服务,为了解决这个难题故引进了S4U2self/S4U2proxy协议
2.S4U2self/S4U2proxy 协议协商过程
(1) 用户登陆Service 1在请求Service 2的中的某些资源。
(2) 通过 S4U2self 扩展以用户的名义向 KDC 请求用于访问 service1 的 ST1。
(3) KDC解密来自Service 1的TGT后返回一个新的ST1,
(4) service1 可以使用 ST 中的授权数据来满足用户的请求,然后响应用户。
S4U2proxy:
尽管 S4U2self 向 service1 提供有关用户的信息,但 S4U2self 不允许 service1 代表用户发出其他服务的请求,这时候就轮到 S4U2proxy 发挥作用了。
(5) 用户向 service1 发送请求,service1 需要以用户身份访问 service2 上的资源。
(6) service1 以用户的名义向 KDC 请求用户访问 service 2的 ST2。
(7) 如果请求中包含 PAC,则 KDC 通过检查 PAC 的签名数据来验证 PAC ,如果 PAC 有效或不存在,则 KDC 返回 ST2 给 service1,但存储在 ST2 的 cname 和 crealm 字段中的客户端身份是用户的身份,而不是 service1 的身份。
(8) service1 使用 ST2 以用户的名义向 service2 发送请求,并判定用户已由 KDC 进行身份验证。
(9) service2 收到 ST2进行判断,如果身份满足响应步骤 8 的请求。
(10) service1 响应用户对步骤 5 中的请求
2.基于S4U2self协议的攻击:
非约束委派攻击:
很明显上面的约束委派的安全性很差,所以微软发布了约束委派,包括一组S4U2Self和S4U2Proxy的Kerberos协议扩展。
约束委派攻击:
END
昆仑云安全实验室系列文章仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担!!! 昆仑云安全实验室拥有对此文章的修改、删除和解释权限
原文始发于微信公众号(昆仑云安全):浅析内网渗透中协议基础与常见手法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论