前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习在网络安全中的正确打开方式,你学废了吗?

机器学习在网络安全中的正确打开方式,你学废了吗?

作者头像
绿盟科技研究通讯
发布2019-12-11 18:14:34
9440
发布2019-12-11 18:14:34
举报
文章被收录于专栏:绿盟科技研究通讯

一、引言

机器学习模型被越来越多地应用到网络安全领域,如:恶意软件检测、恶意脚本检测、加密流量监控、钓鱼邮件检测等等,机器学习在网络安全中的应用看似越来越广,但实际应用到机器学习技术的产品却很有限,在现网应用时,机器学习并没有表现出离线测试中的优良性能。这种现象的产生与安全场景的特性是分不开的,在安全场景下,带标签的数据往往难以获取、正负样本倾斜较大、攻防技术更新快,这些性质决定了我们不能直接套用在其他领域中机器学习的使用方法。

机器学习中分类模型训练的方法一般分为:有监督学习和无监督学习两种,安全场景下也分别有这两种方法的应用案例,本文辅以实际案例介绍这两种方法在实际使用中的注意事项,探索如何打造在现网中实际可用的检测器。有监督学习由于其本身原始设定与真实情况存在较大差异,数据采集、结果评估等环节往往出现较大偏差,第二节以安卓恶意软件检测为例,介绍有监督学习方法在使用中的注意事项,无监督学习虽然比较贴合实际情况,但是由于该方法一般在正常数据上进行训练,无法利用异常数据中的信息,第三节以异常检测为例,介绍无监督学习方法在使用中的注意事项,第四节对文章做简单总结。

二、恶意软件检测(有监督学习)

恶意软件是网络犯罪的一大载体,根据McAfee的报告,截止到2019年8月份,累计捕获到9亿多恶意软件,2019年第一季度新增恶意软件6000多万[1],并且根据以往数据统计[2],感染率超过10%,可见态势不容乐观,反观学术论文[3],恶意软件的检测率非常高,似乎已不再是问题。实际上,恶意软件在不断进化,恶意软件家族也在不断增加,恶意软件分类器的有效性需要在时间维度上进行刻画,然而很多系统在评估的时候并没有将分类器在时间维度上的表现纳入衡量指标,没有充分考虑现网部署的场景导致这些检测器实际检测中的效果大打折扣,总之大部分分类器在训练过程中会引入偏差。

文章[4]以安卓恶意软件检测为场景,对训练过程中引入的偏差从时间和空间维度两个维度进行了刻画,揭示了训练过程中的偏差对分类器效果的影响,并且提出了更加完善的训练流程和评估指标,具有很好地现实指导意义,本节余下内容为对该文的简单介绍。

1数据集

文章从公开数据集AndroZoo[5]收集超过850万安卓APP,挑选2014年-2016年的样本并且按照恶意率为10%的比例对样本进行采样,每一个APP附带时间信息,绝大多数APP包含VirusTotal的检测信息,为了获取比较纯净的数据集,依据如下方式打标签:

良性软件:没有厂商检测为恶意

恶意软件:超过4家厂商检测为恶意

对于在检测厂家数量为1,2,3的软件不做处理,最后获得129728个样本,其中包含良性软件116993个,恶意软件12735个,样本数量按月分布情况如图1所示,其中2014年的数据为训练集,2015,2016年的数据为测试集。

图1[4],数据集的样本数量按月分布。其中虚线左边为训练集,右边为测试集。

2训练过程中的偏差

2.2.1 时间偏差

数据集划分产生的时间偏差。说到时间偏差,不得不提机器学习中“概念漂移”的概念,意指测试集与训练集中的数据分布不同导致模型“过时”从而失效的现象,一般来说,机器学习中测试集和训练集中的数据符合独立同分布的假设时,训练出的模型才有足够的泛化能力。显然安卓恶意软件会随着时间的增长不断改变特性,在不同时间段内特征满足独立同分布的假设是不成立的。

然而现有的对恶意软件的检测工作一般都采用K折交叉验证的方式,即将收集到的样本不按时间顺序进行打乱重组,划分训练集和测试集,这样就会将“未来”信息引入到训练集当中,然而在真实环境下,新恶意软件是不会在训练集中的,这样就产生了时间偏差。

