學習筆記-Ramnit 蠕蟲分析


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只在內存中出現,具有一定的隱蔽性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM