内网安全-Windows域渗透-Kerberos委派(一)

admin 2022年3月11日10:29:47评论119 views字数 4264阅读14分12秒阅读模式


由标题引出2个问题,何为Kerberos与委派?为什么Windows域会需要Kerberos与委派?


内网安全-Windows域渗透-Kerberos委派(一)

何为委派

内网安全-Windows域渗透-Kerberos委派(一)

百度百科:

委派,指委托安排;委任派遣。语出《儿女英雄传》第十一回:“这个断不敢领,一则呢,是 十三妹 姑娘的委派;再我们头领也有话在头里。

维基百科:

委托模式(delegation pattern)是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。委托模式是一项基本技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。委托模式使得我们可以用聚合来替代继承,它还使我们可以模拟mixin。

可以得知委派类似于代理服务。


内网安全-Windows域渗透-Kerberos委派(一)

何为Kerberos?

内网安全-Windows域渗透-Kerberos委派(一)

维基百科:

Kerberos(/ˈkərbərəs/)是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。可以用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。Kerberos的扩展产品也使用公开密钥加密方法进行认证。当有N个人使用该系统时,为确保在任意两个人之间进行秘密对话,系统至少保存有它与每个人的共享密钥,所需的最少会话密钥数为N个。

文档:

https://datatracker.ietf.org/doc/html/rfc4120

个人理解Kerberos类似于https,引入了第三方来进行认证。


Kerberos认证流程


  • 认证流程


内网安全-Windows域渗透-Kerberos委派(一)



  • AD应为kerberos DB

内网安全-Windows域渗透-Kerberos委派(一)


KDC(Key Distribution Center)= 密钥分发中心TGT(Ticket Granting Ticket)= 票据授权票据,票据的票据AS(Authentication Server)= 认证服务器TGS(Ticket Granting Server)= 票据授权服务器SS(Service Server)= 特定服务提供端

1、客户端用户发送自己的用户名信息到KDC服务器以向AS服务进行认证。(明文)

2、KDC服务器会生成相应的TGT票据,打上时间戳,在本地数据库中查找该用户的密码,并用该密码对TGT进行加密,将结果发还给客户端用户。该操作仅在用户登录或者kinit申请的时候进行。(数据库白名单)

3、客户端收到该信息,并使用自己的密码进行解密之后,就能得到TGT票据了。这个TGT会在一段时间之后失效,也有一些程序(session manager)能在用户登陆期间进行自动更新。

4、当客户端用户需要使用一些特定服务(Kerberos术语中用”principal”表示)的时候,该客户端就发送TGT到KDC服务器中的TGS服务。当该用户的TGT验证通过并且其有权访问所申请的服务时,TGS服务会生成一个该服务所对应的ticket和session key,并发还给客户端。

5、客户端将服务请求与该ticket一并发送给相应的服务端即可。

   ● 数据交互情况

假设Client访问某Server上的http服务                                                         

   ● Client与AS交互

假设Client访问某Server上的http服务

1、使用某用户发出请求

消息1客户端的明文信息1.你的名字/身份证2.请求的服务的名称/ID(在这种情况下,服务是票证授予服务器)3.您的网络地址(可能是多台机器的 IP 地址列表,如果想在任何机器上使用,则可能为空),以及请求的 TGT 有效期的生命周期       Client —> ASAS—>Kerberos DB(查询用户名是否存在)                                                            

2、如果该用户存在:

消息A:TGT1、您的姓名/身份证2、TGS 名称/ID3、时间戳4、您的网络地址(可能是多台机器的 IP 地址列表,如果想在任何机器上使用,可能为空)5、TGT 的生命周期(可能是您最初要求的,如果您或 TGS 的密钥即将到期,则更低,或者在 Kerberos 设置期间实施的另一个限制)6、TGS 会话密钥使用TGS Secret Key加密,用户hash无法解密#TGS Secret Key 与 TGS会话密钥不同。
消息B:加密的Session Key1、TGS 名称/ID,2、时间戳,3、生命周期(同上),以及TGS 会话密钥
使用该用户的密码hash进行加密。AS—>Client这一步交互信息采用的密钥是用户hash!!!并且存在一个无法解密的TGT即只有在用户hash正确时才能进行下一步交互。

     Client与TGS交互


3、现在用户收到了用户密码hash加密过的消息,使用hash解密消息,获取TGS会话密钥。隐式验证了用户输入密码的正确性。

现在客户端目前有客户端无法解密的TGT以及解密得到的Session KeyTGS 会话密钥

消息2:Authenticator1.您的姓名/身份证,以及时间戳。使用TGS 会话密钥加密
消息3:1.您要访问的请求的 HTTP 服务名称/ID,以及HTTP 服务票证的生命周期此消息明文传输
消息4:加密的TGTClient—>TGS发送了加密的 AuthenticatorTGT 发送到TGS

4、TGS收到消息,检查消息3中的http服务是否存在。如果http服务存在,则使用TGS Secret Key解密消息4的TGT,解密TGT之后获得TGS会话密钥,获取到TGS会话密钥之后就能解密消息1的Authenticator了。