正负样本采集产生的时间偏差。一般来说,我们会从多个来源采集样本,很有可能采集的正样本和负样本在时间上是不重合的,这个时候模型对应用的区分可能仅仅是因为时间原因,正负样本在特征上的本质原因却被忽略了,这种情况同样会产生时间偏差。

2.2.2 空间偏差

空间偏差指正样本和负样本因为数量的差异而产生的偏差。

根据不同的情报来源,安卓恶意软件的概率一般在6%~18.8%之间,但是在实际训练过程中,训练集和测试集中正负样本的比例往往和实际情况有所差别,这样导致计算出的各种指标在不同数据比例上存在严重偏差。

2.2.3 检测算法

为了量化上述两种偏差的具体影响,文章选择最新的两种安卓恶意软件检测算法进行测试,下面对这两种算法进行简单介绍。

算法1[5]:通过对程序的静态分析,人工制定多维特征向量,利用支持向量机(SVM)算法进行分类。

算法2[6]: 对软件中API调用的序列建立马尔科夫链,利用状态间的转移概率作为特征输入,最后使用随机森林(RF)算法进行分类。

两种方法在各自的数据集上都有很好的效果,其中算法2的F1值(平衡准确率和召回率的指标,越高越好,最大为1)可以达到0.99,看起来该分类器已经接近完美了。

2.2.4 偏差量化

文章对上述两种算法进行了偏差上的量化,量化结果如图2所示,其中数值代表F1值,表中的行代表时间偏差,列代表空间偏差;黑色方框(

)代表数据在该时间段内,灰色方框(

)代表数据不在该时间段内,由于时间跨度为2014年-2016年,以半年为单位,所以共有6个方框;空间偏差中,区分训练集和数据集,按照恶意软件占比的不同(10%和90%)进行实验,对比算法1(ALG1)和算法2(ALG2)的表现,因此共有8列;时间偏差中,10-fold CV为不做任何偏差测试,Temporally inconsistent为考虑数据集划分产生的时间偏差,Temporally inconsistent gw/mw windows为考虑正负样本采集产生的时间偏差,Temporally consistent (realistic)为符合真实场景时,没有时间偏差时的实验条件,这也是我们需要重点关注的点;红色方框代表实验条件类似于原文中条件,绿色方框为在真实环境的条件,真实环境满足两个条件:1. 测试集的时间点在训练集之后,2. 测试集中恶意软件占比为10%(贴近真实环境)。

通过此图我们不难发现:1. 算法1和算法2的实验条件均不符合真实环境,2. 模拟真实环境的测试结果要远远低于算法所声称的效果,这些算法甚至在真实环境中是不可用的。

图2[4],在时间偏差和空间偏差上,不同算法的F1值

3优化评估标准

经过2.2节的分析可以看到,其他领域的对分类器的评估标准在安全场景下、尤其是在时间敏感的场景下似乎不适用,因此需要对评估标准进行优化。

2.3.1 评估的前提条件

由2.2节可以看到,由于算法没有在真实环境中进行评估,导致其在真实环境中的表现不尽人意,那么真实条件有哪些呢,文章[4]认为有以下三点:

训练时间一致性(C1)。训练数据的时间必须早于测试数据的时间。

正样本和负样本时间一致性(C2)。测试数据中,正样本和负样本应该在同一时间内,另外,训练数据中的正负样本也应进行保证在同一时间段内。

测试集中正负样本比例一致性(C3)。在真实环境中,正负样本的比例一般比较稳定,在测试的时候也应该按照该比例进行设置,这样评估指标才有现实意义,以安卓恶意软件分类为例(图3),若在测试集中增加恶意软件的比例,在召回率(红色虚线)不变时,准确率(橙色虚线)和F1值(蓝色虚线)会有明显提升,正负样本的比例对结果产生了严重偏差。

图3[4],训练集中恶意软件占比为90%时,测试集恶意软件占比对指标的影响

2.3.2 评估标准优化

类似于机器学习中AUC(area under curve)的评估标准,文章[4]提出AUT(area under time)这一评价标准,我们需要将测试集按照时间片进行切分,指标公式如下):

s.t. C1,C2,C3

其中,

指在当前时间片下的评估指标(如,F1值),N是切分的时间片的个数,该公式的计算需要满足2.3.1中所述的3个条件,最终AUT

[0,1]。

