深入探討病毒特徵碼

字體: | 打印

引言 :
病毒特徵碼對偵測惡意軟體來說可以是一項不可或缺的偵測方法, 過去與現在都是, 將來的電腦世界亦應該如此
可是這裡卻很少有關病毒特徵碼的討論, 即使之前有討論過的都只是表面 (如: 特徵碼的好壞等) 亦不是本質問題
有幸可以趁這個機會由小弟說明大家一直未有詳細討論過的病毒特徵碼的構成結構

何謂病毒特徵碼 :
最簡單, 亦是最多人知的: 病毒特徵碼就是一段獨一無二的字串或 16進制編碼, 它代表著一個或一系的惡意軟體, 而防病毒軟體在掃瞄檔案時需依據它來判斷檔案是否為惡意軟體
不過定義病毒特徵碼不是重點, 只要知道它是甚麼就可以了, 重點是以下的部份

建立病毒特徵碼 / 病毒特徵碼的結構 :
建立病毒特徵碼其實不難, 只要符合上述提到的獨一無二的條件就可以.
大體來說, 就小弟的知識, 可以有 4 種方法建立病毒特徵碼, 亦即是說會有 4 類病毒特徵碼結構.
第一類 : MD5 + 檔案大小
這一類是最簡單的, 亦不應有很多防病毒軟體在使用, 因為太過單一性, 會使病毒特徵庫變得很大.
建立方法/結構: 提取檔案的 MD5 數值. 當然是不會單單使用 MD5 數值, 通常這一類會與檔案大小一同使用來構成病毒特徵

第二類 : 區段的 MD5 + 區段的大小
這一類開始, 建立會變得複雜, 亦不會像第一類對惡意軟體太過專一, 但這一類仍然不是主流所使用的.
建立方法/結構: 提取檔案中某區段的 MD5 數值配合該區段的大小來構成病毒特徵

第三類 : 位移 + 特徵片段 // 特徵片段 // 多重位移 + 特徵片段
這一類是主流所使用, 彈性增加, 單一性降低. 可惜這一類不及第四類的擴充性, 建立不當可能會造成異常大的病毒特徵庫.
建立方法/結構: 假定檔案位移, 然後由這位移為開始, 提取一段 16進制的特徵片段, 當中這段特徵片段可以使用萬用字元取代某幾個字節來提高彈性. 如果不涉及位移, 提到的假定檔案位移當然不需要. 如果是多重特徵片段, 各特徵片段需同時符合.

第四類 : 邏輯特徵片段
這一類是最複雜的. 雖然都是建立特徵碼的主流之一, 但不及第三類的多.
建立方法/結構: 分析病毒並提取數段 16進制的特徵片段 (當中這些特徵片段可以使用萬用字元取代某幾個字節來提高彈性), 配合邏輯條件建立特徵碼.

評論 :
第一及第二類應該不須評論了, 自己想一想已有數不盡的弊處.
第三類 :
利: 快速建立特徵碼, 快速掃瞄, 高彈性
弊: 誤判時, 有機會要重新修改特徵碼, 特徵碼白名單要分開

第四類 :
利: 高擴充性, 特徵碼白名單可以合併一起
弊: 建立特徵碼較慢, 掃瞄時間延長

後話 :
第三類及第四類混合使用可會建立一強而有效的病毒特徵庫, 可惜同時使用就意味著要建立兩個引擎, 這應該是安全廠商不想/願會發生的事. 不論他們願不願意, 亦必需有一些改革來面對威脅爆發的電腦世界, 否則要繼續在這戰場立足是不太可能的. 前一句說的不是 HIPS, Collective (Cloud) Technology 等技術是必須整合到防病毒軟體中, 而是單一的防病毒軟體不能保障我們的電腦安全.

PS. 本文章由 KiNg 在 AVPClub 編寫及發表. 可以轉載 URL, 但請勿轉載整篇文章到其它論壇!!

