針對哈薩克斯坦的基于多階段 PowerShell 的攻擊
時間線
11 月 10 日,我們發現了一次多階段 PowerShell 攻擊,該攻擊使用冒充哈薩克斯坦衛生部的文件誘餌,目標是哈薩克斯坦。
11 月 8 日,一個用戶名為 DangerSklif(可能是指莫斯科的急診醫院)的攻擊者創建了一個 GitHub 帳戶(目前賬號不存在)并上傳了攻擊的第一部分。
概述
攻擊者在偽裝成來自“哈薩克斯坦共和國衛生部”郵件,郵件中含有名為“Уведомление.rar”(“Notice.rar”)的 RAR壓縮包。文件中包含一個同名的 lnk 文件,和偽裝成來自“哈薩克斯坦共和國衛生部”的 PDF 文檔。打開 lnk 文件后,將打開一個 PDF 文件以迷惑受害者,同時在后臺執行此攻擊的多個階段。
pdf文件是對哈薩克斯坦國家衛生局發布的 Covid 19 政策的修訂。

攻擊過程
下圖展示了這次攻擊的全過程。
首先執行 lnk 文件,該文件調用 PowerShell 以通過運行多個Powershell腳本來操作注冊表項和執行多種技術,例如權限提升和持久性。

這次攻擊的所有階段都托管在一個DangerSklif的用戶于 11 月 8 日創建名為GoogleUpdate 的Github 存儲庫中 。該DangerSklif 用戶注冊于11月1日。可以看出這是一次針對性的攻擊。

分析
嵌入的 lnk 文件被混淆,去混淆后我們可以看到它使用 cmd.exe 調用 PowerShell 從 Github 帳戶(lib7.ps1)下載并執行攻擊的第一階段。

該 lib7.ps1 下載來自同一個帳戶Github上,并將其存儲在PDF文件目錄中(其實可以下載在更隱蔽的目錄中)。在下一步中,它會打開PDF 以迷惑目標,同時它會在后臺執行其余過程,包括獲取操作系統版本并根據操作系統版本下載下一階段。

下載操作使用的是.net中的WebClient,比較常規的一種下載方法。獲取操作系統版本的為win32_OperatingSystem.

如果操作系統版本為 7 或 8,則下載并執行 lib30.ps1 ,如果操作系統版本為 10,則下載并執行 lib207.ps1。檢查操作系統的版本主要是為了進行提權。
這些提權技術在TA505在Srv Helper 的活動中使用過。
運行的 PowerShell 腳本包含一個 Base64 編碼,解碼后,在 CBC 模式下由三重 DES (3DES) 算法解密:

腳本的第一部分定義了一個名為 heller 的函數,作用是提升系統權限并允許繞過 UAC,在這里一共使用了2種技術:
技術 1 — 在任務計劃程序中使用 SilentCleanup 任務:
SilentCleanup 可以由用戶啟動,在這種情況下,它會以提升的權限運行。可執行文件的路徑是使用 %windir% 環境變量在其屬性中指定的,例如,可以重置其值以觸發 PowerShell 腳本的啟動。在這種情況下,運行任務將導致 PowerShell 腳本以管理員權限啟動,繞過 UAC。
該技術被黑客用于針對 Windows 8 和 Windows 10 系統。
該技術背后的代碼與Metasploit 框架的模塊實現相同。

技術 2 — 使用 sysprep.exe 系統實用程序和 DLL 劫持加載:
首先,創建一個幫助程序腳本以重新啟動目錄 C:\Windows\Temp 中的 PowerShell 腳本。然后創建一個包含輔助 DLL CRYPTBASE.dll(PowerShell 腳本包含 x86 和 x64 版本的庫)的 CAB 存檔。
然后使用 wusa.exe 系統實用程序將此存檔解壓縮到文件夾 C:\Windows\System32\Sysprep 中。
接下來,sysprep.exe 系統實用程序啟動,加載先前解壓的 DLL,然后 DLL 繼續執行幫助腳本。然后PowerShell 腳本將以管理員權限重新啟動,繞過 UAC。

http://www.labofapenetrationtester.com/2015/09/bypassing-uac-with-powershell.htmlPOC:https://github.com/samratashok/nishang/blob/master/Escalation/Invoke-PsUACme.ps1
在這次的攻擊中,攻擊者使用使用任務計劃程序中的 SilentCleanup任務繞過 Windows 10 中的 UAC:使用Lib207.ps1 繞過 Windows 10 中的 UAC。用于執行繞過的 PowerShell 命令使用 0x58 密鑰進行 XOR 加密。

解密命令后,我們可以看到UAC繞過的過程,包括在Task Scheduler中創建一個SilentCleanup任務,調用PowerShell以更高的權限執行創建的vbs文件。

在 Windows 7 和 8 中使用 sysprep.exe 系統實用程序和 DLL 旁加載繞過 UAC:Lib30.ps1 用于執行此繞過。與 lib207.ps1 類似,此 PowerShell 腳本也是 XOR 加密的,但使用不同的密鑰 (0x02)。

該過程首先在“ Windows/Temp ”目錄中創建一個批處理文件 ( cmd.bat ) 。在下一步中,將創建一個包含 DLL(Windows 7 為 CRYPTBASE.dll 或 Windows 8 為 shcore.dll)的 cab 存檔文件。然后使用 wusa.exe 將此 cab 文件解壓縮到 C:\Windows\System32\Sysprep 目錄中.
最后,sysprep.exe 系統實用程序啟動哪一側加載 Windows 7 的 CRYPTBASE.dll 或 Windows 8 的 shcore.dll。此 DLL 執行創建的cmd.bat文件,從而導致以高權限執行它,用來繞過UAC。

繞過 UAC 后,在所有操作系統版本中,都會下載并執行下一階段的有效負載 ( lib106.ps1 )。
此階段執行以下操作:
在ProgramFiles 目錄中創建一個 vbs 文件 (cu.vbs), 并通過將此 vbs 文件添加到HKLM\Software\Microsoft\Windows\CurrentVersion\Run 注冊表項來使這種多階段攻擊持久化 。
使用“Attrib.exe +h”命令隱藏 vbs 文件。
使用 PowerShell下載并執行最后階段 ( updater.ps1 )。

最后一個階段 ( updater.ps1 ) 是在 PowerShell 中執行 Cobalt Strike的payload。這個 PowerShell 腳本是 Cobalt Strike 的 PowerShell payload的免殺。

雖然經過免殺處理,但還是明顯看出來是coabltstrike的powershell payload。采用 base64 編碼并使用 35 密鑰進行 XOR 加密。在解碼和解密 ShellCode 后,它使用 VirtualAlloc 將其分配到內存中,最后通過調用 Invoke 函數執行它。
比較常規的一次攻擊,分享一下