文章依据此评价标准对2.2.3中的算法做了进一步评估,并且增加了一个新的算法DL进行了对比,该算法在保留原始特征的基础上将算法1中的SVM分类器换成了深度学习的分类器。评估结果如图4所示,可以看出每个算法的效果都会随着时间的推移而下降,并且值得注意的一点是,深度学习算法的对时间的鲁棒性要高于其他算法。

图4[4],不同算法性能的时间变化曲线,ALG1,ALG2,DL的AUT值分别为0.58,0.32,0.64

4小结

可以看到时间和空间的因素往往会对模型的效果重要影响,我们在训练模型的时候需要尽量避免这些因素造成的干扰,并且在评估过程中也需要用科学的评估标准来刻画模型性能。其实,我们可以采用一些策略来尽量减少时间因素对模型性能的影响,感兴趣的读者可以继续阅读文章[4],另外文章[4]开发了一个基于Python的框架TESSERACT,该框架对数据增加了2.3.1中所述的3个条件限制,实现了评估指标AUT的计算方法,可以通过https://s2lab.kcl.ac.uk/projects/tesseract/申请数据和代码。

三、异常检测(无监督学习)

第2节介绍了有监督学习在安全中的注意事项,本节介绍无监督学习(异常检测)在安全中的注意事项和改进方法。

在安全领域,绝大部分数据都是不带标签的,而我们又需要对未知威胁进行检测,因此异常检测成为刚需;另一方面,深度学习技术由于可以从海量数据中挖掘有效特征,在很多领域被大量使用,若将深度学习技术用于异常检测,学习正常数据的特征,便可以检测未知威胁,甚至可以检测0-day攻击。总之,异常检测算法在正常数据上进行训练,通过挖掘正常的模式来区分异常,但是这种方式往往泛化能力不足。

1问题陈述

我们先看一个小例子:

1

第一种情况,训练数据中包含如下两种实例:“ssh连接->程序运行->ssh断开->CPU利用率变高”和“ssh连接->游戏运行->ssh断开->CPU利用率变高”,在这样的数据上进行训练,模型可能认为“ssh连接->* ->ssh断开->CPU利用率变高”这种模式为正常模式,其中“*”代表任意事件,因此该模型极有可能错误地认为“ssh连接->notepad->ssh断开->CPU利用率变高”为正常事件序列,可以看到由于训练数据的缺失,模型无法检测这种引起CPU使用率变高的可疑序列。

2

第二种情况,如果训练数据中只包含“ssh连接->程序运行->ssh断开->CPU利用率变高”,模型可能会错误地判断“ssh连接->游戏运行->ssh断开->CPU利用率变高”为异常情况。

通过以上例子可以看出异常检测算法在实际场景中的泛化能力不够,在第一种情况中产生了漏报(FN),第二种情况产生了误报(FP),在实际应用中,系统管理员往往会报告一些FN(false negatives)和FP(false positives),那么如何合理利用这些信息进行模型的更新就是现有异常检测算法面临的问题。

误报(FP)即将正常样本识别为恶意样本,对于这种数据,由于其本身是正常数据,直接放入到模型中训练即可。但是漏报(FN)意味着这种数据本身是异常数据,而模型是从正常数据中进行学习的,所以这类信息看起来无法应用到异常检测的模型中去,所包含的信息无法被利用。那么如何利用这部分信息提高模型性能呢?要解决这个问题还需要从异常检测的原理入手。

2异常检测原理

异常检测算法在正常数据上进行训练,假设事件序列为 {

},(

),我们将每一个事件记为

,事件发生的概率记为

,则异常检测算法的优化目标是使得正常事件的发生概率

最大化,然后设定一个阈值,检测新的事件

,t>T,若新来事件的发生概率小于该阈值,则判定该事件为异常事件。

若事件之间有时间相关性,则计算条件概率

,若无时间相关性,则计算

,其中时间相关的经典做法是DeepLog[6],该方法使用LSTM对事件进行建模,并且利用时间属性,计算每一个事件的发生概率,在检测中,若事件发生概率低于一定阈值,则判定为异常;时间无关的经典做法是Kitsune[7],该方法使用autoencoder算法,对每个事件计算与正常事件之间的距离,若距离过大超过一定阈值,则判定为异常。

经过上面的描述,如何利用漏报(FN)的信息已经呼之欲出了,只需要在计算该事件

