網路釣魚
Black Basta 勒索病毒集團 Water Curupira 的 Pikabot 垃圾郵件攻擊行動
一個被我們列在「Water Curupira」入侵集合 (intrusion set) 底下持續追蹤的 Black Basta 勒索病毒集團 ,在 2023 一整年當中都積極透過垃圾郵件攻擊行動散播一個與 Qakbot 類似的載入器惡意程式叫「 Pikabot」。
Pikabot 是一款載入器惡意程式,在 2023 年第一季經常被我們列在「Water Curupira」入侵集合 (intrusion set) 底下持續追蹤的駭客集團用於垃圾郵件攻擊行動當中,不過在 6 月底沉寂了一段時間,一直到 2023 年 9 月初為止。先前就有其他研究人員曾經提到這個載入器與 Qakbot 非常相似,然而後者已經在 2023 年 8 月遭執法單位瓦解。2023 年最後一季,Pikabot 相關的網路釣魚行動大增,而此時正值 Qakbot 被執法單位瓦解之際,似乎意味著 Pikabot 有可能是 Qakbot 的替代品 (DarkGate 同樣也是另一個臨時替代品)。
Pikabot 的幕後集團發動了一波波的網路釣魚行動,使用兩個主要元件 (載入器與核心模組) 來攻擊受害者,在未經授權的情況下取得遠端存取權限,同時還會與幕後操縱 (CC) 伺服器建立連線讓駭客能執行任意指令。Pikabot 是一個精密的多重階段惡意程式,同一個檔案當中即包含了載入器和核心模組,此外還有一段解密後的 shellcode,負責從其資源區段解密出另一個 DLL 檔案 (也就是實際的惡意檔案)。
基本上,Water Curupira 的攻擊行動是為了在系統植入 Cobalt Strike 之類的後門程式,進而演變成 Black Basta 勒索病毒攻擊 (無獨有偶,Black Basta 也在 2023 年 9 月重新營運)。雖然駭客在 2023 年第 3 季的前幾個禮拜發動了好幾波 DarkGate 垃圾郵件攻擊行動以及少量的 IcedID 攻擊行動,但之後便全都改為散播 Pikabot。
Pikabot 是經由垃圾郵件來突破防線進入受害系統,這些垃圾郵件內含一個壓縮檔或 PDF 附件檔案,這一點與 Qakbot 的行為和攻擊手法相同。

經由電子郵件突破防線
駭客會透過挾持討論串的方式來散發垃圾郵件,這是一種駭客在既有的電子郵件討論串 (有可能是竊取自先前的受害者) 當中回覆訊息,讓收件人以為駭客的郵件是在回覆先前的討論,進而騙過收件人的一種技巧。這種技巧可提高收件人點選郵件內隨附惡意連結或附件檔案的機率。駭客在發送這類郵件時,會使用先前討論串中出現過的寄件人名稱,但其背後的郵件地址卻是新註冊的網域或是免費郵件服務的網域。郵件內容會包含原始討論串的大部分內容 (包含郵件主旨在內),但會在內容的最頂端加上一段簡短訊息,請收件人開啟隨附的檔案。
這個附件檔案有時是一個受密碼保護的 ZIP 壓縮檔 (裡面包含一個 IMG 檔案),有時則是一個 PDF 檔案。駭客會在郵件訊息當中提供解壓縮的密碼。請注意,附件檔案的名稱及密碼在每一封郵件都不同。


使用 PDF 附件檔案的電子郵件,會有一段簡短說明請收件人查看或檢視隨附的檔案。
第一階段攻擊
郵件隨附的壓縮檔內包含了一個重度加密編碼的 JavaScript (JS) 腳本,檔案大小超過 100 KB。受害者一旦執行了這個腳本,它就會視情況執行一系列指令。


腳本首先嘗試使用 cmd.exe (命令提示字元) 來執行指令。如果不成功,就會繼續執行以下步驟:在命令視窗當中輸出一個預先指定的字串,接著嘗試使用該字串來 ping 一下某個特定目標。如果 ping 不成功,腳本接著使用 Curl.exe 從某個外部伺服器下載 Pikabot 惡意檔案,將檔案儲存到系統的暫存目錄。
接下來,腳本會再重新嘗試 ping 指令。如果重新嘗試還是不成功,那就使用 rundll32.exe 來執行前面下載的 Pikabot 惡意檔案 (一個 .dll 檔案) 並指定「Crash」作為輸出參數。在一列指令的之後,腳本就會結束並傳回指定的代碼:ciCf51U2FbrvK。
除了上述做法之外,我們還觀察到一些其他案例使用另一種攻擊程序,以更直接的方式來植入惡意檔案。和前面一樣,駭客先使用類似的網路釣魚技巧來誘騙受害者下載並執行惡意附件。同樣地,附件是一個受密碼保護的壓縮檔,解壓縮密碼也隨附在郵件正文內。
但解壓縮出來的不是一個惡意腳本,而是一個 IMG 檔案。這個檔案內部又包含了兩個檔案:一個是偽裝成 Word 文件的捷徑 (LNK) 檔案,另一個是 DLL 檔案,後者就是 Pikabot 惡意檔案:

