文章阅读:卡巴斯基病毒检测白皮书

2020/06/02 -

引言

在Bing搜索关键词"malware"和"machine learning",发现了这本白皮书《Machine Learning Methods for Malware Detection》。
个人阅读完之后,感觉干货十足,满满的诚意。从整体的内容上,加上具体的核心技术,都非常值得深入阅读。
这里记录一下这部分内容,从他提出的观点,使用的技术,进行简要的记录。
个人建议,还是看原文比较好。

病毒检测基本方法

目前病毒检测的方法分为两种:静态分析和动态分析。这里卡巴斯基将运用两种方法,将数据采集的过程分为两种:病毒执行前、病毒执行后。配合上之前阅读的很多文章,我觉得安全公司在进行这方面的工作时,比较依赖自己的病毒库。利用机器学习更是充分说明了这一点。之前我就在想,如果一个新的病毒出现,他就是执行一些注册表的操作,这种可能会被认定为恶意软件吗?
通过对恶意软件数据采集,然后对比历史数据库中的指纹,来判定这个东西是否是恶意。

机器学习应用于网络安全的需求

1. 大量代表性的数据集
这个肯定是必须的,当前这种数据时代,有了数据才能做各种数据科学的任务。我觉得,这个说法,其实跟训练和实际部署过程中,数据集分布不一致是相关的。有了具备代表性的数据集,才能获得泛化能力强的模型。
2. 模型具备可解释性
这个我也一直在强调,但我倾向于这种可解释性类似决策树的方式,比如说某个样本被分类为恶意的原因呢,就是他一系列,一步一步走下来的结果。这里,卡巴斯基给出了他自己的例子:如果你想去查看某个样本为什么被误分类了,如果使用的模型是深度学习的模型,那你将很难发现结果,毕竟这些参数都不是面向人类的。所以,模型的可解释性比较高的话,那么,对于评估模型,或者对模型进行调整会有很大的帮助。不过,我想起了之前的时候,在那本统计学习方法(英文)的书中,他列举了这个复杂度和可解释性的关系。那么,如果某种模型自身的复杂度已经决定了自己可解释性,那么这里的说法,是不是就是指要使用一些复杂度低的模型呢?类似决策树这种。目前,没有更好的观点,我个人比较认同就是要选取复杂度低的模型的观点。同样, 特征也应该具备可解释性,那么如果是要选取这个可解释性的特征,就比如借助人工的力量。不过,现在很多都在强调利用深度学习的方法将这个步骤也给省掉,这就与这个说法有些互斥。


(20200721新增)
这个关键点没有说清楚,问题来源于,这个可解释性到底是什么,虽然看了几篇论文,但都没有好好看懂。网络安全中需要的可解释性指的是什么,需要解释的又是什么,我觉得这是需要我思考的问题。

3. 假阳性的比例必须要低
这个跟我之前的一个想法一致,针对这种恶意软件的内容,即使只有很低的概率,但是在当前这种恶意软件数量与日俱增的情况,最后造成的误报数量也会很高。这部分内容,属于对评估指标的要求。


(20200721新增)
假阳性,是指将正常样本误分类为恶意样本,我之前的时候,可能是错以为是假阴性,也就是恶意样本被误分类为正常样本。他这里强调了假阳性的重要性,是说如果将用户的正常文件给当作恶意样本删除会给用户造成很差的用户体验,但是我个人觉得,假阴性结果更不好吧,毕竟如果出现了假阴性,那就证明有些恶意样本就被当作正常的,从而导致了最终对用户数据,用户系统的破坏。

4. 算法必须能快速应对对抗者的更新
恶意软件每天都在更新,这就导致样本分布的不一致。为了应对这种内容,就必须保证能够及时更新模型,这种模型更新过程,是否是完全重新训练模型呢?这个就跟我之前提到的,好像是叫增量学习这个模型吧。

卡巴斯基应对恶意软件检测使用的机器学习方法

(因为这一段我没有按照他白皮书中的内容进行整理,是遵循自己的想法来梳理的,有些杂,需要捋清楚一下)
读了这篇文章之后,我对我之前的一些学习有了新的认识。就比如我前端时间看的那些自然语言处理的内容。我觉得,我看的那些内容,对于恶意软件检测来说,并不是最终要的,他只是一个获取特征的过程,而且有时候特征还不具备可解释性。如果你是完全无脑的将数据输入到模型中,他也可能获取到比较好的性能。但是从可解释性上了来说,可能因为模型本身,或者你自己的能力问题,无法解释。


我觉得,比较原始的那种基于指纹的方法,并不算是机器学习方法,算是一种模式匹配吧。
然后如果是利用这种方法,就是将各种指纹进行对比的过程。


