Kerberoasting 攻击
1 背景
Kerberoasting Attack是Tim Medin在DerbyCon 2014上发布的域密码攻击方法。TimMedin还发布了支持攻击工具Kerberoast。从那时起,许多研究人员在Github上进行了改进和扩展,并在Github上开发并释放了大量工具,使Kerberosting逐渐演变为域攻击的常见方法之一。2 原理
Kerberos协议的身份验证和授权过程,涉及使用不同帐户的NTLM作为加密数据的密钥使用域用户的NTLM加密认证请求票证
KDC NTLM加密认证的票证使用KRBTGT帐户TGT
KDC使用运行服务TGS的服务帐户的NTLM加密授权门票
Kerberos使用裸露的对称加密算法
y=f(x,key)是一种已知的对称加密算法,例如rc4_hmac_nt等。
X是要加密的数据,包含时间戳和其他固定格式的内容;
密钥是加密密钥,即NTLM; Y是加密的秘密数据。
如果可以从Kerberos域网络获得Y,则可以根据已知算法使用不同的F来计算不同的X。
由于X包含一个简单易于识别的时间戳,因此可以使用时间戳来快速确定数据解密是否正确,从而确定使用的密钥是否是要找到密码。
密钥越简单,加密算法F的强度越低,破裂的概率就越大。因此,有必要找到一个具有简单键的帐户,并使用较低的强度加密算法f。
3 账号类型
域中有三种主要帐户类型,包括主机帐户,用户帐户,服务帐户(SPN在域用户帐户下注册)等。主机帐户的密码是由系统随机设置的,几乎不会破裂,并且每30天自动更改一次
用户帐户的密码复杂性取决于策略,并且很难在具有高复杂性要求的域中破解。
安装应用程序软件时通常会自动设置
3.1 服务账号的口令存在很大的特殊性
密码,并且复杂性通常更简单密码几乎不会更改,因为大多数应用程序软件没有提供功能和接口来修改服务帐户,例如运行MS SQL Server服务的SQLSVC帐户等。
该服务帐户基本上符合密码较低的条件,并且可以用作开裂对象。
要达到开裂条件,您还需要获取加密数据,并且需要获取服务帐户的机密数据
由于TGS由服务帐户的NTLM加密,因此您可以通过获取访问服务的TGS获得秘密数据,这是Kerberos协议中的第4步。
在Kerberos协议下,任何用户都可以从域服务器请求对服务访问
只要该服务在域中注册了SPN(服务主名),该服务可能不会在线。
4 SPN
4.1 SPN 相关概念
SPN是服务器上运行的服务的唯一标识符。使用Kerberos的每种服务都需要SPNSPN分为两种类型:一个在AD上的计算机帐户下注册,另一个在域用户帐户(用户)下注册。
当服务的权限是本地系统或网络服务时,SPN将在计算机帐户(计算机)下注册
当服务权限是域用户时,SPN将在域用户帐户(用户)下注册
SPN的格式为ServiceClass/host

ServiceClass代表服务的类型,例如www代表Web服务;
尝试使用FQDN代表主机;
如果该端口是一个众所周知的端口,则可以省略它。

4.2 查询 SPN
SPN存在于帐户的属性中,因此您可以通过查询所有帐户的属性来遍历域中的所有SPN服务。由于主机帐户的密码几乎不可能破解,因此仅查询用户帐户的SPN。该系统提供用于查询的PowerShell模块。 PowerViewer封装模块,并提供Get -Domainuser -SPN命令,以遍历域中所有用户帐户的SPN。

Win7和Windows Server 2008中包含的工具
setspn.exe -q /
在某些域中,当某些服务不再运行或停止服务时,这些服务帐户仍可能留在域中。由于该服务的操作是否不影响我们对TG的获取,因此这些不存在的SPN仍然适用于Kerberoasting。
一些服务帐户具有更高的权限,例如,一些特殊服务要求具有域管理员特权的服务帐户正常运行。因此,当将SPN查询为钥匙攻击的目标时,可以将它们标记和过滤。该方法是在使用get -domainuser -spn命令时添加admincount参数,以指示其具有很高的权限。

5 攻击流程
获取在域中的服务帐户与运行的服务相对应您需要获取TGS以访问这些服务,以获取由服务帐户NTLM加密的加密数据
Mimikatz提供了此功能,可以通过Kerberos模块的询问命令获得。

使用Mimikatz一次仅获得一个TG。 Impacket工具包提供了批处理采集方法,可以立即获得域中所有SPN的TGS进行离线批处理开裂。
为了解决系统的旧版本和新版本的兼容性问题,Microsoft将支持多种加密算法,例如AES,DES,RC4,MD5等。在Windows 2003和Windows 2000 Systems,例如RC4,MD5,MD5,HMAC_MD5等算法,主要使用的是相对容易使用的。因此,选择要破解的要点时,请尝试选择在这些系统上运行的服务
有几种方法可以迫使系统选择使用功能较低的加密算法。现在更容易破解的算法是RC4_HMAC_NT算法。获取TGS时,可以诱导域服务器使用此算法进行加密。

攻击攻击的所有条件
机密数据
算法
密码词典库
使用Tim Medin的Kerberoast工具来破解密码,当然还有具有更快算法的Hashcat工具。下载Decompression kerberoast工具后,请使用tgsrepcrack.py WordList.txt tgs.kirbi进行破解,其中wordlist.txt是字典文件,而tgs.kirbi是较早获得的tgs。开裂的概率和时间取决于密码复杂性,字典和机器性能。
./tgsrepcrack.py WordList.txt test.kirbi
6 防御
Kerberoasting攻击的主要前提是密码复杂性很低,并且加密算法很弱。对Kerberosting的攻击也需要从这两个方面进行
提高服务帐户的密码复杂性;
尝试将域中的服务器系统升级到至少Windows 2008系统,并应用AES256困难加密算法
很难检测Kerberosting攻击,因为所有在线操作都是合法的和正常的操作,但是仍然有痕迹。例如,TGS的批次获取是一个功能,而低强度加密算法是一个功能。从这两个方面开始是一个相对有效的检测想法。