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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY