如何檢測Windows中的橫向滲透攻擊

Windows Windows 10 Windows Vista 微軟 安全客 2017-05-11

如何檢測Windows中的橫向滲透攻擊

翻譯:興趣使然的小胃

預估稿費:300RMB

投稿方式:發送郵件至linwei#360.cn,或登陸網頁版在線投稿

一、前言


橫向滲透攻擊技術是複雜網絡攻擊中廣泛使用的一種技術,特別是在高級持續威脅(Advanced Persistent Threats,APT)中更加熱衷於使用這種攻擊方法。攻擊者可以利用這些技術,以被攻陷的系統為跳板,訪問其他主機,獲取包括郵箱、共享文件夾或者憑證信息在內的敏感資源。攻擊者可以利用這些敏感信息,進一步控制其他系統、提升權限或竊取更多有價值的憑證。藉助此類攻擊,攻擊者最終可能獲取域控的訪問權限,完全控制基於Windows系統的基礎設施或與業務相關的關鍵賬戶。

在這份白皮書中,我們向大家介紹瞭如何在Windows Vista/7以及Server 2008系統中檢測基於NTLM和Kerberos協議的橫向滲透攻擊。Windows 10引入了許多額外的安全機制,因此我們準備單獨發佈另一份白皮書,介紹如何檢測Windows 10中的橫向滲透攻擊。

微軟發佈過一篇文章,文中介紹了憑證竊取攻擊的相關資料以及如何防範這類攻擊。除了本文介紹的防禦措施之外,我們強烈建議大家根據微軟給出的建議對系統進行加固。需要注意的是,這類攻擊不僅僅針對Windows系統,其他的基礎設施(如使用Kerberos的UNIX環境或單點登錄環境)也會受到類似攻擊的影響。雖然本文僅僅針對Windows系統提出了檢測橫向滲透攻擊的方法,大家可以舉一反三,在保存適當日誌的其他環境中使用類似方式檢測橫向滲透攻擊。

此外,感謝微軟MSRC(Microsoft Security Response Center,微軟安全響應中心)對本文內容的校對和細節驗證。

二、背景


2.1 什麼是Windows橫向滲透攻擊

在本文中,橫向滲透攻擊指的是攻擊者以某臺Windows主機為跳板,利用已竊取的某個賬戶(如普通用戶或服務賬戶)的有效憑證,建立到目標Windows主機的連接。

源主機通常是目標Windows環境中的一臺已被攻陷的主機。在大多數情況下,攻擊者會通過包含惡意附件的釣魚郵件或惡意網站鏈接,攻陷第一臺主機作為跳板。一旦攻擊成功,攻擊者通常會通過命令控制(Command-and-Control,C2)服務器以及反彈的shell控制目標主機。權限提升成功後,攻擊者可以提取存儲在源主機中的憑證信息,開展後續的橫向滲透攻擊,其中包括:

1、獲取源主機的憑證信息

攻擊者可以通過定製工具,訪問Windows憑證存儲區或內存,以獲取任何有效的憑證信息(鍵盤記錄器也可以完成相同任務,但這不在本文的討論範圍內)。本文只討論與NT哈希和Kerberos憑證有關的內容。

攻擊者可能會獲取到被攻陷源主機中保存的任何憑證,比如那些正在使用的憑證、曾經使用過的憑證(比如已緩存的憑證)以及內存中尚未清除的憑證(未安裝更新時)。攻擊者最感興趣的是目標環境中的高權限賬戶憑證,比如幫助臺(help-desk)賬戶、域管、高權限服務賬戶以及本地管理員賬戶,如果密碼被重複使用或者密碼生成算法是可預測的,那麼攻擊環境就更加理想。

2、通過竊取的憑證訪問其他主機或資源

成功竊取憑證後,攻擊者可以使用這些憑證訪問其他資源,比如其他主機或服務器(例如Exchange郵箱賬戶)。攻擊者所使用的技術包括基於NT哈希的哈希傳遞(pass-the-hash,以下簡稱PtH)攻擊以及基於Kerberos票據的票據傳遞攻擊(pass-the-ticket,以下簡稱PtT)。讀者可以參考附錄B中的[1][2][3],瞭解這些攻擊的更多細節。

