MontysThree:帶有隱寫術和俄羅斯語言的工業間諜活動
在2020年夏季,我們發現了一個未知的多模塊C ++工具集,該工具集可用于可追溯到2018年的針對性強的工業間諜攻擊。最初,我們對該惡意軟件感興趣的原因是其稀有性,該活動的明顯針對性以及存在在代碼,基礎架構或TTP級別與已知的活動沒有明顯相似之處。迄今為止,我們認為此工具集及其背后的參與者是新的。惡意軟件作者將工具集命名為“ MT3”。在此縮寫之后,我們將工具集命名為“ MontysThree”。

根據MT3的縮寫,我們將工具集命名為Montys3
該惡意軟件包括一組用于持久性的C ++模塊,使用隱寫術從位圖獲取數據,解密配置任務(制作屏幕截圖,對目標進行指紋識別,獲取文件等)及其執行以及與主要合法公眾的網絡通信。云服務,例如Google,Microsoft和Dropbox。MontysThree配置為搜索存儲在當前文檔目錄和可移動媒體中的特定Microsoft Office和Adobe Acrobat文檔。該惡意軟件使用自定義隱寫術和多種加密方案:除了基于XOR的自定義加密外,這些模塊還依賴3DES和RSA算法進行配置解密和通信。
MontysThree包含具有適當俄語語言和配置的自然語言工件,這些工件尋找僅在Cyrilic本地化Windows版本上存在的目錄。盡管大多數外部公共云通信使用基于令牌的授權,但某些示例包含基于電子郵件的帳戶,這些帳戶偽裝成中文外觀。我們認為這些名稱是錯誤的標志。更多文物表明該惡意軟件由說俄語的演員開發,并且針對西里爾Windows版本。
惡意軟件如何傳播
初始加載程序模塊散布在RAR自解壓檔案(SFX)中,其名稱與員工的電話清單,技術文檔和醫學檢驗結果相關。沒有誘餌,只有PE文件(偽裝.pdf或.doc文件),但是這類標題現已成為魚叉式網絡釣魚的典型技巧-“企業信息更新”或“醫學分析結果”。其中一個裝載程序(
MD5 da49fea229dd2dedab2b909f24fb24ab)
的名稱為
“Списоктелефоновсотрудников2019.doc”(“員工電話清單”,俄語)。其他裝載機的名稱為“ Tech task.pdf”和“ invitro-106650152-1.pdf”。后者是俄羅斯醫學實驗室的名稱。所有這些似乎都是典型的魚叉式釣魚技巧。SFX腳本如下:
Path=%TEMP%
在執行時,SFX腳本調用%TEMP%目錄中已解壓縮的加載器可執行文件的Open()函數(我們將返回到此導出的名稱)并將其刪除。從文件名來看,它很可能模仿醫學分析結果,因為“ Invitro”是俄羅斯著名的醫學實驗室。該初始PE32是第一個加載程序模塊。
模塊如何工作和交流

