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