近日,360安全中心攔截到一個(gè)Zbot的變種木馬,專門(mén)盜取網(wǎng)友的銀行卡、電子郵箱密碼等個(gè)人信息。該變種木馬使用了三層保護(hù)技術(shù),能夠繞過(guò)QQ郵箱的安全檢測(cè)。不過(guò)360的 QVM引擎對(duì)這類(lèi)樣本有著比較全面的收集和訓(xùn)練,能夠及時(shí)檢出最新的變種。目前,該變種木馬已經(jīng)被360安全衛(wèi)士已經(jīng)攔截查殺。
一封來(lái)自“outlook官方”的郵件
最近工程師收到這樣一封郵件,發(fā)件人顯示為“Microsoft outlook”,附件貌似是個(gè)音頻文件。但是把附件下載到本地一看,卻是一個(gè)Zbot木馬。
Zbot其實(shí)是一個(gè)很古老的木馬了,它會(huì)將惡意代碼注入到除CSRSS.EXE以外的所有進(jìn)程。這些惡意代碼會(huì)掛鉤許多與網(wǎng)絡(luò)操作相關(guān)的函數(shù)來(lái)監(jiān)控網(wǎng)絡(luò)數(shù)據(jù),以達(dá)到盜取用戶銀行卡信息、電子郵箱密碼等個(gè)人信息的目的。盜取到的信息會(huì)先存儲(chǔ)在本地,隨后發(fā)送到配置文件里所指定的地址。但這個(gè)變種還有些新意,用了一些偽裝手段繞過(guò)了QQ郵箱的安全檢測(cè)。下面是詳細(xì)分析:
看“老”木馬如何“換新裝”
木馬加載過(guò)程
第一層免殺:程序會(huì)先拷貝一段數(shù)組到內(nèi)存中去作為shellcode來(lái)執(zhí)行。
將這段內(nèi)存數(shù)據(jù)扒出來(lái),用IDA查看。
可見(jiàn)這段代碼是被混淆過(guò)的,這些做法都是為了躲過(guò)殺軟的特征查殺。
第二層免殺:接著段代碼分配了一段內(nèi)存將宿主程序拷貝進(jìn)去,然后從文件的末尾往前搜索以B4E32392開(kāi)頭的數(shù)據(jù)并進(jìn)行解密。
然后,shellcode調(diào)用VirtualAlloc重新分配一段空間(準(zhǔn)備填充解壓后的數(shù)據(jù)),再調(diào)用RtlDecompressBuffer將這段被解密的數(shù)據(jù)再解壓到重新分配的空間中,這段解密后的數(shù)據(jù)就是zbot木馬的文件數(shù)據(jù)。
以這樣的方式得到木馬文件就避免了釋放文件的操作,躲避了殺軟對(duì)木馬文件的掃描。
第三層免殺:之后程序以掛起的方式創(chuàng)建新的進(jìn)程(傀儡進(jìn)程),并調(diào)用釋放傀儡進(jìn)程的內(nèi)存映射,這樣是為后邊修改線程上下文做準(zhǔn)備。
重新分配空間并設(shè)置屬性為可執(zhí)行,用來(lái)存放母體文件的內(nèi)存映射。
分別寫(xiě)入文件頭和各個(gè)區(qū)段。
再調(diào)用GetThreadContext獲得線程上下文,修改傀儡進(jìn)程的Eip,把Eip指向程序的入口,這是程序就跑到zbot木馬的入口點(diǎn)。
最后調(diào)用SetThreadContext并恢復(fù)線程,木馬程序開(kāi)始跑起來(lái)。
木馬就是通過(guò)這種方式,避免了直接加載母體進(jìn)程,從而逃避了部分殺軟的檢測(cè)。
寫(xiě)在最后:360為什么能查殺?
主文件使用.NET編寫(xiě)的,作者通過(guò)在.NET程序里分配一段可執(zhí)行內(nèi)存空間,并拷貝一段被混淆的代碼到此空間,然后加載;接著混淆代碼又在文件中搜索被壓縮過(guò)的一段數(shù)據(jù)進(jìn)行解壓得到母體文件;最后通過(guò)掛起新進(jìn)程,修改線程上下文的方式觸發(fā)母體文件。
簡(jiǎn)單來(lái)說(shuō),木馬需要經(jīng)過(guò)以下幾部分才會(huì)運(yùn)行:宿主文件à混淆代碼à壓縮數(shù)據(jù)à母體文件à掛起線程修改eipà觸發(fā)木馬。
這個(gè)變種用了三層的保護(hù)技術(shù),增加了殺毒軟件檢測(cè)的難度,好在360的QVM對(duì)這類(lèi)樣本有著比較全面的收集和訓(xùn)練,能夠檢出最新出現(xiàn)的變種。