内网渗透:详解kerberoast攻击
2023-7-8 09:26:28 Author: www.freebuf.com(查看原文) 阅读量:7 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

前言

上篇文章介绍了kerberos的协议的认证流程以及可能出现的安全问题,也简要说了一下kerberoast攻击,本篇文章就具体介绍一下kerberoasting具体原理以及如何进行操作。

关于内网相关的文章已经发了两篇了,大家感兴趣的话可以找以前的文章看一下,后面会继续出关于内网方面的知识。

内网渗透:Kerberos认证协议安全性分析

内网横移:抓取域管理员密码

什么是Kerberoasting攻击?

首先再来回顾一下Kerberoast协议的认证过程。kerberoast认证过程算上PAC可以说有四个个阶段。如下图所示

1688740766_64a8239e0b73a60776256.png!small?1688740766111

下面这张图总结了每个阶段可能出现的安全问题

1688740789_64a823b58c501523cd85f.png!small?1688740789360

从上图可以看出kerberoasting攻击是在TGS REQ阶段的。TGS REQ阶段是请求服务票据ST的过程,在这个阶段最终会得到访问服务的票据,这个票据用服务账号的NTLM hash进行签名。而且我们是可以获取到任意服务的ST,加密算法为RC4-HMAC,如果获得这个ST票据,我们可以尝试穷举口令,模拟加密过程,进行破解。

一句话来说就是由于ST是用服务的Hash进行加密的,因此客户端拿到该ST后可以用于本地离线爆破。如果字典够牛逼,那么就很有可能爆破出SPN链接用户的明文密码

如果该服务在域内被配置为高权限运行,那么攻击者可能接管整个域。

其核心在于,攻击者和KDC协商ST加密的时候,协商的是使用RC4_HMAC_MD5加密算法,而该加密算法容易被破解,因为攻击者可以在本地进行离线爆破

Kerberoasting的前提:服务SPN必须注册在域用户账户下,因为机器账户的密码是随机生成的,基本爆破不了

这种方式的优点就是不用与服务器进行交互,减少了被发现的风险,而且我们可以对所有的服务票据来进行尝试,增加破解的几率,直到拿到管理权限。

其中,域内注册的服务是用SPN进行表示的,我们可以通过查询SPN来获取域内注册了那些服务。

攻击流程

根据上面的介绍,那么整个的攻击过程可以总结如下:

  1. 攻击者提供一个正常的域用户密码进行认证,获得TGT
  2. 攻击者使用该TGT请求针对指定SPN的ST
  3. KDC在验证身份后,返回服务Hash加密的ST,不管提供的域用户有没有对指定SPN服务的访问权限
  4. 攻击者本地离线爆破ST,获得SPN所链接账户的明文密码(重点是密码字典

SPN服务主体

kerberoasting攻击首先就是要获取请求服务的SPN,那么首先介绍一下SPN到底是什么以及常用的SPN操作。

SPN是什么

SPN(ServicePrincipal Names)服务主体名称,是服务实例(比如:HTTP、MSSQL、MySQL等服务)的唯一标识符。个人认为就是服务实例注册到域控中的一个标识,域控用SPN来表示是那个服务。

Kerberos 身份验证:使用 SPN 将服务实例与服务登录帐户相关联

如果在整个林或域中的计算机上安装多个服务实例,则每个实例都必须具有自己的SPN。如果客户端可能使用多个名称进行身份验证,则给定服务实例可以具有多个 SPN。

SPN 始终包含运行服务实例的主机的名称,因此服务实例可以为其主机的每个名称或别名注册SPN。

一个用户账户下可以有多个SPN,但一个SPN只能注册到一个账户。

在内网中,SPN扫描通过查询向域控服务器执行服务发现。这对于红队而言,可以帮助他们识别正在运行重要服务的主机。SPN的识别是kerberoasting攻击的第一步。

SPN的语法格式

格式:服务类型/对应机器名:服务端口[默认端口可不写]

<service class>/<host>:<port> <servername>

1、<service class>可以理解为服务的名称,常见的有www, ldap, SMTP, DNS, HOST等,例如mysql/WIN-security.test:1433

2、host有两种形式,FQDN和NetBIOS名,例如WIN-test.security或者是WIN-test

3、如果服务运行在默认端口上,则端口号(port)可以省略

查询已经注册的SPN

查询当前域内所有的SPN

setspn -Q */*


文章来源: https://www.freebuf.com/articles/network/371446.html
如有侵权请联系:admin#unsafe.sh