MontysThree模塊的執行流程
上圖顯示了MontysThree模塊的整體執行流程。下表列出了四個模塊及其功能。這些模塊共享通用的通信約定。當處理諸如配置和詳細執行日志之類的共享數據時,該惡意軟件會初始化線程本地存儲(TLS)中的結構,而該線程又稱為堆結構。有趣的是,除RAM外,執行日志還存儲在磁盤上的文件中,并用一字節XOR加密。
入口點DllEntryPoint()的工作方式類似于構造函數,后者使用TlsAlloc()分配結構并將其保存在全局變量中。模塊必須導出一個名為Open()的函數,該函數不帶任何參數(但可以解析命令行)并返回一個四字節的錯誤代碼。
| 模塊名稱 | 特征 |
|---|---|
| Loader | 該反檢測模塊負責定制隱寫術,內核模塊解密。 |
| Kernel | 該內核(主)模塊負責解密config XML,然后解析并執行其中的相應任務。 |
| HttpTransport | 網絡模塊,用于與Google,Microsoft,Dropbox合法的公共云服務以及WebDAV源進行通信。該模塊能夠使用合法客戶端以幼稚的方式通過RDP和Citrix發出請求。 |
| LinkUpdate | 持久性模塊是Windows快速啟動.lnk修飾符。使用這種幼稚的持久性方法,用戶可以每次與Windows快速啟動工具欄上的瀏覽器一起自行運行Loader模塊。 |
現在,讓我們看一下開發人員如何將強大的現代加密標準與基于XOR的自定義標準混合在一起。
| 任務 | 使用加密 |
|---|---|
| Steganography | 為了解密內核模塊,初始加載器使用自定義算法。 |
| Logs encryption | 惡意軟件日志同時存在于內存和磁盤上的加密文件中。在RAM中,開發人員將日志以純文本格式存儲,在磁盤上,他們使用一字節XOR。 |
| Config encryption | 內核模塊使用強大的加密算法。配置數據使用3DES加密,密鑰使用RSA加密。所有密鑰(RSA公鑰/私鑰以及加密的3DES)都存儲在模塊的.data節中。 |
| Network module encryption | 最初加密的HttpTransport由存儲在內核模塊中的四個二進制Blob組成。內核將它們串聯起來,并使用基于XOR的自定義算法對其進行解密。使用四個字節長度的循環密鑰 |
| 通訊加密 | 加密算法是RSA,它使用存儲在內核模塊.data節中的相同公鑰和私鑰。 |
加載器模塊:位圖解密器和下一個啟動器
如果包含隱寫術加密數據的位圖文件名作為參數提供給加載程序,則加載程序將從像素數組解密下一個上載程序。在第一次迭代中,它提取隱寫參數數據。為此,算法采用字節的最后位。

IID,IParam和ISize參數保留在像素陣列的前384個字節中,這意味著僅需要每個像素陣列字節的最后一位。結果,該模塊使用這些字段收集了48個字節的隱秘配置結構,以確定下一個解密階段。
| 領域 | 抵消 | 特征 |
|—-|—-|
| IID | 0x00 | 確定一個或兩個解密層將應用于以下像素陣列。 |
| IParam | 0x04 | 確定像素數組字節中的哪些位將形成下一個內核模塊。 |
| 大小 | 0x28 | 解密后的內核模塊的大小。 |
提取隱寫參數后,使用兩步算法對下一個上載程序進行解密。首先,IParam算法從像素陣列的字節中選擇位。然后,如果IID等于2,則對收集到的字節應用使用四字節輪回密鑰的自定義除錯操作。前四個字節解密的初始密鑰的硬編碼值為0x23041920。然后,下一個字節的舍入XOR鍵的公式為:
key ^= 8 * (key ^ (key << 20))
我們認為這種隱寫術算法是定制的,而不是從某些開源第三方存儲庫中獲取的。令人驚訝的是,解密結果并未注入到某個進程的內存中,而是作為名為msgslang32.dll的文件放置到磁盤上。然后,加載程序僅使用Windows API函數LoadLibraryW()和GetProcAddress()來運行下一個stager的Open()函數,如我們先前在加載程序模塊中看到的那樣。
內核模塊:配置解密器和任務分配器
內核模塊包含三個用于配置解密和C2通信的加密密鑰。公共和私有RSA密鑰分別以PUBLICKEYBLOB和PRIVATEKEYBLOB的形式存儲在.data節中。這些用于加密C2通信并解密3DES密鑰。第三個3DES密鑰也以加密形式存儲在.data節中。此密鑰用于解密包含XML配置的嵌入式.cab存檔。要解壓縮.cab存檔,該模塊使用Window的標準系統實用程序“ expand.exe”。我們將在HttpTransport模塊中看到另一種常見的軟件用法。
XML配置包含有價值的數據,可幫助我們了解廣告系列運營商的興趣。它使用針對惡意軟件的各種“任務”進行組織,例如使用其操作系統版本對目標進行指紋識別,處理列表并捕獲屏幕截圖;而且還會從%USERPROFILE中的幾個最新文檔目錄中獲取擴展名為:
.doc,.docx,.xls,.xlsx,.rtf,.pdf,.odt,.psw,.pwd的任何擴展名的用戶最新文檔列表%和%APPDATA%,包括%APPDATA%\ Microsoft \ Office \Последниефайлы。此文件夾名稱翻譯成俄語的“最近文件”,表明該惡意軟件針對西里爾本地化的Windows版本。

