幻云-事件分析系统中的机器学习-1

2017-07-25 18:59:46 wstart 锦行信息安全



幻云-事件分析系统中的机器学习-1

关键字:数据建模,KNN分类算法,算法调参

阅读时间:20分钟左右


0x00 前言

幻云部署在线上已经有一段时间,随着捕获的数据越来越多,机器学习作为幻云深度分析攻击数据的工具之一,在解决攻击数据分析中的事件定性、归类、判断和关联等问题中越来越凸显出其重要性。本系列文章主要用来记录和回顾机器学习系统的搭建过程,欢迎大家进行探讨和研究。


0x01  算法简介与选择

首先,先简单说一下人工智能,机器学习以及深度学习他们的关系。用一张图概括一下,目前很火的阿尔法狗以及Tensorflow都属于深度学习。

但我们并不是一上来就直接采用深度学习的算法。主要是有几个原因,数据建模,数据泛化等还没建立,对算法的调参还不熟悉,直接采用深度学习算法会导致搭建成本过高,识别率低等情况。于是我们采用了基于实例而且已经比较成熟的KNN算法。


0x02 KNN算法简介

K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法。其中的K表示最接近自己的K个数据样本。KNN算法和K-Means算法不同的是,K-Means算法用来聚类,用来判断哪些东西是一个比较相近的类型,而KNN算法是用来做归类的,也就是说,有一个样本空间里的样本分成很几个类型,然后,给定一个待分类的数据,通过计算接近自己最近的K个样本来判断这个待分类数据属于哪个分类。你可以简单的理解为由那离自己最近的K个点来投票决定待分类数据归为哪一类。



0x03 数据建模

选好算法以后,接下来很重要的工作就是数据建模。幻云采集的数据主要是由 攻击事件,攻击数据组成。通过初步的数据过滤以后,原始数据结构简化如下 


由攻击事件+攻击指令作为一条源数据。但是KNN算法中,还有一个相关度的参数,这个需要我们人为的去设定和计算出它的相关度。

 

那么 怎么去计算相关度。首先,在一个攻击事件里面,攻击数据是可能会出重复出现的,比如同时打了几个ls,lr之类的指令,又或者就是无意识的回车以及Ping等。那是攻击数据出现的越多,相关度就越高还是越低,这个需要长期跟踪和调参数,因为这影响到最终结果的判断。

我们这里为了方便阅读理解,简单的把出现的越多,相关度就越高作为计算的依据。设定相关度最高是10,最低是1。那么 

攻击数据a对于攻击事件e的相关度i 的计算公式为:

把攻击事件名称转换为对应的事件ID 把攻击数据转换为对应的攻击数据ID

那么转换后的结果如下:


至此,我们的数据准备工作完成了。


0x04 使用KNN进行相似度运算

这里采用 Python的 surprise 库是去调用KNN算法。 surprise是一个实现Scikits框架的工具包,里面包含了众多的机器学习算法,调用非常的方便。

这里我们选用了的参数是 基于用户的相似度的计算:


sim_options = {"name":'pearson_baseline','user_based':True}

algo = KNNBaseline(sim_options=sim_options)


运算后,结果如下:



0x05 判断结果校验 

当然 算法运行完后看不出有什么效果。那么我们取几个ID进行试验一下。

目前幻云里面分类的攻击事件的种类比较多,我们选几个比较有代表性,也就是特征比较明显的去校验一下是否检测结果是否可用。

我们这里选的事件有两种。一种是幻云已经分类的事件。看他在结果里是否被分类属于它分类的事件。另外一种幻云还没整理的事件(即未分类事件)通过算法去判定它属于哪种事件。

这里选取了几个事件 

    1. 328264,SSH事件

    2. 269, RDP事件

    3. 118652,菜刀事件

    4. 61382,未分类事件

使用inner_uid 以及 get_neighbors函数 可以获取k(此时k=5)个相关度最高的攻击事件。

    uuuid  =  algo.trainset.to_inner_uid(str(uuud))

    clossids = algo.get_neighbors(uuuid,k=5)

    rawUID = (algo.trainset.to_raw_uid(ccc)  for cid in clossids)

再次运行,分析结果如下


可以看得出。 SSH事件特征十分明显,匹配出来的结果均是SSH攻击事件,可以说识别率100%


而菜刀事件虽然特征也十分明显,在前五的里面 (实际上两个未分类事件的确是菜刀事件,幻云旧的事件分析系统还未处理的数据)基本都是准确的获取了相似的事件。但是后面的五条基本就算是识别不准确了。


而RDP事件(40,48的确是RDP事件,幻云原分析系统暂未处理)只有两个是错误的数据。识别率也达到了80%。


而这是单独的一个未分析的事件,恰好出现了在上面的菜刀事件的结果里面。而这里识别和当前事件最接近的两个事件均为菜刀事件。仔细看了一下捕获的数据。这里的菜刀事件是攻击者多次尝试断开,重连的操作,导致http的请求过多,所以导致分析结果似乎和http攻击事件更加相似。

而我们再看看刚才的ID为40的事件


可以看得出,(48也是RDP事件)10条数据有8条是RDP。可以推测出这个事件80%是RDP事件。


0x06 算法调参

目前识别率差不多达到了6~70%的水平,而特征比较明显的更是达到了100%。但是对于某些事件来说,比如未知事件61382 虽然是菜刀事件,但是识别率并不是很准确。那么这个时候我们就要对参数进行优化。我们给菜刀的特征数据加上权值 (权值预为5)。那么计算公式就变为


识别率由原来的20%变成了40%。而且http事件基本不会再误识别,而是被和菜刀事件更为相似的SSH攻击事件取代了。

仅通过简单的特征加权,我们就可以得到了准确度更高的结果。


0x08 思考与优化

通过选算法,数据建模,生成模型以及初步的调参,我们得到了简单的人工智能事件分析器的雏形。虽然识别率还不够高,但是分析时间比当前的系统下降了一个量级。

当前幻云新的事件分析器不仅仅只是参考事件ID,攻击数据ID以及相关度这三个属性简单的knn算法,而是纳入了马尔可夫链算法模型(因为指令间存在一定的逻辑顺序)以及后续把事件分析器的框架改为Tensorflow用于分布式分析事件和处理。

欢迎大家留言交流和分享大数据和人工智能的感想和体验。


0x07 参考链接

机器学习常见算法分类汇总

http://www.ctocio.com/hotnews/15919.html

       scikit-learn: machine learning in Python

http://scikit-learn.org/


锦行,让安全一路随行


听说这个公众号有最前沿的欺骗技术、最专业的内网安全干货、最新的漏洞信息、最快的安全资讯速递。


如果您对我们的公众号运营有建议,请微信后台留言或联系邮箱:market@jeeseen.com 。建议被采纳,将有机会获得锦行科技定制的幻云陀螺一个哦