这里来提一下, 卡巴斯基对这个方法的一些要求
当然,不仅仅是卡巴斯基的内容,各大安全厂商肯定也具备这些需求。明确他们的服务对象是什么,他们需要真正的面对恶意软件。同时,虽然实验室可以支持GPU进行深度学习的学习,但是对于个人用户而言,大部分情况下,他们需要快速的检测,而且对性能要求不能太高。
这就让我想起了之前的一些见闻,一些比赛,最终会要求你的模型大小。这一点说实话,是我没想到的。个人用户的文件也非常多,如果都用沙箱来检测,肯定不行。


也就是说,我们需要一种快速的检查方法,从 特征的角度出发,就是需要一些能够快速提取的特征。同时,配合大部分厂商都使用基于指纹的方式。这里就引出了LSH,局部敏感哈希。


(机器学习,就是比较新的数据,是否满足已有的历史数据训练出的数据模型)
快速的检测方法:在静态分析情况下,需要提取特征的过程也要快速。
(这里插一脚,其实这个过程,不就是特征选择吗,假设我选择了非常多的特征,然后考虑这些特征的提取办法。但是这里说这个事情,就是因为,他给我的感觉是非常顺理成章的,一方面数量大, 一方面就是要快速检测。感觉其实可能我之前看到的一些文章也是这么回事,但是好像他们都没有说出来,都直接什么要进行特征选择)

原始的基于静态分析的特征有哪些呢?

  • 代码段
  • 代码段的哈希、整个文件的哈希
  • 文件特征
  • 以上特征的组合

这种就是最原始的,基于指纹的方法。反正就是按照这个数据库中的内容,我做一些比较,如果命中了,就说明这种病毒是见过的。

上面这个代码段倒是提醒了我,如果整个文件的哈希没有匹配,该如何做,代码段。
不过,我也有点感觉不对,这个代码段如何分类。
其实如果是用头部信息的话,是能发现 一些东西的。

所以这里的话,我个人感觉,其实就是说,他使用一些比较容易获得的信息,或者说特征,利用这些特征来实现检测,但是具体的特征是什么,我暂时不是很清楚(不是完全了解),可能包含了所有不运行所获取的信息。
然后运用一些哈希或者什么的方法来协助协助进行大数据的匹配。


这里再多插一句,就是匹配的过程。感觉我已经很久没有关注过这种基础的算法了。个人认为应该就是利用哈希算法吧(不过,这么多年,这么大量的数据库,应该有比较高级的查询办法。)。但是这里也提出了一个问题,比如minhash或者说一些lsh是怎么工作的呢?特别是大数据量的情况。


  1. 特征的方便,我应该如果能够找到一些对局部的改变不敏感的东西,这种情况下是最好的,这样能够解决传统方案中,使用加密方法的完整验证的函数生成的指纹变化太大的情况。对局部改变,或者说小型改变不敏感的特征
    (其实这种说法,我觉得这里我可能对具体的这个改变效果不够理解。我想知道的是,如果同样的编译选项,那么如果我仅仅是改变了一个数字,或者说一串IP,那么两个程序的对比会发生什么变化呢?这个问题可能涉及到最底层的一个问题,就是ELF,假设我关注linux下的样本,他编译之后,这些样本的各个未知都是什么东西呢?这应该是从编译的角度来理解把)
  2. 特征方便计算,特征方便计算是因为有时候需要用户能够执行一些操作,这样用户自己就能够进行一些检测工作。

针对能够获取非敏感性的特征,LSH是一个非常好的选项。但是关于这部分的原理, 我还是不够完全理解,特别是说,但是我也关注过这个大数据情况下的两两比较的问题。
但卡巴斯基说到,LSH哈希的计算是无监督的(这个我没想明白为啥), 可能卡巴斯基想说的是,他想知道这个计算出来之后,这个东西是恶意的还是非恶意的。


他就是像训练一个函数,这个函数能够将相似的物体的距离拉近,但是将非相似的距离拉远;说实话,这个东西,我感觉就跟我之前看的那个东西一样,度量学习,将分类边距拉开。(这部分我不是很清楚,因为他内容中也没有说明这就是度量学习)
而且, 为了实现检测能力更强,他是训练了多个这种函数,也就是说,每个函数对应着不同部位的特征,比如某些地方是字符串,某些地方是文件的结构。我觉得这个说法不错,这样的检测方式,就能衍生出这样的结果,你是相似的,那么你的相似的地方使用的特征就是这些。
因为使用了多组特征作为敏感哈希的输入,就会产生多组特征,这些特征都是数值型的, 也就可以直接在图表上展现出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值