windows认证之域认证

在域中的网络对象可以相互访问,但是在真实情况中,需要对某些部门的计算机进行限制,例如:销售部门不能访问技术部门的服务器。这里就需要Kerberos认证协议来验证网络对象间的权限。

Kerberos认证

Kerberos是一种计算机认证协议,在域中使用 Kerberos 作为认证手段。它提供了一种单点登录(SSO)的方法,比如打印服务器、邮件服务器和文件服务器。这些服务器都有认证的需求。很自然的,不可能让每个服务器自己实现一套认证系统,而是提供一个中心认证服务器(AS-Authentication Server)供这些服务器使用,这样任何客户端就只需维护一个密码就能登录所有服务器。

票据(Ticket):是网络对象互相访问的凭证。

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

AD(account database):存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT。类似于本机SAM的一个数据库。

角色

1.客户端(Client)

2.服务器(Server)

3.KDC(Key Distribution Center) = DC(Domain Controller)

3.1认证服务器(AS):为client生成TGT的服务

3.2票据授权服务(TGS):为client生成某个服务的ticket

认证流程:

第一步:

1.Client向KDC申请TGT。

Client向KDC发送只包含身份信息的数据包,KDC根据用户名在AD中寻找是否在白名单中。

2.如果存在,则返回 Client一个session key(TGS session key) 使用用户密钥hash进行加密的,用户可自行解密得到;另外一个是使用[TGS密钥]加密的TGT(实际上使用krbtgt的hash进行加密,也就是我们的黄金票据),client不可解析。(session key 是一个基于用户密码hash派生出来的key)

第二步:

3.客户端开始向TGS发起请求,首先生成一个authenticator( Client ID, Timestamp 时间戳,用(TGS session key)加密,目的是充分证明用户的身份信息),加上TGT,一并发送给KDC。

4.1 KDC对比authenticator和TGT,如果没有问题,则相信client,因为authenticator是client使用TGS session key加密的,而这个key是之前AS使用用户hash进行加密的,用户需要通过自身的密钥解密以后得到session key才能对authenticator 进行加密,如果KDC收到后能通过本地存储的session key解密说明用户提供的用户密钥正确,而TGT是提供给TGS使用的。

4.2TGS返回给client两个信息。

4.2.1使用service 密钥加密的信息,里面包含了server session key(client与server之间的session key) 和client id、client网络地址ticket有效时间等。

4.2.2使用[TGS SessionKey]加密的[Server SessionKey]。

第二条信息因为使用[TGS SessionKey]加密所以client能解密其中的内容。而第一条信息使用service密钥加密,client不能解密,但是这个信息其实是TGS给Service Server的消息,只不过是让Client一起携带过去而已。

第三步:

5.Client向service请求服务会将刚才TGS让client携带的消息发送给service server。还会发送由server session key加密的Authenticator 2(包括Client ID, Timestamp 等信息)。因为要证明client拥有正确的server session key,所以client使用server session key去加密Authenticator 2。

6.Service收到数据包,用自己的service密钥打开由client携带过来的加密数据包(service ticket),那么这时候service也获得了server session key及client id,然后service使用server session key解密Authenticator 2 提取里面的client id。然后和service ticket中的client id进行对比。如果匹配则说明Client拥有正确的server session key,然后service 响应数据包,里面包含了Server Session Key加密的Timestamp信息,此时client在使用server session key解密并提取Timestamp,确认和自己发的Authenticator 2中的Timestamp信息一致,此时双向认证建立。

简单概括:

1.client向kerberos服务请求,希望获取访问server的权限。 kerberos得到了这个消息,首先得判断client是否是可信赖的, 也就是白名单黑名单的说法。这就是AS服务完成的工作,通过在AD中存储黑名单和白名单来区分client。成功后,返回AS返回TGT给client。

2.client得到了TGT后,继续向kerberos请求,希望获取访问 server的权限。kerberos又得到了这个消息,这时候通过client 消息中的TGT,判断出了client拥有了这个权限,给了client访问server的权限ticket。

3.client得到ticket后,终于可以成功访问server。这个ticket只是针对这个server,其他server需要向TGS申请。

pass-the-ticket

pass-the-ticket和Pth攻击不同,利用的是Kerberos协议进行攻击。

主要常见的三种攻击手法为:

  1. Golden ticket (黄金票据)
  2. SILVER TICKET (白银票据)
  3. 域漏洞 (MS14-068)