?
本期作者/牛杰
一、介紹
本篇文章為VBA腳本隱藏技術(shù)的最后一篇,將介紹如何在保證VBA腳本正常執(zhí)行的情況下,使分析人員無法打開編譯器。
那么為什么需要分析人員無法打開編譯器呢?
首先,我們需要引入一個知識點(diǎn)。
在上篇《VBA隱藏技術(shù)stomping》中,我們分析過,當(dāng)編譯腳本的VBA版本與運(yùn)行時版本一致時,才能執(zhí)行P-Code,可以通過修改VBA腳本的源碼,來欺騙OLE分析工具,但是該方法無法欺騙編譯器,因?yàn)榫幾g器版本與腳本文件運(yùn)行版本一致時,編譯器會將P-Code反編譯,分析人員可以看到VBA腳本的真實(shí)代碼,stomping技術(shù)便會失效,因此我們需要阻止分析人員打開編譯器。反之,當(dāng)我們分析惡意代碼時,遇到編譯器無法打開的情況下,如何排查該技術(shù)的使用,下面我們介紹如何實(shí)現(xiàn)編譯器崩潰。
二、VBA編譯器崩潰
我們先創(chuàng)建一個OFFICE文檔文件,更改文件類型為zip壓縮文件,然后解壓,在word目錄下找到vbaProject.bin。
打開vbaProject.bin文件,找到PROJECT流處的”Module=“,可以直接搜索特征”/&H00000000“,找到“Module=NewMacros“,NewMacros的非固定值,該字符串需要自行判斷,為了使編譯器崩潰,我們需要修改該字符串。
下圖中,NewMacros被清零,也可以將Module=NewMacros刪除,但是換行符"0x0D,0x0A"需要保留,同時后面的信息需要前移。
修改后保存,然后重新將文件打壓縮包,然后修改文件后綴,改為文檔文件,打開文件讓宏執(zhí)行,觀察宏是否能夠正常執(zhí)行,如果宏能夠正在執(zhí)行,打開紅管理器,點(diǎn)擊編譯。
當(dāng)點(diǎn)擊編譯時,提示未知的錯誤則說明修改成功,編譯器無法打開。
注:高版本OFFICE會提示位置的錯誤,如果使用的是低版本的OFFICE,OFFICE會隨編譯器一同崩潰。
三、實(shí)例
下面我們介紹一個使用VBA編譯器崩潰技術(shù)的實(shí)例,F(xiàn)ORTINET發(fā)布了一篇關(guān)于Energoatom公司被釣魚文件入侵的報告,其鏈接為https://www.fortinet.com/blog/threat-research/malware-disguised-as-document-ukraine-energoatom-delivers-havoc-demon-backdoor。
釣魚文件HASH[b773fa65bb375e6fe6d387f301f6bf33219189ea1d4a06762e965a9eba7de4e8],該釣魚文件是一個word文檔,報告中稱釣魚文件中VBA腳本使用了重定向技術(shù),將vbaProject.bin重定位到EbDYTPZ[.]vEypm,隨后在打開word查看VBA代碼時,編譯器崩潰,分析人員懷疑是PROJECT流中包含了錯誤簽名導(dǎo)致編譯器崩潰,因此使用oletools對EbDYTPZ[.]vEypm進(jìn)行了源碼提取。
圖:FORTINET報告
我們找到該樣本,對EbDYTPZ[.]vEypm重新進(jìn)行了分析,發(fā)現(xiàn)導(dǎo)致編譯器崩潰的原因是攻擊者刪除了Module的信息。同時確認(rèn)該樣本中沒有使用stomping技術(shù),因此使用OLE分析工具解析代碼不會影響后續(xù)分析。
四、修復(fù)
因?yàn)槲④洓]有開源P-code解析方法,所以我們在分析惡意代碼時,如果遇到同時使用VBA腳本編譯器崩潰和stomping技術(shù)的樣本時,又該如何應(yīng)對呢?
根據(jù)上文提到的方法反推,可以試著修復(fù)VBA文件,查看崩潰原因是否是由Module信息的缺失引起的,如果是該原因,修復(fù)該處缺失的信息。
那么我們?nèi)绾沃繫odule模塊的名稱呢?
此處我們對文件EbDYTPZ[.]vEypm文件進(jìn)行修復(fù),并驗(yàn)證之前的分析結(jié)果。
常規(guī)OFFICE文檔文件中,在word目錄下的vbaData.xml文件中含有模塊信息。
在[b773fa65bb375e6fe6d387f301f6bf33219189ea1d4a06762e965a9eba7de4e8]中,vbaData.xml文件被重定位到iuM.dsn,因此我們打開iuM.dsn。
我們可以看到wne:name="Project.Module1.AutoOpen",其中Project代表Project流,Module1是Module的名字,等于同我們自己生成文件的NewMacros,后門AutoOpen是函數(shù)名。
打開EbDYTPZ[.]vEypm文件,通過特征”/&H00000000“特征定位Module,可以發(fā)現(xiàn)該處并沒有Module模塊,確定攻擊者將該字段抹除。
因此修復(fù)該文件需要Module的信息重新編輯進(jìn)去,其余信息后移。
修復(fù)完腳本文件后,重新將文檔文件打包,修改后綴,然后打開word,點(diǎn)擊的編譯器編輯按鈕,發(fā)現(xiàn)VBA腳本編譯器可以正常打開。
接下來,我們分析一下為什么修改Module信息會導(dǎo)致崩潰。
將調(diào)試器附加到word進(jìn)程,點(diǎn)擊編輯后,word會執(zhí)行vbe6.dll中的代碼,該dll創(chuàng)建Visual Basic環(huán)境,當(dāng)加載Module1實(shí)例時,因Module信息確實(shí),對象創(chuàng)建失敗,this指針為空。
在后面的調(diào)用中會產(chǎn)生地址錯誤。
我們將腳本修復(fù),重新附加word進(jìn)程,對象創(chuàng)建成功,this指針指向正確的位置。
五、總結(jié)
VBA編譯器崩潰技術(shù)與stomping和重定向技術(shù)沒有沖突,三者可以相互組合使用,互補(bǔ)每個技術(shù)中存在的缺陷,希望讀者可以在攻防對抗中,靈活使用這些技術(shù)。
評論
查看更多