PAC特权属性证书

前言:PAC特权属性证书笔记

参考文章:https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-pac/166d8064-c863-41e1-9c23-edaaa5f36962
参考文章:https://blogs.technet.microsoft.com/apgceps/2011/09/19/packerberos/
参考文章:https://blogs.technet.microsoft.com/apgceps/2011/09/12/packerberos-2/
参考文章:https://www.freebuf.com/articles/system/196434.html

在Kerberos最初设计的几个流程里说明了如何证明Client是Client而不是由其他人来冒充的,当时并没有声明Client有没有访问Server服务的权限,之后考虑到了这个问题为了实现在域中不同权限的用户能够访问的资源是有区别的,最终微软为了解决这个问题在实现Kerberos时加入了PAC的概念,PAC的全称是 Privilege Attribute Certificate(特权属性证书)。

PAC 的实现

当用户与 KDC 之间完成了认证过程之后,Client 需要访问 Server 所提供的某项服务时,Server为了判断用户是否具有合法的权限需要将 Client 的 User SID 等信息传递给KDC,KDC通过 SID 判断用户的用户组信息,用户权限等,进而将结果返回给Server,Server再将此信息与用户所索取的资源的ACL进行比较,最后决定是否给用户提供相应的服务。

PAC会在KRB_AS_REP中AS放在TGT里加密发送给Client,然后由Client转发给TGS来验证Client所请求的服务。

在PAC中包含有两个数字签名PAC_SERVER_CHECKSUM和PAC_PRIVSVR_CHECKSUM,这两个数字签名分别由Server端密码HASH和KDC的密码HASH加密。

同时TGS请求过程中,KDC将TGS票据进行解密之后验证签名是否正确,然后再重新构造新的PAC放在ST里返回给客户端,最终客户端将ST票据发送给服务端进行验证。

Server与KDC

PAC可以理解为一串校验信息,为了防止被伪造和串改,原则上是存放在TGT里,并且TGT由KDC hash 加密。同时尾部会有两个数字签名,分别由KDC密码和server密码加密,防止数字签名内容被篡改,如下图所示

同时 PAC 指定了固定的 User SID 和 Groups ID,还有其他一些时间等信息,Server 的程序收到 ST 之后解密得到 PAC 会将 PAC 的数字签名发送给 KDC,KDC 再进行校验然后将结果已 RPC 返回码的形式返回给 Server。

posted @ 2020-01-23 15:03  zpchcbd  阅读(1153)  评论(0编辑  收藏  举报