以下是有關憑證竊取和重放攻擊的一些說明:

1、任何用戶訪問被攻陷的主機後,都可能在其內存中留下憑證信息,在未及時安裝補丁時,相關憑證會被攻擊者導出。Windows之所以在內存中緩存這些憑證,主要是為了提供諸如單點登錄(single-sign-on)的功能,在這種場景下:

(1)在受限管理模式下使用Network Logon或RDP方式登錄被控主機時,用戶賬戶憑證不會被洩露。

(2)其他登錄方式會暴露賬戶憑證,包括本地賬戶、域賬戶以及服務賬戶在內的憑證都會受到影響。讀者可以參考本文2.3節內容瞭解更多細節。

2、受影響的憑證不僅僅包括明文的用戶名和密碼,還包括NT哈希、Kerberos票據以及Kerberos密鑰,這些憑證可以被攻擊者用來請求Kerberos TGTs(Ticket Granting Ticket),作為有效憑證開展橫向滲透攻擊。

3、攻擊者需要管理員權限以訪問本地Windows憑證存儲區或內存中的憑證信息(例如Windows安全賬戶管理器、憑證管理器或者本地安全授權子系統服務進程(及LSASS.exe)中存儲的憑證)。如果當前賬戶權限較低,攻擊者可以通過本地提權漏洞獲取高權限。

4、橫向滲透攻擊的目標不單單是另一個工作站,也可以是其他資源,比如Exchange服務器上的郵箱或業務系統。

5、橫向滲透攻擊使用的是標準的協議,比如Kerberos和NTLM協議,這樣一來我們無法通過創建單條Windows事件或網絡入侵檢測系統(IDS)規則來檢測這類攻擊。

6、橫向滲透攻擊的一個優點就是攻擊者可以抓取憑證信息並在後續攻擊中使用。

7、不僅僅只有Windows會受到橫向滲透攻擊影響,其他使用單點登錄的身份認證協議都會面臨相同問題。任何單點登錄解決方案都需要以某種有效的方式保存憑證信息,以便在其他服務的認證過程中可以重複使用這些憑證。

2.2 使用橫向滲透攻擊的典型APT場景

通常情況下,APT攻擊會不斷從某個工作站連接到另一個工作站,以獲取越來越高的賬戶權限,直到他們得到域管賬戶的憑證為止。接下來攻擊者通常會訪問域控,導出Windows域中的所有憑證。

APT中使用橫向滲透攻擊的典型場景如下圖所示:

如何檢測Windows中的橫向滲透攻擊

圖1. APT攻擊中使用橫向滲透攻擊的典型場景

2.3 憑證緩存

就如上文所述,當用戶使用RDP方式連接工作站(RestrictedAdmin模式除外),或者在工作站中使用runas命令時,包括域用戶或者域管在內的憑證信息都會緩存在工作站的內存中。

以某個典型場景為例,當前有某個user1賬戶已經登錄到某臺主機中,此時另一個user2賬戶(管理員)正在登陸同一臺主機。在這種情況下,user2在主機中緩存的票據不僅對user1而言是可見的,對已經掌握該主機控制權的攻擊者而言也是可見的。user2在當前主機中緩存的Kerberos TGT票據情況如下表所示:

如何檢測Windows中的橫向滲透攻擊

注:

[1] 如果user2正確註銷,則遠程主機上不會保存票據信息。

[2] 如果遠程會話沒有被正確關閉,那麼user2的票據就會保留在遠程主機中。

[3] 右鍵菜單中以管理員身份(user2)運行cmd.exe.

[4] 使用的是已緩存的域密碼,比如沒有接入域環境的筆記本電腦就屬於這種場景。

[5] 在以user2身份運行的命令提示符中,使用“net use”命令。

