起死回生的Emotet銀行木馬程式,在全球建立了721個非重複的 C&C 伺服器

曾由趨勢科技在 2014 年所發現的「Emotet」銀行木馬程式,去年已經正起死回生,並推出自家的垃圾郵件模組來散布該程式,開始攻擊一些新的產業和地區,甚至能躲避沙盒模擬與惡意程式分析技巧。今年,我們進一步分析了 Emotet 的活動來了解這個模組化惡意程式的惡意行為。我們針對 Emotet 的相關威脅樣本進行了一番徹底的研究,包括 2018 年 6 月 1 日至 11 月 15 日這段期間所蒐集到的相關威脅樣本:8,528 個非重複網址、5,849 個文件植入程式以及 571 個執行檔,並發現了 Emotet 的幕後基礎架構以及可能的犯罪集團資訊。

》 延伸閱讀: 假冒銀行轉帳通知耍詐!!銀行惡意軟體會利用網路監聽來竊取資料

以下是幾項重要的研發現:

  1. 至少有兩組並行的基礎架構在背後支撐 Emotet 的殭屍網路
    當我們將該惡意程式的幕後操縱 (C&C) 伺服器和 RSA 金鑰進行分類之後就能清出看出兩組不同的基礎架構。此外我們也發現歹徒每個月都換更換一次 RSA 金鑰。而不同基礎架構所推送的下一階段惡意程式在用途和攻擊目標上並無重大差異,因此分開兩組基礎架構的用意應該只是為了讓 Emotet 更不容易被追查,同時也提供容錯備援的能力。
  2. Emotet 的相關樣本可能是經由多個分層負責的不同單位所製作
    從活動模式不一致的情況可以看出,負責製作及散布文件植入程式的幕後單位,似乎與負責壓縮及部署 Emotet 執行檔的單位不同。文件植入程式在非上班時間 (UTC 時間凌晨 1:00 至 6:00) 會停止製作。此時很可能有三組不同的電腦正在壓縮及部署 Emotet 的執行檔,其中兩組的系統時區可能分別設定在 UTC +0 以及 UTC +7。
  3. Emotet 惡意程式的作者很可能住在 UTC+10 或者更往東邊一點的時區內
    當我們根據每個執行檔樣本所解壓縮出來的惡意程式組譯時間戳記來將這些執行檔分類時,我們可歸納出兩個樣本群組,其組譯時間戳記與惡意程式首次在外發現的時間一致。這原因很可能是組譯時間戳記使用的是惡意程式作者的電腦當地時間。如果這些當地時間正確無誤的話,那就可推論出惡意程式作者很可能住在 UTC +10 或更往東邊一點的時區內。

Emotet 的兩組基礎架構

趨勢科技蒐集並分析了 571 個 Emotet 的執行檔樣本。執行檔內的組態設定包含了一個 C&C 伺服器清單以及連線用的 RSA 加密金鑰。

我們從所有的執行檔樣本當中擷取出來的 RSA 公開金鑰只有六把。每一把 RSA 金鑰皆使用 768-位元的模數 (modulus) 以及 65537 的公開指數 (exponent)。我們計算出每一個 RSA 金鑰二進位資料 (Blob) 的 CRC32 校驗碼,並給予每個金鑰一個名稱來加以辨別。

金鑰名稱 CRC32 Emotet 群組
A fcb2fb3b 1
B 86e9acef 1
C ceff5362 1
D fc8e8aaa 2
E 8f1eb5e 2
F aef0def8 2

表 1:從 Emotet 執行檔中擷取出來的 RSA 金鑰。

共發現了 721 個非重複的 C&C 伺服器

除此之外,針對 Emotet 的 C&C 伺服器,我們用其「IP/連接埠」再加上 HTTP 通訊協定來加以識別。我們總共發現了 721 個非重複的 C&C 伺服器。一個 Emotet 樣本當中平均含有 39 個 C&C 伺服器 (最多 44 個,最少 14 個)。根據我們的觀察,一個 Emotet 樣本當中所列的 C&C 伺服器僅有少數真正有在運作。

