Unknown Malware Detection Using Network Traffic Classification

好论文,需要精读和积累

这是2015年发表在IEEE Conference on Communications and Network Security会议的一篇文章,这个会议是一个非常年轻会议,现在处于上升期,其中的论文质量也呈现越来越高的趋势。下面笔者将带着各位仔细研读这篇文章。

01

简介

恶意代码为了获取新任务、升级更新、传输窃取的数据,会和其C&C中心使用常见的协议进行通信,以绕过防火墙。有些C&C甚至是常见的很流行的网站。因为恶意代码会对主动发现的行为做出反应,所以被动发现的方法是比较热门的选择。被动发现在本文中即指监控网络流量来发现恶意代码。

本文指出,前人的研究主要关注某一特定的协议和网络层,或者是某一特定的恶意代码。但是许多恶意代码都同时应用不同的协议和网络层,因此只关注某一点是有些不充分的。基于某一点的方法虽然在准确性上表现不错,但是无法适用于未知的恶意代码。同时,当攻击者发现他们被发现以后会使用新的技术升级其伪装。

在本文中,作者主要从恶意代码和C&C服务器通信的流量出发,使用监督学习来实现对异常流量的建模,最终实现检测出未知的恶意代码产生的异常流量。为了实现这样的目标,作者分析了多种主要的网络协议(DNS,HTTP,SSL);将不同的网络协议,不同的网络层之间的特征结合起来使用。

为了评估这种方法是否有效,作者使用了各种在沙盒中恶意代码产生的异常流量和两个企业的真实网络数据。训练好模型后应用到未知的环境中以检验其效果。最终的效果是可以比传统的NIDS提前一个月发现威胁。

02

系统总览

在构建异常行为检测系统的时候作者面临的第一个问题就是,样本可能来自于NAT协议之下,导致了一个IP中的行为可能代表着很多很多的处于内网中的主机的行为(似乎该问题作者没有提到怎么解决)。作者主要从常见的协议(DNS、HTTP、SSL)中发现异常流量。

A网络特征

特征主要从网络层、传输层、应用层提取。从逻辑上可以分为下图几个层次;Transaction(具体的操作)客户端提出需求,然后服务端作出相应,这种模式在DNS、HTTP、SSL中都有应用到。Session(会话)在本文中特征源、目的IP和端口,主要有TCP的UDP的四元组。TCP的起止是有明显特征的,而UDP是依靠一个给定的间隙时间来判断会话的起止。Flow(数据流)由来自于一对IP的一串相关的会话组成,其起始时间点可以是第一个会话开始的时间点,然后直到给定的最大的时间间隙为止。Conversations Window(对话窗口)客户端和服务端在数据采集时间段内的所有数据流,这些流可以来自一对或多对IP之间。

从以上这些逻辑层次中作者共提取了927种特征,从这些特征种选取最有代表性的特征对数据流量进行建模。出来这些直接的特征外,作者还用到了如方差、熵、均值等统计学特征。下图是一些特征的实例。

B特征提取

其数据的流动发现如图所示,首先从原始的数据文件中通过wireshark包来组成和提取流,然后并行的处理器会从上文提及的四个逻辑层中提取特征,最后形成CSV文件并将文件交给分类算法。

C机器学习算法

本文中作者对比了三种机器学习算法,它们分别是简单贝叶斯、决策树、随机森林。在特征选择算法上使用了CFS算法,这种算法的核心是找到和样本类别密切相关但是特征之间相关性小的一组特征。

由于样本中正常样本和异常样本的数量差别很大,所以作者使用了ROC来评价模型的好坏,其中AUC的值越大表示模型的分类效果越好。用这种方法来衡量模型的好坏会更加的客观。

03

数据集

A数据来源

建模用到的训练集同时包含恶意的流量和正常的流量,其中的恶意数据来自于Verint、Virus Total、Emerging Threats和一些开源社区;正常流量是作者自己采集的实验室的日常通信流量。由于数据集的不平衡,作者在正常流量中随机选取了一部分作为正常流量的代表来缓解与异常流的不平衡。

B数据标签方法

作者提到了两种标记数据的方法,一是利用NIDS系统,二是使用Verint的黑名单,在实际的操作中两种方法会同时用到。其中的恶意流量会被标记为不同类型的恶意代码家族。最终作者从样本标记了19个恶意代码家族。所以其实作者使用到的标签也不是自己打上的,而是从恶意样本的收集开始就按类进行收集的。

