自動化規則提取工具--yargen原理分析

yara是用來檢測惡意軟件的利器,yara規則由特徵字符串、特徵字節碼等元素組成,只要惡意軟件包含這些特徵元素,就說明該文件是惡意的。但一個一個文件提特徵是很耗人力的,所以業界就慢慢出現了一些出色的yara自動化提取工具,yarGen便是其中效果比較好的一個,下面,我們就通過分析該工具的源碼,來了解這類工具的原理。

項目地址爲:https://github.com/Neo23x0/yarGen
1

核心文件爲yarGen.py,其他的文件大多爲配置文件。
2

其中dbs文件夾存放着大量的db文件,這些都是白名單元素,用來過濾特徵。包含了白導出函數名、白imphash、白字節碼、白字符串。
3

源碼一開始就會下載更新這些db文件,並加載,後面會用到。這是個耗時且耗內存的步驟。
4

加載完白名單庫後,yarGen會初始化一個貝葉斯算法訓練器,用於後面機器學習。至此,初始化結束,調用processSampleDir開始提取yara規則。
5

processSampleDir由3個核心函數組成:parse_sample_dir、sample_string_evaluation、generate_rules,作用分別爲:提取樣本特徵、過濾特徵、聚合特徵生成yara規則。
6

第一個函數做了2個操作,從樣本中提取字符串,和字節碼。
7

extract_strings只提取6個字符以上的字符串,及包含16進制的字符串。
8

extract_opcodes只提取入口點所在節段的字節碼,且提取後通過\x00進行截斷,形成一組組字節碼串。
9

提取完特徵後,進入到sample_string_evaluation函數過濾特徵,會篩選掉出現頻率大於等於10且出現在白名單庫裏的字符串,這樣剩下的就是可疑的字符串了。
10

做完簡單的過濾後,開始進行高級的過濾,filter_string_set函數,這個步驟是最關鍵的。
11

首先,使用貝葉斯算法匹配出跟good. txt裏的字符串相似的特徵串,過濾掉。
12

good.txt裏的就是些白字符串,看來機器學習也沒想象中那麼難,十多行python代碼的事。
13

然後進入啓發式過濾,若字符串中存在一些垃圾符號,則減去相應的惡意評分。
14

字符串中若帶有一些可疑字符,則加上相應的惡意評分。
15

最後,篩選出評分較高的字符串,作爲最終的特徵串。
16

將每個樣本的特徵串取交集,就得到了超級特徵,即匹配多個樣本的yara規則。
17

最終生成的yara規則如下:
18
19

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章