標籤:

如何用一種最簡單的方式分析惡意軟體

介紹

分析惡意軟體通常需要代碼逆向能力。

可執行文件經常被編碼以避免檢測。例如,許多惡意Word文檔具有嵌入式可執行有效內容,這是基於base64編碼的(或其他一些編碼)。為了理解編碼,並且能夠對有效載荷進行解碼以進行進一步分析,經常執行宏代碼的逆向。

但代碼逆向並不是唯一可能的解決方案。這裡我們將描述一種可以應用於某些惡意軟體家族的統計分析方法,如Hancitor惡意文檔。我們將逐步介紹這種方法。

例子

首先我們從BASE64編碼的Windows可執行文件(PE文件)開始。在BASE64編碼中,64個不同的字元用於編碼位元組。64是6位,因此在BASE64編碼時有一個開銷,因為編碼一個位元組(8位)將需要2個BASE64字元(6位+ 2位)。

使用byte-stats.py,我們可以為文件中找到的不同位元組值生成統計信息。當我們使用它來分析我們的BASE64編碼的可執行文件時,我們得到這個輸出:

在上面的截圖中,我們有64個不同的位元組值,100%的位元組值是BASE64字元。這是一個很強的指示,文件base64.txt中的數據確實是BASE64編碼的。

使用byte-stats.py的選項-r,我們將介紹文件中找到的位元組值的範圍:

識別的範圍/ 0123456789,ABCDEFGHIJKLMNOPQRSTUVWXYZ和abcdefghijklmnopqrstuvwxyz(和單個字元+)確認這確實是BASE64數據。填充的BASE64數據將在最後包括一個或兩個填充字元(填充字元為=)。

使用base64dump.py(BASE64解碼工具)解碼此文件,確認它是BASE64編碼的PE文件(cfr。MZ頭)。

現在,有時編碼比BASE64編碼要複雜一些。

我們來看看另一個例子:

例如,小寫字母的範圍以d開頭(代替a),以}結尾(而不是z)。我們觀察到其他範圍的類似變化。

看起來所有的BASE64字元都向右移動了3個位置。

我們可以通過從每個位元組值減去3來測試這個假設(即向左移3個位置)並分析結果。要從每個位元組減去3,我們使用程序translate.py。translate.py將文件作為輸入和算術運算:操作「byte-3」將從每個位元組值中減去3。

這是當我們對左移3個位置的位元組值進行統計分析時得到的結果:

在上面的截圖中,我們看到64個唯一位元組,所有位元組都是BASE64字元。當我們嘗試用base64dump來解碼它,我們確實可以恢復可執行文件:

我們繼續談談另一個例子。提供Hancitor惡意軟體的惡意文件使用的編碼更複雜一些:

這一次,我們有68個獨特的位元組值,當我們看一個範圍的左邊時,範圍被移位了3個位置,但是當我們看到一個範圍的右邊時,它們看起來被移位了4個位置。

這怎麼解釋?

一個假設是,惡意軟體是通過將3個位置的某些位元組移位而編碼的,而另外4個位置的位元組進行編碼。一個簡單的方法是交替這個移位:第一個位元組移位3個位置,第二個位移4個位置,第三個位移3個位置,第四個位置4個位置,依次類推…

我們來試試這個假設,使用translate.py根據位置移動3或4個位置:

變數位置是給出位元組位置的整數(以0開始),位置%2是除法的剩餘部分2.表達式位置%2 == 0對於偶數位置為真,對於不均勻位置為False。IFF是IF函數:如果參數1為真,則返回參數2,否則返回參數3.這是我們如何將輸入與3和4交替轉換。

但是你可以看到,結果肯定不是BASE64,所以我們的假設是錯誤的。

我們來試著用4和3(而不是3和4):

這次我們得到BASE64的範圍。

使用base64dump.py進行測試證實了我們的假設:

結論

惡意軟體作者可以使用通過統計分析和測試簡單假設逆向工程的編碼方案。而無需執行代碼的逆向工程。

本文翻譯自:blog.nviso.be/2017/08/3,如若轉載,請註明原文地址: 4hou.com/web/8053.html 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

3個步驟實現簡單語言解釋器(自製簡易編程語言)
HBO電視網被黑:《權力遊戲 7》視頻泄露
黑客俱樂部:英國正栽培網路安全的「明日之子」
一加手機終於承認錯誤!約4萬名用戶信用卡信息受影響
大數據時代,數據與信息安全

TAG:信息安全 |