域渗透之Kerberos认证协议
本文最后更新于:2022年8月18日 下午
Kerberos认证协议
《信息系统安全概论》书中对kerberos协议流程做了简化,如下所示
在此用下图做说明
KDC(密钥分发中心)包含身份认证服务器和服务审批服务器(用于票据授权服务TGS)
DC是域控制器;AD是活动目录。
DC中有一个特殊用户叫做:krbtgt,它是一个无法登录的账户,是在创建域时系统自动创建的,在整个kerberos认证中会多次用到它的Hash值去做验证。
AD会维护一个Account Database(账户数据库). 它存储了域中所有用户的密码Hash和白名单。只有账户密码都在白名单中的Client才能申请到TGT(票据分发票据)。
目前Kerberos认证协议还添加了客户端认证服务端身份的步骤,这里暂时不做记录。
要注意的是,身份认证服务器和服务审批服务器发送给客户端的[Tgrant]Kgrant即TGT就是用krbtgt的NTLM密码hash加密的数据。
NTLM认证协议
NTLM验证是一种Challenge/Response 验证机制,由三种消息组成:通常称为type 1(协商),类型type 2(质询)和type 3(身份验证)。
1.(交互式登录到某客户机)用户使用:域名、用户名、密码,登陆到某台客户端。客户端计算并存储用户密码的加密散列值(Hash),然后将真实的密码丢掉(即不保存用户真实的密码)
2.客户端将用户名以纯文本的方式发送到要访问的服务器
3.服务器产生一个 16 字节的随机数并将该随机数发送给客户端,该随机数通常称为:挑战(Challenge)
4.客户端使用用户密码的散列值加密服务器发送过来的 Challenge,并将结果发回给服务器, 该步骤通常称为:应答 (Response)
5.服务器将这三项内容发送到域控制器 (Domain Controller) ,域控进行相同的运算产生response2,和客户端发来的response进行对比。
Kerberos和NTLM比较
Kerberos较之NTLM更高效、更安全,同时认证过程也相对复杂。
哈希传递
哈希传递是一种技术,攻击者无需解密哈希即获得的纯文本密码。PTH攻击利用身份验证协议,因为密码哈希对于每个会话都保持静态,直到密码被转换为止。攻击者通过抓取系统的活动内存和其他技术来获取哈希。
kerberos中AS-REQ阶段的Authenticator是由用户密码Hash加密的,如果得到了某台主机的Administrator用户的LM-Hash和NTLM-Hash ,并且该主机的445端口打开着。则可以利用哈希传递。
(注意:只能是administrator用户的LM-Hash和NTLM-hash。其他本地管理员都不行
)
PS:密码Hash中冒号前半段为LM Hash,冒号后半段为NTLM Hash,由于LM Hash算法被弃用,NTLM Hash被用来进行Windows本地及远程身份验证的凭据,长度为32bit、由数字和字母组成。
在工作组环境中
只能是administrator
用户的哈希值才能进行哈希传递攻击,其他用户(包括管理员用户但是非administrator
)也不能使用哈希传递攻击,会提示拒绝访问。
在域环境中
只能是域管理员组内用户(可以是域管理员组内非administrator用户)的哈希值才能进行哈希传递攻击,攻击成功后,可以访问域内任何一台机器。
黄金票据
原理
身份认证服务器给客户端发送两个票据,一个是和服务审批服务器交互的session key,另一个是TGT。
但是这个session key并不会保存在KDC中,而且krbtgt的NTLM的hash是固定的,所以只要得到这个hash,就可以伪造TGT和session key,从而直接和服务审批服务器进行验证。
这个被伪造出来的TGT(票据授予票据)就是黄金票据。
黄金票据其实就是kerberos认证的第二个阶段中的tgs的ticket也就是TGT。这个ticket相当于对请求端的一个身份认证的凭据,如果可以伪造这个ticket,那么就可以伪造任意身份,而黄金票据就是一个实现方式。
下面的实验就是伪造Administrator
黄金票据条件
1.域名称
2.域的SID值
3.域的krbtgt账户NTLM密码哈希
4.伪造的用户名
复现过程
一旦攻击者拥有管理员访问域控制器的权限,就可以使用Mimikatz来提取KRBTGT帐户密码哈希值。
1.导出krbtgt的Hash
在域控上执行如下命令
1 |
|
域控上的hash值a3dd8e4a352b346f110b587e1d1d1936
域控上的SIDS-1-5-21-3795598892-1521228294-2653055093-502
到域成员
上用的cmd窗口
1 |
|
运行一下命令,注意要去掉最后的一部分502,这里伪造Administrator用户身份
1 |
|
再次查看list
执行只有Administrator才有权限的命令,导出域内krbtgt用户的账号密码
1 |
|
成功执行。
在清空一下黄金票据
1 |
|
再运行相同的命令lsadump::dcsync /domain:jgc.com /user:krbtgt
,发现失败了。
1 |
|
白银票据
原理
kerberos最后,客户端带着ST和[Qserver]Ksess-2,服务端用自己的保存的一个key(Kserv)来解密ST,从而获得Ksess-2,进而验证客户端身份。
白银票据就是拿到伪造的ST,从而不绕过KDC前面的步骤,但是伪造的门票只对部分服务起作用。
主要是用来伪造自己有某种服务的权限
白银票据条件
域名
域SID
域服务名
服务的密码hash
复现过程
获取域控SID,和服务器上的密码hash
1 |
|
查看域控信息
到客户端伪造服务权限
1 |
|
可以看到本机有了在域控中的访问权限
如果清空票据后,权限就没有了
黄金票据和白银票据区别
黄金票据是在绕过和身份认证服务器的交互,但是和服务审批服务器交互,即会同KDC交互,伪造域中的其他用户,如果伪造了Administrator用户,就有很高的权限。
白银票据是绕过了和KDC的交互,直接伪造本地用户能访问指定的用户,如cifs。
Kerberos认证就两个阶段,