[6] 使用“net use \\target\c$”命令,在彈出的對話框中輸入user2憑證信息。

[7] 在域控的日誌中會包含4768事件,但有趣的是user2的TGT票據並不會被緩存,相反的是,本地主機內存中會保存user1的一個CIFS服務票據,以便訪問共享文件夾。

需要注意的是,我們並沒有測試所有的登錄類型,但在某些場景下,高權限用戶(如user2)還是可以訪問工作站主機。微軟給出了一份更詳盡的資料,梳理了哪些可複用的憑證信息會暴露在目標主機中。

上表中,在Windows系統中,右鍵使用的“以管理員身份運行”功能時(會彈出UAC窗口),用戶會得到管理員所有的訪問令牌。如果管理員使用runas命令運行某個應用程序(如cmd.exe),情況會有所不同,具體情況如下:

1、右鍵使用“以管理員身份運行”運行應用程序時,程序退出後,已緩存的NT哈希以及票據仍然會保留在內存中;

2、使用“runas /user:\\dom\user2”命令時,程序退出後,內存中的憑證會被清除。

有趣的是,在最後一種場景中(即交互式登錄後,以管理員身份運行),netlogon服務並不需要重新輸入密碼!

對於上表的測試用例,有幾點情況需要說明:

1、所有的測試都基於非特權的交互式會話(即使用user1的控制檯登錄)。

2、網絡登錄狀態沒有永久保持。

3、委派功能打開和關閉的情況下,我們都做了測試。

4、在註銷測試中,不管註銷過程中目標賬戶會話是被正確關閉還是被保留,測試結果都不變。

2.4 哈希傳遞與票據傳遞

橫向滲透測試中,使用哈希傳遞(Pass-the-Hash,以下簡稱PtH)或者票據傳遞(Pass-the-Ticket,以下簡稱PtT)時,情況會有所不同,具體如下表所示:

如何檢測Windows中的橫向滲透攻擊

有幾個結論比較有趣,如:

1、攻擊者需要管理員權限以竊取憑證,但不需要管理員權限就能使用Kerberos票據。

2、密碼更改並不會導致Kerberos票據失效。

三、檢測Windows中的橫向滲透攻擊


3.1 通用法則

合法的SMB連接與使用PtH和PtT攻擊建立的連接並沒有什麼不同。事實上,攻擊者發動這類攻擊時並沒有利用協議的漏洞,因此,我們沒有預先定義的規則來檢測此類攻擊。

然而,攻擊者的攻擊行為會存在某些異常特徵。例如,如果某個域管賬戶(如my-admin)只能在某臺特定的工作站中使用,那麼在其他工作站中使用這個域管賬戶就顯得非常可疑,意味著域環境中可能存在橫向滲透攻擊。

因此,我們有可能能通過監控Windows事件檢測橫向滲透攻擊。

我們用來檢測攻擊的主要法則為:

“如果檢測到用戶賬戶來自於不正常或非授權系統,或者在不正常或非授權系統中使用,我們判斷這種情況下存在橫向滲透攻擊”。

我們需要注意以下幾點:

1、這條法則並不能覆蓋所有的橫向滲透攻擊(某些特權賬戶的使用檢測起來比較困難)。因此,我們需要維護一張包含合法的“用戶/工作站/IP地址”三元組的列表,檢測不在此表中的賬戶使用情況。此外,單獨使用三元組列表並不能檢測所有的攻擊場景(比如,攻擊者發起的來自合法的用戶/工作站的資源訪問請求)。

2、這些法則能否有效應用,主要由已有的策略、活動目錄結構以及網絡隔離機制共同決定。我們需要制定策略,監控專用主機(如專用OU、管理員工作站)上賬戶的使用情況。我們手頭上必須維護一份包含這類工作站的清單。如果這些賬戶和工作站所使用的策略非常明確,那麼我們在檢測橫向滲透攻擊時的效率也會越高,也能避免誤報。網絡隔離機制將有助於識別橫向滲透攻擊,特別是對於Kerberos而言,這種隔離機制更加有效,因為Kerberos並沒有在相關日誌事件中提供具體的主機名信息。

