首页 > 编程知识 正文

Kerberos协议特点,kerberos协议的基本认证过程

时间:2023-05-05 04:44:18 阅读:143012 作者:276

前言:本文只是自己对网上资源知识点的总结。

Kerberos协议介绍Kerberos是麻省理工学院(MIT )提出的网络认证协议,旨在使用加密技术为客户端/服务器端APP应用提供强大的认证服务。

Kerberos是西方神话中守护地狱之门的三只狗的名字。 所以,使用此名称是因为Kerberos需要三方的共同参与才能一次完成事务。

的三个主要角色(三只狗) clientserverkdc (keydistributioncenter )==DC KDC密钥分发中心Authentication Server.==AS .认证服务

Ticket Granting Server .==TGS票证授予服务

该认证过程的实现不依赖于主机操作系统的认证,不需要基于主机地址的信任,也不需要网络上所有主机的物理安全,并且在网络上传输的数据包可以任意读取、修改、插入数据的前提下。 在这种情况下,Kerberos将使用传统加密技术(如:共享密钥)作为受信任的第三方认证服务来运行认证服务。 Kerberos使用的端口TCP和UDP上的88个端口:身份验证和票证授权

TCP和UDP 464端口:经典的Kerberos Kpaswd (密码重置)协议

krbtgt帐户每个域控制器DC都有一个kebtgt用户帐户。 此帐户是KDC服务帐户用于为票据发行服务(TGS )创建加密的密钥

粗略认证客户端希望向kerberos服务请求并获得对服务器的访问权限。 当kerberos收到消息时,它首先确定客户端是否受信任。 (黑白列表)成功后,AS返回TGT给客户端。 客户端在获取TGT后,希望继续请求kerberos以获取对服务器的访问权限。 kerberos还得到该信息,此时通过客户端消息中的TGT,判断客户端具有该权限,返回客户端访问服务器的权限ticketclient得到最后的ticket后,进行set

进程客户端- KDC-ask Rb _ as _ req (kerberosauthenticationservicerequest ) -客户端执行散列运算以加密时间戳,并提供认证服务(KDC-KDC ) 此散列值或用户名密钥是客户端和KDC共享的长密钥“长密钥”。 b.krb _ as _ req (kerberosauthenticationservicerequest ) -客户端执行散列运算来加密时间戳,并将其发送到认证服务(KDC-AS )。 KDC-as-客户端

krb _ as _ rep (密钥认证服务)-KDC-AS )解密时间戳,如果解密成功,KDC-as检查用户信息它还请求本地安全权限(LSA )生成特殊的数据PAC,指示客户端已获得特定用户的密码)或验证了用户的身份。 认证服务(KDC-AS )向客户端返回两个信息: a。 短期会话密钥SessionKeya-kdc用于向客户端的用长期密钥加密的KDC发起后续请求。 b .票据发行票据(TGT ) (这种短期会话密钥只应用于客户端和KDC之间)包括用户名、域名、时间和组成员资格等信息。 TGT票证使用KDC的krbtgt密钥加密,PAC使用krbtgt密钥签名。 此外,系统很少验证PAC数据(在Windows环境中为krbtgt帐户的NT-Hash )。 客户端- KDC-TGS

krb _ TGS _ req (kerberosticketgrantingservicerequest ) -客户端使用由AS返回的“短期会话密钥”构建对特定服务的访问请求,并生成由AS返回的“附有票证” “客户端无法解密,因为TGT是用KDC的krbtgt密钥加密的。”黄金票证-在此过程3中,伪造TGT,假设要获取krbtgt帐户的密码哈希值,域管理员或不存在的用户KDC-TGS-客户端

krb _ TGS _ rep (kerberosticketgrantingserviceresponse ) )。

-票据授予服务TGS解密TGT和服务请求,然后如果请求被允许(KDC会打开票据,进行校验和检查。如果DC能够打开票据,并能通过校验和检查,那么会认为TGT为有效票据。此时TGT中的数据会被复制,以创建TGS票据ST),Server密码HASH加密sessionkey-tgs票据授予服务TGS向客户端Client发送一个服务票据(Service Ticket,简称ST),包括两个部分: a. 远程服务器的部分 - 包含请求用户的组成员资格、时间戳、用于客户端和远程服务器之间通信的会话密钥。使用远程服务器Server-B和KDC共享的长期密钥(long term key)加密这部分消息。 b. 客户端的部分 - 包含用于客户端和远程服务器之间通信的会话密钥SessionKeya-b。(使用步骤2中AS回复的短期会话密钥(SessionKeya-kdc)加密这部分消息生成的会话密钥SessionKeya-b。)

