看萌新如何分析一款開源工具

0x01

最近發現老師傅發了一篇介紹宏病毒檢測的文章,躍躍欲試,也來照貓畫虎地分析一把。

0x02

先介紹下什麼是宏病毒。

現在的大部分文字處理程序,電子表格和數據庫都包含功能強大的程序語言,允許在文檔中使用命令序列。這些命令序列或小程序就被叫做宏。因此數據文件(或稱文檔)不能感染病毒的定理已不再成立,因為每一個文檔現在都可能含有可執行指令。許多應用程序如MicrosoftWord,都允許建立宏。它在某操作發生時可自動運行。擁有這些條件,惡意程序——宏病毒的生成不過是一個時間的問題。宏病毒編制極其容易,微軟的宏語言都是BASIC語言的子集。BASIC是眾多病毒製造者鍾愛的編程語言,它比彙編語言容易許多。所以本質上任何人都能製造宏病毒,因此不難理解宏病毒如此之多且日趨複雜化。

宏病毒利用宏語言外部的例程的調用能力如使用WindowsAPI函數,能進行任何操作。與傳統的病毒相比,宏病毒的最新特色是它們不依賴操作系統。只要有應用程序支持解釋,宏病毒無需改動可在許多平臺上運行。例如MicrosoftWord宏病毒能在任何安裝過MicrosoftWord的系統中運行(Windows3.1x,Windows95,Windows NT,MAC等)。

0x03

和其他語言一樣,宏病毒一被殺軟盯上還想活命就得變身了,最簡單的方法就是混淆咯。針對混淆的宏病毒,該如何檢測?老師傅推薦了ViperMonkey。

ViperMonkey是一個用Python編寫的VBA仿真引擎,用於分析和反混淆MicrosoftOffice文件(Word,Excel,PowerPoint,Publisher等)中包含的惡意VBA宏。主要是通過VBA解析和仿真的方式來進行分析。

但是由於VBA語言、微軟office全家桶以及所有可以從VBA調用的動態鏈接庫和動態鏈接庫對象的所有特性,VBA仿真既困難又複雜,所以效率不是非常高,不過用於日常分析也夠了。

本文主要就是簡單分析下ViperMonkey的原理。

0x04

安裝非常簡單,這兒不再一一截圖細說了。

看萌新如何分析一款開源工具


安裝完ViperMonkey後,輸入vmonkey.exe[file_name]就能對宏病毒進行分析。我們以某宏病毒樣本進行試驗。

看下圖第二個紅框,就是提取出來的宏代碼,但是我們看到經過了高強度的混淆,根本不知道它在幹什麼,接下來就是展現ViperMonkey虛擬執行的時候了

看萌新如何分析一款開源工具


ViperMonkey會先搜索,尋找入口函數,這裡只有一個函數AutoOpen,就從AutoOpen開始模擬

看萌新如何分析一款開源工具

大概過了一分鐘,虛擬執行完成了,我們可以看到如下紅框中的代碼,就是最終解密出來的VBA代碼,ViperMonkey成功對該宏病毒代碼進行了反混淆,並提示發現了InterestingFunction Call。

看萌新如何分析一款開源工具


0x05

老樣子,還是先定位到main函數

看萌新如何分析一款開源工具


主要就是打印個banner以及接受參數

看萌新如何分析一款開源工具


開始分析工作的是在下圖

看萌新如何分析一款開源工具


調用的process_file

看萌新如何分析一款開源工具


Emm,找到了

看萌新如何分析一款開源工具


1330處調用ViperMonkey創建了一個模擬器vm

去找ViperMonkey在哪兒聲明的

看萌新如何分析一款開源工具


看萌新如何分析一款開源工具


在類ViperMonkey中定義了entry_point入口點和callback_suffixes回調函數

我們已經創建了一個vm,在後續過程中,程序就會從vba中搜索是否存在上圖定義的entry_point,callback_suffix中的一些函數,來找到入口點。

初始化vm之後,接下來調用vba_parser,看著名字是用於解析的

看萌新如何分析一款開源工具


找一下VBA_Parser

看萌新如何分析一款開源工具


Emm,沒有自定義,是從oletools庫中導出的

去查一下這是做什麼用的

看萌新如何分析一款開源工具


從介紹中我們知道,levba用於解析OLE和OpenXML文件,如MSOffice文檔(例如Word,Excel),檢測VBA宏,以明文提取源代碼,以及檢測安全相關模式,如自動執行宏,可疑VBA惡意軟件,反沙箱和反虛擬化技術使用的關鍵字,以及潛在的IOC(IP地址,URL,可執行文件名等)。它還檢測和解碼幾種常見的混淆方法,包括十六進制編碼,StrReverse,Base64,Dridex,VBA表達式,並從解碼的字符串中提取IOC。

那也就是說ViperMonkey是直接把olevba拿到用於解析,提取宏代碼了

按照關鍵詞Parse去查一下吧

看萌新如何分析一款開源工具


找到解析宏的部分了

看萌新如何分析一款開源工具


看萌新如何分析一款開源工具


註釋裡已經說明了,主要是文件格式解析的操作。

解析的操作一直到1530行

接下來是trace()

看萌新如何分析一款開源工具


看萌新如何分析一款開源工具


看萌新如何分析一款開源工具


在下圖可以看到其遍歷函數來獲取入口點

看萌新如何分析一款開源工具


如下紅框中,顯示了該VBA代碼中調用的所有函數,然而真正有意義的函數只有Run、GetObject、Shapes,其他函數都是作混淆用的。

看萌新如何分析一款開源工具


遍歷入口點,只有一個AutoOpen。

看萌新如何分析一款開源工具


遍歷變量名,都是些隨機名。

看萌新如何分析一款開源工具


根據函數名,進入到對應的函數模擬

看萌新如何分析一款開源工具


作者這裡相當於自己寫了一套VBA代碼,用於模擬實現VBA函數的功能

看萌新如何分析一款開源工具


並不是每一個VBA函數都需要模擬,只模擬那些用於字符串混淆的函數,如:StrReverse、Replace、Join、Split等。


看萌新如何分析一款開源工具


如下,ViperMonkey成功模擬出了,

Shapes("AtwGUaJHEhkMnR").TextFrame.TextRange.Text執行後的代碼,如下圖右邊紅框所示,也是該宏病毒最後要執行的powershell惡意代碼。

看萌新如何分析一款開源工具


0x06

文末還是致謝老師傅,文中一些圖片從老師傅那兒直接拿來用了,但是由於老師傅原文為內部分享,所以不方便指出參考來源及作者,還請老師傅見諒~

相關操作學習

宏病毒:掌握宏病毒的原理。


看萌新如何分析一款開源工具


分享到:


相關文章: