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