搜索
查看: 9215|回复: 43
收起左侧

[讨论] 卡巴斯基的恶意行为判识系统

  [复制链接]
B100D1E55
发表于 2020-4-25 11:44:43 | 显示全部楼层 |阅读模式
本帖最后由 B100D1E55 于 2020-4-25 21:53 编辑

这篇是很久以前一篇文章关于恶意行为判识部分的拓展:https://bbs.kafan.cn/thread-2119494-1-1.html

声明:本人不是搞机器学习方向的,只是觉得这几篇文章有意思就转过来分享一下,具体的技术细节请问专家(比如智量官人)

在那篇文章里面描述了卡巴利用神经网络进行恶意行为判识的系统流程,先节选一下:




通过威胁行为引擎,产品会收集程序的行为日志,然后进一步将这些日志压缩为特征向量,最后被用来训练深度神经网络来区分正常/恶意的行为路径。上图中,收集的行为日志会先被转换成一个二分图,这个二分图包含两种类别的节点(行为和参数),而对应的行为和参数之间用线关联。这种数据结构比原始数据更加紧凑,而且对行为之间的顺序调换有着一定的抗混淆能力
紧接着,算法会从途中提取行为模式。这些模式中包含了原始行为日志中的一部分重要行为和对应的参数(例如注册表更改、网络访问等)
然后,算法会将行为模式进一步压缩成一个稀疏的二进制向量,像两种每个部分都代表着一种特定的行为或者对应参数的令牌。
训练过的深度神经网络会将这个稀疏的二进制向量转换成紧凑的表示,这又被称为模式嵌入。接下来这些模式嵌入会通过取最大值被合并成单个向量,也被叫做日志嵌入
最终,通过程序对应的日志嵌入,神经网络会给出一个最后的可疑度决断

使用神经网络的好处在于权重值都是正数,同时激活函数有着很好的单调性。这些特性带来了一系列好处
  1.分拣模型的打分会随着行为量的增加单调递增,也就是说恶意程序没办法通过额外执行一些“干净行为”来混淆检测
  2.由于模型输出的稳定性,模型检出不会随时间产生波动(例如最终决策是干净程序,但中途某个时候决策为恶意)
  3.由于日志空间是单调递增的,在解决误报的时候很容易能抓出导致误报的行为

先回顾一下传统几种多步主防的手段:

首先是线性模型,也就是传统的“权重打分”系统:例如针对每个行为辅以一个权重,通过线性变换最后算出一个分数,如下图:



BD的ATC很可能就是用这样的一套模型:https://bbs.kafan.cn/thread-2076079-1-1.html  据说近期引入了新的ML报法,期待一下

线性模型好处在于理解容易,训练和实际实现都不困难,但是恶意程序和白程序区分度不够,误报等控制比较差,也容易被绕过

然后是神经网络模型



其中判识基础仍旧是一系列行为,但在变换上包含了非线性成分和更复杂的结构因此在区分度上做得更好(误报控制更好),但仍旧容易被绕过。就算攻击者没有模型的权重/结构/打分信息,直接针对目标的检测结果进行机器学习训练就有可能绕过模型。


前一段时间在翻各家行为防御的文章的时候刚好看到卡巴的研究人员分别于17年和18年在ICLR上发了关于这项技术的短文,个人估计这些合并起来就是现在SysWatcher的大致检测机理,先看看17年的东西:

在原文中卡巴考虑了之前一些行为判识的弱点:很多研究者先将程序行为(API Call,对应的参数以及返回值)记录成线性的日志,然后对日志进行诸如RNN之类的处理。但是在多线程环境/恶意程序混淆/执行环境的差别等因素的影响下,这些日志可能会被掺入噪声或者执行顺序被打乱,这些不稳定因素会对检出准确率产生影响。卡巴则提出了一个基于图的恶意程序行为分析方法。下图是一个简单例子:



左侧是原始的日志,按时间顺序记录了程序的行为;中间部分是根据行为创建出的二分图;而右侧则是从图中提取出的行为特征。

