hacktricks/windows-hardening/active-directory-methodology/kerberos-authentication.md
2023-08-03 19:12:22 +00:00

220 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Kerberos身份验证
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 YouTube 🎥</strong></a></summary>
* 你在一个**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享你的黑客技巧**。
</details>
**此信息摘自文章:**[**https://www.tarlogic.com/en/blog/how-kerberos-works/**](https://www.tarlogic.com/en/blog/how-kerberos-works/)
## KerberosIKerberos是如何工作的- 理论
2019年3月20日 - ELOY PÉREZ
这一系列文章的目标是澄清Kerberos的工作原理而不仅仅是介绍攻击技术。这是因为在许多情况下为什么某些技术有效或无效并不清楚。了解这些知识可以让我们知道何时在渗透测试中使用这些攻击之一。
因此在长时间的文档研究和关于该主题的几篇文章之后我们试图在本文中写出所有重要细节以便审计人员能够理解如何利用Kerberos协议。
在本文中,只讨论基本功能。在以后的文章中,将介绍如何执行攻击以及更复杂的方面,如委派。
如果对未解释清楚的主题有任何疑问,请随时留下评论或提问。现在,进入主题。
### 什么是Kerberos
首先Kerberos是一种身份验证协议而不是授权协议。换句话说它允许识别每个用户用户提供一个秘密密码但它不验证该用户可以访问哪些资源或服务。
Kerberos在Active Directory中使用。在这个平台上Kerberos提供有关每个用户特权的信息但确定用户是否可以访问其资源是每个服务的责任。
### Kerberos组件
本节将研究Kerberos环境的几个组件。
**传输层**
Kerberos使用UDP或TCP作为传输协议以明文发送数据。因此Kerberos负责提供加密。
Kerberos使用的端口是UDP/88和TCP/88这些端口应该在KDC下一节中解释上监听。
**代理**
多个代理共同工作以提供Kerberos中的身份验证。它们是
* **客户端或用户**,希望访问服务的用户。
* **AP**(应用程序服务器),提供用户所需的服务。
* **KDC**密钥分发中心Kerberos的主要服务负责发行票证安装在DC域控制器上。它由**AS**认证服务支持AS发行TGT。
**加密密钥**
Kerberos处理多个结构如票证。这些结构中的许多是加密或签名的以防止被第三方篡改。这些密钥包括
* **KDC或krbtgt密钥**派生自krbtgt帐户的NTLM哈希。
* **用户密钥**派生自用户的NTLM哈希。
* **服务密钥**派生自服务所有者的NTLM哈希可以是用户或计算机帐户。
* **会话密钥**在用户和KDC之间协商。
* **服务会话密钥**,在用户和服务之间使用。
**票证**
Kerberos处理的主要结构是票证。这些票证交付给用户以便用户在Kerberos领域中执行多个操作。有两种类型
* **TGS**(票证授予服务)是用户可以用来对服务进行身份验证的票证。它使用服务密钥进行加密。
* **TGT**票证授予票证是提交给KDC以请求TGS的票证。它使用KDC密钥进行加密。
**PAC**
**PAC**特权属性证书是几乎每个票证中包含的结构。此结构包含用户的特权并使用KDC密钥进行签名。
服务可以通过与KDC通信来验证PAC尽管这种情况并不经常发生。然而PAC验证仅包括检查其签名而不检查PAC内部的特权是否正确。
此外客户端可以通过在票证请求的_KERB-PA-PAC-REQUEST_字段中指定来避免将PAC包含在票证中。
**消息**
Kerberos使用不同类型的消息。最有趣的是以下几种
* **KRB\_AS\_REQ**用于向KDC请求TGT。
* **KRB\_AS\_REP**由KDC交付TGT使用。
* **KRB\_TGS\_REQ**使用TGT向KDC请求TGS。
* **KRB\_TGS\_REP**由KDC交付TGS使用。
* **KRB\_AP\_REQ**使用TGS对用户进行身份验证。
* **KRB\_AP\_REP**:(可选)由服务用于对用户进行身份验证。
* **KRB\_ERROR**:用于通信错误条件的消息。
此外即使它不是Kerberos的一部分但是NRPCAP还可以使用**KERB\_VERIFY\_PAC\_REQUEST**消息向KDC发送PAC的签名并验证其是否正确。
下面是执行身份验证的消息序列的摘要
![Kerberos消息摘要](<../../.gitbook/assets/image (174) (1).png>)
### 认证过程
在本节中,将研究执行认证所需的消息序列,从没有票证的用户开始,直到对所需服务进行身份验证。
**KRB\_AS\_REQ**
首先用户必须从KDC获取TGT。为此必须发送一个KRB\_AS\_REQ
![KRB\_AS\_REQ消息结构图](<../../.gitbook/assets/image (175) (1).png>)
_KRB\_AS\_REQ_包含以下字段之一
* 使用客户端密钥加密的**时间戳**,用于验证用户身份并防止重放攻击
* 已验证用户的**用户名**
* 与**krbtgt**帐户关联的服务**SPN**
* 用户生成的**Nonce**
注意:只有在用户需要预身份验证时,才需要加密时间戳,这是常见情况,除非在用户帐户中设置了[_DONT\_REQ\_PREAUTH_](https://support.microsoft.com/en-us/help/305144/how-to-use-the-useraccountcontrol-flags-to-manipulate-user-account-pro)标志。
**KRB\_AS\_REP**
收到请求后KDC通过解密时间戳来验证用户身份。如果消息正确则必须用_KRB\_AS\_REP_进行响应
![KRB\_AS\_REP消息结构图](<../../.gitbook/assets/image (176) (1).png>)
_KRB\_AS\_REP_包括以下信息
* **用户名**
* **TGT**,其中包括:
* **用户名**
* **会话密钥**
* **TGT的过期日期**
* 由KDC签名的具有用户特权的**PAC**
* 使用用户密钥加密的一些**加密数据**,其中包括:
* **会话密钥**
* **TGT的过期日期**
* 用于防止重放攻击的用户**Nonce**
完成后用户已经拥有了TGT可以用它来请求TGS然后访问服务。
**KRB\_TGS\_REQ**
为了请求TGS必须向KDC发送一个_KRB\_TGS\_REQ_消息
![KRB\_TGS\_REQ消息结构图](<../../.gitbook/assets/image (177).png>)
_KRB\_TGS\_REQ_包括
* 使用会话密钥的**加密数据**
* **用户名**
* **时间戳**
* **TGT**
* 所请求服务的**SPN**
* 用户生成的**Nonce**
**KRB\_TGS\_REP**
收到_KRB\_TGS\_REQ_消息后KDC返回一个包含TGS的_KRB\_TGS\_REP_
![KRB\_TGS\_REP消息结构图](<../../.gitbook/assets/image (178) (1).png>)
_KRB\_TGS\_REP_包括
* **用户名**
* **TGS**,其中包含:
* **服务会话密钥**
* **用户名**
* **TGS的过期日期**
* 由KDC签名的具有用户特权的**PAC**
* 使用会话密钥的**加密数据**
* **服务会话密钥**
* **TGS的过期日期**
* 用于防止重放攻击的用户**Nonce**
**KRB\_AP\_REQ**
最后如果一切顺利用户已经拥有有效的TGS以与服务进行交互。为了使用它用户必须向AP发送一个_KRB\_AP\_REQ_消息
![KRB\_AP\_REQ消息结构图](<../../.gitbook/assets/image (179) (1).png>)
_KRB\_AP\_REQ_包括
* **TGS**
* 使用服务会话密钥的**加密数据**
* **用户名**
* **时间戳**,以避免重放攻击
之后如果用户权限正确就可以访问服务。如果是这种情况通常不会发生AP将根据KDC验证PAC并在需要相互认证时向用户响应一个_KRB\_AP\_REP_消息。
### 参考资料
* Kerberos v5 RFC: [https://tools.ietf.org/html/rfc4120](https://tools.ietf.org/html/rfc4120)
* \[MS-KILE\] Kerberos扩展: [https://msdn.microsoft.com/en-us/library/cc233855.aspx](https://msdn.microsoft.com/en-us/library/cc233855.aspx)
* \[MS-APDS\] 认证协议域支持: [https://msdn.microsoft.com/en-us/library/cc223948.aspx](https://msdn.microsoft.com/en-us/library/cc223948.aspx)
* Mimikatz和Active Directory Kerberos攻击: [https://adsecurity.org/?p=556](https://adsecurity.org/?p=556)
* 用5岁孩子的语言解释Kerberos: [https://www.roguelynn.com/words/explain-like-im-5-kerberos/](https://www.roguelynn.com/words/explain-like-im-5-kerberos/)
* Kerberos和KRBTGT: [https://adsecurity.org/?p=483](https://adsecurity.org/?p=483)
* 掌握Windows网络取证和调查第2版。作者S. AnsonS. BuntingR. Johnson和S. Pearson。出版社Sibex。
* Active Directory第5版。作者B. DesmondJ. RichardsR. Allen和A.G. Lowe-Norris
* 服务主体名称:[https://msdn.microsoft.com/en-us/library/ms677949(v=vs.85).aspx](https://msdn.microsoft.com/en-us/library/ms677949\(v=vs.85\).aspx)
* Active Directory的功能级别[https://technet.microsoft.com/en-us/library/dbf0cdec-d72f-4ba3-bc7a-46410e02abb0](https://technet.microsoft.com/en-us/library/dbf0cdec-d72f-4ba3-bc7a-46410e02abb0)
* OverPass The Hash Gentilkiwi博客: [https://blog.gentilkiwi.com/securite/mimikatz/overpass-the-hash](https://blog.gentilkiwi.com/securite/mimikatz/overpass-the-hash)
* Pass The Ticket Gentilkiwi博客: [https://blog.gentilkiwi.com/securite/mimikatz/pass-the-ticket-kerberos](https://blog.gentilkiwi.com/securite/mimikatz/pass-the-ticket-kerberos)
* Golden Ticket Gentilkiwi博客: [https://blog.gentilkiwi.com/securite/mimikatz/golden-ticket-kerberos](https://blog.gentilkiwi.com/securite/mimikatz/golden-ticket-kerberos)
* Mimikatz Golden Ticket Walkthrough: [https://www.beneaththewaves.net/Projects/Mimikatz\_20\_-\_Golden\_Ticket\_Walkthrough.html](https://www.beneaththewaves.net/Projects/Mimikatz\_20\_-\_Golden\_Ticket\_Walkthrough.html)
* 攻击Kerberos: 踢开冥界的守卫犬: [https://files.sans.org/summit/hackfest2014/PDFs/Kicking%20the%20Guard%20Dog%20of%20Hades%20-%20Attacking%20Microsoft%20Kerberos%20%20-%20Tim%20Medin(1).pdf](https://files.sans.org/summit/hackfest2014/PDFs/Kicking%20the%20Guard%20Dog%20of%20Hades%20-%20Attacking%20Microsoft%20Kerberos%20%20-%20Tim%20Medin\(1\).pdf)
* Kerberoasting Part 1: [https://room362.com/post/2016/kerberoast-pt1/](https://room362.com/post/2016/kerberoast-pt1/)
* Kerberoasting Part 2: [https://room362.com/post/2016/kerberoast-pt2/](https://room362.com/post/2016/kerberoast-pt2/)
* 烤AS-REPs[https://www.harmj0y.net/blog/activedirectory/roasting-as-reps/](https://www.harmj0y.net/blog/activedirectory/roasting-as-reps/)
* PAC验证[https://passing-the-hash.blogspot.com.es/2014/09/pac-validation-20-minute-rule-and.html](https://passing-the-hash.blogspot.com.es/2014/09/pac-validation-20-minute-rule-and.html)
* 理解PAC验证[https://blogs.msdn.microsoft.com/openspecification/2009/04/24/understanding-microsoft-kerberos-pac-validation/](https://blogs.msdn.microsoft.com/openspecification/2009/04/24/understanding-microsoft-kerberos-pac-validation/)
* 重置krbtgt账户密码/密钥:[https://gallery.technet.microsoft.com/Reset-the-krbtgt-account-581a9e51](https://gallery.technet.microsoft.com/Reset-the-krbtgt-account-581a9e51)
* 缓解Pass-the-Hash (PtH)攻击和其他凭证盗窃:[https://www.microsoft.com/en-us/download/details.aspx?id=36036](https://www.microsoft.com/en-us/download/details.aspx?id=36036)
* 在AD环境中使用LDAP、Kerberos (和MSRPC)的有趣玩法:[https://speakerdeck.com/ropnop/fun-with-ldap-kerberos-and-msrpc-in-ad-environments?slide=58](https://speakerdeck.com/ropnop/fun-with-ldap-kerberos-and-msrpc-in-ad-environments?slide=58)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 你在一个**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想要**获取PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享你的黑客技巧**。
</details>