有別於前面看到的 JS 腳本,這種攻擊程序的作法直接了當,就連執行惡意檔案時也是很直接。
一旦受害者被騙執行了 LNK 檔案,它就會使用 rundll32.exe 來執行 Pikabot 的 DLL 惡意檔案並且指定「Limit」作為輸出參數。
前面提到,有時垃圾郵件會使用 PDF 檔案作為附件,此時它會偽裝成一個存放在 Microsoft OneDrive 上的檔案,讓收件人不會懷疑附件的正當性。這樣做的主要目的是要誘騙受害者點選 PDF 檔案下載按鈕,但實際上它是惡意程式的下載連結。

當使用者點選下載按鈕時,就會連上惡意網址去下載一個惡意的 JS 檔案 (可能跟前面的 JS 檔案類似)。
像這樣經由 PDF 附件檔案散播 Pikabot 的案例是比較近期的作法,2023 年第 4 季才開始出現。
我們也發現惡意下載器還出現過其他變種會使用陣列和陣列操作當障眼法:
巢狀的函式使用了「push」和「shift」陣列操作讓程式碼結構看起來更複雜,藉此掩蓋執行流程,增加分析的困難度。從前面的腳本可以看到,駭客運用了多個下載網址、使用 mkdir 指令動態隨機建立目錄,並且使用 Curl.exe 指令,這全部都包裝在另一個陣列當中。
JavaScript 腳本會執行多道指令來嘗試用 Curl.exe 從不同的外部網站取得惡意檔案,然後儲存在 mkdir 建立的隨機目錄當中。

後面還會使用 rundll32.exe 檔案來執行惡意檔案匯出的函式。

Pikabot 惡意檔案
我們分析了圖 6 的壓縮檔中解出來的 DLL,發現它是一個 32 位元 DLL 檔案,共匯出 1,515 個函式。若呼叫其匯出的「Limit」函式,就會解密出一段 shellcode 來執行,這用來判斷它所在的處理程序是否在除錯環境內執行,它會呼叫 Windows API NtQueryInformationProcess 兩次,第一次呼叫會將旗標設為 0x7 (ProcessDebugPort),第二次會設為 0x1F (ProcessDebugFlags)。這段 shellcode 還會解密出另一個 DLL 檔案,並將它載入記憶體中,最後再將它執行。

解密後的 DLL 檔案會再執行一段反制分析的程序,藉由載入錯誤的函式庫和其他垃圾資料來偵測沙盒模擬環境。這段程序似乎是從某篇 GitHub 文章中抄襲而來。
資安防護/虛擬機器/沙盒模擬 DLL 檔案 | 真正 DLL 檔案 | 假的 DLL 檔案 |
---|---|---|
cmdvrt.32.dll | kernel32.dll | NetProjW.dll |
cmdvrt.64.dll | networkexplorer.dll | Ghofr.dll |
cuckoomon.dll | NlsData0000.dll | fg122.dll |
pstorec.dll | ||
avghookx.dll | ||
avghooka.dll | ||
snxhk.dll | ||
api_log.dll | ||
dir_watch.dll | ||
wpespy.dll |
表 1:載入 DLL 檔案來偵測沙盒模擬分析環境。
在執行完反制分析的程序之後,惡意程式接著從它的資源區段載入一組 PNG 圖片,這些圖片含有核心模組的一段加密過的程式碼,接著將它解密。核心模組解密之後,Pikabot 注入器會建立一個暫停狀態的處理程序 (%System%\SearchProtocolHost) 並且將核心模組注入其中。注入器使用間接的系統呼叫來隱藏注入程式碼的動作。

接下來,惡意程式首先要解析出必要 API 的位址,由於每個 API 都有對應的雜湊碼 (0xF4ACDD8、0x03A5AF65E 和 0xB1D50DE4),Pikabot 會透過兩個函式來解析出以下三個必要的 API 位址:GetProcAddress、LoadLibraryA 和 HeapFree。這個流程是藉由查看 kernel32.dll 匯出的函式來達成。其餘用到的 API 則是透過 GetProcAddress 並搭配解密字串來解析位址。其餘相關字串也會在執行時期用到之前解密。

