卡巴斯基白皮书-基于机器学习的恶意软件检测-笔记

前言:下文用“我们”表示卡巴斯基实验室,(?)标记尚有疑问处。原文地址。这篇文章描述卡巴斯基实验室基于机器学习的恶意软件检测实践,包括静态分析和行为分析两类检测方法,以及数据预处理工作。

执行前数据: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。
在这里插入图片描述

下图表示检测流程:

  1. 解析“轻量级”特征,判别目标落在哪个区域。
  2. 预检测:预先做一次扫描,可先判别出一些恶意软件。这种扫描不需要用到“重量级”特征。若文件落在“简单区域”中,只需预检测即可作出善恶判别,否则就需要进一步分析。
  3. 若文件落在“困难区域”,则选择所在“困难区域”对应的模型,做进一步分析。(在训练阶段,会为每个“困难区域”训练对应的模型,使用的数据是区域内的恶意软件以及所有区域的善意软件。以后若有新类型恶意软件出现,即属于一个新区域,可对该区域训练新模型)
    在这里插入图片描述

针对罕见攻击类型的深度学习

某些攻击类型比较稀有,样本少。我们用的模型称为范例网络(examplar network,ExNet)。训练一个模型,用它来构建输入数据的紧凑表示。用这种高阶形式的特征来为每个稀有恶意样本训练单独的分类器(即是说每个检测器只能检测一类恶意软件)。
在这里插入图片描述

深度学习-运行后检测

静态分析的缺陷:应对加密或混淆的软件、各种脚本语言写的文件以及无文件攻击载荷的能力不足。
运行后检测:使用由威胁行为引擎提供的行为日志(由一系列系统事件组成)作为训练模型用的数据。

下图为日志数据的压缩阶段:
1.将日志数据转为二分图(Bipartite graph),图中包含事件和参数两类顶点。将事件和参数用边相连。如下图,这种表示方式可以更进一步压缩信息。
2.从二分图中提取子图/行为模式。每个模式表示进程中一个特定的活动,比如网络通信、文件系统操作、注册表操作。
3.将每个行为模式压缩成稀疏二进制向量。
4.训练好的DNN模型会将稀疏二进制向量转化为模式嵌入形式。将它们连成一个一维向量(或称为日志数据的嵌入表示形式)。
5.由分类器得到最终标签。
在这里插入图片描述

我们的网络的主要特征是,所有参数都是正数,且所有激活函数都是单调的。其优点有:

  1. 模型的检测分数(越高表示越可疑)会随着时间增加,仅当随着检测的日志行的增长(?)(Our model’s suspicion score output only grows with time while processing new lines from the log.我觉得这里想表达的意思是,检测分数只跟特征的统计数据有关,而跟时序无关 。下面的第二点说“输出在时间上是稳定的”也是这个意思)。因此,恶意软件无法通过添加噪声或者加入与它的恶意行为并行的干净活动来躲避检测。
  2. 由于模型的输出在时间上是稳定的,因此可避免在扫描到一个正常exe执行日志时由于预测的波动而判断错误。
  3. 在单调空间中处理日志样本使我们能够自动选择导致检测的事件,并更方便地管理错误警报。(?)

基础工作

对输入流进行聚类

卡巴斯基每天都要接收大量样本,对新种类的样本要花大量人力进行标注。数据量十分庞大,要用高效的聚类算法将它们分成有意义的数得来的对象簇。其中一些簇可使用包含在簇中的某个已知类别样本的类别进行标记。
下图中,有四类簇。1、2、3类都可以用诸如信念传递算法的ML算法来求未知类型样本和已知类型样本的相似度。这样可以减少人为的标注工作。
在这里插入图片描述

蒸馏

模型参数过多或者为获取行为日志而运行沙箱,都会导致巨大的计算开销。客户消受不起这种开销。使用已由训练好的实验室模型获取的经验知识构建轻量级模型,即是蒸馏。
1.从有标签样本中提取一些“耗时”的特征,训练一个重量级的实验室用的模型。
2.用这个重量级模型给一群未知类型的样本打标签。
3.将新打标签的样本加入训练集,训练一个轻量级模型。
4.轻量级模型作为用户产品的一部分。
在这里插入图片描述

总结

重点:
1.要有正确的数据。要有代表性,要正确标注。
2.理解ML算法原理,且知道怎么应用于网络空间问题。
3.知晓用户需求,知道怎么在产品中应用ML,帮助用户满足他们的实际需求。
4.建立足够的用户群,以获取足够的反馈。
5.恶意软件检测需要有多个层次程序的协同。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值