一:Kerberos域认证简述
Kerberos是一种认证机制。目的是通过密钥系统为客户端/服务器应用程序提供强大的可信任的第三方认证服务:保护服务器防止错误的用户使用,同时保护它的用户使用正确的服务器,即支持双向验证。kerberos最初由MIT麻省理工开发,微软从Windows 2000开始支持Kerberos认证机制,将kerberos作为域环境下的主要身份认证机制,理解kerberos认证协议是域渗透的基础。
1.1:Kerberos认证框架
- kerberos机制中主要包含三个角色:
Client、Server、KDC(Key Distribution Center)密钥分发中心
。 - Client代表用户,用户有自己的密码,Server上运行的服务也有自己的密码,KDC是受信任的三方认证中心,它拥有用户和服务的密码信息。
- KDC服务默认会安装在域控中,Client想要访问Server的服务(xxx service),前提是通过KDC认证,再由KDC发放的票据决定Client是否有权限访问Server的服务。
- KDC 服务框架中包含一个 KRBTGT 账户,它是在创建域时系统自动创建的一个账号,你可以暂时理解为他就是一个无法登陆的账号,在发放票据时会使用到它的密码 HASH 值。
1.2:名词解析
- KDC(Key Distribution center):密钥分发中心,在域环境中,KDC服务默认会安装在域控中。
- AS(Authentication Service):认证服务,验证client的credential(身份认证信息),发放TGT。
- TGT(Ticket Granting ticket):票据授权票据,由KDC的AS发放,客户端获取到该票据后,以后申请其他应用的服务票据(ST)时,就不需要向KDC的AS提交身份认证信息(credential),TGT具有一定的有效期。由 KBRTGT HASH 加密的 sessionkey-as 和 Timestamp 等信息。TGT=KBRTGT HASH()
- TGS(Ticket Granting Service):票据授权服务,验证TGT,发放ST。
- ST(Service Ticket):服务票据,由KDC的TGS发放,是客户端应用程序访问Server某个服务的凭证,Server端验证通过则完成Client与Server端信任关系的建立。
- Session key:用来加密client和TGS之间传输的数据。
- Server session key:用来加密client和server之间传输的数据。
1.3:简单认证流程
首先Client想要访问Server的某个服务,就需要通过KDC的认证,获取到服务票据(ST),服务会验证服务票据(ST)来判断Client是否通过了KDC认证。为了避免Client每次访问Server的服务都要向KDC认证(输入密码),KDC设计时分成了两个部分,一个是AS,另一个是TGS;AS接收Client的认证信息,认证通过后给Client发放一个可重复使用的票据TGT,后续Client使用这个TGT向TGS请求ST即可。
二:PTT之黄金票据
2.1:黄金票据原理
在Kerberos认证中,Client通过AS(身份认证服务)认证后,AS会给Client一个Session key_AS和TGT,而Session key_AS并不会保存在KDC中,krbtgt的NTLM Hash又是固定的,所以只要得到krbtgt的NTLM Hash(也就是KDC hash),就可以伪造TGT和Session key_AS来进入下一步Client与TGS的交互。而已有了金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。因为krbtgt只有域控制器上面才有,所以使用黄金凭据意味着你之前拿到过域控制器的权限,黄金凭据可以理解为一个后门。
如下图所示,与域控制器没有AS-REQ或AS-REP(步骤1和2)通信。由于黄金票据是伪造的TGT,它作为TGS-REQ的一部分被发送到域控制器以获得服务票据。
特点:不需要与AS进行交互,需要用户krbtgt的Hash
2.2:黄金票据伪造实验
***实验条件***
- 要与DC通信
- 域的SID 值
- 需要krbtgt用户的hash(也就是说要拿下域控制器)
***实验环境***
角色 | 域控 | 域内客户机 |
系统 | Windows server 2008R2 | Windows 7 Sp1 |
IP地址 | 192.168.1.254 | 192.1681.122 |
第一步:客户机访问域控资源并在域控中使用mimikatz抓取krbtgt的hash
mimikatz64位下载地址:链接:https://pan.baidu.com/s/1o1x055quGt9ycEWEtZxJqQ
提取码:wars
32位下载地址: 链接:https://pan.baidu.com/s/1I6wUEVgGX77oToix4BIAgw
提取码:wars
lsadump::dcsync /user:krbtgt
第二步:提取出里面的sid和NTLM hash并在win7客户端使用mimikatz制作票据
SID:S-1-5-21-1857385675-1251677193-2455287388-502
KBRTGT NTLM HASH:59034ceb8b9fa80cd755e4ab2f27c01c
1 kerberos::golden /admin:需要伪造的用户名 /domain:域名 /sid:sid /krbtgt:krbtgt的ntml hash /ticket:administrator.online
2 /ticke参数是要存储的名字,方便后面导入
第三步:清空现有票据并将票据注入内存
第四步:查看当前会话中票据
第五步:权限验证
第六步:尝试使用psexec.exe
与域控
建立cmd交互式shell
,成功获得域控cmd权限,并且是最高权限。
psexec64 \\dc.laosec.cn cmd.exe
//psexec下载地址:64位:链接:https://pan.baidu.com/s/1UMPFDhlcviNHa3iT2m8Z6w
提取码:mask
// 32位: 链接:https://pan.baidu.com/s/1BK80KN6-dJbcu6FJBOL_Sg
提取码:mask
三:PTT之白银票据
3.1:白银票据原理
如果说黄金票据是伪造的TGT,那么白银票据就是伪造的ST。在Kerberos认证的第三大步,Client带着ST和Authenticator3向域上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Master Key 解密ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问server上的指定服务了。所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分服务起作用。
3.2:白银票据伪造实验
***实验条件***
- 不需要与KDC进行交互
- 需要server的NTLM hash
***实验环境***
3.2:白银票据伪造实验
***实验条件***
- 不需要与KDC进行交互
- 需要server的NTLM hash
***实验环境***
角色 | 域控 | 域内客户机 |
系统 | Windows server 2008R2 | Windows 7 Sp1 |
IP地址 | 192.168.1.254 | 192.1681.122 |
第一步:获取到DC Server的NTLM Hash
第二步:获取本地SID并伪造票据
银票和金票差不多,需要sid和hash,其中用户名可以随便写服务类型可以从以下内容中来进行选择,因为我们没有TGT去不断申请ticket,所以只能针对某一些服务来进行伪造。
1 kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLM Hash> /user:<用户名> /ptt
2 kerberos::golden /domain:laosec.cn /sid:S-1-5-21-1857385675-1251677193-2455287388-1104 /target:dc.laosec.cn /service:cifs /rc4:8081ad9a1ceff657275df58f2f0c96b0 /user:administrator /ptt
服务注释 | 服务名 |
WMI | HOST、RPCSS |
Powershell Remoteing | HOST、HTTP |
WinRM | HOST、HTTP |
Scheduled Tasks | HOST |
LDAP 、DCSync | LDAP |
Windows File Share (CIFS) | CIFS |
Windows Remote ServerAdministration Tools | RPCSS、LDAP、CIFS |
查询sid
mimikatz进行提权
白银票据进行制作
kerberos::klist进行票据查询
第三步:权限验证
第四步:Psexec连接DC获取交互式shell并反弹到CS
psexec \\hostname cmd.exe
3.3:白银票据防御
- 尽量保证服务器凭证不被窃取
- 开启PAC (Privileged Attribute Certificate) 特权属性证书保护功能,PAC主要是规定服务器将票据发送给kerberos服务,由 kerberos服务验证票据是否有效。
***PAC开启方式***
在注册表中HKEY_LOCAL_MACHINE\SYSTEM \ CurrentControlSet\Control\Lsa\Kerberos\Parameters
的ValidateKdcPacSignature
设置为1。
四:票据总结
4.1:金票与银票区别
黄金票据 | 白银票据 | |
访问权限 | 伪造TGT,可以获取任何Kerberos服务权限 | 伪造TGS,只能访问指定的服务 |
加密方式 | 由Kerberos的KRBTGT用户的NTLM Hash加密 | Silver Ticket由计算机NTLM Hash加密 |
4.2:攻击防御视角
- 黄金票据:从攻击面来看,获取krbtgt用户的hash后,可以在域中 进行持久性的隐藏,并且日志无法溯源,但是需要拿到DC权限, 使用黄金票据能够在一个域环境中长时间控制整个域。
- 从防御角度来看,需要经常更新krbtgt的密码,才能够使得原有的 票据失效。最根本的办法是不允许域管账户登录其他服务器。
- 白银票据:从攻击面来看,伪造白银票据的难度比伪造黄金票据的 难度较小,因为一个域中的服务器如果对外的话,非常容易被入侵, 并且容易被转储Server。
- 从防御角度来看,需要开启PAC认证,但这会降低认证效率,增加DC的负担,最根本的还是要加固服务器本身对外的服务。
五:MS14068域提权漏洞
5.1:漏洞原理
该漏洞可能允许攻击者将未经授权的域用户账户的权限,提权到域管理员的权限。
***漏洞原理***
服务票据是客户端直接发送给服务器,并请求服务资源的。如果服务器没有向域控dc验证pac的话,攻击者可通过伪造 PAC,修改 PAC 中的SID,导致 KDC 判断攻击者为高权限用户,从而导致权限提升漏洞的产生。
***PAC概念***
PAC 的全称是Privilege Attribute Certificate(特权属性证书)。可以理解为火车有一等座,也有二等座,而PAC 就是为了区别不同权限的一种方式。
5.2:漏洞复现
***实验环境***
角色 | 域控 | 域内客户机 |
系统 | Windows server 2008R2 | Windows 7 Sp1 |
IP地址 | 192.168.1.254 | 192.168.1.122 |
***利用条件***
- 域控没有打MS14-068的补丁(KB3011780)
- 攻击者拿下了一台域内的普通计算机,并获得普通域用户以及密码/hash值,以及用户的suid
***准备工具***
mimkatz:...
ms14-068.exe:https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068
***复现步骤***
第一步:查看域控否是打上MS14068补丁(KB3011780)-->systeminfo
第二步:在Win7上测试普通域用户访问域控C盘共享,访问被拒绝
第三步:利用ms14-068.exe提权工具生成伪造的Kerberos协议认证证书:TGT_laosec@laosec.cn.ccahe
MS14-068.exe -u <userName>@<domainName> -p <clearPassword> -s <userSid> -d <domainControlerAddr>
-u 域账号+@+域名称,这里是laosec@laosec.cn
-p 当前用户的密码,即laosec的密码
-s 为laosec的SID值,通过whoami/all来获取用户的SID值
-d 为当前域控,即dc.laosec.cn
第四步:将内存中已有的Kerberos票据清除,并将新的票据写入,从而提升为域名管理员
第五步:访问域控C盘共享,测试权限并使用psexec获取shell
5.3:漏洞防御
此漏洞是一个 14 年的漏洞,多数产生在 windows server 2008 和 windows server 2003 的域环境中,所以安全补丁早已可以下载安装,用户可以通过在域控上安装 KB3011780 补丁来规避风险。
以上内容参考资料