加密恶意流量优秀检测思路分享
2021-02-06 18:56:48 Author: blog.nsfocus.net(查看原文) 阅读量:298 收藏

阅读: 1

近年来,随着机器学习、深度学习等人工智能技术的迅猛发展,其在图像识别、语音识别和自然语言处理等领域已经得到大规模应用,可以为传统方法很难解决或无法适用的问题提供有效的方案,也已经成为网络安全领域中的热门研究方向,比如将人工智能应用于恶意加密流量的检测就是一种行之有效的方法。

本文介绍一种从加密流量中检测恶意流量的方法,来自清华大学的HawkEye战队,他们在DataCon2020大赛中获得加密恶意流量检测方向的一等奖,该方法的思路具有很好的借鉴作用,希望带给读者一些思考。

随着TLS加密技术在互联网上的普及,越来越多的恶意软件也使用TLS加密方式传输数据。如何通过不解密的方式直接从大体量的加密流量中检测出恶意流量,是学术界和工业界一直非常关注的问题,且已经取得了一些研究成果,但大多都是使用单一模型或多个弱监督模型集成学习的方法。

与常规的单分类器检测方法不同,本文介绍一种使用多模型共同决策的方法[1],能够在加密恶意流量的检测问题上表现出优异的性能,总体思路是利用不同异构特征训练多个不同的分类器,然后使用其检测结果进行投票从而产生最终的判定结果。

接下来首先介绍总体架构,然后逐一对其中包含的各个子模型进行详细介绍,最后做一个小结。

该方法从数据包级、流级和主机级三个不同层次分别提取行为特征构建多个模型来提升对黑白样本的识别能力,一部分模型使用多维特征进行综合分析,还有一部分模型使用黑白样本区分度较大且置信度较高的单维特征缓解多维特征中潜在的过拟合和误报问题。

由于提取的多种特征结构是异构的,且具有不同的组织特点,所以并不适合将所有特征统一编码输入到单个模型中进行学习。该方法针对各类特征的特点分别构建合适的分类器,最后根据每个分类器的结果进行投票,以少数服从多数的原则产生最终的检测结果。

整体架构如图1所示,总共训练了六个分类器,原则上分类器是奇数个则不会出现平局的情况,但由于最终有偶数个分类器,而流级分类器在单模型测试中表现较佳,所以如果最终投票结果为平局,则以流级分类器的结果作为最终结果。

图1 加密恶意流量检测整体架构图

本节将从设计思路、特征提取与处理和分类器构建等方面对参与投票的六个子模型进行详细介绍。

3.1 包长分布分类器

一般来说,功能或实现相似的软件也具有相似的数据包体量分布特点,比如视频软件的下行流量通常远大于上行流量,而恶意软件的下行流量通常远小于上行流量。如图2所示,正常通信和恶意软件通信在数据包长度上是不同的,浏览网页时客户端向服务端的请求数据包通常较少,而服务端回复客户端的响应数据包非常多,但是恶意软件完全相反,服务端仅向客户端发送少量的控制命令,而客户端因为进行数据回传会向服务端发送大量的数据包。由于数据包体量特征不受数据加密的影响,所以非常适合用于加密流量的检测。

图2 恶意/正常通信中数据包长度的区别

将所有可能的带方向的报文长度作为包长分布特征的一个维度,考虑到带方向的报文长度的所有可能值是从64字节到1500字节,所以包长分布特征是一个约3000维的概率分布向量。统计出流量样本中各个方向和长度的报文数量并除以报文总数就能得到包长概率分布向量。

对于模型选择,首先考虑适合离散概率分布的KNN分类算法,单纯使用包长分布特征训练的KNN分类器在比赛中触发了高检出奖励,但整体得分不高,将该分类器加入投票机制后,虽然没有触发高检出奖励但是得分更高,所以可以得出该方法可以降低误报的结论。但由于KNN算法检测效率低,最终考虑到检测性能,采用了随机森林分类器并让其参与投票。

作者也尝试了使用流级的包长分布特征进行分类器训练,考虑到恶意流量样本中也包含与正常服务的通信,但又无法识别其中的良性流,所以只将包含一条流的样本拿出来作为训练集,最终将不包含任何恶意流的流量样本分类为正常,否则分类为恶意,但这种方法并不理想,笔者认为可能和训练集中各个类别的数量和占比有关,也可能是这种方法本身效果不够好。

3.2 证书主体分类器和签发机构分类器

判别一个软件是否恶意,不仅取决于其通信的内容,也取决于其通信的对象,所以在建立模型时有必要考虑流量样本中的通信对象这一特征。在TLS建立连接的过程中,服务端发给客户端的证书中subject和issuer字段分别代表客户端的通信对象主体和证书的直属签发机构,subject和issuer中的common name字段通常是一个域名,而恶意软件和恶意域名关联的可能性较大,如图3所示,在黑白样本中恶意证书和正常证书的主体和签发者是不一样的,且都存在访问频次较高的值。

图3 恶意/正常证书中主体和签发者的区别

