Kerberos认证原理

kerberos简介

Kerberos协议是一种基于第三方可信主机的计算机网络协议,它允许两个实体之间在非安全网络环境(可能被窃听、被重放攻击)下以一种安全的方式证明自 己的身份。

简单说,就是A和B之间有一个秘密,A需要向B证明自己是A。

Domain Controller:域控,一台计算机实现用户、计算器的统一管理。

KeyDistribution Center:秘钥分发中心,简称KDC,默认安装在域控。

Authentication Service:身份认证服务,简称AS,用于KDC对Client认证。

Ticket Grantng Service:票据授予服务:简称TGS,用于KDC向Clinet和Server分发Session Key

Active Directory:活动目录,简称AD,存储用户、用户组、域相关的信息。

Client:客户端,指用户

Server:服务段,某台计算机或者服务

Kerberos认证流程

  1. Client向DC发起访问Server的请求,DC需要判断Client是否可信。怎么判断?去AD上依次查找Client,这就是AS需要完成的工作。
  2. 认证通过后返回TGT给Client,Client得到TGT(Ticket Granting Ticket)。
  3. Client拿着TGT,继续向DC发起请求访问Server,TGS通过Clinet中的TGT判断Client是否有访问权限。
  4. 如果Client有访问权限,TGS给Clinet访问Serve的权限ticket,叫ST,Service Ticket。
  5. Client得到Ticket后,再去访问Server,而且这个Ticket只针对这个Server。
  6. Server和Client建立通信。

Client想访问server,先要去AS认证自己的身份。认证通过后,AS会返回给Client一个TGT。Client再拿着TGT在TGS中判断是否有访问Server的权限。如果有权限,TGT交换成Ticket,给Client和Server继续进行通信、

Authentication 1

  1. 首先Client要发送自己的信息给AS请求TGT票据
  2. 该请求被称为KRB_AS_REQ:即Client哈希值NTLM-hash对数据(timestamp、client-info、server-info)进行加密。
  3. 当Client发送身份信息给AS后,AS会先会想AD请求,询问是否有此用户,如果有的话,就会取出它的NTLM hash,然后生成一个随机秘钥称为Session-Key as(临时秘钥Session-Key)。并使用Client NTLM-hash加密Session-key as作为一部分为内容。
  4. 还有一部分内容就是TGT:使用KDC一个特定账户的NTLM-hash对Session-key as、timestamp、Client-info进行的加密。这个特定账户就是krbtgt(创建域控时自动生成)。然后将这两部分回复给Client。即KRB_AS_REP。

Authentication 2

Client和TGS认证

Client收到回复KRB_AS_REP,先用自己的Client NTLM-hash 解密得到Session-Key as,并使用Session-Key as 加密数据(timestamp、Client-info、Server-info)作为一部分。

TGT是用krbtgt 账户的NTLM加密的,Client无法解密,将TGT作为另一部分继续发送给TGS。两部分组成即为KRB_TGS_REQ。

TGS收到该请求,用krbtgt NTLM-hash 先解密TGT得到Session-key as、timestamp、Client-info、Server-info。再用Session-key as 解密第一部分内容,得到Client-info、timestamp。

将两部分获取到时间戳timestamp进行比较,如果时间戳跟当前时间相差太久,就需要重新认证。

TGS还会将这个Client的信息与TGT中的Client信息进行比较,如果两个相等的话,还会继续判断Client有没有权限访问Server,如果都没有问题,认证成功,返回ST(也叫Ticket)给Client。

认证都通过后,TGS会生成一个随机秘钥(Session-Key tgs)。向Client回复KRB_TGS_REP两部分内容。

一部分:Session-key as 加密的Session-key tgs

一部分ST(ticket):Server NTLM-hash加密的数据(Session-key tgs、timestamp、Client-info)

注意Session-key tgs 主要用在Client和Server的通信上。

至此,Client和KDC的通信就结束了,然后是和Server进行通信。

Authentication 3

Client和Servre的认证

Client收到KRB_TGS_REP,先解密出了Session tgs。再使用Session tgs加密Client-info、timestamp作为一部分内容。ST因为使用的是Server NTLM-hash 进行的加密,无法解密。原封不动发送给Server。两部分一块发送给Server即是KRB_AP_REQ。

Server 收到请求,用自身的Server NTLM解密了ST,得到Session tgs,再解密出Client-info、timestamp。然后与ST的Client-info、timestamp进行对比。timestamp 一般时间为8小时。验证通过后,回复KRB_AP_REP,建立通信。

证通过后,回复KRB_AP_REP,建立通信。

至此。kerberos 认证流程结束。

扩展

黄金票据

Golden Ticket 是通过伪造的TGT(TicketGranting Ticket),因为只要有了高权限的TGT,那么就可以发送给TGS换取任意服务的ST。可以说有了金票就有了域内的最高权限。

每个用户的Ticket都是由krbtgt的密码Hash来生成的,那么,我们如果拿到了krbtgt的密码Hash,其实就可以伪造任意用户的TICKET,

对于攻击者来说,实际上只要拿到了域控权限,就可以直接导出krbtgt的Hash值,再通过mimikatz即可生成任意用户任何权限的Ticket,也就是Golden Ticket。

白银票据

SilverTickets 是由Server的NTLM Hash进行加密的,如果该Hash泄露,那么就可以解密甚至伪造Ticket。伪造的Ticket(TGS)叫做白银票据。

PAC

Privilege Attribute Certificate(特权属性证书),简称PAC,为了增加了认证过程中的权限认证。PAC会被放在TGT里发送给Client,然后由Client发送给TGS。

ms14-068 漏洞,就是基于PAC认证的错误,从而导致域内普通用户可以伪造凭据,提权到管理员权限。

相关推荐
开着拖拉机回家22 天前
【DBeaver】连接带kerberos的hive[Apache|HDP]
数据仓库·hive·hadoop·kerberos·dbeaver
极客先躯2 个月前
Hadoop krb5.conf 配置详解
大数据·hadoop·分布式·kerberos·krb5.conf·认证系统
开着拖拉机回家2 个月前
【HDP】zookeeper未授权漏洞修复
linux·zookeeper·kerberos·授权·zk-client
HHoao3 个月前
学习Kerberos
大数据·hadoop·kerberos
hamish-wu8 个月前
Kerberos 认证 javax.security.auth.logon.LoginException:拒绝链接 (Connection refused)
java·大数据·kerberos
但行益事莫问前程9 个月前
ktutil编写生成keytab文件的脚本、通过keytab文件认证用户
linux·kerberos
梓芮.10 个月前
SPN的重要性 | 保障服务安全和身份验证
windows·安全·kerberos·ad·spn·activedirectory·spn 配置
Jumay06121 年前
MacOS 14.1 配置kerberos认证
macos·kerberos·tickets
数据的小伙伴1 年前
kerberos详解
大数据·kerberos