12.11
基於二進制的惡意軟件分類能節省時間和工作量。作為個人兼職性安全研究人員,這種提高效率的方法很有用。日積月累,收集回來的惡意軟件會越來越多。可能有 2000 多個。要全部分析它們頗為費時。若要節省時間和工作量,我們可以把類似甚至是一樣的惡意軟件濾掉。那麼可以怎樣做呢?
我們假設所有要分析的檔案皆為惡意,因為蜜罐等方法收集回來的皆定義為惡意的。
其中一種分類方法便是用掃毒軟件來分類。被檢測到屬同類的的病毒,我們可以抽其中一個或兩個分析就可以。例如只抽一個 “Conficker.B” 的樣本。因為 Conficker 家族是比較常見,這樣就可以節省很多重覆的工作。這做法的壞處是,沒能被檢測出來的病毒都被放屬同一組。
Clamscan 的一些節錄…
/tmp/4c71b97435a24ffb8fd7fedd1b1790e1: OK
/tmp/82dd3a3d386d4ea09870dcee4a75a531: OK
/tmp/72bdd3bd37a0b5d1dd5f1be80cb29639.bin: OK
/tmp/24bd1722b994f7daa193458348108bfc.bin: OK
/tmp/39960c5ff1922466ded71a4a2799c295: Trojan.VanBot-366 FOUND
/tmp/33f5f14c33bf2f71556204705407a885: W32.Virut-54 FOUND
/tmp/880ce6df69aaeb1d3c57e756f53dd158.bin: Trojan.Delf-911 FOUND
/tmp/7e0ce66bb299370010016f4522152969: Trojan.VanBot-366 FOUND
/tmp/4f2d9f8129e7d7fd9b37f700aacdc9aa.bin: Trojan.Hupigon-25647 FOUND
/tmp/5b69ff6f331ece36558516f66306f969: Trojan.Small-4287 FOUND
/tmp/078aedb8630339487cf39d028b0156bd.bin: OK
/tmp/417bdef0688996a845701da9dcf1b145: Trojan.VanBot-366 FOUND
/tmp/eda3b7766c23dfffc0b85d0ba546b0c1: W32.Virut-54 FOUND
/tmp/86f22ff53382dbb54e2c22560a3db373: Trojan.VanBot-366 FOUND
/tmp/a4a41d2122c4d3552e3d59315f42d4e3: W32.Virut-54 FOUND
看看上面的輸出。若果沒有掃毒軟件的分類,何以判斷4c71b97435a24ffb8fd7fedd1b1790e1 和 82dd3a3d386d4ea09870dcee4a75a531 是不是同類?如果在眾多樣本中找出獨特罕有的病毒?若要你手動分析 600 多個,不多,但恐怕是很多工作量了。
另一種方法是用 ssdeep 了,是一個模糊 hashing 的工具。專門用來檢測文件相似性,可能相差某些字節和內容。它是會計算出一個 hash 簽名,但和 md5 不同,改一小個字節不會造成差異很大的 hash 簽名。 ssdeep 的概念是 把一個檔案分為多個小部分,並為每個部分計算 hash 簽名。
以下是一個 exe 檔安樣本 (“file1.exe”),並拷背了一份再加多了一個字元,並為此兩檔案計算 md5 hash。
$ cp file1.exe file2.exe
$ echo 1 >> file2.exe$ md5sum file1.exe file2.exe
72bdd3bd37a0b5d1dd5f1be80cb29639 file1.exe
a626b78fa6ba13fdd9cfddb9f55ee7c6 file2.exe
只是一字元的分別,這兩個 md5 hash 基本上是不一樣了。再看看這兩檔案的 ssdeep 簽名。
(為了清楚一點,分為數行)
$ ssdeep -b file1.exe file2.exe
ssdeep,1.0–blocksize:hash:hash,filename
768:my+qxlsz7yiV0+7YUaFhLFAtVI0xbM
LvzEg1B1Ki8nJ78:R+qxlsHvGhLFyI0l8tC5J78,”file1.exe”
768:my+qxlsz7yiV0+7YUaFhLFAtVI0xbM
LvzEg1B1Ki8nJ7V:R+qxlsHvGhLFyI0l8tC5J7V,”file2.exe”
以冒號分隔,第一個 (768) 是每塊單元的大小,其後兩個是檔案的 ssdeep hash 簽名 (my+qxlsz7yiV0+7YUaFhLFAtVI0xbMLvzEg1B1Ki8nJ7V 和 R+qxlsHvGhLFyI0l8tC5J7V),最後便是 檔案的位置 (“file2.exe”)。這裡要看的是那兩個 ssdeep hash 簽名 - 由兩個很相似的檔案計算出來 ssdeep 簽名是非常像,除了最後一個字元 ( “8″ 對 “V” )。
若果你有大量的未能被檢測的惡意軟件,雖然掃毒軟件不能幫你,但 ssdeep 可以。以下是用 ssdeep 分析大量惡意軟件的相似性關係。檔名同時亦是該檔的 md5 hash 簽名。
$ ssdeep -dr .
…
/tmp/72bdd3bd37a0b5d1dd5f1be80cb29639.bin matches /tmp/fa7c91b738e763eccf69676bd393925e.bin (88)
/tmp/72bdd3bd37a0b5d1dd5f1be80cb29639.bin matches /tmp/ae142ce3b35cc04f5648a0c17c37ea30.bin (82)
/tmp/72bdd3bd37a0b5d1dd5f1be80cb29639.bin matches /tmp/794b74fc4e833d245eb005e078dc21da.bin (82)
/tmp/72bdd3bd37a0b5d1dd5f1be80cb29639.bin matches /tmp/46fb9678675df8dc83d38761a76c7950.bin (99)
/tmp/72bdd3bd37a0b5d1dd5f1be80cb29639.bin matches /tmp/f412d41aacb4b16ded7b158b89fd3552.bin (90)
/tmp/72bdd3bd37a0b5d1dd5f1be80cb29639.bin matches /tmp/4bfba885ed3dc4ba800446df49051af0.bin (82)
/tmp/72bdd3bd37a0b5d1dd5f1be80cb29639.bin matches /tmp/13776c2b604290906305a56c4e7c61e5.bin (99)
/tmp/72bdd3bd37a0b5d1dd5f1be80cb29639.bin matches /tmp/5a8424f4e1504b5823ca8742e2b1ce8d.bin (82)
…
從以上看得出來,每個檔案的 md5 很不同。但,ssdeep 是可以關聯起來的。若果沒有被關聯起來,可以先假定為少數特別的惡意軟件,並以後對它多加分析。此外,ssdeep 還能對 打包了 (packers) 的 exe 作分類,因為它們只是壓縮軟件,而類似的軟件當然壓出來也是相似的。
有幾個要注意的地方。第一,ssdeep 是把一個檔案拆散作分析的,若果檔案在每100字元被修改一個字元的話,ssdeep 是認不出來的(某些混淆算法就是會加些垃圾,簡單的如 no-ops。)。再者,若果用來分析惡意軟件的登錄資料,類似的檔案有可能是連去不同的僵屍網絡控制台,若以被錯誤地濾掉。當然,你亦可以去分析當中的同通點並分析登錄的算法。
以 ssdeep 作惡意軟件分類應可以減輕個人的工作量,算是一種方法。
===
ssdeep – http://ssdeep.sourceforge.net/
UPX – http://upx.sourceforge.net/
English