这周参加了AVAR(亚洲反病毒研究者联盟Association of Anti Virus Asia Researchers),与会的有来自全世界各国的反病毒软件厂商的安全研究员们,会议期间和他们做了很多深度的交流,特别在IOT和机器学习上。会议已经第二十届了,同理反病毒领域也走过了二十多年,杀毒引擎从第一代、第二代,已经逐步转向了第三代引擎。
那么第三代引擎是什么?第三代引擎即人工智能引擎,这一代引擎摆脱了特征库的依赖,通过海量的黑白样本进行机器学习训练,最终归纳总结出一套智能算法,从中发现病毒规律与特征,从较高维度对病毒进行检测与分析。摆脱了传统杀毒引擎频繁操作的流程,即分析判别样本->提特征->检查是否有误杀->升级库,更能应对未知的病毒。
工具
python、numpy、pandas、matplotlib、scikit-learn
PE文件机器学习步骤
1.数据搜集与清洗
对于本文分别搜集了50个PE类的病毒和正常文件,在Linux下可以用file命令批量鉴别文件的类型,以防特征提取步骤的时候失败。
2.特征化
特征化需要有病毒或者PE文件相关的知识,事物与事物之间、人与人之间都有自己固有的属性,例如性别可以区分男女,身高可以区分高矮,体重可以区分胖瘦。同样可执行文件也有同样的“属性”,但是这些属性并没有那么像上述属性那样那么好感知,特征的维度可能有上百、上千个,所以怎么提取到区别事物异同的特征十分关键,这也是机器学习中关键的一步。
我们针对PE文件文件提取了以下特征,可以通过如下PE结构图或者010Editor来辅助特征选取与提取。
PE结构图
提取的部分特征
3.数据标记
通过数据搜集阶段我们已经搜集到了黑白样本,所以这步我们可以很容易对数据进行标记。
4.数据拆分
通过数据拆分我们将数据随机分为了训练样本和测试样本,训练样本用于训练机器学习的模型,测试样本用于测试训练出来的模型的准确性。一般训练和测试样本可以2/8、3/7、4/6分等,这里选择了2/8开。
5.数据训练
在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别输出的类别的众数而定的,这里我们选取了随机森林树来做该次机器学习的模型。
6.模型验证
我们通过交叉验证的方式,可以得到如图所示模型的一些参数,可以看出误报率为零,同时检测率也比较低,只有70%多。
总结
本文对机器学习在病毒检测上做了简单的应用,对一般方法做了演示,当然其实以上是一个复杂的过程,但是对事物的认知总是有一个由简到难的认知过程。以上简单的代码已经实现了一个最简化的“第三代”杀毒引擎,所以即使你对病毒没有太深刻的认知,没有学过汇编、没有做过逆向、没有做过分析,同样能打造一个杀毒引擎,这就是机器学习的魅力所在,用人类的智慧创造高于人类智慧的产物。