本文原创作者:windhawk
前几天看到FB上登了一篇介绍机器学习在安全领域应用的文章 《机器学习来了,安全行业准备好了吗?》 ,看来在大数据分析时代,以机器学习为典型分析方法的主动安全检测、识别已经逐渐成为学业界关注的焦点。自己便借着这个东风,来介绍下机器学习在安全领域的一些应用和研究。
机器学习在安全的诸多领域都有应用,比如恶意代码的识别检测、入侵检测系统中的主动防御等。今天我们先来介绍下机器学习技术在内部攻击检测(Insider Attack Detection)领域的一些应用。
目录
一、内部攻击检测(Insider Attack Detection) 二、入侵检测中的机器学习 三、用户文件对象建模 四、进一步抽象:用户任务(User Tasks) 五、实验 六、小结 七、参考文献
一、内部攻击检测
传统的入侵检测系统一般在网络边界部署IDS/IPS,或者对于通过路由器的网络流量进行安全审计等方法来检测可能存在的外部的入侵攻击。与其不同,内部攻击检测关注内部网络(如一个企业内部网络)中是否存在可能的入侵攻击。
内部网络中的入侵攻击通常是外部入侵成功后的下一步工作,比如以攻破的节点为基础,扫描整个网络,发现目标资产所在的位置(如人力部工资数据库或市场部客户资料),或者进一步攻陷内部网络中的其它主机,扩大感染规模等。
最近几年内部攻击检测逐渐成为人们关注的一个焦点。一个原因是传统的入侵检测系统对于内部网络中的攻击检测通常能力有限,必须研究针对内部网络独特的入侵检测方法;另一个原因则是在日益肆虐的APT攻击应对中,内部攻击检测越来越扮演重要的角色。
情报搜集 首次突破防线 幕后操纵通讯 横向移动 资产/资料发掘 资料外传
从上图可以看出,从突破安全防线开始,几乎所有关键的攻击活动都在目标网络内部实施,无论是暗中通讯(如C&C),还是横向移动感染,乃至最后的信息泄露外传,全部是借助内部网络中攻陷(Compromised)的节点有步骤地实施。因此,从这个意义上来看,内部攻击检测研究对于应对当今的APT威胁也有着重要意义。
二、入侵检测中的机器学习
1. 什么是机器学习?
所谓机器学习(Machine Learning),其实是过去很多技术的综合和发展。ML本身涉及统计学、模式识别、神经网络、人工智能、信号处理以及控制和数据挖掘等不同的领域,因此如果想精通并非易事,但是如果仅仅是作为工具使用,那么对于我们大多数人来说并不困难。
为什么会有机器学习呢?从字面的意思理解,即“让机器来学习”。这里涉及到一个潜在的前提:有些问题我们知道如何求解,如利用矩阵变换来计算线性方程组的解;但是还有很多问题我们可以轻而易举地做好,但是却无法解释清楚我们是如何做到的,如尽管每个人写的字粗细大小不同,我们还是可以一眼识别一个数字是不是9,等等。如果这些工作想借助计算机来完成,就必须让计算机进行学习。
机器学习能够成立的基础在于我们相信每个对象的构成绝非基本元素的 随机 组合。如桌子绝对不是木材和各种材料的随机堆砌,手写数字也不是像素的随机分布。现实世界总是充满着规律,只是我们尚不清楚。那么我们只有借助数据换知识,仿照人类知识获得的方式,让计算机以极高的速度针对已有的大量数据进行多次的学习(尝试-学习-再尝试-再学习),来获得那些我们现在尚不得知的知识。
现在的机器学习通常根据应用类型分为关联性研究、回归预测、分类判断以及游戏和机器人领域使用较多的增强学习。与我们最密切相关的就是分类判断模型,最简单地,输出两个值,0表示正常,1表示异常(潜在攻击)。
2. 入侵检测中的机器学习
其实机器学习技术应用在入侵检测领域并不是新鲜事,最早也许叫做数据挖掘或模式识别,但是现在统一归结到机器学习的领域。
入侵检测方法可以分为两个大类。一种是借助恶意代码或恶意对象的“签名”来识别,比如一个恶意文件的MD5值等;另一种则是引入主动学习的概念,利用机器学习的诸多算法(朴素贝叶斯、Markov、神经网络、SVM等)来通过收集的大量数据学习构建分类器,然后利用这个分类器来对新的数据对象进行判断。
上述两个方法各有利弊,对于基于“签名”的方法而言,检测速度快、准确度高,但是由于依赖于现有获得的恶意对象的特征签名,因此对于新的未知威胁束手无策;主动检测方法通过数据挖掘获得了恶意对象特征的部分知识,因此可以识别恶意对象一定程度的变种和新型的威胁。也正因为如同人工判断会存在误差一样,通常主动检测的误报率较高,这也是在实际中应用的最大瓶颈。
分析攻击特点,选择要使用的用户行为特征(如访问事件、访问时间周期等); 收集网络日志信息,或所有的网络流量信息,统一格式化处理; 将收集的数据按照使用的用户特征处理为标准的机器学习输入格式(如著名的KDD数据集就是1:1 2:0.98 3:3.5... ...的格式) 根据选择的机器学习算法构建分类器,利用训练集学习; 获得分类器C,然后对新数据进行判断; 根据判断正确与否,重新修改完善分类器;
如图2:
三、用户文件对象的建模
用户对于文件的行为,可以有访问、删除、移动、修改等多个操作,由于全部予以考虑会十分复杂,因此我们今天先仅针对文件访问行为进行刻画。
如果要刻画用户访问文件的行为,我们可以借助两个图结构来进行,分别是访问图和目录图。
1. 访问图(Access Graph)
访问图的主要作用在于记录用户最近访问的文件对象以及访问的顺序。具体的,我们可以使用FS表示用户u的一个文件系统,则其上的访问图A定义为:
其中的顶点集合V当然表示用户访问过的文件对象,可以是文件也可以是文件目录;边集合E记录了邻近的对象访问关系,如:
***E={(n, n',k) | n -->n' with k times} ***
上述公式的意思,E中的边记录的是用户先访问了文件对象n,接着又访问了文件对象n',这样的访问行为一共出现了k次。
为了建立我们的访问图A,我们可以用下面的方法进行更新:
最初时,V中只有根目录,而E为空集;
当用户访问节点n后继续访问节点n'时,更新图A:
if n-->n' 属于E,则A= (V, (E - {n -->n' in k} + {n -->n' in k+1})) else 则 A=(V + {n'}, E + {n-->n' in 1})
上述中的"+"表示结合的并运算。
最终形成的访问图中,每个节点都会有三个属性:节点n的文件路径path(n),节点n在目录图D中的位置POS(n)以及该节点被访问的次数i作为节点权重;
一个访问图的例子类似图3:
图中的箭头方向表示了用户访问文件时的路径顺序,最终的文件对象Exa.jpg具有右边矩形框中的三个属性;用户也可以由Exa.jpg发起对一个新对象QQ7.exe的访问;对于用户APP直接访问的对象,可能出现单一节点的情况,如E:/bak/Passwd.xml。
2. 目录图(Directory Graph)
目录图D其实是文件系统的一个子图,表现为一个以根节点为根的树结构。
类似于访问图A,这里我们依旧用FS表示用户u的文件系统,则可以定义用户u的目录图D为:
这里需要说明,访问图中的节点集合V当然是目录图中V'的子集,不仅如此,对于访问图中类似E:/bak/Passwd.xml这样孤立的节点,目录图要自动补齐从根节点到该对象的全路径,即将缺失的E:/和bak/全部添加到目录节点树中。
此外,边集合中的E'同样定义了类似于E的邻近节点关系,只要E中的元素(n–>n')中的n'是E中的一个末端,则(n–>n')就属于E'。简言之,E'中同样要包含所有在E中出现的以及可能出现的边关系。
C:-->Users-->Picture-->Temp-->Exa.jpg
E中对应的边应当有:
C-->Users; Users-->Picture; Picture-->Temp; Temp-->Exa.jpg;
E‘中应当包含上述路径中所有潜在的邻近访问关系,即:
C-->Users/Picture; C:/Users-->Picture/Temp等等;
类似于访问图A,D最初也只包括根目录和边的空集,更新时依据下述规则:
if (n, n')属于E’, (V', E') = {(V' + {'n}), E' + {n, n'}} else (V', E') = (V', E')
与访问图A类似,目录图中的每个节点n也会记录三个属性:节点n的文件路径path(n),节点n上次访问的时间以及节点n在目录图D中的位置POS(n)。更形象的,可以参考图4:
四、进一步抽象:用户任务
现在我们已经可以针对用户访问的文件对象或文件目录建立用户访问结构图,其实这其中还存在着一个容易忽视的事实,即有时用户执行某项任务所访问的文件之间都具有关联性,那么我们可以进一步抽象我们的用户访问模型,将用户访问的文件目录抽象成一个用户任务(User Task),然后利用同样的方法针对目录的维度进行用户访问文件行为的刻画。
最终访问的目录Desktop和Documents以及Downloads作为用户任务,仅刻画用户访问这些目录的行为规律即可。
由文件对象抽象到用户任务最大的好处是:需要分析的对象数量级迅速减少,一个目录中通常包含许多要访问的文件对象。
五、实验
在介绍实验之前,我们终于可以提到与机器学习最相关的部分了,那就是这里要使用的单类朴素贝叶斯分类器。略去难懂的理论,我们只需要明白,真正构建分类器时使用的是基于频率事件近似的概率。为此,我们将用户访问每个文件对象或用户任务的事件之间看作相互独立,然后分别计算文件c被访问是由用户u进行的概率,然后计算多个事件的累积概率(事件的组合),如图6:
我们可以从实验设定一个阈值,当计算的累积概率低于该阈值时,说明用户行为组合正常;反之则该行为是异常行为,需要进一步分析。
六、小结
内部攻击检测的研究正日益引起人们的重视,传统的方法是基于用户的行为向量进行建模,从而刻画用户的正常行为。今天我们给大家介绍了基于用户行为的客体–>文件对象进行建模刻画,从中也可以略微体会到机器学习在安全领域的应用方法。
不足之处是刻画的维度仍较单一,用户行为作为一种复杂的主体行为,需要从多个维度共同来刻画。
七、参考文献
Schonlau.Metc. : Computer instrusion:Detecting masquerades. 2001;
Camina,B etc. : Towards building a masquerade detection method based on user file system navigation. 2011;
Camina, J.B etc. : The windows-users and -intruder simulations logs dataset(WUIL): An experimental framework for masquerade detection mechanisms. 2014
Camina, J.B etc. : Towards a Masquerade Detection System Based on User's Tasks, 2014 RAID
<机器学习导论>, Ethenm Alpaydin, 机械工业出版社
* 原创作者:windhawk,本文属FreeBuf原创奖励计划,未经许可禁止转载