3、為了檢測使用本地賬戶(如本地管理員)的橫向滲透攻擊,我們需要收集所有可能成為目標的工作站中的日誌(4624/4625事件),在某些情況下這個任務很難完成。但這對域賬戶來說不成問題,因為主要的Windows事件都存儲在域控上。微軟引入了兩個SID,通過設置GPO(Group Policy Object,組策略對象)規則,可以限制本地管理員賬戶在橫向滲透攻擊中的使用。

在本文後半部分中,我們會向讀者介紹使用PtH和PtT進行橫向滲透攻擊時所產生的日誌事件,以及我們可以設定哪些規則來檢測這些攻擊。

3.2 約定及假設

在本文重點關注的橫向滲透攻擊場景中,攻擊者使用了某個管理員賬戶(如ADMIN),從其他工作站(而不是ADMIN所屬的ADMIN-WS工作站)開始橫向滲透。所使用的規則可以稍微調整,以檢測其他攻擊場景(如使用服務賬戶或者其他特權賬戶進行攻擊)。

在本文的案例中,我們有幾個假設條件,如:

1、我們可以通過查詢活動目錄識別域管賬戶(命令為:net group “Domain Admins” /domain);

2、ADMIN屬於管理員組,熟悉環境的攻擊者可以挑選其他合適的命名約定;

3、管理員工作站可以通過以下方式識別:

(1)通過工作站的主機名識別。比如通過域中維護的OU(Organizational Unit,組織單元)或主機列表,或者通過命名約定(如admin-ws-1、admin-ws-2等)加以識別。

(2)通過IP地址識別。比如這些工作站具有專用的(V)LAN地址,或這些工作站為跳轉服務器,管理員在連接到其他系統前必須登錄這些工作站。

4、ADMIN-WS為ADMIN所屬的工作站或跳轉服務器。

3.3 檢測NTLM橫向滲透攻擊(PtH)

3.3.1 日誌中的相關事件

使用NTLM憑證時,本地以及域控(如果使用的是域用戶的話)上生成的所有日誌條目如圖2所示。詳細的日誌事件可參考6.1節內容。

如何檢測Windows中的橫向滲透攻擊

圖2. 與NTLM憑證有關的事件

被攻陷的工作站(infected-ws)中會生成4648事件:“試圖使用顯式憑據登錄(A logon was attempted usingexplicit credentials)”。

所生成的日誌事件與攻擊者的具體操作有關。在這種場景中,攻擊者已經事先將NT哈希注入到目標主機中,之後通過“psexec.exe \\Target cmd.exe”命令,打開目標主機上的命令提示符。讀者可以參考附錄C查看更多細節。

被攻陷的工作站的日誌對安全取證來說非常有用,但對主動檢測PtH攻擊來說用處不大。在這種場景中,我們可以從日誌中得知橫向滲透攻擊的目標主機(clean-ws)。

域控上的日誌中會生成兩個4776事件:“域控試圖驗證某個用戶憑證的有效性(The domain controller attempted to validate the credentials for an account)”。

第一個4776事件與域控對目標主機(clean-ws$)的驗證過程有關。這個事件對檢測PtH來說用處不大。

第二個4776事件表明,域控正在驗證某個賬戶(my-admin)的有效性,此時該賬戶正在訪問目標工作站(clean-ws$)。這個事件可以用作檢測橫向滲透攻擊是否存在的指示器,也是監控整個環境的關鍵要素。

目標主機(clean-ws)的日誌中會記錄4624事件:“成功登錄帳戶(An account was successfully logged on)”。

這個事件表明,目標賬戶(my-admin)已經成功登錄到目標工作站(clean-ws)。這個事件也可以用來檢測橫向滲透攻擊,但我們需要收集所有工作站上的所有特定日誌。如果工作站或服務器的數量不多,這個事件還是能發揮作用的。