二分图的节点又行为类别(蓝色节点,例如读文件/写文件/写注册表……)和对应参数(白色节点,例如文件路径/注册表路径……)组成,当且仅当行为和参数在同一行的时候对应的节点会有连接。卡巴认为这样的数据表示方法排除了事件发生顺序的潜在干扰但又能捕捉到所有的行为--参数关系。

那么怎么从这张图里提取出一个程序的特征呢?首先共享同一个参数的事件集合可以某种程度上捕捉一个程序的特征。此外,同一串事件序列可能不断重复但其参数可能不同。例如一个恶意程序可能持续在修改某个路径下的文件,或者持续连接不同的主机。而参数本身也很重要,例如就下载执行这个动作而言,下载执行window更新程序和下载执行可疑的exe可能就要靠参数来区分。因此这里定义程序特征为:一系列事件和参数的集合,限定条件是:所有的事件共享所有的参数,而这些参数仅与集合中的事件有关。要提取这样的一个特征组合,先寻找每个参数的所有临近事件,然后将这些参数和他们共享的事件合并到一个特征子集里面。

这样的子集可能很独特,但他们的参数其实可能和以前观察到的其他参数有重叠。例如对于一个文件路径参数C:\Windows\123.ini而言,整条路径可能只在行为数据库里出现过一次,但如果将其按符号拆成令牌就可能有不少重叠。比如例子中C,Windows,拓展名ini就可能在其他日志中也出现过。因此在处理的时候要进一步将参数拆成令牌(且分隔符也包含在令牌内,因为有时候他们能帮助区分参数的类别)。

在这样的处理之后,就可以将这个包含事件和参数的子集变换成一个M+K长度的稀疏特征向量。其中前M项为固定长度,包含了所有系统能捕捉到的事件类别,而后面的K项则可以通过训练集的高频令牌来定义(也可以直接人工指定)。

具体如何用autoencoder来创建一个最优的embedding这里略过不谈,编码后的特征向量集合还会分别对每个元素做min/max/mean处理形成三个独立的向量并合并成为这个日志的特征。卡巴使用了实验室内部~450万的恶意程序日志和~300万白程序日志+XGBoost模型对几种特征提取方式进行了评估:



其中红线是卡巴方法的结果,相比于binary indicator和counters baseline而言在同检测率的前提下误报更低,在同误报率的前提下检测效果也更好。不仅如此,通过这种方式的处理后,在向量空间上近似的令牌在语义上也近似,达到了类似word2vec模型的效果。

然而这里还有一个问题,大多研究针对的是一个程序完整的行为日志进行判识,但并没考虑到使用初期部分行为进行判别的问题。在实机上,若要进行实时的恶意程序监控+判别必须保证模型的输出结果必须稳定而不能抖动,否则会出现灾难性后果。例如一个白程序完整执行可能有100个动作,这100个动作都输入到判识模型可能判别为“非恶意”,但若将一开始10个动作扔进模型就可能被判别为“恶意”。为了防止这种抖动的情况,就必须要对模型进行特殊处理。这就是这篇帖子一开始提到的“单调递增”的重要性。再引用一下:

1.分拣模型的打分会随着行为量的增加单调递增,也就是说恶意程序没办法通过额外执行一些“干净行为”来混淆检测
2.由于模型输出的稳定性,模型检出不会随时间产生波动(例如最终决策是干净程序,但中途某个时候决策为恶意)
3.由于日志空间是单调递增的,在解决误报的时候很容易能抓出导致误报的行为



上图展示了Chrome在未经特殊设计的神经网络上的误报情况,在程序运行初期的一系列行为突然“跃迁”到红线(恶意程序判定阈值)以上产生误报,如果让程序继续执行则分数突降到正常线之下。这种模型显然无法在实时防护上使用。


18年ICLR上卡巴进一步发表了关于如何使用正权值模型实现稳定的实时恶意程序检测。在17年bluehat上卡巴的高级研究员发表了一个名为“检测不是分类”的演讲,着重强调了为什么引入“白特征”对于一些场景下的机器学习来说是禁忌。
首先针对误报可以添加白名单,这是最快的手段,但是面临几个问题:1. 白名单在判定空间中的“半径”应该要多大才不至于使得检测过分宽松 2.使得判定面更加复杂 3.导致内存消耗持续增长。重新训练模型可以缓解内存占用增长的问题,但是耗时较长且同样面临检测变宽松的问题。卡巴认为机器学习主要有几个麻烦点:模型不稳定、很难修复错误、很难去解读、对攻击脆弱。

