惡意傳播之——社工+白+黑

wyzsk發表於2020-08-19
作者: 衛士通攻防實驗室 · 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檢視後可判定完全沒有問題。此外,該檔案有正常的數字簽名,見下圖。

p1

  • 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個執行緒。

p2

這其中第4個執行緒,即執行sub_427C80的執行緒會進一步呼叫sub_42F090函式,在該函式的子函式中,會載入HWSignature.dll,但此處被樣本劫持,用來執行其惡意功能。

p3

0x03 DLL分析


跟進這個DLL,進一步分析該DLL的行為。無關行為不說,該DLL會開啟HanziSort.dat檔案:

p4

讀取其內容,並解碼:

p5

其解碼方式很簡單,只是把讀取到的檔案內容逐位元組的與0x56做異或運算。解碼之後,成為包含可執行指令的程式段:

p6

此後,程式會透過retn的方式跳到解碼的程式碼段執行。

0x04 DAT分析


在DAT解碼的程式碼中,首先會尋找解碼內容為0xDDCCBBAA的位置:

p7

透過該地址,可以輔助完成一些列的定位操作,具體內容不做介紹。進而會呼叫VirtualAlloc函式分配記憶體空間,然後透過memcpy函式將指定資料複製到申請的記憶體中:

p8

p9

而複製過去的記憶體段,會再一次進行解碼:

p10

其解碼方式同樣比較簡單,是逐位元組與0xCC進行異或運算。當完整所有解碼工作之後,可以發現解碼之後的記憶體為一個完整的PE檔案:

p11

將該PE檔案dump出來,用檢視CFF看下,可以確認是個完整的DLL:

p12 (忽略一些細節吧。筆者懶得打碼了。)

這個DLL叫做svchost2.dll,後面的程式碼可想而知,新申請一塊記憶體

p13

然後手動完成PE的載入流程:

p14

以及根據匯入表和重定位表做一些修復工作,並載入所需的各種DLL,最後呼叫VirtualProtect更改頁保護。

p15

完成以上操作之後,呼叫DLL main函式:

p16

DLL的主函式並沒有什麼需要深入分析的地方,這裡略過。DLL main返回後,會查詢DLL匯出的mystart函式:

p17

最後呼叫mystart:

p18

0x05 mystart分析


在該函式中,首先會獲得當前僅程式的名字,並判斷名字中是否包含”1.exe”字串。

p19

獲得的樣本中,當然是包含該字串的。接下來,會進行一些有意思的事。首先會呼叫WinExec執行”taskkill /f /im cmd.exe”命令,然後建立一個互斥體。

p20

進一步的,該樣本會在C:\Users\zzz\AppData\Roaming建立一個資料夾,其名字隨機:

p21

在本次分析中為:C:\Users\zzz\AppData\Roaming\dptpbzwoztxwrh,並將樣本所在的資料夾中所有檔案都複製到該目錄下,包括ida生成的幾個檔案,但排除01.jpg.jpg。對於這幅圖片,該樣本會呼叫cmd執行rundll32.exe shimgvw.dll imageview_fullscreen 01.jpg.jpg,其作用就是把樣本中的01.jpg.jpg展示出來:

p22 (01.jpg.jpg :什麼仇什麼怨?)

如此一來,受害者看到了想了解的《價格表》,也不會懷疑該檔案是木馬了。此外,複製到Roaming的主程式會重新命名為MSUpdateXXXXXXXX.exe,XXXXXXXX表示8位隨機字母。注意,IDA生成的幾個檔案也會被複制過去並重新命名。

p23

複製完成之後,釋放互斥體,並Sleep(0x2EE0)的時間。

p24

並登錄檔增加一些鍵值:

p25

最後,透過shellexecute執行剛剛複製到Roaming的樣本檔案。

p26

0x06 第二次執行分析


當第二次執行時,之前的行為都是類似的,只有在mystart函式中,出現了變化。由於當前程式是複製到Roaming下的映象檔案,重新命名之後不包含”1.exe”字串(參考上文)。所以會執行到另一個分支,呼叫Fi函式。

p27

該函式為svchost2.dll的另外一個匯出函式。該函式會隱藏自己的程式名以及其他的資訊:

p28

隱藏結果使自己的程式名變為csrss.exe的,如圖:

p29

但這種隱藏手段並不高階,隨便一個工具就能識別出來。

進而,會呼叫Fa函式,該DLL的另一個匯出函式。在該函式中出現了一些網路行為。首先,會連線139.196.184.116:34176

p30

併傳送資料:

p31

該資料是怎麼來的,暫時沒有必要追究。有需要時,可以進一步分析,不過,可以肯定的是,對於同一臺機器,每次傳送的資料是一樣的,應該是作為機器的ID標識。傳送之後,會接收到如下內容:

p32

針對返回的內容,會判斷是否含有”Set-Cookie:”字串,如果有,則取出:

p33

接下來,會用該Cookie作為機器的標識。

進而,會連線139.196.184.116:35131地址:

p34

但是該埠已經掛掉了,無法連線上。所以,筆者只好重新定向到自己的IP,並模擬其通訊。 連線上IP之後,會傳送一些隨機生成的資料:

p35

本機的監聽結果如下:

p36

傳送3次隨機生成的資料之後,會建立新執行緒用於接收返回資料:

p37

該執行緒會接收來自139.196.184.116:35131回覆的資料,但是由於該埠已經掛掉了,筆者只能隨意的回覆點什麼東西,[email protected]

p38

接收到回覆之後,會在sub_12A50F0中做解碼工作。其解碼工作首先會將受到的資料逐位元與0xE9異或。

p39

進而會對長度進行判斷,然後對幾個關鍵位置的內容進行判斷,如果出現不符合的情況就會結束該執行緒;如果全部滿足條件,則呼叫zlib 1.2.8版的庫函式解壓接收到的資料。

p40

最後根據解壓縮出來的內容選擇初始化某個物件,並呼叫該物件的成員函式,實現惡意功能。

p41

執行完畢後,該執行緒會進入迴圈接收新的資料,並執行相應功能。此外,主執行緒建立了上述之後,會統計當前系統的各種資訊:

p42

其中sub_100010F0實現捕獲攝像頭資訊的相關操作。當獲取了所有的資訊之後,傳送給目標地址,目標地址同樣掛掉了。最後同樣進入傳送和接收的迴圈中。

0x07 惡意功能分析


該樣本的惡意功能比較多,現隨機展示一個透過匿名雙管道實現遠端CMD的功能。該功能由編號0x31的分支實現。

p43

詳情參考sub_10007DC0函式,該函式首先會呼叫sub_10004C00 初始化socket,進而呼叫sub_1000F060建立管道並啟動CMD程式:

p44

p45

0x08 結語


這個樣本並不複雜,但是能夠實現較為全面的木馬功能,另外透過遊戲攻略進行傳播,利用白+黑的方式過殺軟。哪怕現在HWSignature.dll會被查殺。但有白名單宿主程式的話,繞過殺軟並不困難(基本瞬間就能想到好幾種繞過檢測的方式)。因此這種模式是值得我們警惕的。

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章