AsyncRAT藉AI熱潮散布 遠端存取木馬威脅遽增

FortiGuard Labs近期觀察到一波惡意活動,攻擊者散布偽裝成AI相關文件的惡意檔案,文件標題包括「AI-Ready PostgreSQL 18: Building Intelligent Data Systems」與「A Guide for Thinking Marketers in the Age of AI」等,藉此誘使受害者下載並開啟惡意內容。

著AI的應用持續成長,威脅行為者也迅速利用這股趨勢展開攻擊。FortiGuard Labs近期觀察到一波惡意活動,攻擊者散布偽裝成AI相關文件的惡意檔案,文件標題包括「AI-Ready PostgreSQL 18: Building Intelligent Data Systems」與「A Guide for Thinking Marketers in the Age of AI」等,藉此誘使受害者下載並開啟惡意內容。

圖1攻擊鏈。
圖1攻擊鏈。

這些誘餌文件目的在鎖定主動尋找AI相關學習資源的使用者。這些檔案背後的攻擊鏈相當複雜,攻擊者利用多階段腳本逐步執行惡意行為,藉此隱藏活動痕跡,最終部署以AutoHotkey為基礎的載入器,透過反射式注入(Reflective Injection)技術,將.NET遠端存取木馬(RAT)和AsyncRAT載入記憶體中,以建立命令與控制(C2)通訊並執行後續惡意操作(圖1)。值得注意的是,多個中間階段腳本大量使用簡體中文變數名稱,且程式碼呈現高度結構化的撰寫風格,顯示威脅行為者在開發過程中很可能借助了AI工具的協助。本文將詳細解析整個感染鏈的各個階段,深入剖析其運作方式與技術細節。

初始ZIP壓縮檔與LNK捷徑檔

惡意程式被封裝於偽裝成技術學習資源的壓縮檔中,檔案名稱為「Agentic Coding with Claude Code, The Everyday Developer's Guide to Agentic Coding with Claude Code.7z」。解壓縮後,使用者能夠看到的內容有一個捷徑檔案,但實際上壓縮檔內還包含另外兩個被設定為隱藏屬性的檔案,分別為3th.pdf與4th.pdf。整個壓縮檔經過刻意設計,以降低受害者的警覺心。它並非直接散布可執行檔,而是透過一條多階段入侵鏈來執行攻擊。在這條攻擊鏈中,每個階段的主要目的都是揭露並啟動下一個階段,使惡意活動能夠逐步展開,同時降低被偵測與分析的風險。

當受害者開啟捷徑檔,就會開始執行一連串經過混淆的指令,並利用Windows元件cmd.exe、more、type與findstr來完成攻擊流程。3th.pdf並非一般文件,而是一個資料容器,捷徑檔會逐行讀取該檔案內容,從中擷取特定範圍的資料列(第26004、26005、26006與26007行),並僅執行這些被擷取出的內容。攻擊者並未將惡意程式直接放置於單一且顯而易見的腳本或可執行檔中,而將檔案設計成具備多個區段的資料,攻擊鏈中的每個階段只知道如何從特定位置擷取並還原下一階段的內容。這種分階段載入設計不僅提高了分析難度,也有助於降低被安全產品偵測的機率。

圖2在3.pdf檔案中的目標腳本內容。
圖2在3.pdf檔案中的目標腳本內容。

內嵌的PowerShell腳本

從3th.pdf中擷取出的第一段內容是一個階段性腳本,其功能是再次讀取3th.pdf,但這次會跳過檔案中更大量的內容,從另一個特定的範圍取資料,並將結果直接傳遞給PowerShell執行。在此階段中,PowerShell以多個常見的攻擊者參數啟動。如圖2所示,其中-windowstyle hidden用於隱藏PowerShell主控台視窗,避免使用者察覺任何異常活動,-NoProfile(-nop)則禁止載入使用者的PowerShell設定檔,以避免既有設定影響腳本執行,而-ExecutionPolicy Bypass(-ep Bypass)是用來繞過系統的PowerShell執行原則限制,使未經授權的腳本能夠順利執行。

