继续
流量分析学习之路之内网渗透-Kerberos协议分析
前言
在数字中国2024数据安全产业人才积分赛半决赛中遇到了域渗透的一道题目,当时做的很吃力,跟着大佬们的文章后续复现总结并学习了一下Kerberos协议,接下来会详细地去分析这个协议与其相关攻击,并且会在后面对这个题目进行复现。
Kerberos协议
是什么
Kerberos 协议是一种用于计算机网络授权的协议,专门设计用于在不安全的网络环境中,以安全的方式对通信双方进行身份认证。
主要目的
其主要目标是通过密钥系统为客户端和服务器应用程序提供强有力的认证服务。该协议的认证过程独立于主机操作系统,无需依赖主机地址的信任,也不要求网络中所有主机的物理安全,且假设网络传输的数据包可能会被读取、修改或插入数据。在这些条件下,Kerberos 作为一种可信的第三方认证服务,依靠传统的密码技术(如共享密钥)来实现认证。在这种方式下让Kerberos的整个认证过程中不用担心受到中间人攻击。
可能遭遇的攻击
白银票据、黄金票据、域控攻击、DCSync域内哈希转储等
相关术语
DC(Domain Controller)
DC(Domain Controller)就是域控制器,通俗理解就是一定域内最高权限的计算机,对域内的其他计算机进行管理;一个域内可以有多台域控制器,每一个域控制器的地位几乎是平等的,他们具有相同的数据库,所以在他们添加用户的时候,一台域控制器添加其他域控制器也会同步添加,这一点类似于区块链中的记账本。
AC(Active Directory)
AD(Active Directory) 顾名思义活动目录,用于存储,用户,用户组,计算机,域相关的信息,是Windows Server的目录服务。有了AD存储网络对象的信息,管理员和用户能够轻松地查找和使用这些信息。
他能提供的服务显而易见
1、服务器及客户端计算机管理:管理服务器及客户端计算机账户,所有服务器及客户端计算机加入域管理并实施组策略。
2、用户服务:管理用户域账户、用户信息、企业通讯录(与电子邮件系统集成)、用户组管理、用户身份认证、用户授权管理等,按省实施组管理策略。
3、资源管理:管理打印机、文件共享服务等网络资源。
4、桌面配置:系统管理员可以集中的配置各种桌面配置策略,如:用户使用域中资源权限限制、界面功能的限制、应用程序执行特征限制、网络连接限制、安全配置限制等。
5、应用系统支撑:支持财务、人事、电子邮件、企业信息门户、办公自动化)、补丁管理、防病毒系统等各种应用系统。
注意
一般来说有AD的主机一般就是域控制器(DC),因为需要存储大量数据的数据库是要被部署在域控制器的,所以在一般情况下如果一台主机安装了AD,那么它就是DC。
Ticket
票据,网络对象互相访问的凭证。
TGT(Ticket Granting Ticket)
通过生成的Ticket(票据)授权票据,可以理解为通过得到的票据生成一个临时的票据以供客户端去访问。
TGS(Ticket Grantng Service)
票据授予服务,为客户端生成Ticket
AS(Authentication Service)
AS(Authentication Service)身份验证服务,用于验证用户身份并且提供服务,为客户端生成TGT(Ticket Granting Ticket),也就是临时访问凭证。
KDC(Key Distribution Center)
密钥分发中心,默认安装在域控里,包括AS和TGS。
角色 | 作用 |
---|---|
Domain Controller | 域控制器,简称DC,一台计算机,实现用户、计算机的统一管理。 |
Key Distribution Center | 秘钥分发中心,简称KDC,默认安装在域控里,包括AS和TGS。 |
Authentication Service | 身份验证服务,简称AS,用于KDC对Client认证。 |
Ticket Grantng Service | 票据授予服务,简称TGS,用于KDC向Client和Server分发Session Key(临时秘钥)。 |
Active Directory | 活动目录,简称AD,用于存储用户、用户组、域相关的信息。 |
Kerberos 认证原理与流程(以下图片出现的流量为赛事题目不要多想)
前言
我会根据2024数字中国数字产业人才积分赛半决赛的赛题进行分析,有些数据会不全,如果想看较为详细的数据可以看以下这位大佬的文章:https://www.freebuf.com/articles/web/341103.html
分为三个阶段:
1、AS_REQ & AS_REP
2、TGS_REQ & TGS_REP
3、AP-REQ & AP-REP
AS-REQ & AS-REP
该阶段是客户端和AS(身份验证服务)的认证,通过认证的客户端将获得TGT(票据授权票据)认购权证。
AS_REQ
当客户端用户访问域内服务时,需要用户输入账户密码,这时客户端的Kerberos服务会向KDC(密钥分发发系统)的AS(身份验证服务)发送请求也就是AS_REQ,请求的凭据是客户端计算机的哈希值,NTML HASH加密的时间戳以及 Client-info、Server-info 等数据,以及一些其他信息。
在这里pvno:5字段代表版本号为5,msg-type为版本号,padata里面为加密时间戳。
在这里面padata为0,不为0的情况如下:
然后我们继续去分析请求包体,在这里面cname就是客户端,下面的CNameString为用户名,realm为域控制器的名称,sname就是服务器,下面的kerberos.SNameString为域名。
AS_REP
当客户端发送身份信息给AS(身份验证服务)后,AS(身份验证服务)会先向活动目录AD请求,询问是否有此用户,如果有的话取出它的NTLM-Hash,并对AS_REQ请求中加密的时间戳进行解密,如果解密成功,则证明客户端提供的密码正确,如果时间戳在两分钟之内(一般为两分钟,可以设定),则预认证成功。然后AS(身份验证服务)会生成一个临时秘钥Session-Key AS,并使用客户端用户的NTLM-Hash加密Session-key AS作为响应包的一部分内容。此Session-key AS用于确保客户端和TGS(票据授予服务)之间的通信安全。
pA-ETYPE-INFO2为加密时间戳
etype: eTYPE-AES256-CTS-HMAC-SHA1-96 (18)为加密类型
CORP.LOCALhuangwei为加密的盐,下面的就是客户端用户名和域名之类的
返回的数据除了一些客户端信息、和服务端信息外,还ticket和enc-part。
其他的不多说,前面也解释过和前面一样,不过enc_part是使用的生成票据的服务器的用户的hash加密的
这里面一个漏洞点在于我们得到krbtgt的hash就可以伪造TGT(票据授予票据),这也是常说的黄金票据攻击
总结
这个就是Kerberos认证第一阶段,当客户端用户需要访问域内服务时,客户端的Kerberos服务会向域控制器(DC)的认证服务(AS)发送一个认证请求(AS_REQ)。这个请求包含了使用用户NTLM哈希值加密的时间戳,以及客户端和服务端的信息。
域控制器在接收到这个请求后,AS会首先检查用户是否在活动目录(AD)中,如果用户不存在,则认证失败。如果用户存在,AS会使用用户的NTLM哈希值尝试解密时间戳。如果时间戳与当前时间相差超过5分钟,认证也会失败。如果时间戳有效,AS会生成一个会话密钥(Session Key),并用用户的NTLM哈希值对其进行加密。
接下来,AS会使用域内的krbtgt账户的NTLM哈希值,对会话密钥、时间戳和客户端信息进行加密,生成票据授权票据(TGT)。这个TGT和会话密钥一起发送给客户端。TGT的有效期是8小时,如果超过这个时间,客户端将无法直接使用它来获取进一步的服务票据。在这种情况下,客户端需要重新申请一个新的TGT才能继续访问服务。
TGS_REQ & TGS_REP
TGS_REQ
客户端收到AS(用户验证服务)的回复AS_REP后分别获得了TGT(票据授权票据)和加密的 Session-Key AS。它会先用自己用户的NTLM-hash解密得到原始的Session-Key AS,然后它会在本地缓存此TGT(票据授权票据)和原始的Session-Key AS,如果现在它就需要访问某台服务器上的服务,他就需要凭借这张TGT认购凭证向TGS(票据授予服务)购买相应的Ticket。
此时客户端会使用Session-Key AS加密时间戳、Client-info、Server-info 等数据作为一部分。因为TGT(票据授权票据)是用Krbtgt账户的NTLM-Hash加密的,客户端是无法解密,所以客户端会将TGT(票据授权票据)作为另一部分继续发送给TGS(票据授予服务)。
这两部分组成的请求被称为TGS_REQ。
在下面的enc_part部分可以看到首先根据TGT生成临时票据,这个TGT(票据授权票据)能看出来就是前面AS_REQ生成的TGT,然后在Authenticator里面是使用Session key加密的客户端信息、服务端信息和时间戳。
总结
当客户端用户完成Kerberos认证的第一阶段后,客户端会使用其NTLM-HASH解密收到的数据,以获取会话密钥(Session Key)。随后,客户端将票据授权票据(TGT)和会话密钥存入内存中,以便在需要访问特定服务时,使用TGT来获取服务票据(Ticket)。
在Kerberos认证的第二阶段,客户端将TGT和使用会话密钥加密的客户端信息、时间戳等数据发送给票据授权服务(TGS)。
此过程中存在一个重要的安全机制。即使攻击者在传输过程中窃取了这些数据,由于数据被加密,短时间内攻击者很难破解。此外,时间戳的存在允许Kerberos域控制器(KDC)验证数据的时效性和完整性。
TGS的处理:KDC收到TGT和其他附加数据后,首先使用其密钥解密TGT(这一解密过程只有KDC能够完成)。解密TGT后,KDC获得会话密钥,再利用该会话密钥解密客户端发送的其他数据。KDC将解密得到的数据与TGT中的数据进行比较,以验证数据的可信度。
当数据验证通过,TGS会生成服务会话密钥(Server Session Key),并使用会话密钥对其进行加密。同时,TGS还会使用服务账户的NTLM-HASH加密服务会话密钥,连同客户端信息和时间戳,生成最终的服务票据。
在最后KDC将使用会话密钥加密的服务会话密钥和票据发送给客户端。客户端收到这些数据后,便可以使用它们与服务端进行安全的通信。
AP-REQ & AP-REP
客户端在接收到服务票据(Ticket)和相关数据后,会首先使用会话密钥(Session Key)解密加密的服务器会话密钥(Server Session Key),得到真正的服务器会话密钥,并将其存储在本地缓存中。客户端虽然无法解密服务票据,但可以利用这个票据进行服务访问。
为了加强安全性,Kerberos协议支持双向认证机制,即客户端和服务端必须相互验证对方的身份,确认无误后才能建立通信连接。在实际访问过程中,客户端可以在请求中设置一个标志位,表明是否需要进行双向认证。
双向认证
服务端验证客户端:这是为了防止未授权的用户访问服务。
当客户端需要访问服务时,它会将服务票据和使用服务器会话密钥加密的客户端信息及时间戳发送给服务端。
当服务端接收到请求后,使用该服务账户的NTLM-HASH解密服务票据,以获取服务器会话密钥。然后,使用这个密钥解密客户端发送的其他数据,并与服务票据中的数据进行比对,以验证数据的一致性。
如果启用了特权属性证书(PAC),服务端将PAC发送给域控制器(DC),以查询该用户是否有权访问请求的服务。DC解密PAC后,根据其中的SID(安全标识符)判断用户信息和权限,并将结果返回给服务端。服务端还会检查访问控制列表(ACL),以确定是否有权限限制用户请求的服务。所有验证通过后,服务端完成对客户端的认证。
客户端验证服务端:这是为了确保客户端不会连接到恶意的服务端。
服务端将使用服务器会话密钥加密的客户端信息和时间戳(这是客户端在第三阶段发送给服务端的时间戳)发送回客户端。
客户端使用服务器会话密钥解密这些数据,解密成功后,客户端会比较解密得到的时间戳与自己原始发送的时间戳。如果两者一致,客户端即确认服务端的身份。
完成Kerberos认证的第三阶段后,整个Kerberos认证流程结束,客户端和服务端成功建立通信。
PAC认证
在这里面提到了PAC,这个PAC其实就是相当于一个证书在第一阶段,KDC发送给客户端的TGT中就包含了PAC,PAC中有用户的SID、用户所在的组。在第三阶段,服务端解密Ticket验证通过后,还会将PAC发送给DC询问此用户是否有访问权限。通俗理解就是一个认证,认证这个客户端是否有资格去访问服务。
攻击手法
黄金票据(Golden ticket)
利用Krbtgt的NTLM-Hash值去伪造任意TGT。
白银票据(Silver ticket)
白银票据的利用过程是伪造 TGS,通过已知的授权服务密码生成一张可以访问该服务的 TGT,其实简单来讲就是利用已知服务账号密码的散列值直接去欺骗TGS
密码喷洒攻击(Password Spraying)
自动化密码猜测爆破密码
AS-REP Roasting
其实就是域内用户没有开启预认证导致直接忽略了第一阶段,攻击者可以使用指定的用户去请求票据,向域控制器发送AS_REQ请求,此时域控会不作任何验证便将 TGT 票据和加密的 Session-key 等信息返回。因此攻击者就可以对获取到的加密 Session-key 进行离线破解,如果爆破成功,就能得到该指定用户的明文密码。
DCSync
DCSync是域渗透中经常会用到的技术,其被整合在了 Mimikatz 中,用于传出域用户的哈希。
题目示例
题目为2024数字中国数字安全产业人才积分赛半决赛的流量分析题目
EzCrop.1
题目内容:被攻击组织部署有活动目录,请提交该组织的领域名称(全部小写)
很简单了在前面也说到了活动目录部署在域控制器里,那么域控制器就是realm,corp.local
EzCrop.2
题目内容:请提交主域控制器的完全限制名称(全部小写)。
那就找域控制器的用户名称,这时候去审一下browser协议(浏览器协议),因为要是域所以完整就是dc01.corp.local
EzCrop.3
题目内容:攻击者枚举了域用户,请提交枚举失败的域用户数量(阿拉伯数字)。
枚举用户,枚举失败的话那直接去找UNKONWN的数量就可以了,340个
EzCrop.4
目内容:找到被攻击成功获取到的三个用户并且按照首字母排序用-连接
很简单了,直接去寻找有返回的就行,也就是在第一阶段发出AS_REQ有返回AS_REP就好,答案huangwei-liuyuhua-wangkai
EzCrop.5
题目内容:请恢复上一问中,按首字母顺序排列后,最后一个用户的明文密码(字典请使用 rockyou)。
在前面也提到了enc_part部分是用户密码的hash加密。
我们需要用hashcat进行爆破首先需要将hash值前三十二位的16进制+$+后续所有的十六进制,保存为字符rephash然后生成字符串formot{b‘$krb5asrep‘{0}@{1}:{0},Username,domain,rephash}
Username需要在wangkai前加入etype的值$23$,domain也就是域也就是前面得到的CORP.LOCAL
然后给hashcat爆破,具体命令如下:(这里面m是选择模式,AS-REP的流量是18200)
hashcat -m 18200 $krb5asrep$23$wangkai@CORP.LOCAL:e4148673d9ea3cd816f92fbb136e1482$c721674e7fc9f08c3eaaac97c8783b1b7fc6feaf374158a895955e969868e5f443021c556b7fd900847956d47f18e3c8a2dd138ee1565b02899451102902bf364b4cb1c13355c13654ed480affa1c8b55847f4ee18d7b17a5cc514d56503bb8183cba1e0ee533fe9d51ee38b7abc7e8bafe63f7323443e12e8c03b86288439d4785119117340b915f8602d5e798ad99a02a9beb5898eb9cb08bd6d624b4a858cd02604dc947563c84bb7232af43f3e7bb638b8e7a05de3cd07971aa1066f5eff77bc642a679411579853902315bfba1cda1acb80a13571c7e82c7ff45b175408a5f50448029e291d D:\tools\hashcat\hashcat-6.2.6\CTF比赛专用字典\rockyou-master\rockyou-master\rockyou.txt\rockyou.txt --show
得到密码1qaz!QAZ
EzCorp.6
题目内容:攻击者滥用活动目录 DACL,在活动目录中修改了某域内主机的属性,请提交该域内主机名称与被修改的属性名称(全部小写,按照类似 hostname-属性的格式)。
因为是修改,搜索以下modify,发现在LDAP(轻量级目录访问协议)找到了ModifyRequest,这时候去找回显为success的就可以了,msDS-AllowedToActOnBehalfOfOtherIdentity
EzCorp.7
题目内容:请提交上一问中该属性在原先基础上被添加的值(全部小写)。
添加值一般出现在searchResEntry(LDAP(轻量目录访问协议))里面,在上面去寻找变化,前五个没什么变化到第六个的时候发现添加了SID(标识用户、组和计算机帐户的唯一的号码),所以添加的就是S-1-5-21-807850523-2173102279-1412002087-1556
EzCorp.8
题目内容:攻击者从域控制器上转储了域哈希,请提交执行该操作的攻击名称(全部小写)。
转储域哈希,前面提到过就是DCsync。
EzCorp.9
目内容:攻击者通过哪一个账户执行的上一问所涉及的攻击,请提交该账户的 UPN 名称(全部小写)。
首先得知道什么是UNP名称,其实就是用户名@域名,然后SMB协议(网络文件共享协议)会执行DCSync,这里面在SMB2(SMB2.0)协议里面,得到了Administrater,wangkai,还有sunxiuying,试一下发现是sunxiuying