yara是用来检测恶意软件的利器,yara规则由特征字符串、特征字节码等元素组成,只要恶意软件包含这些特征元素,就说明该文件是恶意的。但一个一个文件提特征是很耗人力的,所以业界就慢慢出现了一些出色的yara自动化提取工具,yarGen便是其中效果比较好的一个,下面,我们就通过分析该工具的源码,来了解这类工具的原理。
项目地址为:https://github.com/Neo23x0/yarGen
核心文件为yarGen.py,其他的文件大多为配置文件。
其中dbs文件夹存放着大量的db文件,这些都是白名单元素,用来过滤特征。包含了白导出函数名、白imphash、白字节码、白字符串。
源码一开始就会下载更新这些db文件,并加载,后面会用到。这是个耗时且耗内存的步骤。
加载完白名单库后,yarGen会初始化一个贝叶斯算法训练器,用于后面机器学习。至此,初始化结束,调用processSampleDir开始提取yara规则。
processSampleDir由3个核心函数组成:parse_sample_dir、sample_string_evaluation、generate_rules,作用分别为:提取样本特征、过滤特征、聚合特征生成yara规则。
第一个函数做了2个操作,从样本中提取字符串,和字节码。
extract_strings只提取6个字符以上的字符串,及包含16进制的字符串。
extract_opcodes只提取入口点所在节段的字节码,且提取后通过\x00进行截断,形成一组组字节码串。
提取完特征后,进入到sample_string_evaluation函数过滤特征,会筛选掉出现频率大于等于10且出现在白名单库里的字符串,这样剩下的就是可疑的字符串了。
做完简单的过滤后,开始进行高级的过滤,filter_string_set函数,这个步骤是最关键的。
首先,使用贝叶斯算法匹配出跟good. txt里的字符串相似的特征串,过滤掉。
good.txt里的就是些白字符串,看来机器学习也没想象中那么难,十多行python代码的事。
然后进入启发式过滤,若字符串中存在一些垃圾符号,则减去相应的恶意评分。
字符串中若带有一些可疑字符,则加上相应的恶意评分。
最后,筛选出评分较高的字符串,作为最终的特征串。
将每个样本的特征串取交集,就得到了超级特征,即匹配多个样本的yara规则。
最终生成的yara规则如下:
来源:CSDN
作者:G4rb3n
链接:https://blog.csdn.net/m0_37552052/article/details/104570954