本篇文章会来到真实的环境来将详细讲解一下客户端如何申请TGT
1、 当用户按下“Ctrl + Alt + Del”之后,Winlogon被唤醒,同时跳出需要输入用户名和密码的登入身份凭据窗口(由Gina.ll来定义)
2、 用户使用domain\user或UPN名之后,由Winlogon读取用户的身份凭据,并把它交给LSA(本地安全机构),LSA会使用MD4对用户的密码进行哈希处理,然后交给Kerberos协议(这里先留一个坑,事实上LSA并不是马上就交给Kerberos协议,也有可能交给NTLM协议,最下面会有解释),以便对用户进行身份验证
3、 Kerberos生成一份TGT请求,请求会包含一个预鉴别码(预鉴别码是一个“时间戳”,其主要目的是防止DOS***和身份验证),并使用刚才的用户密码哈希对预鉴别码进行加密,然后交给远端的KDC
4、 KDC接收到TGT请求之后,会先交给DC来进行用户的身份验证,然后会用用户的密码哈密来解密这份TGT请求。会有以下几种可能发生:
1) 无法解密预鉴别码
2) 能解密,但里面的时间戳是以前别人用过的
3) 能解密,但超过的时间容差,5分钟
5、如果发生以上任何一种情况,那么KDC会返回错误信息。如果以上情况都没有发生,KDC就认为这个请求是真实有效的。于是生成一份TGT,并在本地LSA的帮助下,为用户创建一个PAC(特权访问证书,关于什么是PAC下面会详细介绍),放在TGT的授权数据字段。然后通过一个应答消息返回给客户。
KDC的应答消息(包括TGT或会话票证)包含两部分内容:一部分是由客户端读取的信息(TGT或会话票证的内容不一样),使用客户端用户的密码哈希来加密,另一部分就是TGT或会话票证本身,使用KRBTGT账户的密码哈希来加密。
6、 Kerberos客户端使用自己的密码哈希来解密属于他的那部分数据,其实就是一个会话密钥,也就是KDC生成的一组随机数,客户端将会话密钥(也就是那一组随机数)和TGT缓存到内存中,以便以后申请目标服务器的会话票证(TGT的有效期默认是10小时)。然后Kerberos协议从TGT中取出PAC,交给本地LSA
,
LSA读取PAC中的信息,为用户创建一个本地访问令牌
8、 这样,整个认证过程结束,Winlogon把控制权交给Userinit,接下来处理组策略方面的内容,这个就不详细介绍。
9、用户以后启用的所有进程,都将继承用户的访问令牌。
下面解释下上面挖的那个坑。LSA在收到Winlogon的交给他的身份凭证后,并不是马上就交给Kerberos协议,还有可能是NTLM协议,因为我们知道用户登入有两种,一种是本地登入,一种是域登入。如果是本地登入的话,会使用本地数据库进行验证,如果是域登入的话,就会使用域控制器来进行身份验证。那LSA如何判断是本地登入还是域登入呢?下面来讲解一下LSA的处理流程
一、LSA的处理流程:
1、 LSA首先会把身份凭据交给SSPI,由该接口负责与Kerberos和NTLM服务沟通。
2、 SSPI不能确定用户是本地登录还是域账户进行域登录。所以他会先把身份认证请求传递到Kerberos SSP。
3、 Kerberos SSP会验证用户的登入目标是本地计算机还是域。如果是登录域,Kerberos SSP将继续处理。如果是本地计算机,即用户不是登录域,Kerberos SSP返回一个错误消息到SSPI,交回给GINA处理,使服务器登录不可用。
4、 SSPI现在发送请求到下一个安全提供程序——NTLM。NTLM SSP会将请求交给Netlogon服务针对LSAM (Local Security Account Manager,本地安全账户管理器)数据库进行身份认证。使用NTLM SSP的身份认证过程与Windows NT系统的身份认证方法是相同的。
二、什么是PAC
KDC在向Kerberos客户端颁发TGT时,会向本地LSA请求生成一个特殊的数据结构,名为“特权访问证书”(Privilege Access Certificate,PAC),这个PAC包含为Kerberos客户端构建一个本地访问令牌所需的用户信息,他同时使用域控制器服务器的私钥和KDC服务器的私钥来进行数字签署。以防假的KDC伪造PAC,下面是PAC的具体内容
1、 用户的登入时间以及用户会话额到期时间
2、 用户上一次设置密码的时间,以及允许他再次更改密码的时间
3、 用户的经典登入名,domain\user
4、 用户的显示名称
5、 指派给用户账户的经典NT登入脚本的名称(如果有的话)
6、 用户漫游配置文件的UNC路径
7、 客户端主目录的UNC路径
8、 用户的并发登入数
9、 在颁发PAC的KDC处,自从上一次成功登入以来,所允许的不成功登入尝试次
10、 用户的RID
11、用户的“主要组”的RID,只限在POSIX使用
12、在域中,将用户作为一个成员的组的数量,以及每个组的RID
13、适用于用户的已知SID
14、域的SID
15、资源域的SID
除此之外,PAC中还嵌入了另一个名为“用户账户控制”的数据结构,这个结构定义了大量用户设置,许多设置都在“Active Directory用户和计算机”的用户属性对话框的“账户”选项卡中以复选框的形式出现。内容我就不详细写出来了。
下一篇文章,会讲解用户要访问本地域的资源时,如何申请目标服务器会话票证
转载于:https://blog.51cto.com/jvozen/697426