Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863549760

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

遠程桌面協議(RDP) 在網絡安全領域發揮的作用越老越大。勒索軟件組織將其作為攻擊公共和私營部門的抓手,在2019 年由遠程桌面協議引起的攻擊已經造成了75 億美元的損失。在2020 年,RDP 攻擊增長了768%。網絡安全與基礎設施安全局(Cybersecurity Infrastructure Security Agency)等機構在其2020年的《勒索软件指南》 (Ransomware Guide)中將RDP列為需要保護的焦點。而在另一方面,滲透測試團隊正在定期使用RDP作為在網絡內部進行橫向移動、劫持會話和捕獲哈希值等的有效工具。

GoSecure Titan Labs 團隊看到了進一步探索哈希捕獲主題的機會,這是任何進攻團隊的必備工具。本文將研究RDP 安全模式、它們如何工作以及如何使用PyRDP(GoSecure 創建的庫)通過RDP 協議將其付諸行動以捕獲NetNTLMv2 哈希。這一努力始於每年長達一個月的Hacktoberfest期間的一個項目,該項目導致了PyRDP的幾項改進。在這些改進中,我們讓用戶更容易捕獲NetNTLMv2哈希。

首先,我們將介紹一種用於攻擊性用例的技術,通過在NTLMSSP身份驗證期間捕獲NetNTLMv2哈希值來獲得對遠程RDP設備的訪問。為了將其付諸實踐,我們將利用PyRDP 在RDP 支持的兩個主要身份驗證場景中執行這些哈希的捕獲:啟用網絡級別身份驗證(NLA) 和不啟用NLA。為了更多地了解這兩種場景,讓我們從詳細介紹RDP 協議中可用的安全模式開始。

RDP 安全模式RDP 是一種通常用於通過TCP/IP 使用終端客戶端和服務器來遠程管理計算機的協議。目前,它提供了不同類型的安全模式來加密客戶端和服務器之間的通信:

RDP 標準安全性:根據客戶端的支持和服務器選擇的加密級別(低、客戶端兼容、高、FIPS)對所有流量進行對稱加密。這種方法在中間人攻擊攻擊的情況下是最不安全的,因為服務器控制加密方法並可以決定是否不需要加密,從而完全禁用它。

1.png

RDP 增強安全性:通過外部協議提供加密和安全機制。其中兩種機制是:自RDP 5.2以來的TLS(傳輸層安全)和CredSSP,自RDP 6以來,除了使用TLS外,它還支持NLA(網絡級別認證)。帶有TLS的RDP還警告用戶,如果服務器的證書是自簽名的或不受信任的,可能會發生中間人攻擊,但它不會阻止客戶端接受風險。

當RDP 使用NLA 的增強安全性時,用於委派合適的身份驗證方法的協議是憑據安全支持提供程序(CredSSP)。這些授權的身份驗證方法是Kerberos 或NTLMSSP,後者是用於捕獲NetNTLMv2 哈希的身份驗證方法,這些哈希用於客戶端和服務器之間的質詢/身份驗證消息。

通過網絡級身份驗證剖析身份驗證為了理解NetNTLMv2 哈希捕獲,本節將詳細描述通過NLA 進行的身份驗證及其結構。為了簡化這個過程,我們將把它分成四個階段:

2.png

1.RDP 客戶端和服務器之間建立了TLS 連接;

2.CredSSP 的SPNEGO 為客戶端和服務器執行,以決定將使用哪種相互身份驗證協議:Kerberos 或NTLMSSP;

3.在這一步中,將發送服務器的公鑰進行驗證,並探測其真實性。這樣做是為了避免中間人攻擊;

4.一旦通過TLS 和SPNEGO 保護連接,客戶端就會發送其憑據以進行身份驗證。

我們的注意力將集中在最後一步,因為在使用NTLMSSP 協議的情況下,客戶端將以NTLM 消息的形式發送憑據的哈希版本並將被攔截。這些消息是ASN.1 編碼的TSRequest 結構,身份驗證數據按以下順序發送:

3.png

首先,客戶端發送一個NEGOTIATION消息來啟動NTLM認證,服務器端發送一個CHALLENGE消息來回應這個質詢。在這個階段,質詢是包含隨機數(用於防止重放攻擊的隨機字節序列)的64 位值。然後,客戶端使用個身份驗證消息來響應這個請求,該消息包含完成身份驗證過程所需的憑據。這是我們希望從客戶短中提取質詢響應(以 NTLMv2_RESPONSE 結構的形式)並進行中繼或破解的階段。

NTLMv2_RESPONSE結構很容易理解和解析,因為它只包含16字節的響應和可變大小的客戶端質詢。客戶端的質詢可以概括為使用從安全帳戶管理器(SAM) 或Active Directory (AD) 獲得的NT 哈希構建的LMv2 和NTv2 哈希,並使用HMAC-MD5對用戶和域名進行哈希。所有這些都形成了NetNTLMv2哈希,這是密碼破解工具如 John the Ripper 或 hashcat所需要的。

使用PyRDP 捕獲NetNTLMv2 哈希PyRDPi 是我們開發的一個庫,用於執行中間人攻擊並試驗RDP 協議。在中間人攻擊模式下,PyRDP有能力攔截NetNTLMv2哈希,即使它沒有實服務器的證書和私鑰,並且NLA是由服務器強制執行的。在本節中,我們將探索和描述兩種可以執行哈希捕獲的場景。

在第一種場景中,我們擁有受攻擊服務器的證書和私鑰。在本例中,RDP客戶端和服務器之間的交互將在CredSSP支持下進行,PyRDP將以兩種方式傳輸NTLMSSP消息。 NetNTLMv2捕獲是在RDP服務器發送CHALLENGE消息之後完成的,PyRDP從消息中提取服務器的CHALLENGE值,客戶端響應PyRDP記錄的哈希值,然後發送給RDP服務器繼續身份驗證過程。

4.png

我們最近實現了第二個場景:NLA 由服務器強制執行,但我們沒有服務器的證書和私鑰。在這個場景中,PyRDP將切斷與原始服務器的連接,並繼續進行客戶端連接和NTLMSSP身份驗證,以便執行前面所示的相同的NetNTLMv2提取。 PyRDP在接收到客戶端的NEGOTIATION消息後將生成CHALLENGE消息並發送它。通過這種方式,PyRDP可以控制質詢值,稍後將接收AUTHENTICATION消息。

5.png

為了說明這種攻擊,當PyRDP 在未啟用NLA 的情況下運行(默認值,請參見——auth標誌啟用NLA攻擊),並且客戶端試圖連接到執行NLA攻擊的服務器,然後從AUTHENTICATION消息的哈希提取之後,日誌如下所示:

6.png

請注意,在最後一個場景中,一旦提取了哈希,PyRDP 和客戶端之間的連接就會關閉,因為中間人攻擊進程無法完成服務器的連接,因為它受到NLA 的保護。

總結在本文中,我們展示了在RDP連接期間如何捕獲NetNTLMv2,以及PyRDP可以用作一種實用的攻擊工具。