Emotet病毒惡意文件分析實例

唐任威 Vincent Tang

  • 精誠資訊/恆逸教育訓練中心-資深講師
  • 技術分類:資訊安全

 

 

近年來 Emotet 病毒肆虐,其最著名的散播手法就是偽裝成 Word 文件,混淆搞不清楚狀況的用戶開啟,達到散播效果。 經熱心鄉民贊助,拾獲 Word 檔一枚。其 SHA1 雜湊如下:

    6710301ed9490e534a770a40864b54c09223010f

Windows 作業系統中,可利用內建 certutil 指令計算檔案雜湊。其用法為:

    certutil –hashfile <需計算雜湊之檔案> <演算法>

可支援的演算法有:MD2、MD4、MD5、SHA1、SHA256、SHA384、SHA512如欲詳細用法,可在命令列輸入下方指令查詢。

    certutil -hashfile -?

圖 1:Emotet 病毒 Word 檔樣本一枚

開啟 Word 檔後可以察覺,該檔是以「受保護的檢視」1 模式開啟 (如圖 2)。通常只要不是本機建立的 Word 檔,在開啟時都會出現這種情況。於是我們大膽點擊「啟用編輯」進入編輯模式。

1 何謂受保護的檢視?


圖 2:Word 應用程式「受保護的檢視」模式

但接下來的畫面可就要小心!因為出現的是巨集停用的「安全性警告」2 畫面 (如圖 3)。這意味著這個 Word 檔裡面包含了巨集。所謂的巨集其實就是一種程式。藉由簡單的語法,可以完成許多自動化或重複性的作業。但這種特性,也被攻擊者利用做為攻擊手段。因此 Word 檔在開啟時,如果含有來路不明的巨集,出於安全考量,Word 會預設停用該巨集。這個時候千萬小心不要誤觸「啟動內容」。否則一旦惡意巨集執行,難保會發生什麼樣的麻煩事。

圖 3:Word 應用程式,巨集停用「安全性警告」畫面

Word 檔案中的巨集可以透過「Office VBA code extractor」3 網站,取出後加以分析。

2 啟用或停用 Office 檔案中的巨集

3 Office VBA code extractor


圖 4:Office VBA code extractor 網站



取出的巨集如圖 5 所示。Office 的巨集或稱為 VBA (Visual Basic for Applications)4 其實就是用 Visual Basic 語法控制 Office 軟體。在取出的巨集中可以看到 「Document_open()」 字樣,並許多若干亂七八糟的函數名稱與程式碼。Document_open() 代表的是文件開啟時,會自動執行程式碼中自訂的程序。而之所以會有亂七八糟的函數名稱及程式碼則是因為攻擊者為了避免巨集程式被人一眼看出其意圖所採取的混淆措施。

圖 5:被混淆過的 Word 巨集程式碼

4 Office 的 VBA 入門



混淆過的程式碼,其最大的特色便是會有一堆不知所以的程式敘述 (如圖 6)。變數的命名也亂,程式流程也毫無章法。而且如果被混淆的程式碼是 VB,其更會有一堆錯誤且無法執行的程式碼。因為當 VB 看到這些有問題且無法執行的程式碼時,VB 會當作沒事,繼續往下尋找其他可執行的程式碼。

圖 6:一堆不知所以的程式敘述



為了不讓這些垃圾程式碼阻礙的分析,我們可以將這些毫無意義的程式碼移除。所幸駭客在加入這些程式碼時,這些毫無意義的程式碼也有其規律 (如圖 7)。因此我們可以藉由這些規律將垃圾程式碼移除。

圖 7:毫無意義但有某種規律的程式碼



整理過的程式碼如圖 8。此處可以大約看出程式碼的輪廓與邏輯。其關鍵在於圖 8 的第 27 行有個 CreateObject 敘述。並且第 30 行也有 Create 敘述。透過這二組敘述,惡意的 VBA 似乎想執行些什麼?再看的詳細點,CreateObject 想建立的項目在 25 行,但也被混淆過。而解碼函數就在第 32 行。由於複雜度不會太高,因此我們試著用「工人」智慧解碼。

圖 8:整理過的混淆程式碼



