yargen工具原理分析

本秂侑毒 提交于 2020-02-29 17:30:52

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!