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