我們發現,絕大多數的 C&C 伺服器皆位於美國、墨西哥和加拿大三地。Emotet 的網路位址主要分散於三大自主系統編號 (ASN),分別為 ASN7922、ASN8151 和 ASN22773。

圖 1:Emotet C&C 伺服器所在國家分布。

圖 2:Emotet C&C 伺服器連接埠編號分布。

我們透過視覺化方式將 RSA 金鑰與其對應的 C&C 伺服器分類之後,可發這些 RSA 金鑰可分成兩大群組。金鑰 A、B、C 為第一組,金鑰 D、E、F 為第二組。

圖 3:RSA 金鑰與 C&C 伺服器之間的對應關係。每個藍點代表一台非重複的 C&C 伺服器,而紅點則在表 RSA 公開金鑰。

如圖 3 所示,這兩大群組之間並不共用 C&C 伺服器。

圖 4:RSA 金鑰收到的時間。綠點代表第一組所使用的金鑰,橘點代表第二組所使用的金鑰。每一個點都分別代表該 RSA 金鑰在一個新樣本的組態設定當中被發現的時間。

月份 六月 七月 八月 九月
第一組所使用的金鑰 fcb2fb3b (A) 86e9acef (B) 86e9acef (B) ceff5362 (C)
第二組所使用的金鑰 fc8e8aaa (D) 8f1eb5e (E) aef0def8 (F)

表 2:兩大金鑰群組以及其出現活動的月份。

根據我們的分析顯示,RSA 金鑰收到的時間與兩大群組的活動時間有相關性:每一個 RSA 金鑰在使用了一個月之後,歹徒就會在下個月的第一個工作天 (例如 2018 年 7 月 2 日和 2018 年 9 月 3 日) 更換成另一個 RSA 金鑰。

除此之外,我們也觀察到,第一組的相關威脅樣本較第二組來得多。根據我們所蒐集到的資料,第一組和第二組分別有 469 個和 102 個未解開的 Emotet 樣本。此外,第二組在八月份並未出現任何活動,如圖 4 所示。

分開兩個不同的 Emotet 團體還是兩套不同的計畫?

我們一開始假設這兩個 Emotet 群組是針對不同用途而設,此外背後也是由不同人在運作。為了證明這一點,我們引用來自 @malware_traffic 的資料並對其入侵指標 (IoC) 加以分類。然而,我們並未發現兩者之間有何明顯差異。例如,TrickBot (gtag: arz1) 一開始在 9 月 20 日是由第一群所散發,但隨後隔天,第二群也開始散發同樣的惡意程式。因此,在沒有任何強力的證據之下,我們只能說,歹徒很可能只是為了讓 Emotet 更不易被追查以及容錯備援的目的而架設了兩組基礎架構。

日期 Emotet 群組 RSA 金鑰 下一階段惡意程式
2018 年 7 月 3 日 2 E Panda Banker
2018 年 7 月 9 日 1 B Panda Banker
2018 年 7 月 16 日 2 E Panda Banker
2018 年 7 月 19 日 2 E Panda Banker
2018 年 7 月 30 日 1 B Panda Banker
2018 年 7 月 31 日 1 B Panda Banker
2018 年 8 月 8 日 1 B Trickbot
2018 年 8 月 10 日 1 B Panda Banker
2018 年 8 月 13 日 1 B Panda Banker
2018 年 8 月 14 日 1 B Panda Banker
2018/8/15 1 B Panda Banker
2018 年 8 月 16 日 1 B Panda Banker
2018 年 8 月 22 日 1 B Panda Banker
2018 年 8 月 24 日 1 B Panda Banker
2018 年 8 月 26 日 1 B Panda Banker
2018 年 9 月 4 日 2 F IcedID、TrickBot
2018 年 9 月 5 日 2 F IcedID、AZORult
2018 年 9 月 6 日 1 C IcedID、AZORult
2018 年 9 月 14 日 1 C TrickBot gtag: del72
2018 年 9 月 20 日 1 C TrickBot gtag: arz1
2018 年 9 月 21 日 2 F TrickBot gtag: arz1、del77、jim316、lib316