Pikabot 的核心模組會檢查系統使用的語言,如果是以下任何一個語言就終止執行:
- 俄羅斯文 (俄羅斯)
- 烏克蘭文 (烏克蘭)
接下來,它會建立一個名稱寫死的 mutex:{A77FC435-31B6-4687-902D-24153579C738} 來確認自己只有一個執行個體正在系統上執行。
核心模組的下一階段是取得有關受害系統的詳細資料並傳送到 CC 伺服器。蒐集到的資料採用 JSON 格式來儲存,每個資料項目都使用 wsprintfW 函式來將其位置填滿。竊取到的資料長得像圖 14 中的樣子,只不過圖中的資料尚未加密:

Pikabot 似乎有一個二進位版本,還有一個攻擊行動識別碼 (ID)。JSON 資料中有兩個鍵值 (key):0fwlm4g 和 v2HLF5WIO,後者似乎是攻擊行動識別碼。
惡意程式會建立一個具名管路 (named pipe) 並用它來暫時儲存下列處理程序蒐集到的額外資訊:
- whoami.exe /all
- ipconfig.exe /all
- netstat.exe -aon
回傳的每一項資訊在處理程序執行之前都會先加密。
此外,也會蒐集一份系統上正在執行的處理程序清單,並且將清單加密,其做法是先呼叫 CreateToolHelp32Snapshot 然後再透過 Process32First 與 Process32Next 來建立清單。
當所有資訊都蒐集完成後,資訊就會被傳送至下列其中一個 IP 位址,位址後面會再加上一段網址:cervicobrachial/oIP7xH86DZ6hb?vermixUnintermixed=beatersVerdigrisy&backoff=9zFPSr: 。
- 70[.]34[.]209[.]101:13720
- 137[.]220[.]55[.]190:2223
- 139[.]180[.]216[.]25:2967
- 154[.]61[.]75[.]156:2078
- 154[.]92[.]19[.]139:2222
- 158[.]247[.]253[.]155:2225
- 172[.]233[.]156[.]100:13721
不過,在本文撰寫當下,這些網站已經都無法存取。
CC 伺服器與衝擊
正如前面提到,Water Curupira 會在攻擊行動中植入 Cobalt Strike 之類的後門程式,進而演變成 Black Basta 勒索病毒攻擊。正因為它可能散播 Black Basta 這類精密的勒索病毒,所以 Pikabot 攻擊行動才顯得格外危險。
雖然駭客在 2023 年第 3 季的前幾個禮拜也曾發動了好幾波 DarkGate 垃圾郵件攻擊行動以及少量的 IcedID 攻擊行動,但之後便全都改為散播 Pikabot。
最後,我們有觀察到多個不同的 Cobalt Strike 信標叢集,全部共有超過 70 個 CC 網域指向 Black Basta 勒索病毒,而這就是該駭客集團一直透過攻擊行動散播的惡意程式。
資安建議
為了避免掉入網路釣魚、惡意程式、詐騙等各種網路威脅的陷阱,使用者在收到電子郵件時應該保持警戒。以下是使用者可遵循的一些電子郵件安全最佳實務原則:
- 務必將滑鼠游標移到郵件內的連結上方停留一下,看看它背後到底指向哪裡。
- 檢驗寄件人的身分。不熟悉的電子郵件地址、地址與寄件人名稱不符的郵件,以及假冒知名企業的郵件,這些都是意圖不良寄件人的特徵。
- 如果電子郵件宣稱來自某家合法企業,那您在下載附件或點選隨附連結之前,請先檢驗一下寄件人和郵件的內容。
- 讓電腦作業系統與所有軟體隨時保持更新,並且套用最新修補程式。
- 定期將重要資料備份到外部及安全地點。如此可確保萬一您掉入網路釣魚詐騙陷阱,也可以復原寶貴的的資料。
一套多層式的方法有助於企業防範各種駭客可能入侵系統的途徑,包括端點、電子郵件、網站以及網路。資安解決方案可偵測惡意元件與可疑行為來保護企業。
- Trend Vision One™ 提供了多層式防護與行為偵測來攔截可疑行為和工具,不讓勒索病毒有機會造成破壞。
- Trend Cloud One™ – Workload Security 可保護系統,防範已知和未知的漏洞攻擊。這項防護採用的是像虛擬修補和機器學習這樣的技巧。
- Trend Micro™ Deep Discovery™ Email Inspector 採用客製化沙盒模擬分析與進階分析技巧來有效攔截勒索病毒用來突破企業防線的惡意郵件 (包括網路釣魚郵件)。
- Trend Micro Apex One™ 可進一步提供自動化威脅偵測及回應,防範無檔案式威脅與勒索病毒等進階攻擊,保障端點安全。
入侵指標 (IoC)
如需本文當中提到的入侵指標,請參閱此處。