無論如何,該事件與登錄失敗事件(4625事件)對於安全取證來說非常有用,因為我們可以通過這些事件瞭解登錄的類型(本例中為網絡登錄,Network logon),以及攻擊者從哪臺主機(本例中為infected-ws)發起連接。

目標主機的日誌中會記錄4634/4647事件:“賬戶被註銷/用戶啟動註銷過程(An account was/initiated logged off)”。

這個事件表明攻擊者的註銷登錄動作。對於安全取證來說,這個事件非常有用,安全人員可以結合登錄ID值、4624事件以及這個事件,檢測攻擊行動的會話全流程。

3.3.2 通用檢測方法

這部分的內容是介紹我們在檢測NTLM型橫向滲透攻擊時,需要在各個主機中收集的事件,以及所需要關心的具體值。正如上文所述,我們需要重點關注域控(DC)上的4776事件,其他關鍵系統中的4624(登錄成功)以及4625(登錄失敗)事件也值得關注。

如何檢測Windows中的橫向滲透攻擊

注意:不要忽視工作站事件日誌的重要性,特別是與敏感賬戶或者特權賬戶有關的那些事件日誌。

3.4 檢測Kerberos橫向滲透攻擊(PtT)

3.4.1 日誌中的相關事件

在Kerberos認證過程中,本地主機以及域控(如果使用的是域用戶的話)上生成的所有日誌條目如圖3所示,詳細的事件信息可以參考6.2節內容。

與PtH攻擊不同,PtT攻擊場景中並沒有生成4648事件。

域控的日誌中會記錄4768事件,即:Kerberos身份驗證票證請求(A Kerberos authentication ticket (TGT) was requested)事件。

如何檢測Windows中的橫向滲透攻擊

圖3. 與NTLM憑證使用有關的事件

攻擊者向域控申請Kerberos TGT票據時就會生成4768事件。在PtT攻擊中,我們可能不會在日誌中找到這個事件,因為攻擊者在這之前已經竊取了TGT票據,不需要向Kerberos分發中心或者域控申請新的TGT票據,只需要利用已竊取的票據即可完成PtH攻擊。

域控的日誌中會記錄4769事件,即:Kerberos 服務票證請求(A Kerberos service ticket was requested)事件。

攻擊者請求訪問目標系統或資源時(本例中為clean-ws$)會生成該事件。

這個事件可以用作檢測橫向滲透攻擊是否存在的指示器,也是在整個環境中需要監控的主要事件。

目標主機(clean-ws)的日誌中會記錄4624事件,即:成功登錄帳戶(An account was successfully logged on)事件。

這個事件表明某個賬戶(my-admin)已成功登錄到目標主機(clean-ws)。我們有可能利用這個事件主動檢測橫向滲透攻擊,但前提是需要收集所有工作站上的相關日誌。如果工作站或服務器的數量不多,這個事件也能夠發揮作用。

無論如何,這個事件和登錄失敗(4625)事件對安全取證來說非常有用,因為它提供了具體的登錄類型(本例中為網絡登錄)以及發起登錄連接的來源主機(本例中為infected-ws)。

4634/4647事件的含義分別為:帳戶被註銷/用戶啟動註銷過程。

這兩個事件與攻擊者的註銷過程有關。安全取證工作中,可以利用這兩個事件,結合4624事件中的登錄ID值,檢測攻擊行動的會話全流程。

3.4.2 通用檢測方法

這部分的內容是介紹我們在檢測PtT型橫向滲透攻擊時,需要在各個主機中收集的事件,以及需要關心的具體值。

正如上文所述,我們需要重點關注域控(DC)上的4769以及4768事件。需要注意的是,這一次我們只能檢查其中的IP地址信息,因為Kerberos事件中並沒有提供具體的主機名。在啟用DHCP的環境中,這個限制條件給我們帶來了不小的挑戰,如果DHCP租用時間較短,我們面臨的將會是一個動態變化的網絡環境。

關鍵系統中的4624事件以及4625(登錄失敗)事件也值得我們關注。