該PowerShell腳本內含加解密功能。它會在3th.pdf中搜尋位於標記m1與m2之間的資料,也就是介於—–BEGIN PGP PRIVATE KEY BLOCK—–與—–END PGP PRIVATE KEY BLOCK—–之間的內容。接著,腳本會過濾掉標頭的資料列,將剩餘內容串接後,再進行Base64解碼。取得資料後,腳本使用固定密碼「1」,透過PBKDF2產生加密金鑰,並使用AES-CBC演算法對目標資料做解密。解密後會得到另一個PowerShell腳本,並儲存至%APPDATA%目錄下,檔名格式為「Cache_{GUID}.ps1」,如圖3~5所示。腳本寫入磁碟後會立即被執行,進一步推進後續感染流程。此階段顯示攻擊者不僅將惡意程式分散儲存於看似無害的PDF檔案中,還額外利用加密機制保護真正的惡意內容。

圖3從3.pdf擷取特定資料。
圖3從3.pdf擷取特定資料。
圖4 3.pdf內的加密資料。
圖4 3.pdf內的加密資料。

釋出的PowerShell腳本

圖5 將解密資料儲存為Cache_{GUID}.ps1。
圖5 將解密資料儲存為Cache_{GUID}.ps1。

當PowerShell腳本開始執行時,3th.pdf內嵌多個彼此獨立的資料區段,作為後續攻擊流程使用。腳本首先在%LOCALAPPDATA%PackagesMicrosoft.WindowsSoundDiagnostics下建立工作目錄。這個路徑名稱經過刻意設計,看起來像是與Windows音效或系統診斷相關的合法元件,藉此降低受害者的警覺。接著,腳本會搜尋3th.pdf中由=== SoundEffects X ===所標記的資料區段,將這些資料串接起來,移除所有非十六進位字元後,再把還原出的內容寫入磁碟,儲存並命名為「Subtitles」,如圖6所示。

圖6 擷取資料並存成「Subtitles」。
圖6 擷取資料並存成「Subtitles」。

接下來,腳本會對3th.pdf執行另外兩組資料擷取。它會搜尋名為Name與KasKos的欄位,擷取其中儲存的內容後,對其資料進行Base64解碼。解碼完成後,腳本會使用一個自訂的XOR解密程序進一步處理資料,所使用的金鑰字串為Realtek2025,經過解密後還原出的內容,會被寫入先前建立的暫存目錄中,並分別儲存為「RealtekAudioService64.ps1」與「RealtekAudioService64.bat」。

圖7 持久化設定。
圖7 持久化設定。

完成擷取之後,該腳本會透過建立排程工作來實現持久化,如圖7所示。攻擊者註冊了一個名為「CheckRealtekAudioVersion」的排程工作,將其偽裝成Realtek音效服務相關元件,並設定透過cmd.exe執行先前釋出的RealtekAudioService64.bat。此排程工作確保批次檔能夠在感染後不久執行,並於每次使用者登入系統時再次啟動,藉此維持惡意程式的持續運作能力。完成設定後,腳本最後會從4th.pdf中擷取並開啟一份無害的誘餌文件(圖8)。這份文件的目的在於轉移受害者注意力,營造正常文件被成功開啟的假象,而實際上的惡意行為則在背景持續執行。

圖8 誘餌PDF文件。
圖8 誘餌PDF文件。