我也來說兩句 查看全部評論 相關評論

  • ㄚ一 (2008-10-10 00:59:31)

    之後可以慢慢的深入到引擎的部分
    因為現在很多廠商引擎跟特徵碼已經是不可分割的一個部分
    例如AVIRA跟Kaspersky
  • megakotaro (2008-10-10 01:19:13)

    樓主說是16進制編碼,趨勢科技說是2進位,這兩者有差嗎?

    有些廠商會將病毒報成基因庫,這個算是第四種「邏輯特徵片段」嗎?
  • ㄚ一 (2008-10-10 01:21:29)

    介於三或四
    視廠商技術還決定爭側率高低或者是誤報的高低
  • integear (2008-10-10 13:11:58)

    ESET看來就是第四種 .

    Kaspersky的基因不像第四種,到是像第三種.Dr.Web一般特徵碼也是第三種,基因和Based之類的都寫得不錯,屬於第四種 .
  • 000110 (2008-10-10 13:13:36)

    QUOTE:

    原帖由 megakotaro 於 2008-10-10 01:19 發表
    樓主說是16進制編碼,趨勢科技說是2進位,這兩者有差嗎?
    其實是沒有差別, 所有程式到最後都會解碼為 2進制給 cpu 執行
    所以就會如丫一大大說的, 引擎就是接下來的重點
  • 000110 (2008-10-10 19:34:20)

    QUOTE:

    原帖由 integear 於 2008-10-10 13:11 發表
    ESET看來就是第四種 .

    Kaspersky的基因不像第四種,到是像第三種.Dr.Web一般特徵碼也是第三種,基因和Based之類的都寫得不錯,屬於第四種 .
    Kaspersky 的惡意軟體特徵碼都是第三類
    舉個實例: Email-Worm.Win32.Bagle.gen
    就至少有3項特徵碼, 而且其中兩項更可能是多重位移 + 特徵片段

    Eset 以前並不是第四類, 現在就不知道
    不過以前 Eset 好像綜合採用第一及第二類作特徵碼
  • 卡巴斯基 (2008-10-12 09:30:09)

    第一及第二類作特徵碼?不是只有國內的防毒才會用嗎?
    正常主流的外國防毒,例如卡巴,都是用第三類和第四類~

    另外,第四類[邏輯特徵片段]是甚麼?和第三類有甚麼分別?
  • 000110 (2008-10-12 10:58:49)

    QUOTE:

    原帖由 卡巴斯基 於 2008-10-12 09:30 發表
    第一及第二類作特徵碼?不是只有國內的防毒才會用嗎?
    正常主流的外國防毒,例如卡巴,都是用第三類和第四類~

    另外,第四類[邏輯特徵片段]是甚麼?和第三類有甚麼分別?
    國內應該也很少用...

    卡巴差不多可以肯定是第三類

    邏輯特徵片段 ->
    舉個例子 :

    QUOTE:

    病毒名稱: PasswordStealer.a
    病毒類型: Trojan
    特徵片段: {0/1/2}+{3}:0=aa bb cc dd ee ff ?? 00,1=55 60 45 fa ?a 1f, 2=04 d4 1d ?? 11 95,2=ff dd ee 44,3=aa 00 bb 33 55 54 21 98 df bf a4 c5 21
    在這裡, 3是分開出來, 所以最重要, 亦是最先搜尋, 只要3符合, 即報PasswordStealer.a, 否則搜尋0, 1, 2, 只要0,1,2其中一個符合亦會報

    [ 本帖最後由 000110 於 2008-10-12 11:24 編輯 ]
  • 卡巴斯基 (2008-10-12 11:17:04)

    邏輯特徵片段的例子太高深了~可不可以用一些較為淺的例子~
  • 000110 (2008-10-12 11:36:06)

    QUOTE:

    原帖由 卡巴斯基 於 2008-10-12 11:17 發表
    邏輯特徵片段的例子太高深了~可不可以用一些較為淺的例子~
    那例子已經很淺, 已撇除不必要的控制碼
    如果要更淺的例子, 把它當成if 的條件控制
    如果檔案內有包含aa 00 bb 33 55 54 21 98 df bf a4 c5 21 報 PasswordStealer.a
    否則
    如果檔案內有包含 aa bb cc dd ee ff ?? 00 或 55 60 45 fa ?a 1f 或 04 d4 1d ?? 11 95 報 PasswordStealer.a

    如果加入控制碼, 就可以更強了
  • Bug (2008-10-12 11:47:02)

    那目前使用第4類的有誰呢?
  • 000110 (2008-10-12 13:10:48)

    QUOTE:

    原帖由 Bug 於 2008-10-12 11:47 發表
    那目前使用第4類的有誰呢?
    小弟不才, 只知道有 CalmAV
  • integear (2008-10-12 17:47:09)

    QUOTE:

    原帖由 000110 於 2008-10-12 13:10 發表

    小弟不才, 只知道有 CalmAV
    ClamAV最近常常看到報"Trojan-Spy-XXXXX"(X為任意數字),感覺還蠻強的 .

    不過誤報也不算太少 .

    ESET或許可以驗證一下 .
  • megakotaro (2008-10-12 23:09:55)

    QUOTE:

    原帖由 integear 於 2008-10-12 17:47 發表


    ClamAV最近常常看到報"Trojan-Spy-XXXXX"(X為任意數字),感覺還蠻強的 .

    不過誤報也不算太少 .

    ESET或許可以驗證一下 .
    紅傘也有任意數字,但之前不是說是隨意入庫?
    那要怎麼解釋
    紅傘那種的算第一類?