现在TGS拥有解密后的TGT以及Authenticator和消息3。

然后 TGS 将执行以下操作:将来自 Authenticator 的客户端 ID 与 TGT 的客户端 ID 进行比较比较来自 Authenticator 的时间戳与 TGT 的时间戳(典型的 Kerberos 系统容差为 2 分钟,但可以以其他方式配置)检查 TGT 是否过期(生命周期元素),检查 Authenticator 是否已经在 TGS 的缓存中(为了避免重放攻击),以及如果原始请求中的网络地址不为空,则将源的 IP 地址与您在 TGT 中的网络地址(或在请求的列表中)进行比较。TGS 随后会随机生成 HTTP Service Session Key,并为您准备 HTTP Service Ticket。然后 TGS 向您发送两条消息。
消息C:加密的HTTP Service Ticket1.您的姓名/身份证,2.HTTP 服务名称/ID,3.您的网络地址(可能是多台机器的 IP 地址列表,如果想在任何机器上使用,则可能为空),4.时间戳,5.机票的有效期,以及HTTP 服务会话密钥,
使用HTTP Service Secret Key对其进行加密
消息D:1.HTTP 服务名称/ID,2.时间戳,3.机票的有效期,以及HTTP 服务会话密钥
使用TGS 会话密钥加密。
这一步交互信息采用的密钥是TGS 会话密钥!!!并且存在一个无法解密的HTTP Service Ticket


     Client与Server交互


5、Client现在拥有解密后的消息D,以及解密消息D得到的HTTP 服务会话密钥,以及无法解密的HTTP Service Ticket。

现在Client与KDC交互完成,获得了HTTP 服务会话密钥,即将与Server进行交互。


消息5另一个 Authenticator(Server_Authenticator)1、您的姓名/身份证,2、时间戳使用HTTP 服务会话密钥加密
消息6无法解密的HTTP Service Ticket
这一步交互信息采用的密钥是HTTP 服务会话密钥!!!并且存在一个无法解密的HTTP Service Ticket

5、Server收到消息,然后 HTTP 服务用它的密钥解密HTTP Service Ticket以获得HTTP 服务会话密钥。然后它使用该会话密钥来解密您发送的身份验证器消息。

TGS 类似,HTTP 服务器将执行以下操作:将来自身份验证器的客户端 ID 与票证的客户端 ID 进行比较;比较来自 Authenticator 的时间戳与 Ticket 的时间戳(典型的 Kerberos 系统容差为 2 分钟,但可以以其他方式配置);检查票证是否过期(生命周期元素);检查 Authenticator 是否已经在 HTTP 服务器的缓存中(为了避免重放攻击),以及如果原始请求中的网络地址不为空,则将源的 IP 地址与您的网络地址(或在请求列表中)在票证中进行比较;
然后 HTTP 服务会发送
消息aAuthenticator 消息1.ID2.时间戳
以便向您确认其身份,并使用HTTP 服务会话密钥进行加密。
最后,您的机器通过使用缓存的HTTP 服务会话密钥解密来读取 Authenticator 消息,并且知道它必须接收带有 HTTP 服务 ID 和时间戳的消息。现在您已通过身份验证,可以使用 HTTP 服务。未来的请求使用缓存的 HTTP 服务票证,只要它没有像生命周期属性中定义的那样过期。


kerberos交互完成。

观察整个交互流程,会发现下一个密钥被上一个密钥所加密,除了KDC皆不可信(甚至KDC内部AS与TGS也不可互相信任)。

kerberos特点:1、密码无需进行网络传输。基于 Ticket 实现身份认证,保障密钥安全性。2、双向认证。整个认证过程中,不仅需要客户端进行认证,待访问的服务也需要进行身份认证。3、高性能。一旦Client获得用过访问某个Server的Ticket,该Server就能根据这个Ticket实现对Client的验证,而无须KDC的再次参与。4、客户端与其他组件交互是,都将获取到两条信息,其中一条可以通过本地密钥解密出,另外一条将无法解密出。5、KDC拥有所有的hash即Client和Server的密码hash。可以发现其实Server完全不与KDC交互,Server依靠HTTP Service Ticket进行身份认证。
备注:如果有误,感谢指出。



内网安全-Windows域渗透-Kerberos委派(一)





• 往期精选

内网安全-Windows域渗透-Kerberos委派(一)
内网安全-Windows域渗透-Kerberos委派(一)

GoldenEye 靶场渗透测试

CVE-2020-1472漏洞复现

记一次艰难的SQL注入(过安全狗)

干货|sql注入绕WAF的N种姿势


内网安全-Windows域渗透-Kerberos委派(一)

下方点击关注发现更多精彩!

原文始发于微信公众号(银河护卫队super):内网安全-Windows域渗透-Kerberos委派(一)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月11日10:29:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   内网安全-Windows域渗透-Kerberos委派(一)http://cn-sec.com/archives/825460.html

发表评论

匿名网友 填写信息