0x00前言
Ramnit 蠕蟲是一種通過可移動驅動器傳播的蠕蟲。該蠕蟲還可以作為后門,允許遠程攻擊者訪問受感染的計算機,通常會寄生在用戶的瀏覽器中,難以察覺,因此每天都有數以萬計的用戶受其困擾。
分析工具:PEID、火絨劍、IDA、OD
分析環境:Win7 x86 Vmware
0x01樣本信息
File name DesktopLayer.exe
File Size 55 KB
File Type Win32 EXE
File Version:106.42.7
MD5: FF5E1F27193CE51EEC318714EF038BEF
SHA1: B4FA74A6F4DAB3A7BA702B6C8C129F889DB32CA6
CRC32: 40C57347
Packers: UPX 2.90
0x02樣本分析
一、 脫殼
1.一層脫殼
樣本被加了UPX 2.90殼。UPX殼最主要的目的是減小程序的體積,其特點是較高的壓縮率和較快的解壓速率,與TMD、VMP這類殼的設計理念完全不同,直接手動脫殼就可以了,其脫殼后的入口點模樣如下:
2.二層脫殼
脫殼之后的跳轉點並非OEP樣本仍然壓縮了大量的代碼,深入分析之后,可以判斷為是變形UPX殼。該變型殼首先解碼UPX解碼部分的代碼,然后利用UPX的解碼代碼再次解碼惡意功能的代碼。解碼代碼解碼完成后,會跳入該地址第二層的UPX繼續執行,等二層UPX完成其解碼之后,可以再次Dump,其最終的入口點如下:

二、 第一次執行分析
首先是獲取測試機的默認瀏覽器及其位置,其獲取方式是查找注冊表中,HKCR\http\shell\open\command的鍵值:
此處默認的瀏覽器為C:\Program Files\Google\Chrome\Application\chrome.exe。而后會通過FindFirstFile()函數判斷是否存在該文件如果不存在,那么會在幾個默認位置進行查找使用IE瀏覽器(后期用來進行進程注入),如果兩個方法都失敗,就會退出程序:
接下來會創建互斥體,檢驗KyUffThOkYwRRtgPP 是否已經存在來保證同一時間只有一個實例在運行:
通過GetModuleFileName()函數獲取自身執行體所在位置和文件名,將自身執行體的文件名與DesktopLayer.exe比較,然后會在C:\Program Files目錄下,創建Microsoft文件夾。並將Csrv.exe重命名為DesktopLayer.exe,並復制到C:\Program Files\Microsoft文件夾下最后,調用CreateProcess()創建該進程:
創建該進程之后,程序就調用ExitProcess()退出了。
三、 第二次執行分析
通過比較確認名稱為DesktopLayer.exe,程序改變了執行流程。將會對ntdll.dll中的ZwWriteVirtualMemory ()進行Hook操作:
調用CreateProcess()函數,啟動根據通過查詢注冊表找到的chrome.exe進程:


Createprocess()函數內部會調用ZwWriteVirtualMemory()函數,從而執行其經過Hook的代碼:

四、 HookCode執行分析
HookCode完成正常的WriteVirtualMemory()函數功能,通過ReadProcessMemory()函數獲取chrome.exe進程的內存信息, 根據讀取到的內存可以找到后續對chrome.exe的hook點。 然后自身進程內,解碼出rmnsoft.dll,手動加載,並根據導入表和重定位表進行相應的操作:
五、rmnsoft.dll分析
將DLL從內存中Ddump出來。由於該DLL並未有混淆或者加殼等措施,且程序結構比較清晰,易於分析,實現以下功能:
Sub_10007ACA:將自身文件路徑寫入注冊表SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit,實現自啟動。
Sub_1000781F:在C:\Program Files\Google\Chrome\Application下創建 dmlconf.dat 文件,並寫入 FILETIME 結構體數據。
Sub_10005906:監聽 4678 端口,等待連接。收到連接后會接受命令並執行對應的操作。疑似后門,用來接收攻擊者的命令.
Sub_1000749F:此函數中會創建兩個線程。感染可移動介質及文件,他會將自身寫入到可移動介質,並在目錄下創建 autorun.ini 文件,在PE文件中寫入一個 PE 文件;

0x03總結
分析比較倉促,應該遺留了不少東西,DesktopLayer.exe為樣本主要是通過Hook ZwWriteVirtualMemory()函數,然后在啟動默認瀏覽器進程的的時候運行HookCode,直接將所有相關的代碼和數據直接寫到被注入的進程空間中。其注入的DLL只在內存中出現,具有一定的隱蔽性。
