|Windows身份认证及利用思路( 三 )


2.域控使用 challenge 和用户hash进行加密得到 response2与 type 3 的 response 进行比较并将结果返回给服务器 。
域控远程认证
|Windows身份认证及利用思路
本文插图

Kerberos 域认证
a、kerberos 协议概述
Kerberos 是一种由 MIT麻省理工大学提出的一种网络身份验证协议 。 它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证 。
该认证过程的实现不依赖于主机操作系统的认证无需基于主机地址的信任不要求网络上所有主机的物理安全并假定网络上传送的数据包可以被任意地读取、修改和插入数据 。 在以上情况下 Kerberos 作为一种可信任的第三方认证服务是通过传统的密码技术如:共享 密钥执行认证服务的 。
在 Kerberos 协议中主要是有三个角色的存在
1.访问服务的Client(以下表述为Client 或者用户)
2.提供服务的Server(以下表述为服务)
3.KDCKey Distribution Center密钥分发中心 kerberos 测试工具介绍
其中 KDC 服务默认会安装在一个域的域控中而 Client 和 Server 为域内的用户或者是服务如 HTTP 服务SQL 服务 。 在 Kerberos 中 Client 是否有权限访问 Server端的服务由 KDC 发放的票据来决定 。
1.名词概念
票据Ticket是网络对象互相访问的凭证 。
TGTTicket Granting Ticket入场券通过入场券能够获得票据是一种临时凭证的存在 。
TGSticket granting service票据授予服务 。
KDC负责管理票据、认证票据、分**据但是 KDC 不是一个独立的服务它由以下服务组成
Authentication Service: 为client生成TGT的服务
Ticket Granting Service: 为client生成某个服务的ticket
另外还需要介绍一个类似于本机SAM的一个数据库AD全称叫 account database存储所有 client 的白名单只有存在于白名单的 client 才能顺利申请到TGT 。
从物理层面看AD 与 KDC 均为域控制器Domain Controller 。
b、认证流程
|Windows身份认证及利用思路
本文插图

1.AS-REQClient 向 KDC 发起请求明文密码将会被加密为 hash时间戳使用 Client hash 进行加密然后作为认证票据TGT请求AS-REQ中的认证因子发送给KDC 。
2.AS-REPKDC 使用 Client hash 进行解密如果结果正确就返回用 krbtgt hash 加密的 TGT 票据 。 TGT 里面包含 PACPAC 包含 Client 的 sidClient 所在的组 。
3.TGS-REQ当 Client 请求票据授予服务TGS票据时用户需要向 KDC 展示TGT数据 。 KDC 会打开票据进行校验和检查 。 如果 KDC 能够打开票据并能通过校验和检查那么会认为 TGT 为有效票据 。 此时 TGT 中的数据会被复制以创建 TGS 票据 。
4.TGS-REPKDC使用目标服务账户的 hash 对 TGS 票据进行加密然后将结果发送给 Client 。 (这一步不管用户有没有访问服务的权限只要TGT 正确就返回 TGS 票据)
5.AP-REQClient访问目标服务并发送 TGS 票据去请求服务 。
6.AP-REP服务使用自己的 hash 解密 TGS 票据 。 如果解密正确就拿着 PAC 去 KDC 查询 Client 有没有访问权限KDC 解密 PAC 。 获取 Client的 sid以及所在的组再根据该服务的 ACL判断 Client 是否有访问服务的权限 。
c、PAC
在 Kerberos 最初设计的几个流程里说明了如何证明 Client 是 Client 而不是由其他人来冒充的但并没有声明 Client 有没有访问 Server 服务的权限因为在域中不同权限的用户能够访问的资源是有区别的 。
所以 Microsoft 为了解决这个问题在实现 Kerberos 时加入了 PAC 的概念PAC 的全称是 Privilege Attribute Certificate特权属性证书 。
PAC 可以理解为一串校验信息为了防止被伪造和串改原则上是存放在 TGT 里并且 TGT 由 KDC hash 加密 。 同时尾部会有两个数字签名分别由 KDC 密码和 server 密码加密防止数字签名内容被篡改 。


推荐阅读