如何檢測Windows中的橫向滲透攻擊

我們使用這種方法可能會檢測出假陽性結果:

比如某個管理員(例如help desk)正在打開遠程主機上的應用(例如,在遠程訪問中,通過cmd.exe運行”runas administrator”命令),這種情況下有可能會生成4768事件。

3.4.3 檢測黃金票據(Golden Ticket)

我們發表了一份白皮書,介紹了Kerberos黃金票據的相關知識,讀者可以查閱參考資料瞭解更多細節。

3.5 需要監控的主要賬戶

本文中描述的監控規則主要是基於域管賬戶,我們也可以監控其他重要賬戶,以快速檢測橫向滲透攻擊是否存在,這些賬戶包括:

1、服務賬戶(比如,備份賬戶);

2、很少使用的賬戶;

3、應急使用的賬戶;

4、關鍵業務賬戶。

3.6 需要注意的其他事件

我們建議大家可以參考NSA發表的一份參考資料,其中介紹了檢測潛在攻擊時可能有用的其他一些事件。這個參考資料不單單針對橫向滲透攻擊,同時也覆蓋了許多日誌事件以及攻擊類型。

四、附錄A-相關定義


哈希傳遞攻擊(Pass-the-hash,PtH):PtH是一種黑客技術,攻擊者可以利用該技術,使用事先竊取的用戶密碼的NTLM以及LM哈希,完成對遠程服務器或者服務的身份驗證,而常規的驗證流程中需要輸入明文密碼。

票據傳遞攻擊(Pass-the-ticket,PtT):與PtH情況類似,但PtT使用的是Kerberos票據,而不是NT哈希。

憑證(Credential):可以用來證實某人身份的標識以及相關密鑰。根據此定義,憑證的類型不僅僅侷限於明文密碼,同樣也包括Windows的NTLM哈希或者Kerberos票據(與實際使用的Windows認證協議有關)。在某些情況下,Windows會緩存憑證信息,以提供單點登錄功能。這篇文章主要關注的是Kerberos票據憑證(Ticket-Granting-Tickets,TGT)。讀者可以閱讀參考資料[1],瞭解與Windows憑證類型(表4)以及憑證緩存有關的更多細節信息。

TGT以及ST Kerberos票據:Ticket-Granting-Tickets(TGT)以及Service Tickets(ST,服務票據)是Kerberos協議的一部分,讀者可以閱讀參考資料[2],瞭解Kerberos以及相關的票據細節信息。

KDC:密鑰分發中心(Key distribution Center)。

五、附錄B-參考資料


[1] 如何防禦哈希傳遞攻擊以及其他憑證竊取技術

[2] Kerberos認證技術細節

[3] 遭受攻擊後如何恢復活動目錄

[4] 憑證保護及管理

[5] Windows事件說明

[6] Windows 7以及2008中的安全事件

[7] 如何發現攻擊活動

[8] 如何防禦Kerberos黃金票據攻擊

六、附錄C-具體事件說明


這部分內容主要是介紹Windows日誌以及log2timeline日誌中與PtH以及PtT攻擊有關的具體事件,具體場景為:

1、被攻陷的工作站:USER-WS(IP地址為192.168.89.101)

2、目標用戶:my-admin

3、目標主機:admin-ws(IP地址為192.168.89.102)

4、域名:corp.pass.thehash

6.1 網絡登錄(Network Logon)以及PtH事件

如何檢測Windows中的橫向滲透攻擊

如何檢測Windows中的橫向滲透攻擊

如何檢測Windows中的橫向滲透攻擊

如何檢測Windows中的橫向滲透攻擊

如何檢測Windows中的橫向滲透攻擊

如何檢測Windows中的橫向滲透攻擊

如何檢測Windows中的橫向滲透攻擊

如何檢測Windows中的橫向滲透攻擊

如何檢測Windows中的橫向滲透攻擊

如何檢測Windows中的橫向滲透攻擊

如何檢測Windows中的橫向滲透攻擊

相關推薦

推薦中...