前言:下文用“我们”表示卡巴斯基实验室,(?)标记尚有疑问处。原文地址。这篇文章描述卡巴斯基实验室基于机器学习的恶意软件检测实践,包括静态分析和行为分析两类检测方法,以及数据预处理工作。
执行前数据:exe文件格式描述,代码描述,二进制数据统计,文本字符串,通过代码仿真而得到的数据
执行后数据:行为,事件
无监督学习:对未知类型的样本的打标签工作需要不少专家工作,代价较高。而非监督学习如聚类算法有助于更高效地对样本进行打标签。
监督学习:训练模型,让模型在某些数据上拟合。要确保更高的检出率和更低的假正例率FPR。
深度学习:能更好地从低阶数据中提取高阶特征。
需要大量有代表性的数据:防止模型学到了非代表性的特征(比如认为大于10M的文件就是好的exe)。
模型要可解释:出问题时,要知道是训练数据的问题,还是模型本身的问题。
假正例率FPR要低:现实世界中正常软件不可计数。
算法要能快速适应攻击者的对抗(counteraction):机器学习通常假定数据的分布是固定的(即不会随着时间变化而变化)。但实际上数据分布是会变化的——现实世界中对抗样本和正常软件都会不停产生。需要高效收集数据并打标签,丰富数据集,有规律地重训练模型。
如下图所示,随着时间推移,模型对恶意软件的检出率总体呈下降趋势。
早期,恶意软件检测方法基于一些可以鉴别特定恶意文件的启发式特征,如代码片段、代码段或整个文件的哈希值、文件特征等。使用存在数据库中的指纹来识别恶意软件。攻击者开发了不少对抗手段,比如在服务器端做多态变化(换个域名、换个参数名之类的)。恶意软件一点微小的变化就可让指纹识别方法失效。
需要一些能够反应恶意软件的变化的特征,且不能加大计算开销。反恶意软件引擎的第一道程序要兼具较好性能和可扩展性(scalability)。提取的特征应该是:1,可做快速运算的,比如字节内容/反汇编代码的统计数据;2,直接从exe结构中得到的信息。
LSH:对位置敏感的(localitysensitive)哈希函数(无监督的)。如下图,相似的文件在哈希后的位置上更接近。
我们搞了个类似于LSH的相似度哈希方法(这个是监督的),引入训练过程来增强该方法,利用相似和非相似样本对作为训练数据。输入数据X可表示为[X1, X2],标签Y用于表示两个标本是否在语义上相似。算法训练、学习的是一个映射函数h(X)。h(X)是这样一个函数,若X1和X2相似,则h(X1)和h(X2)值相同(identical),否则不同。我们用不同特征训练了多个版本的模型(如,有的只专注于exe文件结构信息,而有的只考虑ASCII字符内容)。这是因为不同种类的恶意文件在不同特征有较显著差别,比如文件内容的统计数据可反应未知的恶意打包工具,而有些文件则重点通过系统API、创建的文件的名称、访问的URL等特征来反映其行为。
下图反映的是exe分类后所处的对象空间(object-space)(简化起见,只考虑两个特征)。处于同个区域中的样本的映射值相同(这些区域又叫哈希桶hash bucket)。对于比较单一的“简单区域”,它的哈希值可以直接添加到数据库,而对于“困难区域”,将其作为结合了区域特定分类器的二阶段检测器的一部分。二阶段分析可以减少计算开销,降低FPR。
下图表示检测流程:
某些攻击类型比较稀有,样本少。我们用的模型称为范例网络(examplar network,ExNet)。训练一个模型,用它来构建输入数据的紧凑表示。用这种高阶形式的特征来为每个稀有恶意样本训练单独的分类器(即是说每个检测器只能检测一类恶意软件)。
静态分析的缺陷:应对加密或混淆的软件、各种脚本语言写的文件以及无文件攻击载荷的能力不足。
运行后检测:使用由威胁行为引擎提供的行为日志(由一系列系统事件组成)作为训练模型用的数据。
下图为日志数据的压缩阶段:
1.将日志数据转为二分图(Bipartite graph),图中包含事件和参数两类顶点。将事件和参数用边相连。如下图,这种表示方式可以更进一步压缩信息。
2.从二分图中提取子图/行为模式。每个模式表示进程中一个特定的活动,比如网络通信、文件系统操作、注册表操作。
3.将每个行为模式压缩成稀疏二进制向量。
4.训练好的DNN模型会将稀疏二进制向量转化为模式嵌入形式。将它们连成一个一维向量(或称为日志数据的嵌入表示形式)。
5.由分类器得到最终标签。
我们的网络的主要特征是,所有参数都是正数,且所有激活函数都是单调的。其优点有:
卡巴斯基每天都要接收大量样本,对新种类的样本要花大量人力进行标注。数据量十分庞大,要用高效的聚类算法将它们分成有意义的数得来的对象簇。其中一些簇可使用包含在簇中的某个已知类别样本的类别进行标记。
下图中,有四类簇。1、2、3类都可以用诸如信念传递算法的ML算法来求未知类型样本和已知类型样本的相似度。这样可以减少人为的标注工作。
模型参数过多或者为获取行为日志而运行沙箱,都会导致巨大的计算开销。客户消受不起这种开销。使用已由训练好的实验室模型获取的经验知识构建轻量级模型,即是蒸馏。
1.从有标签样本中提取一些“耗时”的特征,训练一个重量级的实验室用的模型。
2.用这个重量级模型给一群未知类型的样本打标签。
3.将新打标签的样本加入训练集,训练一个轻量级模型。
4.轻量级模型作为用户产品的一部分。
重点:
1.要有正确的数据。要有代表性,要正确标注。
2.理解ML算法原理,且知道怎么应用于网络空间问题。
3.知晓用户需求,知道怎么在产品中应用ML,帮助用户满足他们的实际需求。
4.建立足够的用户群,以获取足够的反馈。
5.恶意软件检测需要有多个层次程序的协同。