受影響平台:Microsoft Windows
受影響群體:Microsoft Windows
影響範圍:收集受害電腦的資訊
嚴重等級:高風險
2024 年 9 月,FortiGuard Labs 觀察到一場攻擊事件,攻擊者利用惡名昭彰的 SmokeLoader 惡意軟體針對台灣的企業,其目標遍及製造業、醫療業、資訊技術等多個領域。SmokeLoader 以其經過複雜混淆的程式碼和先進的規避偵測技術聞名,除此之外其模組化的設計更增加了攻擊內容的多樣性。雖然 SmokeLoader 過去常用於下載其他惡意軟體,但在此次攻擊中,它從 C2 伺服器下載複數個外掛來直接進行攻擊。
釣魚郵件
圖 2 是用於這次攻擊中的其中一種釣魚郵件。寄件者宣稱附件中的惡意檔案是一份報價單,並附上配合事項以增添信件的真實性。值得注意的是這封電子郵件雖然為了增加說服力而使用了繁體中文和符合當地習慣的用語,但攻擊者並沒有配合收件單位客製郵件內容,甚至連寄給不同公司時都沒有修改收件單位(檔案名稱中塗黑的部分),而這也成了這封郵件的破綻之一。另一個不自然的地方則是簽名檔的字體和顏色。姓名及電話的字體與正文不同,但也跟同為簽名檔一部份的電子信箱不同,加上未經客製的內文,說明攻擊者可能直接複製其他信件的內容來製作釣魚郵件。這個現象同時也存在於這次攻擊的其他攻擊鏈。
無論經由哪條攻擊鏈,在第三階段都會經由一個 VBS 檔案啟動惡意載入器 AndeLoader,而這些攻擊最終都會執行同一個SmokeLoader的變種。
CVE 2017-0199
CVE-2017-0199 是 Microsoft Office 中的漏洞,藉由嵌入 OLE2 的連結物件進行攻擊。當受害者開啟經過設計的檔案時,惡意文件會自動被下載並執行。該釣魚郵件中所使用的附件將包含惡意連結的物件的工作表設定為隱藏狀態,並用密碼保護Excel 活頁簿及工作表。
CVE 2017-11882
CVE-2017-11882 是 Microsoft Office 方程式編輯器中的一個遠端執行程式碼(RCE)漏洞。該漏洞的 shellcode 包含解密演算法與加密數據。在解密後,shellcode 重建所需的 API,並透過 URLDownloadToFile 函式下載下一階段所需的 VBS 檔。
HTA
攻擊鏈中用到的HTA檔包含了經過多次URL編碼的VBS程式碼。
如圖6所示,解碼後的VBS腳本依然經過一定程度的混淆。攻擊者在符號和變數之間插入了大量空格,並使用冗長的變數名稱來妨礙分析。這段程式碼最後會執行PowerShell腳本來下載AndeLoader的VBS檔案。
AndeLoader
- VBS
VBS檔包含了大量無關、雜亂的程式碼,其中真正惡意的程式碼只用來執行經過混淆的PowerShell腳本。
圖9是解完混淆的PowerShell腳本。該腳本下載了一張運用了隱寫術的圖片。攻擊者在圖檔末端插入了經Base64編碼的載入器資料,而PowerShell腳本利用<>和<>來找出這段被插入的資料,將其解碼成載入器後呼叫dnlib.IO.Home.VAI方法,該方法需要六個參數:SmokeLoader數據的下載連結、潛伏設定、檔案路徑、檔案名稱、注入目標以及一個未使用的參數。這次所使用的AndeLoader並未使用潛伏功能,其第二、三、四個參數為destivado,意思是“disabled”。
- 載入器
與其他變種相比,此次攻擊活動中的載入器相對簡單。它的程式碼未經混淆,並且只有兩個功能:潛伏和注入惡意程式。
Class.Start 方法將目前路徑下的所有VBS檔案合併為一個檔案,檔案的路徑和名稱分別由 Tools.Ande 的第三和第四個參數指定。檔案路徑會被寫入到 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 登錄機碼中的 Path,以便在系統啟動時自動執行該VBS檔案。如果啟用此功能,將使得AndeLoader 用的VBS檔持續潛伏在受害電腦中。
在處理注入惡意程式的部分,AndeLoader下載Tools.Ande 第一個參數所指定的檔案,並對資料進行解混淆以獲得 SmokeLoader,並將其注入到 RegAsm.exe 中。以下是注入的過程:
- 建立目標進程,並將 SmokeLoader 寫入新的記憶體區域。
- 修改其執行緒中的 0xB0 偏移值,該值表示進程的進入點,將其更改為 SmokeLoader 的進入點,以便在執行緒恢復時執行 SmokeLoader。
SmokeLoader
下圖是 SmokeLoader 的執行流程。本節將重點介紹從C2 伺服器下載的外掛。
如圖14所示,即使伺服器回應為 404 Not Found,但封包中仍包含了有效的攻擊資料。
當中包含了外掛的設定值和加密過的資料:
|:|keylog_rules=*login*,*sign*,*signin*,*log*,*access*,*payment*,*checkout*,*payment*|:||:|fgclearcookies|:||:|plugin_size=339146 {encrypted plugins} |
此次攻擊中從C2伺服器收到的內容包含了外掛 4、5(fgclearcookies)、8 和 9(keylog_rules)的相關設定,這將在稍後介紹。加密過的資料中包含了九個外掛,總共有三個獨立外掛以及三個分別有 32 位元和 64 位元版本的外掛。SmokeLoader會根據外掛的架構,使用迴圈將這些外掛依序注入到 32位元或64位元的explorer.exe 中。首先SmokeLoader會建立一個 explorer.exe 進程,並寫入外掛的加密資料、解密演算法以及用來解密的 shellcode。隨後將 explorer.exe 進程入口點開頭的程式碼修改成跳到shellcode的指令,並用 ResumeThread來執行外掛。
以下是外掛列表:
外掛 1 | 32-bits | 竊取登入資訊、FTP 帳密、瀏覽器的 cookies、自動填入表單資料、電子郵件軟體及 FTP 客戶端的資料。 |
外掛 2 | 64-bits | 竊取來自 Firefox 和 Thunderbird 的登入資訊。使用與外掛 1相同的程式碼。 |
外掛 3 | 32-bits | 從郵件軟體中讀取資料。 |
外掛 4 | 32-bits | 將程式碼注入瀏覽器以竊取資料 |
外掛 5 | 64-bits | 外掛 4 的 64 位元版本 |
外掛 6 | 32-bits | 將程式碼注入郵件軟體、瀏覽器和 FTP 客戶端以竊取資料 |
外掛 7 | 64-bits | 外掛6 的 64 位元版本 |
外掛 8 | 32-bits | 將程式碼注入explorer.exe或C2伺服器指定的進程以竊取資料 |
外掛 9 | 64-bits | 外掛8 的 64 位元版本 |
- 外掛 1
目標:
- InternetExplorer, Firefox, Chrome, Edge, Opera, Chromium, Amigo, QQBrowser
- Outlook, Thunderbird
- FileZilla, WinSCP
這個外掛使用迴圈依序從目標軟體竊取資料。
根據目標軟體不同,SmokeLoader竊取的手法可以分成以下幾種:
InternetExplorer
利用 vaultcli.dll 中的函數從 Internet Explorer 收集登入資料。認證管理員(Credential Manager)用於儲存已登入網站、已連線應用程式的登入資訊。vaultcli.dll 提供了列舉和取得認證管理中資訊的函數。
Firefox, Thunderbird
列舉位於 Software\Mozilla 下的登錄機碼,找出PathToExe 這項數值的登錄機碼,以取得Firefox 和 Thunderbird 的預設安裝路徑。接著在資料夾中搜尋 profiles.ini 並解析該檔案,以獲得 logins.json 和 cookies.sqlite 的位置,最後從這兩個檔案中獲得登入資料。
Chrome, Opera, Chromium, Edge, Amigo, QQBrowser
從這些軟體的安裝路徑下的 Web Data、Cookies 和 Login Data 資料夾中搜尋 Local State 檔案,然後從中取出登入資料和自動填入表單資料。為了確保能夠找到目標檔案,它會搜尋以下位置:
C:\Users\VM\AppData\Roaming
C:\Users\VM\AppData\Local C:\ProgramData |
Outlook
列舉可能相關的登錄機碼,以獲得以下的資料:
Registry key | Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676
Software\Microsoft\Office\15.0\Outlook\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676 Software\Microsoft\Office\16.0\Outlook\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676 |
Value name | POP3 Server, POP3 Port, POP3 User, POP3 Password
SMTP Server, SMTP Port, SMTP User, SMTP Password IMAP Server, IMAP Port, IMAP User, IMAP Password |
FileZilla
在 %APPDATA%、%LOCALAPPDATA% 及 C:\ProgramData 路徑中搜尋 sitemanager.xml、recentservers.xml 和 filezilla.xml,並收集這些檔案中 host、Port、User 和 Pass 標籤的內容。
WinSCP
列舉了位於 Software\Martin Prikryl 下的登錄機碼,以找出 HostName、UserName、Password、RemoteDirectory 和 PortNumber。
- 外掛 2
擁有與外掛 1 相同的函數,但只收集 Firefox 和 Thunderbird 的相關資訊。
- 外掛 3
目標 : Outlook, Thunderbird, The Bat!
使用以下關鍵字,在特定路徑中搜尋電子郵件客戶端的資料檔案。
Email client | keyword | Path |
Outlook | .pst, .ost | %APPDATA%\Microsoft\Outlook
%LOCALAPPDATA%\Microsoft\Outlook %ALLUSERSPROFILE%\Microsoft\Outlook C:\Users\{User name}\Documents |
Thunderbird | .mab, .msf, inbox, sent, draft, template, archive | %APPDATA%\Thunderbird |
The Bat! | .tbb, .tbn, .abn | %APPDATA%\The Bat!
%ALLUSERSPROFILE%\The Bat! %APPDATA%\BatMail %ALLUSERSPROFILE%\\BatMail |
當外掛找到目標檔案後,它會解析檔案結構,收集信件寄件者以及信件副本收件者的電子信箱。並將其傳送給 C2 伺服器,最後結束這個進程。
- 外掛 4
目標 : Chrome, Opera, Edge, InternetExplorer, Firefox
這個外掛可以分為兩個部分:注入和鉤取。
注入(Injection)
首先檢查 C2 伺服器的設定值中是否包含 fgclearcookies。如果發現 fgclearcookies,它會終止下列程式並刪除相關的 cookies,使受害者必須要再次輸入登入資訊:
iexplore.exe, microsoftedge.exe, microsoftedgecp.exe, firefox.exe, chrome.exe, opera.exe, msedge.exe, plugin-container.exe (sub-process of Firefox, the relevant cookies are for Macromedia flash player) |
接著持續監控執行中的進程清單,並將外掛的一部分注入到目標瀏覽器中,以攔截輸入特定API的資料。與其他外掛相似,注入的程式碼包括 shellcode、解密演算法和加密資料。不同之處在於,用來執行 shellcode 的程式碼會被寫入 ntdll 的 atan 函式中,並且會使用 CreateRemoteThread 函式在目標進程中執行 atan 函式。
鉤取(Hooking)
SmokeLoader根據其注入的程式攔截不同的 API:
Process | DLL | API |
firefox.exe | Kernel32.dll | VirtualQuery |
nspr4.dll or nss3.dll | PR_GetDescType | |
nspr4.dll | PR_Write | |
iexplore.exe microsoftedgecp.exe | wininet.dll | HttpSendRequestA
HttpSendRequestW InternetWriteFile |
msedge.exe
opera.exe chrome.exe |
msedge.dll, chrome.dll, opera.dll, opera_browser.dll | Unknown function |
一開始,外掛會暫停除目前執行緒外的其他注入進程的執行緒,然後修改目標 API 開頭的程式碼,使API被呼叫時會先執行將攔截到的資料傳給C2伺服器。大部分 API 在記憶體中的位址都可以藉由GetProcAddress 來取得,然而在以Chromium 為基礎的瀏覽器中,相關函式並未獲得命名,因此SmokeLoader解析相關動態函式庫中 .rdata 區段的結構,尋找擁有特定位元組模式的函式。
當設定完成之後,外掛會恢復目前進程的其他執行緒並終止目前執行緒。
- 外掛 5
外掛4的64位元版本。
- 外掛 6
目標 :
- Edge, InternetExplorer, Firefox, Chrome, Opera
- Outlook, Thunderbird, The Bat!, MailMaster, 263EM, Foxmail, AliMail, MailChat
- FileZilla, SmartFTP, FlashFXP, CuteFTP
- WinSCP
同外掛 4,將程式碼注入目標進程。要攔截的 API 是 WSASend函式和 ws2_32.dll 中的 send 函式。當這些函式被呼叫時,外掛會收集 FTP、SMTP、IMTP 和 POP3 的主機名稱。
- 外掛 7
外掛6的64位元版本。
- 外掛 8
目標 : explorer.exe or processes specified by C2
與外掛 4 相似,外掛8也包含注入和鉤取部分。如果 C2 主機的設定中包含 keylog_rules=,則開始進行注入。當執行 explorer.exe 或keylog_rule指定的進程時,shellcode 會被注入到這些進程中。鉤取會被設置到以下函數:
DLL | API | Target |
user32.dll | TranslateMessage | 側錄受害者在鍵盤上輸入的內容及輸入視窗的名稱 |
GetClipboardData | 獲得剪貼簿的內容 |
- 外掛 9
外掛8的64位元版本。
結論
SmokeLoader能夠根據不同目標調整功能。在這個案例中,SmokeLoader 不同於以往下載單一完整檔案進行攻擊的做法,而是選擇將攻擊內容分配給複數個外掛進行,以增加攻擊的成功率,這也凸顯出SmokeLoader 的靈活性,FortiGuard 將持續監控這些攻擊活動,並提供適當的安全方案。
IOCs
IP
198[.]23[.]188[.]147
77[.]232[.]41[.]29
91[.]183[.]104[.]24
185[.]228[.]234[.]237
檔案
3e523ed80dbb592b1ff8c3345c3cd231ddd5a06e1af4c7b7d1f7f81249d0c4a3
ad657479d9f6322daba65638523d65631ff83ba5a717261acb5a53fd48e52209
8dc06fdc2897d7c3438105ea0a39d2074774f80e051007fe7799b8195580ad2f
fbe226dd0130c3c0c4db9d125cd25eca3c8e310dae8127d15c8be18041d41cd6
392d201120936c1f0e77bdb4b490f2825c1e6f584f18055c742b36250f89566b
e29c269a4c3ee4bbd673bfe0d24ca7d131d9221607e26a60989e81d8ffc17095
00874ab2a91433dfbfdc9ee6ade6173f3280737fc81505504ace11273f640610
1a1c8cdac1c3cbae5f1140e850ee06b414259876dab97152669f7c0f93469b13
5dc92a6ed1ef2a5d9cf2a112532ad2c9fd70bff727e4cb60cd5d9c4966f2f77f
a334ba0d8ac0676d09e41aa273589ee27338c44a09109a4d5defa45f1d9bd82b
35e55053bed6b3c1027a3e7c140e67303e01e8fcbf42abac27b8e9df2a090ee3
858d26e697bc60b642e5d92922b625f58532fc06f028962d8add5fa497981f33
7f9909677c290b98541be176251eca34b9f3d36555669a2639130adb97ca6958
f4b16c3f8bff445fdcd9d7edb5883d20d7663c3744e137439fa961736d0a9471
fb6ef14ac4cebf87f937f15553575f0f62ac62df917b490f602025a0985addd1
9dea895b5b1c03caa2b838b8def4e082392851325794c3bd2eb5ca7372d8e09c
cfe7f6c1c0560bd56cd2df856d459b7fe7fd63b2f635c35151f61d4d04ce4162
a4ec792538455fb56f0b89ae10ddd0b2504afba092ba5cfa2083cf61b5fac0ef
cb92d320fc9bc674e8d37ceeebf0363f8e96dd67ef4ef543b3348f96ef567e5f
eb8381b156aad734ef3a0328b4985ed1edeca1c8d79d66e094598f8c6992ac71
e3e7a3d0ba55b8dbbe3633b1dad0a3bbf4eada72dd8df3f7b1bc76a692862f23
ea3b07a2356a7bfb92144f621ba551677a138c31d684072d69a4d37c1a378bb3
7ab20d40431b990a9a44e96dc53519f0af72eaf56c4b20f8995f95a48039bf67
bdb897e6a8bfc21302ae1ac254b1b2e779684fe75b2b824cb24c80c775898940
f7544f07b4468e38e36607b5ac5b3835eac1487e7d16dd52ca882b3d021c19b6