[Yara] Yara rule 搭配上 global rule 就無法比對成功了?

[Yara] Yara rule 搭配上 global rule 就無法比對成功了?

今天遇到一個問題,

第一個 Yara rule 本來可以偵測某個病毒,

但只要加上另一個 Yara rule,原本的 rule 就會無法偵測…

 

第一個 Yara rule 長的像這樣,很正常的 rule:

rule Office_DDE_field {
  strings:
    $a = /<w:fldChar\s+?w:fldCharType="begin"\/>.+?\b[Dd][Dd][Ee]\b.+?<w:fldChar\s+?w:fldCharType="end"\/>/
  condition:
    $a
}

 

第二個 Yara rule 則像這樣,是個 global private rule:

global private rule javaarchive
{
    strings:
        $magic = { 50 4b 03 04 ( 14 | 0a ) 00 }
        $string_1 = "META-INF/"
        $string_2 = ".class" nocase

	condition:
	    filesize < 400KB and
        $magic at 0 and 1 of ($string_*)
}

 

這裡的 global 和 private 是什麼意思呢?

  • Global rule 像是一種先決條件,只有在所有的 global rule 的條件都符合時,才會去比對其他的 rule。
  • Private rule 則是當這 rule 符合時,不會顯示出符合的結果。

 

當 Global 和 Private 同時出現時,就表示這條 Global rule 必須符合,

且 Yara 不會因為符合了這條 Global rule,而顯示出比對成功的訊息,

純粹只是讓這個 Global rule 變成一個必須滿足的先決條件。

 

這樣子就能解釋我所遇到的問題了~

平常的 Office_DDE_field rule 可以符合的,通常是一個 Office 檔案。

但如果加上 javaarchive 這個 global rule,

就必須先滿足是一個 .jar 檔的條件。

一個檔案當然不可能同時是 Office 文件、又同時是 .jar 檔,

所以 Yara 就會找不到符合的結果了~

 

也就是說,Yara rule 各別執行地好好的,

合在一起跑的時候,可能會有意想不到的錯誤出現呢~

(本頁面已被瀏覽過 381 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料