栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

Kerberos认证

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Kerberos认证

kerberos认证是内网渗透中黄金票据与白银票据伪造学习的前置知识,了解了什么是kerberos认证对金票据与银票据的伪造会有很大的理解与帮助。

前言

在古希腊神话中Kerberos指的是:有着一只三头犬守护在地狱之门外,禁止任何人类闯入地狱之中。

而在网络中的Kerberos是一种网络身份验证协议,旨在通过密钥加密技术为客户端/服务器应用程序提供身份验证,主要用在域环境下的身份验证。也是三次认证的过程,可以称为三次握手或者直接理解为三头犬。

上面这张图中存在的名词其实除了KDC之前我都有提到过一点,这里介绍一下这个验证过程中出现的名词:

KDC: Key Distribution Center,密钥分发中心,负责管理票据、认证票据、分发票据,但是KDC不是一个独立的服务,它由AS(Authentication Service)和TGS(Ticket Granting Service)组成。

AS: Authentication Service,验证服务,为client生成TGT的服务,其中TGT的伪造就是后面要说的金票。

TGS: Ticket Granting Service,票据授予服务,为client生成某个服务端的ticket,也叫ST,是后面要说的银票。

TGT: Ticket Granting Ticket,入场券,通过入场券能够获得票据,是一种临时凭证的存在。

ST :Service Ticket,与TGT作用大致相同,不过一个是由AS发放,一个是由TGS发放。

Ticket:票据,是网络中各对象之间互相访问的凭证

AD: Account Database,活动目录,可以理解为一个数据库,存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT。

DC: Domain Controller,没什么好说的就是域控。

KRBTGT: 每个域控制器都有一个krbtgt账户,是KDC的服务账户,用来创建TGS加密的密钥。

LSASS:Windows系统的安全机制(系统进程)。用于本地安全和登陆策略

NTML认证

当然除了上面的几个名词其实还有几个前置的知识,当然可以不用了解其太深的原理也可以,我这里简单的介绍一下NTLM认证的过程。NTLM认证,这个有兴趣可以去看看别的师傅写的:

NTLM认证_嘎嘎不是鸭的博客-CSDN博客_ntlm认证

当然其实我们只需要理解下面几个步骤:

1、在客户端输入用户与密码,然后LSASS会把密码的NTLM Hash后的值先存储到本地。

2、客户端把用户名的明文发送给服务端。

3、服务端对客户端发来的用户认证,在AD中判断是否存在用户,不存在则代表认证失败。存在的话服务端会生成一个16位的随机数(Challenge),并且从本地查找客户端中登陆用户名对应的NTLM Hash(每个用户对应的NTLM Hash是不相同的),使用NTLM Hash加密Chanllenge,生成一 个Net-NTLM Hash存在内存中,并将Chanllenge发送给客户端。

4、当客户端收到Challenge后,用在第一步中存储的NTLM Hash对其加密,然后再将加密后的Challenge发送给服务器,也就是Response,表现形式是Net-NTLM Hash,通过Net-NTLM Hash与服务端的进行二次确认。

5、服务端在收到Response后,会向DC发送针对客户端的验证请求。该请求主要包含以下三方面的内容:客户端用户名、客户端NTLM Hash加密的Challenge、原始的Challenge。

6、当DC接到过来的这三个值的以后,会根据用户名到DC的账号数据库(ntds.dit)里面找到该用户名对应的NTLM Hash,然后把这个hash拿出来和传过来的challenge值进行比较,相同则认证成功,反之,则失败。

这就是一个NTML的认证过程,可能开始有点难接受,多看几遍多想想就通透了。

Kerberos认证

根据开始我给的那张图片我们可以知道,Kerberos认证有六个步骤,但是其实也可以理解为三次握手,第一次与KDC中的AS进行一次握手,第二次与KDC中的TGS进行一次握手,第三次与服务端进行握手。

AS交互

Client ==>  AS:

用户在Client中输入账号密码后,Client会对密码进行hash code,得到NTLM Hash这是上面提到的。NTML认证成功后利用NTLM Hash 对 timestamp(一个当前时间的时间戳)、client-info(用户的一些信息)、server-info等数据进行加密,发送给AS,向AS请求TGT票据。

AS ==> Client:

当AS收到Client发来的信息后,AS会先向活动目录AD请求,查看是否有此Client用户,如果有的话,就会取出该Client的NTLM hash,然后生成一个随机秘钥称为Session-Key as(临时秘钥Session-Key)。并使用Client NTLM-hash 加密 Session-key as 作为一部分内容。还有一部分内容就是TGT:使用KDC一个特定账户krbtgt的NTLM-hash对Session-key as、timestamp、Client-info进行的加密。然后将这两部分回复给Client。

该阶段是Client和AS的认证。TGT中用户唯一不知道的是krbtgt这个hash,有了的话就可以自己伪造TGT,也就是上面说的黄金票据。

TGS交互

Client ==> TGS:

Client 收到AS发来的两段数据后,先使用自身的 NTLM Hash 解密其中一段被Client 的NTLM Hash加密的 Session-key as最后得到这个密匙,然后再使用 Session-key as 对 Client-Info、timestamp、Server-Info 加密作为一部分数据,加上TGT (因为没有krbtgt 的 NTLM Hash 所以无法解密),一并发送给 KDC中的 TGS。

TGS ==> Client:

TGS 收到请求后,使用 krbtgt 的 NTLM Hash 解密 TGT,得到 Session-key as、timestamp、Client-info,同时,使用 TGT 解密出的 Session-key as 解密第一部分内容,得到Client-info、timestamp。 比对这两部分解密得到的内容以验证是否通过。通过后,生成一个新的随机秘钥(Session-Key tgs),就是Server session key并向Client发送两部分内容:

  1. 一部分是Session-key as 加密的Session-key tgs
  2. 另一部分是ST(ticket),即Server NTLM-hash加密的数据(Session-key tgs、timestamp、Client-info)

该阶段是Client和KDC的通信。ST中用户唯一不知道的是Server的密码hash,所以有了这个hash,就可以自己伪造ST,也就是之前提到的白银票据。

Service交互

Client ==> Service:

Client收到TGS发送的数据后,先用自己保存的Session-key as解密出了Session-key tgs。再使用Session-key tgs加密Client-info、timestamp作为一部分内容,另一部分是ST,一并发送给Server。

Service ==> Client:

Server 收到Client发来的加密数据后,用自身的NTLM Hash解密了ST,得到Session-key tgs,再用Session-key tgs解密第一部分得到Client-info、timestamp。然后与ST的Client-info、timestamp进行对比。timestamp 一般时间为5min(这个不是绝对的,可以设置,如果超过时间戳的限制,那么票据则会失效)。验证通过后,回复Client,最终建立通信。

Service认证

服务端对客户端的认证成功后,客户端也需要对服务端那边进行确认,判断其是否为钓鱼服务。

Server需要将Client发的ST中解密出来的Timestamp再次用Session-Key as 进行加密,并发送给Client。Client再用缓存的Session-Key as进行解密,如果Timestamp和之前的内容完全一样,则可以证明此时的Server是Client想访问的Server。

参考:一文搞定Kerberos - 知乎

Windows认证及其票据传递 - R0ser1 - 博客园

https://www.jianshu.com/p/23a4e8978a30

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1040667.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号