因此他们针对这些对模型进行了修改,核心思维是“没有一个恶意程序在添加新功能后恶意程度会降低”。这个的核心就是打分必须是一个累加单调递增的过程,不应该在引入杂讯后降低恶意分数。我在之前发的另一篇帖子以及这篇文章中也提到过相关案例:一些模型只要给恶意程序掺杂足够的白特征就会因为恶意打分降低被绕过。

而避免白绕过的重点就在于需要一个单调递增的模型,例如对于线性打分模型来说,除了偏移量可以是负值之外其他都限制为非负数,这样恶意程序展现出的多余行为便不会有潜在拉低打分的风险,而神经网络也类似(例如非负权值+单调的激活函数)。而其他诸如决策树之类的也可以做类似处理。


为此研究人员做了三件事:

1. 使用单调的特征提取:和前文描述相比,这里的特征进一步要求任何与所有集合内事件有关的参数都必须纳入特征集合中。这样一来,当有新的参数出现在日志中时它可以被直接添加到特征集里,当有新的事件发生的时候它也可以在不移除已有节点的前提下被加入到特征,这就确保了单调递增特性。


2. 将嵌入层的权重矩阵W替换为绝对值,并使用max池因为其是单调操作

3. 使用有单调递增特性的神经网络比如min-max网络和lattice网络等。



上图对比了非单调模型和单调模型的检出结果。其中横轴为事件数(时间轴),绿线为判定阈值。可以看到蓝色(非单调模型)对于左侧的白文件初期产生了误判,而使用单调模型则始终保持在阈值底下。而对于右侧的恶意程序则出现了判定抖动的情况(在200~600区间恶意程序一度被判定为白),而使用了单调模型之后恶意值则稳步增长,到1500事件时终于超过判定阈值。



而比对非单调模型和单调模型检测率可以发现,虽然单调模型在完整日志(第一行)的检测精确度不如传统非单调模型,但在实时执行的场景下(第二行)的检测精确度则远超过传统模型。个人猜测单调模型可以应用于客户端,而传统模型可以应用于云端,因为云端不容易被针对训练且沙箱可以直接导出完整行为日志。

最后,使用单调模型更重要的一点在于容易被解读,因此在去误报上和其他特征调整上就有一定优势,以下有几个例子:

1. 恶意powershell payload执行:



程序本身除去Base64编码的恶意powershell内容外是无害的,可以从图中看到其恶意打分在执行恶意payload的那一步突然跃迁到判定阈值之上,成功捕捉到了关键的恶意步骤。


2. 勒索程序



勒索程序不停地遍历文件进行加密并修改后缀名,其对应的打分也不断累加。直到约350个事件之后突破报毒阈值。也就是说在那个点清毒则可以保全后续的文件,如果有回滚的话前期受损文件也可以被还原。

P.S. 这也说明虚拟机测试主防vs勒索病毒的时候请在我的文档/我的图片之类的文件夹放足够多的文件以便让分数累加到阈值上

P.S.的P.S. 卡巴在勒索防御对性能影响方面下了不少功夫。虽然备份文件会写入到main.sdb里,但是其触发的条件比较严格,必须是KSN网络上未知判定等的程序发起的才行,对未知程序本身也有筛选。常见的自解压之类的未知exe不会触发备份。而备份时对文件大小也有一定的筛选。反正优化挺多的。

此外还有一个亮点是他们的快速白名单系统。当一些可信程序被略微修改之后初期虽然KSN上是未知,但5~20分钟之后会自动被KSN判绿。这说明就算是一些常用软件(比如7zip winrar)的变体(比如汉化等)也可能会被非常迅速地添加到KSN白名单从而减少对性能的损失。

3. 挖矿程序



可以看到在一系列行为执行中恶意打分有几个关键阶梯状增长点:最开始的时候出现在安装服务,接着在autorun注册表写入的时候突破阈值,而最终将矿池地址和端口写入注册表的时候分数进一步窜高。