Client—>Server

RB_AP_REQ (Kerberos Application Request) - Client把服务票据(Service Ticket)中的服务器部分和请求一起发送到Server-B(用户要访问活动目录中的主机)。远程服务器将直接接受该服务器票据,并不需要和KDC直接通信,因为该票据是用远程服务器和KDC共享的长期密钥加密过的。解密成功(目标服务会使用自己的NTLM密码散列打开TGS票据,并提取用户的授权数据和会话密钥SessionKeya-b。)即表明KDC已经允许了此次通信。白银票据 - 此过程5可以伪造TGS(前提是获取服务账号的口令散列值),宣称自己是域内任何账号,例如域管,这是白银票据的原理。 LSA(Local Security Authority) 本地安全机构

LSA 管理本地的安全策略、管理审计策略和设置、为用户生成包含SID和组权限关系的令牌。LSA的验证过程:LSA通过访问本地SAM(Security Accounts Manager)数据库,可以完成本地用户的验证。

情景

当用户按下“Ctrl + Alt + Del”之后,Winlogon被唤醒,同时跳出需要输入用户名和密码的登入身份凭据窗口(由Gina.ll来定义)

用户使用domainuser或UPN名之后,由Winlogon读取用户的身份凭据,并把它交给LSA(本地安全机构)

LSA在收到Winlogon的交给他的身份凭证后,并不是马上就交给Kerberos协议,还有可能是NTLM协议,因为我们知道用户登入有两种,一种是本地登入,一种是域登入。如果是本地登入的话,会使用本地数据库进行验证,如果是域登入的话,就会使用域控制器来进行身份验证。那LSA如何判断是本地登入还是域登入?

LSA的处理流程1.LSA首先会把身份凭据交给SSPI,由该接口负责与Kerberos和NTLM服务沟通。2. SSPI不能确定用户是本地登录还是域账户进行域登录。所以他会先把身份认证请求传递到Kerberos SSP。3. Kerberos SSP会验证用户的登入目标是本地计算机还是域。如果是登录域,Kerberos SSP将继续处理。如果是本地计算机,即用户不是登录域,Kerberos SSP返回一个错误消息到SSPI,交回给GINA处理,使服务器登录不可用。4. SSPI现在发送请求到下一个安全提供程序——NTLM。NTLM SSP会将请求交给Netlogon服务针对LSAM (Local Security Account Manager,本地安全账户管理器)数据库进行身份认证。使用NTLM SSP的身份认证过程与Windows NT系统的身份认证方法是相同的。 PAC(Privilege Access Certificate) 特权访问证书

KDC在向Kerberos客户端颁发TGT时,会向本地LSA请求生成一个特殊的数据结构,名为特权访问证书。这个PAC包含为kerberos客户端构建一个本地访问令牌所需要的用户信息,它同时使用域控制器服务器的私钥和KDC服务器的私钥来进行数字签署,以防假的KDC伪造PAC

PAC数据结构1. 用户的登入时间以及用户会话额到期时间2. 用户上一次设置密码的时间,以及允许他再次更改密码的时间3. 用户的经典登入名,domainuser4. 用户的显示名称5. 指派给用户账户的经典NT登入脚本的名称(如果有的话)6. 用户漫游配置文件的UNC路径7. 客户端主目录的UNC路径8. 用户的并发登入数9. 在颁发PAC的KDC处,自从上一次成功登入以来,所允许的不成功登入尝试次10. 用户的RID11. 用户的"主要组"的RID,只限在POSIX使用12. 在域中,将用户作为一个成员的组的数量,以及每个组的RID13. 适用于用户的已知SID14. 域的SID15. 资源域的SID除此之外,PAC中还嵌入了另一个名为用户账户控制的数据结构

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。