论文:Malware Detection By Analysing Encrypted Network Traffic with Neural Networks
作者:Prasse, Paul; Machlica, Lukáš; Pevný, Tomáš; Havelka, Jiří; Scheffer, Tobias
地区:欧洲,德国
时间:2017
来源:EI
介绍
恶意软件的目的
- 侵犯隐私
- 获取密码
- 加密文件来进行勒索
- 点击-诈骗
- 政治推广
网络流量分析的作用
- 对杀毒软件进行补充
- 最小化管理开销
- 能够封装到网络服务与云服务
- 预测多态性恶意软件与新型恶意软件
为什么要对加密网络流量进行分析
HTTP的payload能够通过HTTPS协议加密来预防常规流量分析,知名网站如Google、Facebook等都是默认使用HTTPS。而根据统计,截止至2016年6月,已经大约45%的网站(持续增长中)使用HTTPS加密。
HTTPS与网络监控工具
HTTPS:使用了SSL/TLS协议对HTTP进行了加密。
网络监管工具(observer):将客户端与主机端的交互全部记录,并存储成log文件。
在HTTPS中,由于数据包的头部和URL会被加密,恶意软件检测策略:
- 基于被用户访问的主机域名
- 基于时间和数据量的上下行流的统计性规律
如何提取主机域名特征
- 低维的神经嵌入域名字符串
- 人工设计域名特征
选用哪些机器学习模型
- LSTMS(长短期记忆网络)
- Random Forests(随机森林)
如何处理机器学习中数据标签问题
- 在客户端配置VPN
- 观察可执行文件(exe)与网络数据流之间的关联
- 使用反病毒工具进行识别及打标签
小结
该章节简要的介绍了文章的目的,研究背景,以及一些基本概念。章节的后半段作者似乎急迫地想要提出文章所采用的思想与技术,从而省略了一些基本性的表述,初读之下确实令人有些费解。不过好在接下来的章节作者对简介中提出的思想与技术进行了一一描述。
相关工作
在简介中提到,网络监管工具能够记录网络交互,存储成log文件。log文件对本文来说是重要资源,因为能够从log中提取出许多重要信息,进而从信息中提出特征。文章说明了log文件的意义与采用LSTMS的意义。
HTTP logs
- 识别Command-and-control类型服务
- 恶意软件的无监督检测
- 使用域名黑名单作为标签的可监督检测
- 包含完整的URL,可以提取特征
- 拥有比HTTPS更多的信息
HTTPS logs
- 识别应用层协议
- 识别web服务器提供的应用
- 识别与恶意软件相关的服务
神经网络(LSMTS)
- 需要识别客户机是否感染(涉及到多实例学习问题)
- 能够观察exe可执行文件与数据流之间的联系
- 与Prasse提出的随机森林进行对比
- 能够处理连续输入与解释长期依赖性
- 在安全领域中曾被入侵检测使用过
小结
该节作者介绍了为何要对HTTP和HTTPS的logs进行分析,可以看出log文件对于本文来说是一项重要的信息资源,对HTTP与HTTPS的logs分析都有不同的意义。为了解释对log文件的分析确实解决了一些实际问题,作者还引用了不少参考文献来进行印证。本章作者还说明了为何要使用神经网络(LSMTS)算法,列举了原因与优势,并提出要与随机森林算法做比较。
操作环境
该章节主要介绍了应用与数据收集的操作环境。在章节2种提到log文件是一项重要信息资源,本章就讲解了logs相关的生成环境等等,而本章节也是对数据收集进行了详细描述。
CWS服务
CWS(Cloud Web Security)是一种保证组织内电脑安全的服务软件,其在组织私有网络与因特网之间提供了接口,其特点大致如下:
- 用户电脑要配置VPN来连接CWS服务
- CWS服务可以运行组织的安全策略,如根据主机域名和安全策略来阻挡HTTP与HTTPS请求
- 当检测带客户机上运行恶意软件时发出警告
- 误报比例低
文章在这里详细地介绍了一下CWS服务,因为在上文中提过网络监控工具,在研究中CWS就充当了网络监控工具,其可以产生logs。其产生的logs过程大致如下:
logs文件中的lines会作为输入服务于建模。
数据采集
前提:直接舍弃log中的HTTP数据,只保留HTTPS数据。
核心:CWS作为中间人进行数据收集
流程:
上图的流程只能用以收集少量训练集,因为大多数加密流还是没法解密的,无法直接打标签。
数据打标签
Virustotal.com:提供web服务,使用60种反病毒策略对提交的exe文件或exe文件的hash key进行安全检测。
由于上面的数据采集中使用VPN客户端对exe的hash key进行了采集,因此文章直接提交exe的hash key进行检测,标签策略如下:
数据集类型
- current data: 从171个大小不同的网络中收集,收集于2016年6月中的5天,一共44,348,879条数据流,133,473个客户端
- future data: 从169个大小不同的网络中收集,收集于2016年9月中8天,一共149,005,149条数据流,177,738个客户端
- training data for domain-name features: 从21个大小不同的网络中收集,收集于2016年2月到4月内的14天。
这里专门提了一下隐私保护,因为国外即使是科研也不能侵犯用户隐私,对隐私这一块看得很重,所以作者提了一下这些数据都是匿名采集的,没有任何用户的个人信息。
数据质量分析
数据集在采集完成时用Virustotal进行了一次打标签,而文章在2017年2月对数据集的标签进行了一次复查,以此来确认标签的稳定性。最终结果为下表(混淆矩阵):
(uncertain:不确定,unknown:无法检测,benign:良性,malicious:恶性)
最后是采用2017年2月的标签作为最后的实验标签。根据统计,current data中一共包含20130种hash,350,220条恶意数据流和43,150,605条良性流;future data中一共包含27,263种hash,955,037条恶意数据流和142,592,850条良性流。
而恶意软件家族的统计如下图:
其中PUA(潜在垃圾应用)的特征如下:
- 完全由创造者决定如何运行(如改变浏览器设置和起始页,安装工具条和浏览器扩展,显示广告或泄密码给攻击者)
- 免费/共享
- 难以卸载
小结
本章作者主要对cws服务进行了说明,并介绍了其实如何在网络中收集实验数据的。cws是文章重要的原始数据收集来源,有一些数据在收集后可以直接使用cws打标签,但大多数不行。所以文章借助了Virustotal.com站点提供的反病毒接口来完成数据标签工作。文章一共设置了3个数据集,用于不同实验。在本章末尾,作者对数据标签的质量进行了一次复测,并将复测结果作为最终的实验标签,分析了标签的迁移性以及恶意软件家族种类统计。
客户端恶意软件检测问题
该章节明确了研究目标,在于要对用户主机是否运行恶意软件进行识别,该章节从单独的流量识别转移向了用户主机层面。换个说法,单独的流量识别层面在于对一条新输入的流量进行识别,打上恶意或良性的标签,而该章节将其转向了主机层面,通过主机产生的流量集作为输入判断该主机是否运行了恶意软件。
基础定义
环境:设置私有网,用户安装VPN=入网,在该网络中做实验采集
实例:每台用户主机(通过IP和VPN名定义)每24小时视作一个独立实例(instance)
实例格式:{x1,x2,…,xt}, 其实就是用户主机1天内产生的数据流顺序集合,混合了主机中多种应用产生的流量
标签:
- 至少一个恶意应用产生了任何流量 ——> instance标记为positive
- 至少一个良性应用产生了任何流量(无任何恶意应用)——> instance标记为negative
识别:模型f接收{x1,x2,…,xt}格式的示例,通过计算 f(x1,x2,…,xt) 得出一个分数(score),这个分数将会与阈值T比较:
- score > T (识别为positive)
- score < T (识别为negative)
阈值T会被调整来使误报降低。
性能评估:Precision-Recall(召回率曲线)+ ROC曲线
性能评估
召回率曲线
- Recall R(回调率):在本文中,可以称为查全率。
- Precision P(精确度):在本文中,可以称为查准率。
为了读者更好地理解,我修改了公式图:
- R@x%P: 在指定精确度x%下的回调率值。由于根据阈值的调整,回调率与精确度也会随之改变,该表达代表了在精确度为x%的情况下,回调率的值。
- 召回率曲线展示了通过阈值T的调整,Recall与Precision的关系图。
ROC曲线
- False-positive Rate RFP(良性回调率):在本文中,可以称为误报率,即良性误报为恶意的比例。
公式:RFP = FP / FP + TN - ROC曲线展示了通过阈值T的调整,RFP与Recall的关系图。
Time To detection
用以评估恶意程序发送第一个恶意流到对其检测的时间间隔。
精确度与误报率
文章在本章最后强调了一下两者的区别以及重要性。实际上,在实际应用中低误报率比高精确度更重要,因为当许多良性流被当做恶意流被阻拦时,很可能会导致正常服务无法运行,阻塞网络,因此如何在保证低误报率的情况下实现高精确度是一直以来研究的重点之一。
小结
这一章主要就是对评估方法进行了讲解,因为实验部分使用到ROC曲线和Precision-recall曲线,以及R@x%P和Time To detection,所以考虑一些读者的阅读能力(没错就是我这种),作者干脆用了一个章节把这些讲明白了。
特征
特征一直以来都是机器学习文章的核心章节,该文章提出了多种不同类型的流量特征。
流量特征(Flow Features)
对于每条流来说,可以直接获取的信息为:
- IP + VPN名
- 主机地址
- 端口号
- 时间戳
- 出/入数据量
- 持续时间
因此文章选择从每条流中提取出的流特征为:
- 持续时间的对数变化
- 发生和接收字节数的对数变化
- 持续时间
- 与上一条流之间的时间差
域名特征(Domain-Name Features)
文章提到,每条流都会包含IP地址,对于大多数HTTPS请求来说,主机域名是可视的,且IP地址也会包含在主机域名字符串中。文章选择从主机域名中提取出一些特征。
工程特征(Engineered Features)
这里作者参考了由Franc在其论文中提出的60种针对URL字符串的特征,包括:元音变化比例、域名与子域名中个别字符的最大出现率,不含元音的最长子串,非base64编码的字符串,non-letter类型字符出现率,等等。作者选择把这60种特征全都提出作为自己的建模特征。
字符的n-gram特征(Character n-gram Features)
n-gram是一种自然语言处理算法,在文章中,其将域名字符串分解为若干重叠字符串,每个分解出来的gram称为一个特征。n-gram的具体应用可以参考 自然语言处理中的N-Gram模型详解,我这里只做简单的讲解。
举例:”example”在n-gram下分解出特征:
2-gram:"ex" "xa" "am" "mp" "pl" "le"
3-gram:"exa" "xam" "amp" "mpl" "ple"
4-gram:"exam" "xamp" "ampl" "mple"
假设使用2-gram,新输入的字符串中命中特征的标记为1,未命中标记为0。例如输入的字符串为”apple”,经过分解为:
"ap" "pp" "pl" "le" (命中了pl和le)
因此最终得到的向量为[0,0,0,0,1,1],接下来可能根据不同的权重计算出一个分数值来。
可以看到”ap”和”pp”不在特征中,这是因为数据集太小,当训数据集足够大,特征基本上都会被采集。
文章提到,通过提取,在2-gram下一共得到了1,583个特征,3-gram下一共得到了54,436个特征,4-gram下得到了1,243,285个特征。由于3-gram和4-gram给机器带来了太大的计算负担,于是作者最终选择了2-gram提取的特征。
神经域名特征(Neural Domain-Name Feature)
神经语言模型(Neural language models):为了弥补N-gram在相似单词编码上的漏洞。
神经嵌入(Neural embedding):为了降低高维度的特征数量灾难。
连续词袋结构(Continuous bag-of-words architecture):
输入层为独热编码(one-hot code),n-gram的n为3,一共使用了100个隐藏层(效果最佳),且输入层与隐藏层全连接。平均层(averaging layer)用于均衡所有隐藏单元的激活。
训练集:training data for domain-name features数据集中数据,Top500,000来自alexa.com。
输出:一个神经域名空间向量的表达式
用户分类器
使用了LSTMs作为用户分类器,并以随机森林作为比较。每个LSTM单元拥有记忆细胞来存储推论,而后面的单元可能会调用这个记忆细胞,所以LSTMs可以在顺序输入中考虑长期依赖关系。
小结
这章就是专门用来介绍特征的,作者分了两类特征:流量特征和域名特征。流量特征是从数据流信息中提取的特征,域名特征是从主机域名中提取的特征。域名特征作者还预备了3种类型,分别是工程特征、n-gram特征与神经域名特征,作者在后面的实验里会比较这三种类型,然后选择最优秀的作为域名特征。
实验
主机域名特征选择
在特征章节中,一共提出了3种类型的特征:工程特征、n-gram特征以及神经域名特征。
在第一个实验中,主要是对这种类型的特征进行比较,从而挑选出最好的一种进行接下来的实验。
数据集:860,268个良性(negative)域名与1,927个恶意(positive)域名。
这里的数据集文章并没有说明其采集来源,根据推测应该是一些公开网络资源,其在采集后打标签的标准:
- 被恶意软件调用比被良性软件调用更频繁 ——> 标记为positive
- 被良性软件调用比被恶意软件调用更频繁 ——> 标记为negative
文章提到,有一部分域名(大约3,490个)同时被恶意软件和良性软件频繁调用,这里大部分都是为了恶意目的而注册的域名,而少部分是一些标准服务(google地图,wordpress的api等)。
训练集:75%的数据
测试集:25%的数据
(训练集和测试集完全独立,中间没有任何重复的数据。)
机器学习算法 :随机森林(Random Forest)
实验结果:
可以看到,在各查准率标准下,使用Nerual(神经域名特征)的查全率都是最高的。本章还提到Nerual到达次数据是在神经语言模型的参数调整到最佳的情况下完成的:初始n-gram的n为6,平均4个相邻字符取一个gram,最终的空间向量表达维数设为100。文章表示接下来的实验会用神经域名特征。
实验还对实验结果进行了更深层的分析,我们知道,随机森林最终分类标准是由其中的所有决策树投票决定的,因此每次分类都会有一个百分比分数值。研究发现恶意分数为0的都完全安全域名,恶意分数低的域名包括中小企业域名,博客,学校学院主页,游戏网站,Google子域名以及政府部门,而恶意分数高的域名包括纯数字IP地址,云服务,YouTube和Facebook内容传输网络的子域名,没有主机可见内容和一看就是为了恶意目的注册的域名。文章列举了恶意分值最高的域名:
算法与特征种类选择
在经过第一个实验后,域名特征已经确定为神经域名特征。在第二个实验里,文章要比较两种机器学习算法(LSTMs和RF)哪个效果更好,流量特征以及域名特征哪个效果更好。
实验数据集:current data
实验方法:十折交叉验证
实验结果:
(图中n代表Neural特征,f代表flow特征)
可以从图中看到,单独使用流量特征时,两种算法的表现都很差,而使用组合特征(n+f)时,两种算法的表现都是己方表现最优秀的。而对实验结果来说,LSTM +(n+f)明显是表现最好的那一种,因此接下来的实验只使用LSTM算法加上两种特征类型的组合。
恶意软件进化识别
在上面两个实验中,最终选择的算法与特征。第三个实验将对所建立的机器学习模型的预测能力进行评估。
实验数据集:future data
实验方法:使用current data作为数据集,LSTM作为机器学习算法,流量特征+域名特征作为最终特征进行训练,得到识别模型,然后用future data中的数据作为测试集来测试模型的预测性。
实验结果:
图中的两条曲线,一条是使用current data数据集的十折交叉验证运算出的对比曲线,另一条是用future data 实验出的测试数据。在文章的解释中,由于随着时间和公司的变化,恶意软件的流行度也在不断变化,所以回调率曲线的差异不能说明决策函数的恶化。而从ROC曲线可以看出,其实决策函数的恶化程度很小。(对于这个解释,我表示质疑,毕竟深度学习拥有一定的不可解释性,所以感觉这里有强行解释的嫌疑)
恶意软件家族识别
这个是研究进行的第四个实验,其实实验内容和第三个实验差不多,数据集什么的都差不多,只是关注点不同。第四次实验着眼而对不同恶意软件家族的识别效果,实验效果如下:
文章解释说,个别组的数据实例太少,所以Precision-recall中的曲线不能直接比较,意义不大(=。=!!无语了,又是这个解释,那你画这个图干啥)。在ROC曲线中可以看到,决策函数对于大部分的恶意软件家族的识别曲线具有一定相似性,文章还解释了ROC中那条诡异的黄色折线,说是因为只有7个实例才会这样。
平均检测时间
这是最后一个实验,研究的是在不同阈值T下,恶意软件产生第一个流量到被识别出来的时间间隔。这里应该是将训练好的模型放入实际环境进行测试了,实验结果如下:
平均时间长大约是90min。
结束
对文章进行一个总结,首先使用神经语言模型将域名转化成了一个低维度的特征表达式,而经过实验证实这种特征方式比其他两种域名特征方式更优秀。为了给数据打标签,文章借助了由VirusTotal.com提供的恶意软件检测接口,并在多个月后对数据的标签进行了复检。
文章比较了LSTMs算法与随机森林算法建立的模型性能,发现LSTM的性能更加优秀,且将域名特征和流量特征结合后的特征明显优于这两种独立特征。实验显示文章提出的模型对未知的恶意软件有不错的识别率,且涵盖不同的恶意软件家族,实际环境中识别的时间间隔大约为90min。
WhiteRabbit评论:
该文章来源于顶会论文集,水平层面确实很高。其实这篇文章的优点和缺点我都在上文中表达出来了。
对我来说,其中最值得借鉴的地方在于其评估实验的方式:Precision-recall图和ROC图,感觉以后我写的论文可以借鉴这种评估方式,看起来很高大上。然后实验的方式也很值得借鉴,这种有节奏地比较并按顺序进行的实验方式可以让实验逻辑性很高。其实,在实验多走一步的思路也值得思考,比如第一次实验中对恶意域名分值的深一步分析,列举出最高分的几个域名。实际上这里的研究并没啥意义,对文章实验的研究也没什么意义,不过可以感觉的是,这样一写就能明显让人相信你是认真做了实验的,实验的可信度得到提升。由于是顶会的论文,技术啊,思想啊什么的我就不说,肯定是很牛掰的,根本不用我夸,而这篇文章对于我论文的写作借鉴意义比那些更大。
不过文章也是存在着一些问题,比如来自Precision-recall图的怨念,强行解释其为什么没用,我想是不是直接删了更好?还有一些地方,文章并没有解释清楚,上文你们能看得那么顺畅是因为其中加入了我的一些推测,比如training data for domain-name features这个数据集怎么来的根本没讲啊,还有最后那个实验的时间数据是在什么环境下得到的也没说,以及那个神经域名特征最后的空间向量表达式到底长啥样也不知道。还有文章的结构也是迷,主要还是标题的迷惑性太大,第二章我以为是讲日志分析的,讲着讲着讲着蹦出个算法说明;第三章我以为是介绍实验和操作环境的,结果变成了数据收集以及分析;第四章我以为是在用户恶意软件检测时出现的问题,结果全章给我讲评估方法。第五章也是讲特征,讲着讲着蹦出个分类器。所以文章的结构对于第一次阅读的人真的很不友好,说实话我一共看了4遍才吃透了这篇文章,看看停停了很久才写出篇文章,希望能给于流量研究领域的同行们一些微薄的帮助。拜拜,改论文去啦~
文章作者:WhiteRabbit
来源:blog.whiterabbitxyj.com
转载请标注原文和作者。