对应的概率

时候,将优化目标设定为使得该概率最小化即可,即使得异常事件的概率最小化,目标函数可以定义为:

其中

为异常值,

(1<i<t)为正常值,优化目标为使得该目标函数最大化,具体的优化方法可以参见[8]。

3优化效果

文章[8]提出该问题的优化方法并验证了该方法,以数据集[9]为例,该数据集采集了203台亚马逊机器节点运行48小时的map-reduce任务产生的日志信息,其中包含各种通过专业知识标定的异常数据,目前在该数据集上表现最好的算法为3.2节中提及到的DeepLog,文章与该方法在误报(FP)和漏报(FN)两种指标上进行了对比,实际效果如图5所示,可以看到在不同阈值的情况下,利用优化方法(UNLEARN)的FP和FN始终低于DeepLog中使用的方法(BASELINE)。

图5[8],优化方法(UNLEARN)在HDFS数据上与传统方法的对比(BASELINE)

4小结

异常检测是安全厂商不可或缺的能力,理论上有能力发现未知威胁,而且随着深度学习在安全领域的进一步渗透,基于深度学习的异常检测算法相较于传统异常检测算法有着更加优异的性能,但是由于目前异常检测算法一般通过正常数据训练模型,无法利用数量更少但是价值更大的异常数据的信息,本小节简单介绍利用该本部分数据优化模型的方法,该方法源自[8],由于[8]涉及到很多该优化方法的理论和细节处理,本文不继续做深入介绍,感兴趣的读者可自行阅读。

四、总结

随着机器学习在网络安全中应用的深入,很多问题也暴露出来,本文按照机器学习中有监督学习和无监督学习两大领域,结合最新技术研究介绍这两种方法在网络安全中应用的注意事项,总结来说,在应用有监督学习方法的时候,不管是数据采集、模型训练、结果评估等各个环节,需要保持数据在时间和空间上的一致性,并且使评估环境尽量贴合实际环境,这样各项数据的现实意义才能最大化;在应用无监督学习方法的时候,需要考虑模型的更新问题,更新过程中不仅仅需要利用正常数据(FP),还需要考虑异常数据(FN),使得数据的价值最大化,进而提升模型效果。

机器学习甚至深度学习在安全领域用使用时会遇到各种各样的问题(泛化性,可解释性等等),本文所述不过其中一二,更多问题和解决方案还有待挖掘。

参考文献:

[1].https://www.mcafee.com/enterprise/en-us/assets/reports/rp-quarterly-threats-aug-2019.pdf (2019)

[2].https://www.mcafee.com/enterprise/zh-cn/assets/reports/rp-quarterly-threats-mar-2018.pdf (2018)

[3].Enrico Mariconti, Lucky Onwuzurike, Panagiotis Andriotis,Emiliano De Cristofaro, Gordon Ross, and Gianluca Stringhini.MaMaDroid: Detecting Android Malware by Building Markov

Chains of Behavioral Models. In NDSS, 2017.

[4].Pendlebury, Feargus, et al. "{TESSERACT}: Eliminating Experimental Bias in Malware Classification across Space and Time." 28th {USENIX} Security Symposium ({USENIX} Security 19). 2019.

[5].Daniel Arp, Michael Spreitzenbarth, Malte Hubner, Hugo Gascon, and Konrad Rieck. DREBIN: Effective and Explainable Detection of Android Malware in Your Pocket. In NDSS, 2014.

[6].Du, Min, et al. "Deeplog: Anomaly detection and diagnosis from system logs through deep learning." Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security. ACM, 2017.

[7].Mirsky, Yisroel, et al. "Kitsune: an ensemble of autoencoders for online network intrusion detection." arXiv preprint arXiv:1802.09089 (2018).

[8].Du, Min, et al. "Lifelong Anomaly Detection Through Unlearning." Proceedings of the 2019 ACM SIGSAC Conference on Computer and Communications Security. ACM, 2019.

[9].Wei Xu. 2009. HDFS Log Dataset. http://iiis.tsinghua.edu.cn/~weixu/sospdata.html

关于天枢实验室

天枢实验室聚焦安全数据、AI攻防等方面研究,以期在“数据智能”领域获得突破。

内容编辑:天枢实验室 童明凯 责任编辑:肖晴

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 绿盟科技研究通讯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考文献:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档