作者:
衛士通攻防實驗室
·
2016/05/31 10:34
0x00 背景
日前實驗室捕獲一個樣本。遠遠望去,像是搜狗輸入法,在測試機中點開一看,彈出一款遊戲的物價表,再看PE檔案屬性,還帶正常著數字簽名,一副人畜無害的樣子。經過一番認真分析後。發現遠沒有這麼簡單,這裡就分析過程記錄一下,希望其他安全工作者有些許幫助。
先介紹一下所謂白名單免殺。隨著病毒與殺軟之間的鬥爭,殺軟的手段不斷地增多、增強,由早期傳統的特徵碼匹配演算法發展到目前虛擬機器技術、實時監控技術等流行的查殺演算法。但始終存在一種最直接也最根本的免殺方式——白名單免殺。病毒就安安靜靜地躺在殺軟的白名單中,誰閒的沒事會去查水錶呢?
當了解了白名單免殺的基本含義之後,就可以針對樣本進行深入的研究,本文以下內容就是筆者拿到樣本之後,逐步分析樣本主要功能的完整過程,其分析環境如下:
- 分析環境:win 7 x86 VMware
- 分析工具:IDA、CFF、OD
0x01 樣本概述
樣本包含5個檔案:
File name |
size |
MD5 |
attribute |
nvvsvc1.exe.exe |
451.50 KB (462336 bytes) |
4D9B3A508BC2402A86E10F7907022263 |
hidden |
HWSignature.dll |
48.50 KB (49664 bytes) |
85F50E1D2DE076079D98F09416E4C710 |
hidden |
HanziSort.dat |
158.75 KB (162557 bytes) |
4FB42CBC7ADD3CF2AB3F0A99B9E7CE25 |
hidden |
圖1 |
Shortcut linked to cmd |
cmd /c nvvsvc1.exe & exit |
Shortcut |
01.jpg.jpg |
99.07 KB (101446 bytes) |
78501660AD39494A7248BA0C96989494 |
hidden |
- nvvsvc1.exe:即為搜狗輸入法的更新工具,用virusbook檢視後可判定完全沒有問題。此外,該檔案有正常的數字簽名,見下圖。
- HWSignature.dll:這個DLL原本是搜狗輸入法的硬體簽名DLL,該樣本中被劫持為惡意劫持。
- HanziSort.dat:原本為搜狗輸入法與漢字相關的資料檔案,該樣本中被替換為其他資料檔案。
- 01.jpg.jpg:一副jpg圖片,內容為《怪物獵人官方最新價格表》,後文有展示。
- 圖1:指向cmd的快捷方式,其引數為
cmd.exe /c nvvsvc1.exe & exit
其中,nvvsvc1.exe為主程式,其目的是載入HWSignature.dll,而HWSignature.dll會載入並解碼HanziSort.dat, 進一步的,HanziSort.dat會再次解碼自身並在記憶體中釋放svchost2.dll,此後手動載入svchost2.dll,該DLL為包含惡意程式的主要功能。
傳播方式:以《怪物獵人官方最新物價表》為魚餌進行釣魚,下載解壓後,其他檔案隱藏,只能看到名稱為“圖1”的檔案,點開後確實會展示圖片,但木馬也會載入。筆者建議廣大遊戲玩家,下載的攻略要先看清是什麼東西,再點開檢視內容。
0x02 主程式分析
拿到樣本之後,首先放到virusbook查了查,主程式想必沒問題,而除此之外的一個DLL就被查出有問題了。很明顯,這是一個透過DLL劫持載入自己的木馬樣本,這種透過DLL劫持的木馬,可以算是白名單免殺嗎?這個問題先放一放,後文(0x8 結語)會給出筆者的看法。
IDA分析主程式,絕大部分都是輸入法相關的操作,中規中矩。值得注意的是,此處建立了8個執行緒。
這其中第4個執行緒,即執行sub_427C80的執行緒會進一步呼叫sub_42F090函式,在該函式的子函式中,會載入HWSignature.dll,但此處被樣本劫持,用來執行其惡意功能。
0x03 DLL分析
跟進這個DLL,進一步分析該DLL的行為。無關行為不說,該DLL會開啟HanziSort.dat檔案:
讀取其內容,並解碼:
其解碼方式很簡單,只是把讀取到的檔案內容逐位元組的與0x56做異或運算。解碼之後,成為包含可執行指令的程式段:
此後,程式會透過retn的方式跳到解碼的程式碼段執行。
0x04 DAT分析
在DAT解碼的程式碼中,首先會尋找解碼內容為0xDDCCBBAA的位置:
透過該地址,可以輔助完成一些列的定位操作,具體內容不做介紹。進而會呼叫VirtualAlloc函式分配記憶體空間,然後透過memcpy函式將指定資料複製到申請的記憶體中:
而複製過去的記憶體段,會再一次進行解碼:
其解碼方式同樣比較簡單,是逐位元組與0xCC進行異或運算。當完整所有解碼工作之後,可以發現解碼之後的記憶體為一個完整的PE檔案:
將該PE檔案dump出來,用檢視CFF看下,可以確認是個完整的DLL:
(忽略一些細節吧。筆者懶得打碼了。)
這個DLL叫做svchost2.dll,後面的程式碼可想而知,新申請一塊記憶體
然後手動完成PE的載入流程:
以及根據匯入表和重定位表做一些修復工作,並載入所需的各種DLL,最後呼叫VirtualProtect更改頁保護。
完成以上操作之後,呼叫DLL main函式:
DLL的主函式並沒有什麼需要深入分析的地方,這裡略過。DLL main返回後,會查詢DLL匯出的mystart函式:
最後呼叫mystart:
0x05 mystart分析
在該函式中,首先會獲得當前僅程式的名字,並判斷名字中是否包含”1.exe”字串。
獲得的樣本中,當然是包含該字串的。接下來,會進行一些有意思的事。首先會呼叫WinExec執行”taskkill /f /im cmd.exe
”命令,然後建立一個互斥體。
進一步的,該樣本會在C:\Users\zzz\AppData\Roaming建立一個資料夾,其名字隨機:
在本次分析中為:C:\Users\zzz\AppData\Roaming\dptpbzwoztxwrh,並將樣本所在的資料夾中所有檔案都複製到該目錄下,包括ida生成的幾個檔案,但排除01.jpg.jpg。對於這幅圖片,該樣本會呼叫cmd執行rundll32.exe shimgvw.dll imageview_fullscreen 01.jpg.jpg,其作用就是把樣本中的01.jpg.jpg展示出來:
(01.jpg.jpg :什麼仇什麼怨?)
如此一來,受害者看到了想了解的《價格表》,也不會懷疑該檔案是木馬了。此外,複製到Roaming的主程式會重新命名為MSUpdateXXXXXXXX.exe,XXXXXXXX表示8位隨機字母。注意,IDA生成的幾個檔案也會被複制過去並重新命名。
複製完成之後,釋放互斥體,並Sleep(0x2EE0)的時間。
並登錄檔增加一些鍵值:
最後,透過shellexecute執行剛剛複製到Roaming的樣本檔案。
0x06 第二次執行分析
當第二次執行時,之前的行為都是類似的,只有在mystart函式中,出現了變化。由於當前程式是複製到Roaming下的映象檔案,重新命名之後不包含”1.exe”字串(參考上文)。所以會執行到另一個分支,呼叫Fi函式。
該函式為svchost2.dll的另外一個匯出函式。該函式會隱藏自己的程式名以及其他的資訊:
隱藏結果使自己的程式名變為csrss.exe的,如圖:
但這種隱藏手段並不高階,隨便一個工具就能識別出來。
進而,會呼叫Fa函式,該DLL的另一個匯出函式。在該函式中出現了一些網路行為。首先,會連線139.196.184.116:34176
併傳送資料:
該資料是怎麼來的,暫時沒有必要追究。有需要時,可以進一步分析,不過,可以肯定的是,對於同一臺機器,每次傳送的資料是一樣的,應該是作為機器的ID標識。傳送之後,會接收到如下內容:
針對返回的內容,會判斷是否含有”Set-Cookie:”字串,如果有,則取出:
接下來,會用該Cookie作為機器的標識。
進而,會連線139.196.184.116:35131地址:
但是該埠已經掛掉了,無法連線上。所以,筆者只好重新定向到自己的IP,並模擬其通訊。 連線上IP之後,會傳送一些隨機生成的資料:
本機的監聽結果如下:
傳送3次隨機生成的資料之後,會建立新執行緒用於接收返回資料:
該執行緒會接收來自139.196.184.116:35131回覆的資料,但是由於該埠已經掛掉了,筆者只能隨意的回覆點什麼東西,[email protected]
接收到回覆之後,會在sub_12A50F0中做解碼工作。其解碼工作首先會將受到的資料逐位元與0xE9異或。
進而會對長度進行判斷,然後對幾個關鍵位置的內容進行判斷,如果出現不符合的情況就會結束該執行緒;如果全部滿足條件,則呼叫zlib 1.2.8版的庫函式解壓接收到的資料。
最後根據解壓縮出來的內容選擇初始化某個物件,並呼叫該物件的成員函式,實現惡意功能。
執行完畢後,該執行緒會進入迴圈接收新的資料,並執行相應功能。此外,主執行緒建立了上述之後,會統計當前系統的各種資訊:
其中sub_100010F0實現捕獲攝像頭資訊的相關操作。當獲取了所有的資訊之後,傳送給目標地址,目標地址同樣掛掉了。最後同樣進入傳送和接收的迴圈中。
0x07 惡意功能分析
該樣本的惡意功能比較多,現隨機展示一個透過匿名雙管道實現遠端CMD的功能。該功能由編號0x31的分支實現。
詳情參考sub_10007DC0函式,該函式首先會呼叫sub_10004C00 初始化socket,進而呼叫sub_1000F060建立管道並啟動CMD程式:
0x08 結語
這個樣本並不複雜,但是能夠實現較為全面的木馬功能,另外透過遊戲攻略進行傳播,利用白+黑的方式過殺軟。哪怕現在HWSignature.dll會被查殺。但有白名單宿主程式的話,繞過殺軟並不困難(基本瞬間就能想到好幾種繞過檢測的方式)。因此這種模式是值得我們警惕的。
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!