腳本的撰寫風格與內嵌註解顯示,其開發過程很可能借助了生成式AI工具的協助。例如,在原本以英文為主的腳本中,研究人員發現了簡體中文註解(#静默任务创建脚本 – 无输出版本)以及帶有表情符號的註解(# [表情符號]REMOVE EVERYTHING NOT HEX),這些特徵顯示攻擊者的母語環境可能在AI產生的程式碼中留下了痕跡,而相關內容在最終部署前並未被完全清理。

釋出的腳本:RealtekAudioService64

RealtekAudioService64.bat扮演的是啟動器角色。腳本首先檢查自身是否以hidden參數啟動。若未偵測到該參數,它會立即透過PowerShell重新啟動自身,並使用-WindowStyle Hidden參數隱藏視窗,以避免任何可見的命令列視窗出現在使用者畫面上。當腳本進入隱藏執行狀態後,並未直接引用powershell.exe字串,而是將該字串拆分成三個不同變數,於執行時重新組合。這是一種簡單但有效的混淆技術,可降低基於字串特徵的靜態偵測機制發現惡意行為的機率。

接著,腳本會在暫存目錄中建立一個帶有時間戳記的記錄檔,其檔名採用類似版本編號的格式,例如ver0x0000000000000003_,此類命名方式刻意模仿系統診斷或軟體更新元件產生的記錄檔,以降低遭到注意的風險。完成記錄檔建立後,腳本會啟動RealtekAudioService64.ps1,並搭配參數確保後續PowerShell腳本在不受干擾且不顯示任何視窗的情況下執行。最後,在腳本成功啟動後,批次檔會刪除先前建立的記錄檔,以清除執行痕跡。

圖9 PowerShell腳本中的變數定義。
圖9 PowerShell腳本中的變數定義。

RealtekAudioService64.ps1為更複雜的一個階段,其執行過程中採用了多層混淆技術。最顯著的特徵是,所有PowerShell內建Cmdlet,例如Test-Path、Join-Path、New-Item與Out-Null,都在執行階段透過字元陣列動態重建,並完全以簡體中文變數名稱儲存,如圖9所示,例如$测试路径、$连接路径、$新建项目與$输出空值。這種刻意使用中文識別符的方式具有雙重目的:一方面使混淆腳本難以閱讀,另一方面也能繞過依賴英文字串的偵測規則。此外,目錄路徑與檔案名稱也被隱藏為Base64編碼字串,確保敏感指標不會以明文形式出現在腳本內容中。

它先開啟「Subtitles」檔案,將其視為GZip資料並進行解壓縮(圖10)。每筆記錄均包含相對路徑、檔案類型欄位,以及針對檔案項目所包含的長度資訊與原始資料內容。在寫入檔案之前,RealtekAudioService64.ps1會對資料執行轉換運算,還原後的目錄結構會被寫入%LOCALAPPDATA%PackagesMicrosoft.WindowsSoundDiagnostics路徑下,並在其中存放後續所需的元件,包括AutoHotkey執行檔、AHK腳本以及批次檔。

圖10 解析並解壓縮Subtitles。
圖10 解析並解壓縮Subtitles。
圖11 Subtitles資料內容。
圖11 Subtitles資料內容。

完成檔案解析後,腳本會建立兩個排程工作,其中一個指向ConfigureSoundSettings子目錄中的「RealtekAudioEnhancements64.exe」,另一個則指向Cache目錄中的「RtkNGUI64.exe」,分別以「RealtekAudioEnhancements64」與「CheckRealtekAudioVersion」作為排程工作名稱進行註冊。這兩個排程工作配置了多種觸發條件,包括使用者登入、系統啟動,以及在權限允許的情況下,於每日中午執行的定時觸發器。透過這些多重觸發機制,攻擊者得以在系統重新開機或使用者重新登入後持續執行惡意檔案,建立穩固的持久化能力,如圖11~12所示。

圖12 持久性設定。
圖12 持久性設定。

AutoHotkey載入器

此階段還原出的兩個執行檔並非惡意程式,其雜湊值與AutoHotkey.exe完全一致。攻擊者使用AutoHotkey作為執行元件,真正的惡意行為則存在於*.ahk腳本中。這種設計方式降低了攻擊者必須散布大量惡意程式執行檔的需求,並將更多功能邏輯轉移至腳本層。相較於傳統PE檔案,腳本內容更容易修改與變異,也更難僅透過執行檔特徵進行分類與偵測。

攻擊鏈從這裡分裂成兩個主要分支。其中一個分支由「RtkNGUI64.ahk」所驅動。該腳本會先匯入另外四個模組,接著呼叫多個函式來執行其核心功能。其中一個輔助函式會從「C:WindowsMicrosoft.NETFrameworkv4.0.30319」目錄中挑選一個合法的.NET Framework可執行檔作為宿主程序,並從AddInProcess32.exe、AppLaunch.exe及aspnet_compiler.exe等檔案中隨機選擇一個。另一個輔助函式則會逐行讀取「RtkLoggingManifest.man」檔案,從格式為System metric code = <number>的字串中擷取數值並將其轉換。這個所謂的Manifest檔案實際上是一個偽裝成數值的執行檔。在短暫延遲後,腳本會將還原出的資料以及所選擇的程式路徑,傳遞給RtkDiagService.ahk中的Execute()函式進行後續動作。

Execute()函式實作了一套完整的Process Hollowing流程。腳本會先建立一個合法的.NET程序並使其處於暫停狀態,接著解析資料並取得執行目標的內容,然後在程序中配置記憶體空間,寫入新配置的記憶體區域,最後恢復先前被暫停的程序。其API呼叫包括CreateProcess、GetThreadContext、WriteProcessMemory、VirtualAllocEx、ZwUnmapViewOfSection、SetThreadContext與ResumeThread等函式。此分支並非直接從磁碟啟動目標惡意程式,而是將其注入至合法的.NET Framework程序中執行。

圖13 RtkDiagService.ahk。
圖13 RtkDiagService.ahk。

這個腳本的特別之處在於使用源自中國神話與哲學概念的名稱。如圖13所示,惡意程式將Windows API對應到其他別名,例如「九天玄女」對應CreateProcess、「乾坤袋」對應VirtualAllocEx以及「起死回生」對應ResumeThread。此外,腳本還透過「三界六道」與「五行八卦」等名稱建立額外的命名層次與結構。這種命名風格在惡意程式開發中相當罕見,也與常見程式模板所使用的變數名稱完全不同。結合腳本中的結構模式以及高度模板化的程式碼風格來看,強烈顯示攻擊者刻意利用帶有文化色彩的語意抽象化命名方式,以降低程式碼可讀性,並可能藉此規避簡單的模式比對偵測或資安相關人員的分析。

圖14從RtkLoggingManifest.man解析出的執行檔。
圖14從RtkLoggingManifest.man解析出的執行檔。

從RtkLoggingManifest.man還原出的內容是一個.NET可執行檔。雖然該程式經過混淆處理,但仍可確認其為一個具備遠端存取木馬功能的clay_Client,如圖14所示。

第二個分支以「RealtekAudio Enhancements64.ahk」為核心,此腳本主要作為一個封裝器,負責以隱藏方式啟動RealtekAudioEnhancements64.bat。隨後,該批次檔讀取另一個檔案「RealtekAudioEnhancements64.assets」,跳過固定數量的資料列後,擷取其中一小段特定內容,並將該內容直接傳遞給PowerShell執行。

從RealtekAudioEnhancements64.assets還原出的腳本在啟動後續動作前,會嘗試排除主機防護機制,並為後續執行階段建立適當的環境。該腳本透過runas啟動具有提升權限的PowerShell程序,並呼叫Add-MpPreference,將「C:」新增至Microsoft Defender的排除路徑,同時將powershell.exe加入Defender的排除程序清單中。接著,該腳本會進一步啟動另外兩個腳本「RealtekAudioEnhancements64.ps1」與「RealtekAudioEnhancements32.ps1」。

RealtekAudioEnhancements32.ps1是一個用於修復執行環境的工具,它會檢查登錄檔中是否已停用Windows Script Host(WSH),若發現已被停用,則會將其重新啟用,並恢復.vbs檔案與wscript.exe之間的關聯設定。若登錄檔修改操作需要提升權限,該腳本還會以較高權限重新啟動自身,以完成相關設定變更。攻擊者主動確保VBS執行能力,以防受害者環境先前曾透過安全措施將VBS停用。

64位元版本的腳本則利用已修復的環境建立額外的持久化。它會寫入一份XML定義檔,以及一個名為「ResetRealtekAudioSettings64.vbs」的VBS腳本,隨後建立名為「ResetRealtekAudioSettings64」的排程工作。該排程工作透過wscript.exe以背景模式執行VBS腳本,而該腳本則會進一步啟動另一個批次檔,其內容如下:

On Error Resume Next
Set shell = CreateObject("WScript
.Shell")
localAppData = shell.ExpandEnviro
nmentStrings("%LOCALAPPDATA%")
docPath = localAppData & "Packages
Microsoft.WindowsSoundDiagnostics
Cache"
shell.Run """" & docPath & "Res
etRealtekAudioSettings64defualt.
bat""", 0, False

攻擊者透過多層持久化機制來確保惡意程式執行的穩定度。

接下來的批次檔扮演資料擷取器的角色,目標檔案為「ResetRealtekAudioSettings64.Realtek」,它會跳過約1,000行內容,擷取特定區段資料後再將其傳遞給PowerShell執行。從該檔案擷取出的程式碼包含兩個重要的物件。其一是十六進位編碼PE檔案,內容以MZ開頭並包含mscoree.dll、_CorDllMain等.NET相關匯入函式,其為32位元的.NET資料。另一個則是額外的.NET組件,該組件透過Assembly.Load以反射方式載入至記憶體中。

隨後,腳本利用Reflection尋找該載入器中的方法,並傳入兩個關鍵參數:「C:WindowsMicrosoft.NETFrameworkv4.0.30319cvtres.exe」的路徑,以及先前重建出的.NET資料。此時,PowerShell作為一種機制,用來以反射方式載入.NET載入器,而該載入器再進一步準備另一個.NET資料,使其在合法的.NET工具下執行。這整體攻擊鏈的設計為的就是盡可能利用受信任的執行環境,並將惡意行為指向記憶體中的資料,以降低被偵測與分析的機率。

最終部署:遠端存取木馬程式

從「ResetRealtekAudioSettings64.Realtek」中最終還原出的.NET檔案是一個模組化遠端存取木馬。該程式經過混淆處理,並對字串進行編碼,以增加分析難度。程式執行後首先會建立名為IDG5FUAM3PSONBSInGIGSWSD的Mutex,用於防止惡意程式在同一系統上重複執行。

休眠一段時間後,該程式會解碼C2伺服器清單,包括shampobiskworld.nl、shampoolagtto.com以及shamppocosmaticso.com。當成功與伺服器建立連線後,它會蒐集受害主機的基本資訊並上傳至遠端伺服器,其中包括處理器資訊、目前登入使用者名稱、作業系統版本與組建編號、CPU資訊、透過查詢rootSecurityCenter2所取得的安全防護產品資訊,以及格式為yyyy-MM-dd HH:mm:ss的系統時間。

函式作為命令處理核心。它會接收來自C2伺服器的指令,對其進行處理並根據其中的命令值判斷並執行對應的功能。

伺服器指令包含以下幾種類別:

1. 系統控制:用於管理程式的狀態、持久化機制,以及其在受害主機上的存在狀態,相關指令如表1所示。

2. 監控與遠端監視:使攻擊者能夠即時觀察受害者的環境,並具備互動式遠端操作能力,如表2所示。

3. 進階執行與規避技術:利用的模組化特性來規避傳統端點偵測,如表3所示。

與C2伺服器通訊的部分,惡意程式會先將待傳輸的資料進行序列化處理,接著以AES/ECB模式進行加密,並透過MD5衍生其加密金鑰。來自C2伺服器的資料則使用相同的固定金鑰機制進行解密。在傳送資料時,惡意程式會於資料前方加入自訂的標頭再進行傳輸,這些特徵顯示此惡意程式是一套具備完整能力的RAT。

表1 系統控制之相關指令及行為與影響
指令 行為與影響
ClientShutdown 終止開關:正常關閉通訊Socket,並立即結束程序執行
ClientDelete 自我刪除:執行解除安裝程序,清除磁碟與登錄檔中的惡 意程式痕跡,以阻礙鑑識分析
ClientUpdate 遠端更新:將接收到的新負載寫入%TEMP%目錄並以隱藏 方式執行,必要時還會觸發舊版本的自我刪除機制
Ping Heartbeat:向C2回報受感染節點仍處於運作狀態,並可接 受後續指令
表2 監控與遠端監視之相關指令及行為與影響
指令 行為與影響
RemoteDesktopOpen 偵察:透過Screen.AllScreens.Length查詢系統顯示器資 訊,並回傳螢幕數量與解析度等資訊
RemoteDesktopSend 螢幕資料擷取:擷取螢幕畫面,並透過指定的JPEG參數進 行縮放與壓縮,以節省頻寬使用量,最後將影像資料傳送 回C2
mousemove 輸入模擬:用於解析滑鼠座標
表3 進階執行與規避技術之相關指令及行為與影響
指令 行為與影響
Reflection 無檔案組件載入:利用Assembly.Load將.NET DLL的位元 組直接載入記憶體並呼叫其EntryPoint執行。由於負載從未 寫入實體磁碟,因此能有效規避傳統靜態檔案掃描機制
RunPE Process Hollowing:將惡意程式碼注入合法且受信任的程 序中(例如explorer.exe或svchost.exe),使惡意網路連線 與資源使用行為隱藏在受信任的Windows程序之下

從「RtkLoggingManifest.man」還原出的另一個.NET檔案則為AsyncRAT,其設定的C2位址為107[.]172[.]10[.]190。

結語

此次攻擊是一個完整且成熟的多階段入侵,設計用於隱蔽式負載投遞、模組化執行以及長期遠端存取,最終部署一個功能豐富的遠端存取木馬。值得注意的是,多個中間階段腳本的特徵顯示其開發過程可能使用工具的協助,腳本中大量使用簡體中文變數名稱,再加上其中遺留未經清理的簡體中文及表情符號註解,這些痕跡反映出攻擊者可能利用生成式AI工具來加速程式碼實作與開發流程。使用者在處理來自不可信來源的檔案、壓縮檔以及文件時應該保持高度警覺。此外,定期檢查啟動項目、排程工作與登錄檔是否存在未經授權的修改,以及監控異常的PowerShell執行行為和非預期的對外網路連線,都是重要且必要的防護措施。