宏病毒的研究与实例分析06——终结篇 进击的MACRO
文章目錄
- 背景
- VBA stomping
- 在VBA編輯器中隱藏宏
- 使用舊版宏警告
- 常用的規避殺軟的手法
- 結語
- 參考文獻
轉自信安之路病毒分析小組組長::x-encounter
背景
? Office版本歷經十幾年的變遷,現已趨于成熟,但仍存在著新老版本交替使用的問題。Office 97-2003 Word的文件后綴為doc,新版本的Office文件后綴為docx,包含宏的文檔后綴為docm。微軟是不會允許將包含宏的文檔命名為docx,但是可以被命名為老版的doc。例如一個docm文件,文件頭的魔數是504b0304(ZIP文件的魔數),修改其后綴為doc后,文件頭的魔數不變,且能夠正常執行。而老版的doc文件頭的魔數是d0cf11e(docfile的十六進制表示_),所以我們可以通過文件后綴和魔數是否匹配來判斷一個文檔是不是惡意的。
? 隨著這幾年APT攻擊的興起,誘餌文檔越來越多,對MACRO的研究自然也達到了新的高度,很多未公開的特性可以用來規避和繞過殺軟,對威脅分析員造成了巨大的挑戰。下面我就以威脅分析員的角度來介紹幾種技術
VBA stomping
VBA在Office文檔中可以以下面三種形似存在
1、源代碼。宏模塊的原始源代碼被壓縮,并存儲在模塊流的末尾??梢詣h除源代碼,并不影響宏的執行
2、P-Code。與VB語言相同,VBA同樣有P-Code,通過內置的VB虛擬機來解釋P-Code并執行,平常我們Alt+F11打開所看到的正是反編譯的P-Code。
3、ExeCodes。當P-Code執行一次之后,其會被一種標記化的形式存儲在__SRP__流中,之后再次運行時會提高VBA的執行速度,可以將其刪除,并不影響宏的執行。
? 每一個流模塊中都會存在一個未被文檔化的PerformanceCache,其中包含了被編譯后的P-Code代碼,如果_VBA_PROJECT流中指定的Office版本與打開的Office版本相同,則會忽略流模塊中的源代碼,去執行P-Code代碼
官方文檔解釋_VBA_PROJECT流
一定為(Must be)0xFFFF,而在實際文件中,以Office 2010(32位)為例
? emmm,微軟還是秀啊……
? 這種特性很適合用于定向攻擊,且不容易被發現。通過信息收集得知目標的Office版本,利用VBA stomping使宏被特定版本的Office打開時才會執行惡意行為宏代碼,除此之外的Office版本打開時執行正常宏代碼
? 目前VBA stomping已有利用工具EvilClippy
https://github.com/outflanknl/EvilClippy? 通過目前主流的宏分析工具(oletools,oledump,Pcodedmp)來探究分析此類樣本的方法:
? 首先創建一個帶宏的文檔
? 準備一個偽造的VBA文件fakecode_word_vba.txt
? 執行命令,-t參數指定Office版本
EvilClippy.exe -s fakecode_word_vba.txt -t 2010x64 x-encounter.doc? 使用Office2010(64位)打開生成后的文檔
? VBA編輯器
? 與原來的文檔沒有任何區別,接下來使用Office2013(64位)打開
? VBA編輯器
? 可以看到流模塊中反編譯的源代碼被替換成了偽造的VBA代碼,下面使用工具進行分析
? OleTools
? Olevba識別出來了所有的宏并給出VBA stomping警告
? Oledump
? Oledump并沒有識別出含有宏的流模塊
? Pcodedmp
? Pcodedmp精準的識別了真正的宏代碼,忽略了偽造的VBA
? 通過VBA stomping原理可知,真正的代碼存為了P-Code,所以olevba輸出的結果中反編譯形式的VBA即為真正的代碼??梢酝ㄟ^Olevba判斷是否使用了VBA stomping,如果是則直接使用Pcodedmp獲取P-Code代碼。靜態看即可
? 如果想要調試,那么需要使用對應版本的Office,我這里通過_VBA_PROJECT中Version結構總結了一下32位下的版本號,64位研究方法一樣。
2007(x86) 8800
2010(x86) 9700
2013(x86) A300
2016(x86) AF00
在VBA編輯器中隱藏宏
? 可以在VBA編輯器中隱藏真正的宏,只需要修改PROJECT流(可以將PROJECT流理解為VBA編輯器的配置文件)中的Module=NewMacros,將其抹零即可
? 在VBA編輯器中,NewMacros已經消失了,宏正常執行
? 還可以使項目鎖定且不可看,需要修改PROJECT流ProjectProtectionState和ProjectVisibilityState這兩個屬性
? 雖然這兩個屬性的內容都是被加密的內容,但是經過實驗,將其內容改為任意值(更改時注意長度)
? 會使得VBA工程被鎖定且不可看,如果只修改ProjectVisibilityState,VBA工程目錄可看,但單個代碼模塊不可看
? 理論上該過程是不可逆的,但通過實驗發現將相關屬性改為有效值并模擬密碼保護即可解除鎖定
ID = {00000000-0000-0000-0000-000000000000} CMG = CAC866BE34C234C230C630C6 DPB = 94963888C84FE54FE5B01B50E59251526FE67A1CC76C84ED0DAD653FD058F324BFD9D38DED37 GC = 5E5CF2C27646414741474? 可以使用EvilClippy解除鎖定
EvilClippy -uu 目標文件? 上述兩種方法所隱藏的宏都可以通過工具檢測出來。
使用舊版宏警告
? 新版本的宏警告
? 而舊版的宏警告提示更加的顯眼
啟動舊版宏警告步驟很簡單
問題在于只有excel能彈出這種宏警告框,如何讓Word也彈出類似的警告框呢?
研究一個樣本:ffaa6e86c13b9bb1952b42d07d9c94882e27bc3b0cfe51e81b310a7fd0a5b29b
該word(RTF)文檔內嵌了五個帶有舊版宏警告的Excel表格
當啟動word時,會啟動excel并彈出excel舊版宏警告,點擊禁用宏后還會啟動第二個excel,一共啟動五次,用戶體驗極差,當excel處理完成之后才會彈出Word文檔
分析此類樣本時可以使用rtfobj來查看Ole對象
-s和-d參數dump出指定的嵌入對象,接著使用Olevba快速分析
內嵌的宏使用了VBA Stomping,接著使用Pcodedmp將P-Code反編譯出來,解混淆找到URL即可
常用的規避殺軟的手法
一、
? 目前殺軟查殺VBA基本上都是靜態查殺,所以靜態免殺至關重要,從源頭上講Word是一個zip文件,解壓之后的vbaProject.bin包含著要執行的宏信息,也是殺軟的重點關注對象,可以修改該文件名用于規避檢測,步驟分以下三步
1.將“vbaProject.bin”重命名為“no_macros_here.txt”
2.更新“word / _rels / document.xml.rels”中的關系
3.在“[Content_Types] .xml”中,將“bin”替換為“txt”
二、
? 很多誘餌文檔喜歡在VBA中啟動腳本程序執行ps或者從網絡上下載一段shellcode或惡意程序等等,這樣非常容易被殺軟的行為攔截攔住,同時沙箱可以根據進程鏈和流量判定該word文檔是惡意的,安全分析人員可以輕易的通過監控進程樹的方式觀察惡意行為。
? 推薦使用WMI來執行后續攻擊鏈,由WMI啟動的進程的父進程為wmiprvse.exe而不是word.exe這樣就可以與惡意word文檔取消關聯,規避檢測
三、動態檢測沙箱
? 可以利用dotnet屬性以及WMI來檢測Office:是否含有最近的文檔,正在運行的任務數,特定進程檢查(vbox,vmware等等),檢測備用數據流(ADS),判斷計算機是否是域的一部分(Win32_ComputerSystem類中PartOfDomain對象),檢測Bios信息,檢測即插即用信息(Win32_PnPEntity),檢查用戶名,檢測文件名hash,檢測文件名是否被易名,檢測CPU核心(Win32_Processor),檢測應用及個數。
? 在vmware虛擬機中運行結果
結語
想要一起交流學習最新的技術,逆向相關,威脅情報(APT樣本)相關,惡意代碼相關,歡迎加入信安之路病毒分析小組,Twitter搬運工誠邀您的到來。
參考文獻
https://medium.com/walmartlabs/ms-office-file-formats-advanced-malicious-document-maldoc-techniques-b5f948950fdf
https://medium.com/walmartlabs/evasive-vba-advanced-maldoc-techniques-1365e9373f80
https://medium.com/walmartlabs/vba-stomping-advanced-maldoc-techniques-612c484ab278
https://medium.com/walmartlabs/vba-project-locked-project-is-unviewable-4d6a0b2e7cac
https://outflank.nl/blog/2019/05/05/evil-clippy-ms-office-maldoc-assistant/
http://www.52bug.cn/content/plugins/openlink/viewPage.html?url=https://vbastomp.com/
7cac>
https://outflank.nl/blog/2019/05/05/evil-clippy-ms-office-maldoc-assistant/
http://www.52bug.cn/content/plugins/openlink/viewPage.html?url=https://vbastomp.com/
總結
以上是生活随笔為你收集整理的宏病毒的研究与实例分析06——终结篇 进击的MACRO的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【开源】WeChatRobot+WeCh
- 下一篇: PC微信逆向:分析@群成员call