个人觉得这几个案例分析还是相当有意思的……在这样的模型下处理误报的时候应该很容易找到具体是哪些行为导致打分突增


参考资料:

https://openreview.net/pdf?id=BJ_X2yHFe

https://arxiv.org/pdf/1804.03643.pdf

https://www.slideshare.net/MSbluehat/bluehat-v17-detecting-compromise-on-windows-endpoints-with-osquery

拓展阅读:

https://www.gdata.de/fileadmin/web/en/documents/techpaper/G_DATA_Techpaper_BEAST_EN.pdf  (GDATA同样基于图的主防判定系统)

(SentinelOne行为防御的一些细节)

(Avast Behavior Shield基于RNN的检测手段)

(Norton第一代SONAR,恶意/无害双向打分的线形权重模型)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x

评分

参与人数 27原创 +1 分享 +3 魅力 +1 人气 +66 收起 理由
star-ray + 1 版区有你更精彩: )
浮空墓碑 + 3 版区有你更精彩: )
超超~.~ + 3 版区有你更精彩: )
dsb2466 + 1
Hades丶亨哥 + 3 版区有你更精彩: )

查看全部评分

Miostartos
发表于 2020-4-25 11:58:38 | 显示全部楼层
本帖最后由 Miostartos 于 2020-4-25 12:01 编辑

这种时候就要打诺顿屁屁
机学误报感觉是完全没压过

B100D1E55
 楼主| 发表于 2020-4-25 12:08:51 | 显示全部楼层
Miostartos 发表于 2020-4-25 11:58
这种时候就要打诺顿屁屁
机学误报感觉是完全没压过

感觉诺顿从来都对自己的检测机制闭口不提……到目前为止我觉得比较透明的就是卡巴了,技术细节谈得最多。
Miostartos
发表于 2020-4-25 12:10:00 | 显示全部楼层
B100D1E55 发表于 2020-4-25 12:08
感觉诺顿从来都对自己的检测机制闭口不提……到目前为止我觉得比较透明的就是卡巴了,技术细节谈得最多。

分拆之后甚至连病毒信息都查不到了。
点报毒名弹出来的完全不明所以。
a8855942
发表于 2020-4-25 23:08:41 | 显示全部楼层
很好的文章。不错,我很期待2021版。
欧阳宣
发表于 2020-4-26 02:19:02 | 显示全部楼层
看到这个俺第一反应就是GD的图类判别 哈哈GD有时候闷闷的还走得挺靠前
pal家族
发表于 2020-4-26 09:03:25 | 显示全部楼层
@屁颠屁颠 来加精~~~~~
mrzwh
发表于 2020-4-26 09:27:34 | 显示全部楼层
学习了,不过很专业,看不懂
雨落丶枫守
发表于 2020-4-26 12:23:27 | 显示全部楼层
这其实就是论坛水分帖子泛滥的问题,B大的文章太专业,一般人看不懂   只能追求一些肤浅的数据了
建议B大除了专业分析之外,还可以通俗地讲解一下,让我们这些普通人也能看得
ELOHIM
发表于 2020-4-26 14:52:06 | 显示全部楼层
B神,勒索的本质就是写入文件没错吧。

把要保护的文件锁起来,取消所有用户的访问是不是就可以高枕无忧了呢?



另外,B神提到了卡巴的性能。这也是所有安全软件的问题。
如果计算机系统是安全无毒的,杀毒引擎没有启动,那么此时计算机的性能占用很平稳,CPU\RAM\DISK\NET占用相对来讲都较低。
但是如果中毒,病毒文件大多是不会考虑性能的(也有一些挖矿病毒会考虑),CPU\RAM\DISK\NET占用都相当严重,此时杀毒引擎启动将会进一步加大计算机的占用。
B神有没有分析过计算机是怎样判定谁优先使用计算机资源呢?
还是讲杀毒软件发现已知病毒后将暂停其性能占用呢?

第三,每一次升级都是开发人员对自己的否定。这次的结论是最优秀的吗?
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 晋ICP备20004298号-1 ) GMT+8, 2021-3-3 10:32 , Processed in 1.942434 second(s), 24 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表