技術分享-SSnatchLoader惡意軟件更新分析
SnatchLoader是一種“downloader”類型的惡意軟件專門用于將惡意軟件分發(或加載)到受感染的計算機系統上。 我們在2017年1月左右發現了該惡意軟件的網絡攻擊活動,該攻擊活動一直持續了幾個月的時間才慢慢消失。最近,我們的研究人員發現該惡意軟件又開始發起新一輪的網絡攻擊活動了,在此次網絡攻擊活動中我們捕獲到了該惡意軟件的更新,并發現該惡意軟件正被用于加載Ramnit銀行特洛伊木馬。此外,該惡意軟件還使用了一個稱為“地理IP阻止”的有趣功能,以使得只有某些地理區域的計算機才會被感染。到目前為止,我們已經能夠確定,至少英國和意大利是該惡意軟件攻擊的目標,但美國,法國和香港目前還不是。
SnatchLoader命令和控制面板的登錄頁面
介紹
幾個月前,有一個關于關于垃圾郵件廣告的Twitter ,當時是一個未知的“downloader”惡意軟件,該惡意軟件專門用于將惡意軟件分發(或加載)到受感染的計算機系統上。根據我們的分析,該“downloader”惡意軟件是“SnatchLoader”惡意軟件的更新程序,KernelMode.info論壇在2017年1月期間有對SnatchLoader進行簡要討論的相關帖子的。正如論壇上該帖子所述,盡管沒有進行詳細的代碼比較,但SnatchLoader和H1N1 Loader的惡意軟件家族似乎有一些相似之處。除此之外,目前我們還沒有看到任何關于SnatchLoader惡意軟件的進一步討論,因此本文我們將對SnatchLoader最新版本更新進行分析。
樣本
Twitter 中引用的示例在VirusTotal上可以找到。 然而,我們的大多數靜態分析工作是在更新版本的“核心DLL”上執行的,該更新程序的最新編譯日期為2017-10-04,該DLL在2017年10月11日首次被上傳到了VirusTotal上。
Windows API調用
通過我們的分析發現,該惡意軟件對Windows API的調用都是在運行時通過函數名哈希的方式進行的,散列算法是ROL和XOR運算的組合,在GitHub上可以找到該散列算法的一個Python代碼實現。以下是一些API函數名稱及其對應的哈希表:
- RtlZeroMemory - > 0x6b6c652b
- CreateMutexW - > 0x43725043
- InternetConnectA - > 0x1d0c0b3e
靜態配置
一個靜態配置被加密存儲在DLL的PE Section中,目前我們已經看到該Section的兩個名稱:.idata和.xdata .,具體如下圖所示:
Section的第一個DWORD(上圖中的0x99a8)用作密鑰生成函數的種子,此功能的Python實現在GitHub上可以找到 ,使用RC4算法和生成的密鑰可以解密剩余的數據。解密的配置可以分成兩個塊:第一個塊是XML結構的配置數據,具體如下圖所示(為了可讀性添加了空格):
SRV是命令和控制(C2)服務器的URL,TIME是回連的輪詢間隔(單位時間為分鐘),NAME是一個活動標識符(02.10可能意味著10月2日),KEY用于加密回連通信。
第二個配置塊是一個RSA證書,用于對下載的數據的執行簽名檢查。
命令與控制
到目前為止,我們觀察到的所有C2 URL都是HTTPS的。 但是通過使用調試器,我們可以使用HTTP與服務器進行通信,并以明文方式查看回連的通信網絡流量,具體如下圖所示:
惡意軟件對POST數據進行了四次加密操作:
1.RC4加密,KEY來源于配置文件
2.Base64編碼
3.字符替換
4.使用“\ r \ n”分隔符把數據拆分成64字節的數據塊
有三個字符被替換了,并且它們都是可逆的:
+ 到 -
/ 至 _
. 到 =
響應數據好像也被加密處理了,但并沒有經過4次加密處理。
通信分為四種請求類型:
1.獲取動態配置
2.發送系統信息
3.命令輪詢
4.發送命令結果
獲取動態配置請求
以下是“獲取動態配置”請求的純文本請求數據:
- req=0&guid=FCD08AEE3C0E9409&name=02.10&trash=ulbncmamlxwjakbnbmaklvvhamathrgsfrpbsfrfqeqpatisgsfrqbtfrgqfrpbuithtisrctisgsfrqbujtiuistduith
各個請求字段的含義分別是:
- req:請求類型
- guid:bot ID
- name:來自靜態配置的NAME
- trash: 隨機長度的隨機字符
響應如下所示:
- SUCCESS|<CFG><SRV>https://lookmans[.]eu/css/order.php|https://vertasikupper[.]eu/css/order.php</SRV><TIME>120</TIME><NAME>02.10</NAME><KEY>547bnw47drtsb78d3</KEY></CFG>|
該響應可以分為兩個字段:狀態字段和數據部分。這里的狀態字段是“SUCCESS”,數據部分被封裝在“<CFG>塊”中,這個配置在代碼中稱為DYNAMIC配置。
發送系統信息請求
第二個回連請求發送一堆系統信息,如下所示:
- req=1&guid=FCD08AEE3C0E9409&name=02.10&win=9&x64=1&adm=1&det=0&def=0&nat=1&usrn=SYSTEM&cmpn=JOHN-PC&uagn=Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)&sftl=AddressBook|Connection Manager|DirectDrawEx|Fontcore|IE40|IE4Data|IE5BAKEX|IEData|MobileOptionPack|SchedulingAgent|WIC|&prcl=[System Process]\r\nSystem\r\nsmss.exe\r\ncsrss.exe\r\nwininit.exe\r\ncsrss.exe\r\nwinlogon.exe\r\nservices.exe\r\nlsass.exe\r\nlsm.exe\r\nsvchost.exe\r\nVBoxService.exe\r\nsvchost.exe\r\nsvchost.exe\r\nsvchost.exe\r\nsvchost.exe\r\naudiodg.exe\r\nsvchost.exe\r\nsvchost.exe\r\nspoolsv.exe\r\nsvchost.exe\r\ntaskhost.exe\r\nsvchost.exe\r\ndwm.exe\r\nexplorer.exe\r\nVBoxTray.exe\r\nSearchIndexer.exe\r\nwmpnetwk.exe\r\nsvchost.exe\r\nsppsvc.exe\r\nsvchost.exe\r\nmscorsvw.exe\r\nmscorsvw.exe\r\nSearchProtocolHost.exe\r\nmsiexec.exe\r\nsvchost.exe\r\nTrustedInstaller.exe\r\ntaskhost.exe\r\nSearchFilterHost.exe\r\nmsiexec.exe\r\ndllhost.exe\r\ndllhost.exe\r\nmsiexec.exe\r\nsvchost.exe\r\n&trash=ilnyyiittddnoyyiblambllvwgblalakjvufynamblcmambllwugxlwkwjvu\r\n
req - 請求類型
guid - bot ID
name - 來自配置的NAME
win - Windows版本
x64 - 是64位架構
adm - 是管理員
det - 與反分析相關
def - 檢測反分析過程名稱
nat - 具有RFC1918 IP地址
usrn - 用戶名
cmpn - 電腦名稱
uagn - 用戶代理
sftl - 從注冊表中的Uninstall 鍵值中列舉軟件
prcl - 進程列表
垃圾 - 隨機長度的隨機字符
響應如下所示:
SUCCESS|
命令輪詢請求
除了請求號是2之外,命令輪詢請求看起來類似于“獲取動態配置”請求,一個示例響應如下所示:
SUCCESS | <TASK> 20 | 1 | 2 || MZ ... \ X00 \ X00 </ TASK> |
該響應具有兩個字段,第一個字段是狀態字段,第二個字段是數據部分。這里的數據可以是零個或多個以下字段的TASK塊:
任務ID
命令類型
命令arg1(例如文件類型)
命令arg2(例如哈希值)
命令數據(例如可執行文件或URL)
SnatchLoader的主要功能是下載并加載其他惡意軟件系列,因此大多數命令類型和參數都支持以各種方式執行。在這個例子中,命令是首先提取嵌入的可執行文件然后執行提取到的可執行文件。其他一些支持的命令是:
插件功能
更新配置
更新程序
發送命令結果
最后一個回連類型用于發送命令的結果:
- req=3&guid=FCD08AEE3C0E9409&name=02.10&results=&trash=pffebxmawlawigdawkifcymbxmawlgebxlawkifcymbxmhebymbxlawkifcy
除了請求號是3之外,該請求類似于“命令輪詢”的請求,并且添加了一個附加參數(results)。 對于此請求,C2沒有任何的響應內容。
地理阻止和當前有效載荷
到目前為止,我們發現了該C2服務器的一個有趣的特征,它們似乎正在基于源IP地址執行某種地理阻塞操作。當我們嘗試通過美國,法國或香港的TOR或VPN節點與C2服務器進行互動時,服務器會響應“404 Not found”錯誤。但是,如果我們嘗試使用英國和意大利的VPN節點,C2服務器則會對請求進行回應。一般來說,地理阻擋不是一個新的特征,但并不是特別常見的。
在撰寫本文時,SnatchLoader僵尸網絡正在分發Ramnit惡意軟件(一個銀行惡意軟件),該銀行惡意軟件的編譯日期為2017年10月13日,該樣本可在VirusTotal上獲得 。
結論
在這篇文章里,我們對SnatchLoader下載器惡意軟件進行了研究和分析,該惡意軟件最早我們可以追溯到2017年1月,并且在上周我們發現了該惡意軟件的更新。目前,該惡意軟件正在通過垃圾郵件廣告進行傳播,并根據地理位置封鎖功能對某些特定的地理區域發起網絡攻擊。在撰寫本文時,SnatchLoader正在將Ramnit惡意軟件在英國和意大利這兩個國家內進行傳播。