Config包含任務計劃(屏幕截圖),訪問令牌(此處為Dropbox,已編輯),感興趣的目錄和擴展。一個目錄僅在Cyrillic Windows本地化版本上存在。
我們觀察到了一些西里爾文字字符串,例如:
“Снимокрабочегостола”(桌面快照)
“Системнаяинформация”(系統信息)
“Времявыхода”(退出時間)

配置任務描述以MT3D開頭,并包含俄語中的適當簡短短語
解密后的配置結構如下:
| 領域 | 尺寸 | 內容 |
|---|---|---|
| Magic | 4 bytes | MT3D。所有解析的文件都必須將此前綴作為有效前綴 |
| Creation time | 4 bytes | 時間戳記,任務配置創建時間存儲為大紀元時間 |
| Header size | 4 bytes | 標頭大小必須大于18。觀察到的值例如為0x7E |
| XML size | 4 bytes | XML任務描述必須大于零。觀測值例如是0x662D |
| XML body | XML大小 | XML格式的任務說明和時間表 |
盡管我們查看的示例不包含RTTI信息,但執行日志使我們能夠恢復C ++類名。內核模塊將配置中的任務解析到內存后,處理指令的主要類是CTask。CTask的IoControl()方法負責處理相應的任務,并依次運行以下方法:
| CTask方法 | 特征 |
|---|---|
| MainIoControl() | XML中“主要”任務的處理程序。如果執行RESET命令,則將刪除用作“管道”的文件。此處的任何其他命令將被記錄,但不會執行 |
| FileIoControl() | 使用PUT,DEL,FIND,WATCH,WATCH_REMOVABLE,RUN和LOGS子命令執行“文件”任務的處理程序 |
| SysInfoIoControl() | 帶有SCREENSHOT,INFO和TASKLIST子命令的“ SysInfo”任務的處理程序 |
| HttpIoControl() | 使用SENDRECV子命令的“ Http”任務的處理程序 |
| GDriveIoControl() | 使用SENDRECV子命令的“ GDrive”任務的處理程序 |
| DropboxIoControl() | 使用SENDRECV子命令的“ Dropbox”任務的處理程序 |
用于外部通信的所有方法都首先解密HttpTransport模塊,然后使用它傳輸經過RSA加密的相應數據。使用的RSA密鑰與用于解密3DES配置密鑰的上述密鑰相同。在單獨的Window過程中,惡意軟件將監視是否插入了USB設備,以搜索感興趣的文件。
HttpTransport模塊:網絡任務
HttpTransport模塊在內核模塊的.text部分中以四個加密的數據塊形式存在。當內核需要通信時,它會解密此模塊,并像通常的MontysThree一樣,運行Open()函數,并傳遞命令行參數。
根據從內核模塊發送的參數,模塊可以使用RDP,WebDAV,Citrix和HTTP協議上載或下載內容。HttpTransport也實現了使用用戶令牌從Google和Dropbox公共服務下載數據。在HTTP GET / POST請求的情況下,該惡意軟件將使用Windows API HTTP相關功能從相應URL接收隱寫位圖圖片。
前述通信協議本身未在模塊內部實現。惡意軟件作者利用目標計算機上已經安裝的合法Windows程序(如RDP,Citrix客戶端和Internet Explorer)進行操作。例如,該模塊執行任務以將一些數據發送到URL并通過RDP連接接收答復,如下所示:編輯.rdp文件以在遠程計算機上靜默運行Internet Explorer;通過剪貼板將URL粘貼到瀏覽器中;等待并通過剪貼板將內容粘貼到打開的網頁上;等待并再次通過剪貼板接收結果。
為了復制數據,該惡意軟件實際上會發送Ctrl + C,Ctrl + V和Ctrl + A。也許這是我們第一次看到這樣的“ RDP通信”方法。Citrix通信是通過類似的過程完成的:惡意軟件沒有實現協議,而是搜索XenApp pnagent.exe的Windows Quick Launch .lnk,遠程運行Internet Explorer,并使用特殊的鍵盤快捷鍵通過剪貼板與之通信。
Dropbox和Google數據的上載和下載依賴于另一個原理:其實現使用自定義類CSimpleHttp進行身份驗證并發送HTTP請求。對于WebDAV通信,開發人員只需使用“ net use” Windows命令即可。
鏈接更新
該輔助模塊負責在主機上實現持久性。當用戶使用修改后的鏈接執行加載程序時,它將在Windows快速啟動面板中更改.lnk文件,以與合法應用程序(例如瀏覽器)一起運行加載程序。
誰是該惡意軟件的幕后黑手
正如我們在開始時提到的那樣,到目前為止,在TTP,基礎架構或惡意軟件代碼方面,我們還沒有發現與已知活動的相似之處或重疊之處。到目前為止,我們將這項活動和MontysThree的使用歸因于新演員。一些樣本包含用于與公共云服務進行通信的帳戶詳細信息,這些帳戶偽裝成中文。考慮到所有上述的Cyriclic人工制品,我們認為這些帳戶名稱是錯誤的標志。
我們假設MontysThree背后的演員既會說俄語又會講俄語。用于傳播惡意軟件的RAR SFX歸檔文件的某些文件名是用俄語編寫的,并引用了俄羅斯醫學實驗室的名稱,用于誘使用戶打開文件。XML配置展示了用俄語編寫的數據字段和Windows標題,以及Windows的Cyrilic本地化版本中存在的特定文件夾路徑。我們還在惡意軟件的英文日志消息字符串中看到了一些語法錯誤。
總結一下
通常,我們會看到針對性惡意軟件,這些惡意軟件主要針對政府實體,外交官和電信運營商,這對于政府資助的參與者而言是豐碩的。像MontysThree這樣的工業間諜案要少得多。
就傳播,持久性方法而言,總體上的營銷活動復雜度與頂尖的APT參與者沒有可比性。而且,惡意軟件的某些方面(同時登錄RAM和文件,將加密密鑰保留在同一文件中,在遠程RDP主機上運行不可見的瀏覽器)在惡意軟件開發方面似乎還不成熟和業余。
另一方面,在MontysThree中的代碼量以及因此投入的精力是巨大的。該工具集展示了一些精通技術的決策:在RSA加密下存儲3DES密鑰,避免IDS的自定義隱寫術以及使用合法的云存儲提供商隱藏C2流量。
文件哈希
Loader
1B0EE014DD2D29476DF31BA078A3FF48
0976C442A06D2D8A34E9B6D38D45AE42
A2AA414B30934893864A961B71F91D98
Kernel
A221671ED8C3956E0B9AF2A5E04BDEE3
3A885062DAA36AE3227F16718A5B2BDB
3AFA43E1BC578460BE002EB58FA7C2DE
HttpTransport
017539B3D744F7B6C62C94CE4BCA444F
501E91BA1CE1532D9790FCD1229CBBDA
D6FB78D16DFE73E6DD416483A32E1D72
域和IP
autosport-club.tekcities[.]com
dl10-web-stock[.]ru
dl16-web-eticket[.]ru
dl166-web-eticket[.]ru
dl55-web-yachtbooking[.]xyz
原創:知秋一葉 安全365
原文鏈接:https://mp.weixin.qq.com/s?__biz=MzAxOTI2O...