小编在正式进入工作之后,面对的第一个需要去解决的问题:在网络安全监测中,如何发现异常数据?如异常用户登录,异常操作等。对于网络上的问题我确实是第一次接触这样类型的数据,虽然数据的产生只是一些登录和操作统计,包括piwik这样的网络数据统计平台给出的基本数据类型,数据库中还是都有的,只是很多维度在一定意义上有很多冗余(如经纬度与城市),还有一些离散形式的已指定的ID标签,并未能合理使用;而之前的基本处理方式是按照这些固定的标签是否满足层级的规则表和白名单,虽然加入了flume和kafka这样高效的架构,但在实现算法判别异常网络数据的算法上仍在研究探索,特此找一些网络博文和参考文献算法充电。
其实最为痛苦的一点是仿真数据并没有明显的标签还有一些维度的缺失……还是需要一些生产网数据去设计和检测模型有效性。
一、概述
异常数据挖掘,又称为离群点分析或者孤立点挖掘。在人们对数据进行分析处理的过程中,经常会遇到少量这样的数据,它们与数据一般模式不一致,或者说与大多数样相比有些不一样。我们称这样的数据为异常数据,对异常数据的处理在某些领域很有价值,例如在网络安全领域,可以利用异常数据挖掘来分析网络中的异常行为;在金融领域异常数据挖掘可以识别信用卡的欺诈交易、股市的操控行为、会计信息的虚假报价、欺诈贷款等。
异常数据挖掘涉及两个基本问题。其一,在对一个给定的数据集分析之前必须事先约定满足什么样的数据才是异常数据,也就是异常数据定义的问题。其二,用什么方法来从给定的数据集中将异常数据提取出来。
二、异常数据的定义
异常数据是少量的、与众不同的,与大多数数据相比是有偏差的,而且产生这种偏差的原因不是随机的,而是有其更深层次的必然原因,它产生于完全不同的机制。
为了从数据集中识别异常数据,就必须有一个明确的标准。这需要找到数据的内在规律,在一个可接受的误差范围内,满足内在规律的数据就是正常数据,而不满足内在规律的数据就是异常数据。这种数据间的内在规律可以根据数据本身的特点从位置关系、函数关系、规则关系、序列关系等方面来考查。
(1) 位置关系
位置关系是数据间的最常见的一种关系,大多数正常数据具有很大的相似性而符合一个共同模式,在空间上表现在一起的趋势,团结在一个或者多个核心的周围,而那些异常数据则表现得离群,他们总是离所有的核心都很远。
(2) 函数关系
函数关系也是一种常见的数据关系,即大多数数据都符合某个函数模型,因此数据点大多分布在函数曲线附近,而那些异常数据则距离曲线比较远。
(3) 规则关系
如果数据集中某些符合某个规则条件,则称这些数据具有规则关系。具有同一规则关系的正常数据一般会使
该规则的结论成立,而如果某个数据具有该规则关系但不能是该结论成立,那么他就是异常数据规则的一般形式为
A1&A2…&An—>C
这里Ai和C都是对数据特征的描述。
(4) 序列关系
序列关系是指数据集中的某些数据满足某种序列模式,而那些相同条件下不满足序列模式的数据就是异常数
据。
三、异常挖掘的常用方法
异常数据挖掘方法是数据挖掘的一个重要方向。许多研究人员从不同角度及不同的应用领域出发,提出了不同类型的挖掘方法。从技术来源看,这些方法可以划分为基于统计的方法、基于距离的方法、基于偏离的方法和基于聚类的方法。
(1) 基于统计的方法
基于统计的方法的基本思想是根据数据集的特性事先假定一个数据分布的概率模型,然后根据模型的不一致性来确定异常。首先对给定的数据集假设一个概率分布模型,然后在某个显著水平上,确定数据集的拒绝域或者接受域,拒绝域是时出现概率很小的区间,如果数据落在此区间,则判定为异常数据。
统计学的方法的优点是很明显的,它建立在成熟的统计学理论基础上,只要给定概率模型,其他统计模型非常有效,异常点的含义也非常明确。
(2) 基于距离的方法
基于距离的方法主要是基于数据点间的距离来发现异常点,由于它具有比较明显的几何解释,是当前使用最普遍的方法。基于距离的方法的基本思想是以距离的大小来检测小模式,异常点是那些被认为没有足够的邻居的点。他可以述为数据集N中,至少有P个对象和对象O的距离大于d,则对象O是一个带参数P和d的基于距离的异常点。
(3) 基于密度的方法
基于距离的方法对全局各个聚类的数据提出了统一的P和d参数,但是如果各个聚类本身密度的不同,则基于距离的方法会出现问题,因此提出了基于密度模型的局部异常点挖掘算法。
在这种情况下,数据是否异常不仅取决于它与周围数据的距离得大小,而且与邻域内的密度状况有关,一个邻域内的密度可以用包含固定数据点个数的邻域半径或者指定半径邻域中包含的数据点数来描述。
(4) 基于偏离的方法
基于偏离的方法的基本思想是通过检查一组对象的主要特性来确定异常,如果一个对象的特性与给定的描述过分的偏离,则该数据被认为是异常点。现有的基于偏离的方法主要有序列异常技术和OLAP数据看立体方法。序列异常技术的核心是要构建一个相异度函数,对于一个包含了很多样本的数据集,如果样本间的相似度较高,相异度函数的值就比较小,反之,如果样本间的相异度越大,相异度函数的值就越大(例如方差就是满足这种要求的函数)。OLAP数据立方体方法利用在大规模的多维数据中采用数据立方体确定反常区域,如果一个立方体的单元值显著不同于根据同居模型得到的期望值,则该单元值被认为是一个异常点。
(5) 基于聚类的方法
基于聚类的方法的基本思想是将异常挖掘的过程转换成聚类的过程。首先是将数据集利用已经成熟的模型进行聚类分析,将数据集划分为多个簇,然后选择那些离簇的质心比较远的样本作为异常点。
四、异常检测实例
大数据分析方法已经被广泛应用于商业智能(BI)领域,与之相关的银行行业中,异常检测更是应用在信息安全领域和自动化运维上,用于发现信息系统的异常情况(入侵和攻击、数据泄露等)。利用大数据分析的方法发现异常事件,需要满足几个条件:
1)行为日志在内容必须足够详细,可以从日志内容上区分正常行为和异常行为。也就是假定异常行为无论在表面上看多么正常,总是在细节上与正常行为有差异。
2)针对不同的分析目标,选用恰当的分析算法。
3)对行为描述进行合理的建模。
下面的内容主要是描述通过DNS日志,进行僵尸网络的分析和检测。
例如默认的DNS解析日志:包含了时间戳、服务器主机名、协议号、IP、端口、标记位、查询类等
Jul 22 10:59:59201307221059 GSLZ-PS-DNS-SV07-YanT '17 75 1374461999.999790 1307221059218.203.160.194 53 218.203.199.90 5826 dns 0,0,4692,0|4|5 1 www.baidu.com, 1,11 www.baidu.com,1,1,3,111.11.184.114'
对于这些数据,我们需要知道根据业务哪里更适合进行判别:大多数僵尸主机在最初感染的恶意程序,只是一个下载器程序,真正能完成有害操作的恶意程序要从恶意程序分发服务器上下载。因此僵尸主机安装下载器之后,首要的工作就是发起一系列域名解析请求,用来获知恶意程序分发主机的IP地址以便完成恶意程序实体的下载。在完成实体恶意程序之后,僵尸主机还会发送域名查询请求,以便获知控制服务器的IP地址并与之建立联系,等待控制服务器发送指令。为了避免分发服务器和控制服务器被网络监管人员发现并摧毁,僵尸网络的控制者采用了很多技术手段对这两类关键服务器进行保护,诸如动态域名、Fast Flux技术等。还有一类DNS查询请求本身就是僵尸主机发起的攻击,其特征也与正常的查询请求有很大区别。总之,僵尸主机会发送大量的域名查询请求,而且这些请求与正常的域名请求在诸多属性有明显的差异。
由于正常的域名查询请求占绝大部分,且彼此之间具有明显的相似性,而僵尸主机的域名查询请求日志则有明显的差异,因此非常适合采用相似性分析的方法进行区分。相似性分析的一般步骤是:1)确定被分析对象(源IP地址或域名)。2)确定分析的属性。3)将属性量化成可分析的数值。4)将数据写入描述性矩阵。5)以描述性矩阵为输入数据,代入相似性计算公式,计算被分析对象的相似关系。一般可以使用空间距离,相似系数或Jaccard系数等。
而聚类分析的一般过程:把每个域名解析请求的属性作为一个变量,则这些属性构成一个多维向量,每一行是一个多维向量。对这些多维向量进行聚类分析,可以发现那些游离于聚合之外的那些向量所对应的域名,就是异常域名。这些域名解析请求很可能就是僵尸程序或WebShell发出的。可以考虑采用的属性包括:域名长度、域名相似性、TTL、域名层级数、请求发送时间间隔、请求源IP地址数、响应状态、域名对应的IP地址数量、域名查询类型。
还有一些关于内部信息系统的行为(以下简称内部行为),其分为主机(包括服务器和终端)行为和网络行为两大类:一是主机行为,即主机本地的行为,例如创建帐号、创建文件、修改注册表、内存属性(读写、执行)变化、进程变化(启动、停止)等等。如果物理主机上运行着多个虚拟主机,主机行为还应包括一些虚拟化系统的行为。二是网络行为,即与网络访问相关的行为,例如域名解析请求、HTTP访问请求、ARP广播、收发邮件、即时消息、文件上传和下载、数据库访问等等。而这些数据可以很好作为自动化运维平台和监控的需要。可能会涉及到一些有关访问行为的关联分析,在处理时要注意的是:正常访问行为应该是绝大多数,因此异常行为的占比非常低,所以在关联分析的算法中,我们对支持度的要求不是大于某个数值,而是大于0且小于某个数值。
小结:在后面的文章主要会介绍两类异常处理:一类是根据特征维度的特征向量点去判别:主要方法尝试了K-means、OneClassSVM与Isolate Forest,其中iforest这个算法是周志华老师很早就已经实现,思路简单有效;而另一类是在根据已有历史数据的时间序列上进行异常:通过分位数3伽马原则、高斯估计等对峰值、低谷、异常、周期性等检测,会涉及一些时间序列模型AM、自回归等原理。
参考文献:
【1】http://blog.sina.com.cn/s/blog_66239fdb010167jx.html
【2】http://www.2cto.com/Article/201601/485562.html