Kerberos认证流程详解

Kerberos 是一种网络认证协议,是通过密钥系统为客户机/服务器应用程序 提供认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址 的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意的读取、 修改和插入数据。Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。

Kerberos协议中的角色

在Kerberos协议中,存在三个主要角色:

  1. 客户端(Client):发送请求的一方。
  2. 服务端(Server):接受请求的一方。
  3. 密钥分发中心(Key Distribution Center, KDC):
    包括认证服务器(AS)和票据授予服务器(TGS)两个部分。
  • 认证服务器(Authentication Server, AS):AS 的作用就是验证 Client 的身份(确认你是身份证上的本人),验证通过就给一张 TGT(Ticket Granting Ticket)票给 Client。
  • 票据授予服务器(Ticket Granting Service, TGS):TGS 的作用就是通过 AS 发给 Client 的票(TGT)换取访问 Server 端的票 ST(Server Ticket)。ST也有资料称之为 TGS Ticket。

KDC 默认安装在**域控**中,而 Client 和 Server 为域内的用户或者服务,如 web 应用、数据库服务器和邮件服务器等。Client 是否有权限访问 Server 端的服务由 KDC 发放的**票据**来决定。如果把 Kerberos 中的票据比作一张火车票,那么 Client 端就是乘客,Server 就是火车, 而 KDC 就是火车站的认证系统。如果 Client 端的票据是合法的(由你本人身份证购买并且 由你本人持有)同时有访问
Server 端服务的权限(车票对应车次正确)那么你才能上车。当然和火车票不同的是 Kerberos 中有两张票据,而火车票只有一张。

Kerberos认证流程

当 Client 想要访问 Server 上的某个服务时,需要先向 AS 证明自己的身份,然后通过 AS 发放的 TGT 向Server 发起认证请求。这个过程分为三块:

The Authentication Service Exchange: Client 与 AS 的交互
The Ticket Granting Service Exchange: Client 与 TGS 的交互
The Client/Server Authentication Exchange: Client 与 Server 的交互

Kerberos的认证流程大致可以分为以下几个步骤:

  1. 客户端向AS请求TGT
  • 客户端通过命令kinit USERNAME,将信息发送给AS。
  • AS检查用户是否在AD(Account Database)中,若存在,KDC将生成一个密钥(KEY),用于客户端与TGS的通信。
  • AS使用其密钥加密TGT,并将TGT和另一条由客户端密钥加密的信息(包含TGS Session Key)一起返回给客户端。
  • 客户端解密信息并获取TGS Session Key
  • 客户端使用本地密钥解密第二条信息,获取TGS Session Key。
  • 然后将TGT以及通过TGS Session Key加密的认证信息转发给TGS。
  • TGS验证TGT并生成服务票据
  • TGS使用自己的密钥从TGT中解密出TGS Session Key,并用其解密客户端的认证信息并进行检查。
  • TGS生成一个HTTP Session Key,使用它加密一条信息(HTTP Ticket),并用TGS Session Key加密另一条信息(包含HTTP Session Key),一起发送给客户端。
  • 客户端使用服务票据访问服务端
  • 客户端利用TGS Session Key解密信息,获取HTTP Session Key。
  • 然后将HTTP Ticket以及通过HTTP Session Key加密的认证信息发送给HTTP服务。
  • 服务端验证票据并提供服务
  • HTTP服务用自身密钥解密出HTTP Ticket的信息得到HTTP Session Key,并利用它解密出认证信息。
  • 若认证成功,客户端即可与远程HTTP服务完成认证,进行后续通信。

简化认证流程

Kerberos的认证过程可以简化为以下步骤:

  1. 客户端向KDC请求服务票据
  • 客户端向AS发送自己的用户名,AS验证后生成TGT并发送给客户端。
  • 客户端使用TGT向TGS请求服务票据。
  • 客户端使用服务票据访问服务
  • 客户端将服务票据发送给服务端,服务端验证票据后提供服务。

绕过Kerberos认证

MS14-068

  • CVE编号:CVE-2014-6324

了解PAC这个东西,PAC是用来验证Client的访问权限的,它会被放在TGT里发送给Client,然后由Client发送给TGS。Windows域中使用kerberos协议过程中,为了让服务器判断Client是否有权限访问服务,微软在Windows平台上对Kerberos协议进行了一些扩充,即在协议中增加了PAC(Privilege Attribute Certificate),特权属性证书,也就是这个PAC造成了MS14-068这个漏洞。