解碼結果如圖 9。在第 23、24 行程式碼可以看出惡意 VBA 想利用 CreateObject 函數建立 Process 物件並執行一段放在 Word 文件中,圖片替代文字裡的疑似 PowerShell 程式碼。

圖 9:解碼過的混淆程式碼



既然知道位置,那就可以打開 Word 檔中,圖片的替代文字標籤。這裡果然可以看到一段混肴過的字串在此。



也許是因為字串的相容性問題,所以無法順利將整段內容直接取出。但經由 16 進制編輯器的幫忙,最終還是將整段內容完整取出。複製出的結果如圖 11。

圖 11:由 16 進制編輯器取出的混淆內容



將垃圾字元剔除後的結果如圖 12。可以明顯看出,這是一段 Base64 的編碼。所謂的 Base64 編碼就是以數字 10 個字元、大寫 26 個字元、小寫 26 個字元,再加上 2 個額外字元所組成的編碼結果。編碼時是以二進制為單位,每 6 個位元編碼成一個字元。當尾數不足 6 個位元,會以等號 (=) 作為填充字元。

圖 12:剔除垃圾字元後的編碼結果



將找到的結果複製回 VBA 後可以看出,這的確是一段編碼過的 PowerShell 程式碼,如圖 13。

圖 13:PowerShell 程式碼



想知道這段 Base64 編碼下隱藏著什麼,我們可以透過超強線上解碼工具 CyberChef5 來處理。第一步先選擇「From Base64」模組解碼。解碼結果如圖 14。

圖 14:CyberChef「From Base64」模組解碼結果



解碼後發現每個字元間都帶著空白。這可能是因為解碼結果是 Unicode 所致。於是接著用「Decode text」模組試著解碼。Encoding 的部分可以選擇「UTF-16LE (1200)」。解碼結果如圖 15。

5 CyberChef

圖 15:CyberChef「Decode text」模組解碼結果



這時解碼的結果看來正常許多。但仔細觀察後會發覺,解碼的結果看起來仍然是透過字串串接法混淆過,且主要的混肴字元為括號、單引號及加號。這時可以利用「Find / Replace」模組將括號、單引號及加號等混肴字元剔除。剔除結果如圖 16。

圖 16:CyberChef「Find / Replace」模組剔除結果



剔除後的結果看來清楚許多。並且明確的在中間那一段夾雜了許多網址,且網址間以星號做為區隔字元。此時可採用「Split」模組予以斷句,斷句字元輸入「*」。斷句後的結果如圖 17。

圖 17:CyberChef「Split」模組斷句結果



由於希望將焦點僅放在解碼出來的網址上,此時可以用「Extract URLs」模組挑出網址。挑出的網址如圖 18。

圖 18:CyberChef「Extract URLs」模組挑取網址



這時如果試著去開啟那些網址會發覺,其中某些網址其實還是有效的,並且也會出現可以下載惡意程式的情況,如圖 19。如果想動手測試,那麼要絕對千萬小心!這些可都是如假包換的惡意程式,一旦不小心電腦中毒可就不好玩了!

圖 19:有效的惡意程式網址



如果想將這些網址當成情資轉發出去,為了避免相關人員誤觸。則可以將網址跳脫後再轉發,保障相關人員的安全。跳脫網址可透過「Defang URL」模組完成,跳脫結果如圖 20 所示。

圖 20:CyberChef「Defang URLs」模組跳脫網址



看完這麼落落長的分析步驟如果覺得麻煩,其實網路上已經有分析好的現成結果。此處以「Hybrid Analysis」6 為例,其報告就具鉅細靡遺地紀錄整個檔案的分析資訊。不只包括判別結果,還包含了各步驟的細節資訊。如事故應變資訊 (圖 21)。程式執行畫面與動態執行紀錄 (如圖 22)。網路通聯紀錄 (如圖 23) 等。

6 Hybrid Analysis 病毒分析報告



圖 21:Hybrid Analysis 事故應變資訊


圖 22:Hybrid Analysis 程式執行畫面與動態執行紀錄


圖 23:Hybrid Analysis 網路通聯紀錄



一直以來惡意程式都是靠著人們的輕忽大意來散播。唯有時時刻刻提高警覺,不要開啟來路不明檔案。才會是明哲保身最基本的方法。


您可在下列課程中了解更多技巧喔!