通过统计训练集中的每个流量样本的叶子证书所涉及到的不同subject和issuer的数量,并记录每个流量样本与其通信的频数,可以采用词袋模型分别将其编码为特征向量。

最后训练两个基于先验概率的朴素贝叶斯分类器对测试样本进行分类,因为训练集中已经包含了绝大多数正常流量的流行域名,所以如果一个测试样本中所有证书的subject或issuer都不存在于训练集中,则直接将其判定为恶意样本。总之,正常样本中访问频率较高的域名会对将样本分类为正常贡献更多的证据,而恶意样本中访问频率较高的域名会对将样本分类为恶意贡献更多的证据。

3.3 通信IP地址分类器

除了证书主体和签发机构,服务端IP地址也是一个表征客户端通信对象的重要标识符,通常同一地区遭受同类恶意软件感染的不同主机很可能会访问相同的IP地址,所以流量样本中对远程IP地址的访问情况可以为恶意流量的判定提供依据。

由于对恶意软件服务端IP的访问哪怕只有一次,也能判定其为恶意流量,所以并不记录流量样本与每个服务端IP的通信频次,而是使用0和1来记录是否存在与恶意IP的通信行为。最后也是使用朴素贝叶斯分类器对测试样本进行分类。

3.4 流级多维特征分类器

除了对加密流量通过上述方法提取单维特征进行建模之外,为了提升检测效果,也尽可能地从协议头部和流量行为中提取比较通用的多维数据特征。

一条流可以由五元组相同的数据包确定,深入分析流级别的数据并提取了一千多维与载荷无关的特征,包含以下四部分:

(1)元数据:即单条流的基本统计数据,包含持续时间、总的流入/流出字节数、数据包个数;

(2)窗口序列统计特征:不仅提取了出入流的包时间间隔和包长度的平均值、标准差、最大值、最小值等统计特征,也使用马尔科夫转移矩阵的方式捕获了相邻数据包之间的关系;

(3)TLS/SSL握手包特征:客户端和服务端进行握手时训练集中的黑白数据在一些字段上具有不同的分布,所以提取此类相关特征。首先将客户端和服务端使用的TLS版本进行one-hot编码,其次将客户端和服务器端的GMT Unix Time是否存在、是否使用随机时间编码为0/1特征,最后将客户端和服务端的加密套件和扩展列表进行one-hot编码;

(4)TLS/SSL证书特征:通常正常和恶意流量的服务端证书是不同的,所以提取了服务端证书相关特征。将证书是否自签名、是否过期、版本号、证书有效期、公钥长度编码为0/1特征,并且将证书主体域名进行one-hot编码嵌入多维特征。

最后采用擅长高维特征处理的随机森林算法对如上多维特征进行分类,这种基于树的方法也可以输出特征重要性评分,有利于后续挑选重要特征、降低特征维度和删除冗余特征。

3.5 主机级多维特征分类器

一方面,流级数据标记并不十分准确,因为恶意数据样本中也会存在正常通信产生的良性流,比如恶意软件可能会通过访问谷歌来判断网络的连通性;另一方面,对每条流单独提取特征时可能会漏掉流之间的关联特征即主机级别的特征,比如恶意软件在产生访问谷歌这种正常流量行为之后可能要开始进行恶意的数据回传,再比如有少量正常流也会符合恶意流的自签名等特征而导致单条流被误判。综上,有必要对流级特征进行聚合提取主机级特征。

提取主机级特征时不仅要对总包个数、每条流的平均包个数、时间间隔、包长的均值等流级特征进行聚合,也要对自签名流数量、过期流数量、有效期过长(比如超过100年)的流数量及其均值等证书相关特征进行聚合。此外,由于发现恶意IP的TLS半连接和无连接与正常IP的分布不同,所以对不同流的连接状态和出现Alert的流数量也进行了统计。最后模型的选择依然是随机森林。

本文介绍了一种加密恶意流量检测方法,首先通过对加密流量进行深入分析和特征挖掘,提取了单维/多维特征,然后对包级/流级/主机级流量行为进行分层分析和学习,构建不同的分类器,最终通过多模型投票机制提升了检测效率和性能。

除了统计和机器学习方法外,《基于深度学习的物联网恶意软件家族细粒度分类研究》验证了深度学习在流量识别方向也具有很好的应用前景,充分展现了人工智能赋能网络安全领域的可行性。

[1]http://datacon.qianxin.com/blog/archives/122

更多加密流量相关内容,欢迎点击阅读如下文章。

加密代理篇:《初探加密流量识别》

恶意软件篇:《基于深度学习的物联网恶意软件家族细粒度分类研究》 《关于恶意软件加密流量检测的思考》

加密webshell篇:《【冰蝎全系列有效】针对HTTPS加密流量的webshell检测研究》《HTTP、HTTPS、加密型webshell一网打尽》


文章来源: http://blog.nsfocus.net/sharing-of-excellent-detection-ideas-for-encrypted-malicious-traffic/
如有侵权请联系:admin#unsafe.sh