表 3:Emotet 二組基礎架構所散布的下一階段惡意程式 (2018 年 7 月至 9 月)。

針對每一組基礎架構來組譯 Emotet 的原始程式碼

Emotet 的惡意程式都採用客製化的壓縮與編碼程式來加以保護。我們仔細研究了一下每個樣本在壓縮前後的組譯時間戳記,並且發現:有些時間戳記是偽造的,有些則看起來是真的。從那些看起來真實的時間戳記當中我們發現,其組譯時間與在網路上被發現的時間相隔只有幾分鐘。例如,SHA256 雜湊碼為「648dce03ac4c32217ce5c0b279bc3775faf030cafb313c74009fe60ffde3c924」的樣本 (趨勢科技命名為 TSPY_EMOTET.NSFOGAH),其組譯時間為 2018-06-06 05:40:17,而其在網路上被發現的時間為四分鐘之後。至於 SHA256 雜湊碼為「 07deb1b8a86d2a4c7a3015899383dcc4c15dfadcfafc3f2b8d1e3aa89a6c7ac4」的樣本 (趨勢科技命名為 TSPY_EMOTET.TTIBBJD),其組譯時間為 2035-07-30 21:36:11,而這個時間戳記很明顯地就是偽造的 (因為年份是 2035 年)。由於時間戳記很難分辨真偽,因此根據已壓縮檔案時間戳記的研究最後很可能得不出甚麼結論。

即使組譯時間戳記有可能造假,我們仍決定分析解壓縮後的 Emotet 樣本來看看,並且發現其時間戳記應該可信。在 571 個解壓縮的 Emotet 樣本中,我們只發現了 11 個非重複的時間戳記。假設時間戳記在每次組譯時都自動造假,那麼以同樣一組原始程式碼組譯出來的樣本,其程式碼區段的內容應該完全一樣但組譯時間將有所不同。然而,我們發現的結果是:只要是解壓縮樣本的時間戳記相同,其程式碼區段也完全相同。同樣地,只要是時間戳記不同,程式碼區段也會有所差異。時間戳記的差異,似乎也意味著版本更新。

如「表 4」中的資料顯示,歹徒很可能是使用了自動化工具或腳本來針對不同基礎架構進行 Emotet 原始程式碼的組譯作業,因為有一些不同的樣本擁有相同的組譯時間戳記。同樣的資料也顯示,歹徒是依序製作第一組和第二組的惡意程式。例如,歹徒在 UTC 時間 2018 年 6 月 3 日 20:08 製作了 46 個針對第一組 RSA 金鑰和 C&C 伺服器的 Emotet 樣本。兩分鐘後,又製作了37 個針對另一組的 Emotet 樣本。

我們注意到歹徒似乎習慣在 UTC 時間星期一或星期三更新 Emotet 樣本。除此之外我們也觀察到,組譯時間戳記相同的樣本,其程式碼區段也完全相同。唯一的差異只在於程式內資料區段當中記載的 C&C 伺服器而已。這很可能是因為每次組譯原始碼的時候,歹徒會從其 C&C 伺服器清單當中挑選幾個來製作新的樣本。

Emotet 群組 RSA 金鑰 Epoch 中的組譯時間戳記 惡意程式組譯時間戳記 (UTC) 非重複樣本數
1 A 1528056487 2018-06-03 20:08:07 56
2 D 1528056680 2018-06-03 20:11:20 38
1 B 1530547690 2018-07-02 16:08:10 28
2 E 1530547815 2018-07-02 16:10:15 25
1 B 1531161666 2018-07-09 18:41:06 31
2 E 1531161732 2018-07-09 18:42:12 18
2 E 1531899206 2018-07-18 07:33:26 57
2 E 1531906587 2018-07-18 09:36:27 5
1 B 1532502303 2018-07-25 07:05:03 276
1 C 1536011873 2018-09-03 21:57:53 21
2 F 1536011945 2018-09-03 21:59:05 16

表 4:從網路上蒐集到的非重複樣本以及對應的組譯時間戳記。

原文出處:Exploring Emotet: Examining Emotet’s Activities, Infrastructure