MS14-068是密钥分发中心(KDC)服务中的Windows漏洞。它允许经过身份验证的用户在其Kerberos票证(TGT)中插入任意的PAC(表示所有用户权限的结构)。该漏洞位于kdcsvc.dll域控制器的密钥分发中心(KDC)中。普通用户可以通过呈现具有改变了PAC的Kerberos TGT来获得票证,进而伪造票据获得管理员权限。

  • 利用条件
  1. 攻击者需要获取域内普通用户的账号密码。
  2. 攻击者需要知道该用户的SID(安全标识符)。
  3. 目标服务器未安装KB3011780补丁。
  4. 攻击者需要知道域控制器的IP地址。
  • 利用工具
  1. Pykek:Pykek是一个利用Kerberos协议进行攻击的工具包,可以生成高权限的Kerberos票据。结合mimikatz等工具,攻击者可以将票据注入到内存中,从而提升权限。
    https://github.com/mubix/pykek
  2. impacket:impacket是一个强大的Python库,用于处理网络协议,其中的goldenPac.py工具可以用来生成并利用Kerberos票据进行权限提升。
    https://github.com/fortra/impacket
  3. Metasploit:Metasploit是一个开源的漏洞利用框架,其中包含了针对MS14-068的漏洞利用模块,可以方便地进行漏洞利用。

黄金票据

在Windows的kerberos认证过程中,Client将自己的信息发送给KDC,然后KDC使用krbtgt用户的Hash作为密钥进行加密,生成TGT。那么如果获取到了krbtgt的Hash值,就可以伪造任意的TGT。因为krbtgt只有域控制器上面才有,所以使用黄金凭据意味着你之前拿到过域控制器的权限,黄金凭据可以理解为一个后门。黄金票据在利用过程中由 KDC颁发 TGT,并且在生成伪造的 TGT 得 20 分钟内,TGS 不会对该 TGT 的真伪进行

前提:

攻击者需要获得管理员访问域控制器的权限,并抓取到KRBTGT的哈希值。

制作条件

制作黄金票据通常需要以下条件:

  1. 域名称:需要知道目标域的DNS根域名。
    ipconfig/all

  1. 域的SID值:SID(安全标识符)是每个域的唯一标识符。
    whoami /all

  1. KRBTGT账户NTLM密码哈希:KRBTGT是Kerberos认证过程中的一个重要账户,其密码哈希是制作黄金票据的关键信息。
    登上域控,上传mimikatz,抓取krbtgt用户的Hash值
    lsadump::lsa /patch // 专用于在域控制器上导出用户密码或hash以及能够获取域sid

  1. 伪造用户名:黄金票据允许攻击者伪造一个有效的Kerberos票据,因此需要一个伪造的用户名,以模拟合法用户的身份进行认证。
使用mimikatz制作黄金票据
kerberos::golden /user:需要伪造的域管理员用户名 /domain:域名 /sid:域sid /krbtgt: krbtgt用户的Hash /ticket:想要生成的TGT凭证,任意填写

或者

golden_ticket_create -d 域名 -k krbtgt账户的密码hash值 -u 任意的用户名 -s 域SID -t 路径,将生成的票据保存在指定文件中,任意填写

5.再将生成的票据注入内存

kerberos::ptt 生成的TGT凭证

白银票据

白银票据不同于黄金票据,白银票据的利用过程是伪造 TGS,通过已知的授权服务密码生成一张可以访问该服务的 TGT,因为在票据生成过程中不需要使用KDC,所以可以绕过域控制器,且很少留下日志。白银票据依赖于服务账号的密码散列值。

伪造条件

伪造白银票据通常需要以下条件:

  1. 域名
  2. 域SID
  3. 目标服务器的FQDN
  4. 可利用的服务
  5. 服务账号的NTLM Hash
  6. 要伪造的用户名
    登录域控,利用工具mimikatz中的模块进行收集信息,这里简单举例
    privilege::debug 管理员身份运行才能进行提权操作
    sekurlsa::logonpasswords 抓取内存中保存的用户所有凭据
    sekurlsa::msv 抓取内存中保存的用户Hash

利用工具mimikatz进行伪造

kerberos::golden /domain:域名 /sid:域SID /target:域控制器名。即FQDN /rc4:server机器的hash /service:可利用的服务 /user:要伪造的用户名,任意填写

黄金票据和白银票据的区别

伪造票据

黄金票据伪造的是TGT
白银票据伪造的是ST

加密方式

白银票据由机器账户的hash加密生成
黄金票据由krbtgt的hash加密生成

获取的权限

黄金票据可以获得任意kerberos访问权限
白银票据只能获得部分服务的访问权限

认证流程

黄金票据同TGS交互,不同AS交互
白银票据不同AS也不同TGS交互,直接访问server

构造条件

黄金票据:域名、域sid、krbtgt用户hash、伪造的用户名
白银票据:域名、域sid、dc机器账户hash、伪造的服务、伪造的用户名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值