標籤:

實例講解如何繞過 Office 文檔的反分析技術

今天我們來試著分析一個使用Word文檔的惡意VBA項目。該文檔的作者對文件中的VBA項目進行了密碼保護,以防止對惡意代碼的檢查,同時也使用了一些防止密碼刪除的技術。因此自動分析工具就基本不起作用了,但我們還是展示了如何跨越所有這些反分析障礙的技術,下面我們開始。

我們首先打開文檔,然後就會接到一個釣魚消息,聲稱該文檔是使用早期版本的Microsoft Office創建的,想要查看內容的話我們必須啟用宏。

當我們啟用宏時,文檔開始指向cfai66.fr

要了解是什麼使文檔發送到一個法國域名,我們必須在「開發人員」選項卡中檢查文檔的宏。但是,作者用密碼保護著VBA項目,來防止我們檢查。這就限制了我們從Microsoft Office內部準確分析VBA腳本的能力。

要繼續分析,我們可以嘗試使用Office文件的一些常見的十六進位編輯技術手動刪除密碼。首先,我們在文檔中搜索字元串「DPB」並將其更改為「DPx」。Office的某些版本會將其解釋為損壞的密碼哈希。但是,這對我們的文檔不起作用,我們仍然收到密碼提示。

接下來,我們嘗試用我們創建的受密碼保護的VBA啟用文檔替換我們文檔的「CMG」,「DPB」和「GC」值。遺憾的是,我們的文件的作者有意地搞砸了「CMG」的價值,以摒棄這個領域的長度。我們嘗試將我們的新CMG複製到惡意文檔也失敗了。此外,我們還嘗試了在CMG的引號內外填充數據以保留文件的長度,但也失敗了。左邊的是新文件,右邊的是惡意文件。

4hou.com/uploads/201708 (這圖說死上傳不上去了,自己戳看吧...)

由於我們的密碼刪除嘗試都失敗了,我們只能繼續使用受歡迎的Office產品分析工具OfficeMalScanner檢查我們的文檔。使用scan / brute選項運行該工具並沒有產生任何結果:

使用info 選項重新運行該工具可以顯示3個VBA對象:

要動態分析這些VBA對象,我們可以使用一個名為ViperMonkey的新工具。ViperMonkey是用Python編寫的VBA模擬引擎,旨在分析和解組Microsoft Office文件(Word,Excel,PowerPoint,Publisher等)中包含的惡意VBA宏。

然而,ViperMonkey無法完全分析VBA,因為

1.)不會識別VBA函數UBound

2.)無法評估「i = UserForm1.T.Top」的變數賦值,因為它無法定位UserForm1.T.Top的值。

看來我們必須手動逆向Module1 的VBA腳本。首先,我們將腳本載入到新的Word文檔中,以便我們可以使用內置的VBA調試器進行調試。調試腳本後,我們很快就發現了導致ViperMonkey失敗的代碼。

此代碼無法運行,因為Form1無法使用OfficeMalScanner工具轉儲,除非Form1的元數據被轉儲,並且Form1.T.Top的值無法找到。這是一個阻止自動VBA分析的好方法,因為不能獲取密碼保護形式的變數(我所知道的)。我們將不得不手動跟蹤代碼並逆向使用此變數的函數來嘗試確定什麼它的價值應該是。

跟蹤i = Form1.T.Top的變數賦值最終將i分配給變數T,之後將我們帶到第56行。

變數fr將被賦值T-11,然後在線60變數Wet將被賦值1-fr。

第62行指出,如果Wet = 0,則rd將是變數rd的字元表示。

如果我們以相反的邏輯順序取這些語句,我們得到以下內容:

如果rd作為Char,Wet必須等於0:

Wet= 0n Wet= 1 - fr(1)= 0n fr = T(12)-11 = 1n T(12)= i(12)= UserForm1.T.Top(12)n UserForm1.T.Top == 12n

如果我們用12的值替換UserForm1.T.Top並調試腳本,我們慢慢地就會看到可讀的文本填充變數onearm。這時,我們已經成功地逆向了VBA的邏輯,並在變數中顯示了以下批處理文件:

該腳本將從cfai66.fr網站下載惡意的PNG文件(實際上是一個EXE)(不確定這是否已被盜用的合法網站),並在我們的機器上執行。此文件是一個通用的木馬程序,不屬於特定的廣告系列。

刪除文件

i.batnnpzdi.exen

網路通信

cfai66.fr/parabola.pngncfa-noisylegrand.com/parapola.pngn

檢測

otx.alienvault.com/puls

結論

這是一個有趣的使用Word文檔來進行的VBA項目,並且採用了密碼保護來阻礙分析。經過幾次密碼刪除嘗試,使用OfficeMalScanner和ViperMonkey自動進行工具分析,我們最終手動逆向了VBA函數從而發現了在調試過程中導致腳本失敗的缺失值。

本文翻譯自:ringzerolabs.com/2017/0,如若轉載,請註明來源於嘶吼:4hou.com/technology/733 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

TAG:信息安全 |