04

模型评价

作者首先评估了该方法检测和归类已知和未知恶意代码家族的能力;然后探讨了环境对于检测能力的影响,测试了几种沙盒环境和真实环境;此外还进行了有关时间的实验,以测试检测未知恶意代码的能力。在测试中该系统能够检测出一些未知的威胁。

A恶意代码家族

>>>>

1)分类

使用Verint标记好的异常流量和正常流量作为训练集,然后用CFS从972种特征种选出12种进行建模。

分别使用随机森林、简单贝叶斯、J48决策树算法,其交叉验证的结果对比如下图所示。

该实验主要关注能否准确发现已知威胁和正常流量。可以看到随机森林和简单贝叶斯的准确率是接近100%。

>>>>

2)发现未知威胁

用一部分恶意代码家族和正常的流量数据进行建模,然后让模型去预测没用进行训练的恶意代码流量。一段时间让模型去检测一种没有学习过的恶意代码,最后发现拥有很好的准确性。

同样,还是贝叶斯和随机森林的效果比较好。而随机森林的效果最好。

但是上面这些实验都有一个问题,其准确率是在测试集中算出来的,而测试集在逻辑上与训练集的是密切相关的。所以这些准确率并不能代表其模型在实际应用场景中的准确率。

B应用环境的影响

>>>>

1)环境鲁棒性

训练模型的数据采集环境和检测时的环境不一致,以测试这种方法的鲁棒性。由结果可知在沙盒环境中模型的准确性较高,而在真实环境中则无法保证准确率。作者提到迁移学习可能是一个不错的提高鲁棒性的方法,或者针对不同的环境使用不同的训练集构建模型。

>>>>

2)真实环境测试

从以上的实验中可以发现虽然在交叉验证中的准确率都还不错,但是一但用到真实的环境中准确率就会大打折扣,这可能是由于在真实环境中存在更多的噪声。因此作者又进行了一个在真实流量环境下的实验。

图是作者对比使用不同数量的正常流量对于准确率的影响,”/“前是使用多少比例的正常数据用作训练,”/“后是使用多少比例的数据用作测试。可以发现用于训练的数据少的时候反而准确率高。作者分析者是因为正常数据的量太大,所以只需要很小的一部分就可以完成建模,并保证较高的准确率。笔者认为这可能是由于在使用大量数据进行建模时出现了过拟合现象,同时大量的重复样本可能会强化某些重复的特征导致模型失真。但是到了这里作者也没有解决该模型在真实流量中的应用问题,笔者认为较高的准确率是因为其中所含的正常样本过多,所以提高了准确率,笔者认为此次更有价值的数据是模型究竟检测出了多少的恶意流量,又有多少正常流量被误报为恶意流量,而在这篇文章中都没有提到。

C时序实验

因为本文采用的恶意代码流量的标签部分来自于Snort和Suricata,而这些NIDS的标签中有时间信息,所以可以按照时间把数据分为训练集和测试集。按照这样的训练集构建的模型就可以检验其是否能够发现新的威胁。该项实验的结果同样是随机森林的效果最好,大概可以提前四周发现恶意流量。

D特征鲁棒性

在927种特征中只有204种被CFS算法选出来,其中有大约10多种特征是反复被选到的,由此作者选出了一组能够应用到各个场景中的特征。用这组特征构建出来的模型相比之前的模型来说具有更好的鲁棒性。

05

总结

本文利用了多种特征来提高模型的准确率,进行了相当丰富的实验,总的来说是一篇很完整的文章。但是这其中有几个问题作者始终没有解决,第一是在NAT下的主机的产生的行为如何分析;第二是本文中用到的标签都是来自于网络,其各有各有的规则,导致对于恶意流量的归类无法做到统一建模过程中可能有重复或一种恶意行为被归到多个类别的情况出现,同时这些恶意流量有很多来自于沙盒中模拟的情况,可能会和真实环境中的恶意流量有所出入,导致无法检测出真正的恶意流量;第三是关于模型在实际应用中遇到的问题,作者没有提及。

发表刊物:IEEE Conference on Communications and Network Security(SCI索引)

发表时间:2015.9

论文链接:http://ieeexplore.ieee.org/abstract/document/7346821/

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180313G1NH8700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券