伴隨著放開二胎政策的實(shí)施,在16年到來之際又一條重磅消息隨之而來,國家將取消晚婚假。消息一出就一直備受大家的關(guān)注,新聞、政府文件也成為了大家獲取第一手消息的主要途徑。最近發(fā)現(xiàn),有一類感染型病毒正借此機(jī)會(huì)大肆傳播。
詳細(xì)分析:
下圖展示了病毒的整個(gè)執(zhí)行過程:
首先病毒偽裝成文檔的圖標(biāo),命名為晚婚假取消最新解讀,誘騙用戶點(diǎn)擊。
當(dāng)用戶點(diǎn)擊后,彈出了一個(gè)關(guān)于晚婚假被取消的文章,用戶認(rèn)為這就是一個(gè)普通文檔。
但隨即也運(yùn)行了病毒程序,修改了IE,隨即感染了系統(tǒng)文件。我們上傳到哈勃,可以看到詳細(xì)的分析。
在哈勃的分析結(jié)果中,得知病毒釋放了可執(zhí)行文件。
通過WriteFile的參數(shù),看一下寫入的內(nèi)容??吹絼?chuàng)建的文件是一個(gè)可執(zhí)行文件。
創(chuàng)建文件完成后,程序執(zhí)行到0×450741。此時(shí)ebx的值為E043A159.
查看[ebx+20016835]處存放的內(nèi)容,恰好是CreateProcess加載到內(nèi)存中后的地址0x7C80236B.
再看一下第二個(gè)參數(shù)的內(nèi)容,位于地址0×00450795處。
這樣就將whjmgr.exe運(yùn)行起來了。此時(shí)也看到桌面多出了一個(gè)新的文件。
whjmgr.exe程序主要任務(wù)是將惡意代碼注入到IE進(jìn)程,借IE來運(yùn)行惡意代碼,避免查殺。但所用手法并不是常見的注入手段。下面進(jìn)行詳細(xì)的分析。
whjmgr.exe運(yùn)行后首先會(huì)查找IEXPLORE.EXE文件所在的位置,執(zhí)行到0x0040127E時(shí),由下圖看到ebp的值是0012F7E4。[ebp+8]處指向的內(nèi)容0041C70C,而此處存放的正是iexplore.exe文件的路徑,這樣就調(diào)用CreateProcess創(chuàng)建了IE進(jìn)程。
此時(shí),病毒已經(jīng)將ZwWriteVirtualMemory進(jìn)行了hook,所以當(dāng)CreateProcess函數(shù)內(nèi)部調(diào)用到此函數(shù)時(shí),會(huì)跳轉(zhuǎn)到用戶空間的代碼處0x00402C31,也是hook函數(shù)的起始地址。
在hook函數(shù)中調(diào)用多次WriteProcessMemory,將惡意代碼寫入到IE進(jìn)程中,第一次寫入的是一個(gè)dll,寫在了IE進(jìn)程中內(nèi)存地址為0×020010000處。
后面幾次WriteProcessMemory寫入的內(nèi)容是跳轉(zhuǎn)指令,最終會(huì)跳轉(zhuǎn)到DllEntrypoint。最后一次WriteProcessMemory是修改IE進(jìn)程的EntryPoint處的代碼,這樣IE運(yùn)行后,就可以來到惡意程序的入口處執(zhí)行代碼。
修改以后,IE入口處的代碼變?yōu)?/p>
注入IE進(jìn)程也就完成了。
從整個(gè)過程來看,病毒利用hookZwWriteVirtualMemory函數(shù),在CreateProcess過程中,順帶也把IE進(jìn)程的內(nèi)存進(jìn)行了修改,修改結(jié)束后,系統(tǒng)自動(dòng)執(zhí)行了IE進(jìn)程。并不是通常用掛起方式創(chuàng)建進(jìn)程,修改內(nèi)存后,再自己調(diào)用ResumeThread。所以注入方式比較新穎。
IE運(yùn)行后,經(jīng)過幾次跳轉(zhuǎn),會(huì)執(zhí)行到之前寫入dll的入口處DllEntryPoint,代碼會(huì)訪問2001AEACh和2001AEB0h兩個(gè)地方,如果是感染IE跳轉(zhuǎn)來的,那么這兩個(gè)值在之前會(huì)被寫入數(shù)據(jù),如果是通過加載器加載的dll,執(zhí)行到這里就會(huì)失敗。也算是一種對(duì)抗逆向的手段。
隨后,惡意代碼會(huì)遍歷系統(tǒng)文件夾下的文件,并對(duì)文件類型進(jìn)行判斷。
此時(shí)edi指向的PE文件頭,+98h處是PE數(shù)據(jù)目錄成員的第五個(gè)元素SecurityTable,所指向的是文件簽名信息的附加數(shù)據(jù)。所以如果是簽名的文件,病毒也會(huì)放棄感染。
緊接著,會(huì)修改PE文件頭,設(shè)置了VirtualAddress,PointerToRawData,VirtualSize,SizeOfData等,并命名為.text。
調(diào)用WriteFile將附加數(shù)據(jù)寫到文件尾部,再調(diào)用CheckSumMappedFile函數(shù),重新計(jì)算映像校驗(yàn)和,并修改。
最后設(shè)置EntryPoint,0×14000正是新增區(qū)塊的VirtualAddress。
完成了整個(gè)感染的過程。被感染的文件成為了新的母體。
病毒樣本采用了多種對(duì)抗調(diào)試的手法,除了上文中提到的,還包括檢查關(guān)鍵API開頭字節(jié)是否為Int3指令,如果是則會(huì)修改,以防下斷點(diǎn)進(jìn)行調(diào)試。