黄金票据和白银票据

文章目录

Kerberos使用背景

1、个人文件还是公司文件以及服务都存在于一台系统上,所有人都要去一台机器办公,效率非常低,为每个人分配了电脑以后就需要考虑安全问题

2、如何让服务器正确识别每一个人,假定所有数据包在传输过程中都可以被任意截取和修改

3、在每一台电脑上都存入所有人的账户密码是不现实的,所以引入一个认证服务统一管理所有的用户密码

4、假设用户访问邮件服务,认证服务让你提供密码以此来证明身份,它把你提供的密码和数据库中的密码相比较,通过认证,认证服务不会提供给你任何密码,不然下次你就可以不认证直接利用密码登录,认证服务会给你一张票,拿到票后,你把此票给邮件服务,以此来证明你的身份

5、需要解决的问题,每次使用还没有得到票的服务前,都必须给认证密码。比如使用邮件服务,就要输入一次。使用文件服务,又要输入一次。打印服务,还要输入一次,并且网络中明文传输密码。不法分子就可以监听网络流量获取密码。

6、引入"票据授权"服务(TGS),TGS将代替认证服务的发票功能,以后认证服务不在提供票据,如果你有TGS发放的服务票证,可以使用此票对应的服务

7、如果你通过了认证服务的验证,将会得到一张票据授权票(TGT),现在你想使用邮件服务,然而还没有邮件服务的票,所以你使用"票据授权"票去取邮件服务的票,"票据授权"票,可以使用此票获取你需要的其他服务票

8、解决密码明文传输,当你取得票据授权票时,不再发送密码,而只发送你的用户名,认证服务得到用户名以后用此用户名查你的密码,之后认证服务会制作一个包含票据授权票(TGT)的数据包,并且用你的密码加密此数据包,这样即使数据包被截取没有密码无法解密也获取不到TGT

9、票据的有效期问题,有效期内票据丢失会产生复用,并且没法灵活销毁票据

10、引入会话密钥session key,认证服务,认证服务会返回票以及一份session key,都用用户的ntml加密,用户利用session key生成认证器来与服务进行沟通

kerberos认证流程

DC(Domain Controller):域控制器,是域中一台拥有最高管理权限的计算机

AD(Active Directory):活动目录数据库

KDC(Key Distributed Centre):包含了AS和TGS。

AS(Authentication Server):身份验证服务,为客户生成TGT的服务

TGS(Ticket GrantingServer):票证发放服务器,通过你的TGT来发放ST

TGT(Ticket Granting Ticket):票据授权票据,通过票据授权票据可以获得一个票据,类似临时凭证

ST(Service Ticket):服务票据

如下图,客户端首先向AS发送请求,AS提供TGT身份票据给客户端,客户端得到TGT后去访问TGS,由TGS发放服务票据ST,最后客户端用ST去访问服务端,服务端给客户端回应:

详解:

1、客户端发送自己的用户名给AS

2、AS验证用户名是否在白名单列表,如果在的话随机生成session key(as)返回如下信息

TGT1(session key(as),TGS服务器信息等)--客户端NTLM哈希加密

TGT2(session key(as),客户端信息等)--KRBTGT NTLM哈希加密(KRBTGT可以理解为DC中最高权限的用户)

3、用自己的NTLM哈希解密TGT1, 获得TGS服务器信息以及session key(as),TGT2由于是别人的哈希,所以解不开。

生成认证因子(客户端信息,当前时间)--session key(as)加密(认证因子用来验证TGT是否正确

发送认证因子以及TGT2给TGS服务

4、TGS服务先解密TGT2获得session key(as),紧接着利用session key(as)解密认证因子,对比认证因子与TGT2的客户端信息是否一致,如果一致生成session key(TGS),返回如下信息给客户端

TGT3(session key(TGS),服务器信息,票据到期时间)--session key(as)加密

TGT4(session key(TGS),客户端信息,票据到期时间)--客户端想要访问的服务器的哈希加密

5、客户端解密TGT3,得到session key(TGS),服务器信息

生成认证因子2(服务器信息,票据到期时间)--session key(TGS)加密

发送认证因子2以及TGT4给服务器

6、服务器先用自己的哈希解密TGT4得到session key(TGS),客户端信息,票据有效期

利用session key(TGS)解密认证因子对比客户端信息(验证ST是否正确)决定是否提供服务

以下图的邮件服务为例:

客户端向域控DC中的AS发送请求,AS生成一个session key(身份令牌),session key(as)分别保存在TGT1和TGT2两个身份票据做临时凭证 中(其中TGT1用客户端的哈希加密,TGT2用最高管理用户的哈希加密),AS将session key(as)发给客户端,客户端用自己的NTLM哈希解密TGT1得到TGS服务器信息(TGT2无法被客户端解密),然后用session key(as)加密生成一个认证因子作为TGT2的证明。

然后客户端将认证因子以及TGT2发给TGS服务,TGS解密TGT2得到session key(as),解密认证因子并与认证因子做对比,如果一致则生成session key(TGS),返回TGT3和TGT4给客户端,TG3被session key(as)加密,由于之前客户端接收到了session key(as),所以可以解密TGT3得到服务器信息,解密后客户端再次生成一个认证因子作为TGT4的证明。

最后客户端将认证因子及TGT4发送给邮件服务,邮件服务用哈希解密TGT4得到session key(TGS),用它解密认证因子对比客户端信息,正确则提供服务。

黄金票据和白银票据

黄金票据伪造了kerberos中的身份票据TGT,白银票据伪造了kerberos中的服务票据ST。

黄金票据能访问该用户身份的所有服务,白银票据只能访问某一个具体的服务;伪造域管理员的身份的票据就是黄金票据。

相关推荐
梦境虽美,却不长7 分钟前
C语言 学习 文件操作(开关,读写,定位,大小)操作 2025年6月8日12:19:24
c语言·开发语言·学习
Charlotte_jc15 分钟前
完美解决openpyxl保存Excel丢失图像/形状资源的技术方案
开发语言·python·excel·openpyxl
西北大程序猿35 分钟前
服务器代码知识点补充
服务器·开发语言·网络·c++·网络协议
新知图书2 小时前
R语言ICU患者死亡率预测实战
开发语言·r语言
wennieFan3 小时前
python基础面试练习题
开发语言·python
Le_ee3 小时前
pikachu——php反序列化
网络安全·靶场·php·pikachu·php反序列
阿福不是狗3 小时前
Python使用总结之Linux部署python3环境
linux·开发语言·python
枣伊吕波3 小时前
第十三节:第七部分:Stream流的中间方法、Stream流的终结方法
java·开发语言
Gnevergiveup3 小时前
路由交换技术-思科拓扑搭建
服务器·vpn·思科·vlan划分·拓扑搭建
一点也不想取名3 小时前
解决 Java 与 JavaScript 之间特殊字符传递问题的终极方案
java·开发语言·javascript