日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

宏病毒的研究与实例分析06——终结篇 进击的MACRO

發(fā)布時(shí)間:2025/3/21 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 宏病毒的研究与实例分析06——终结篇 进击的MACRO 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 背景
      • 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)舊版宏警告步驟很簡單

  • 將.xlsm重命名為.zip并解壓縮
  • 將visibility =“hidden”屬性添加到xl / workbook.xml文件中的workbookView元素。
  • 將所有文件再次壓縮回一個(gè)xlsm文件
  • 問題在于只有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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。