基于在线学习的分布式流量实时分析系统设计与实现

基于在线学习的分布式流量实时分析系统设计与实现

1.概述

    目前,各种类型的流量充满了网络空间,其中包含了正常上网业务,具有 CVE 编号的网络攻击、计算机病毒(邮件病毒、木马、蠕虫、勒索软件)等等。 这些流量中既包含未加密的流量,也包含经过加密的流量,如广泛使用的安全 传输层(TLS)协议。 如何开发出一个网络安全系统,能够有效抵对 TLS 加密 与非加密的流量数据进行检测、分析与分类,并实时识别出网络上的恶意攻击 行为成为现阶段面临的一个挑战。 目前在工业界,已经有了基于网络端口 映射的流量分类识别方法和基于有效载荷分析的流量分类识别方法等,但这些方法面临两个都面临了准确性和可靠性低的问题,且这两种方法是无法在加密流量上使用的,因此探究其他的流量检测方法显得格外重要。同时,CVE、恶意加密流量等网络攻击具有攻击量大、高并发的特点,对于检测系统更是提出了实时化与分布式部署的要求。

    本项目提出将分布式网络系统与深度学习技术、虚拟化技术相结合,同时引 入在线学习机制做到实时推断与模型动态更新。该系统具有以下特点:利用 CyberFlood 产生 TLS 加密与非加密的、不同种类的业务流量和恶意流量; 利用 Hive 分布式数据库存储原始流量数据;过 Spark  Flink 流量分别 对流量进行并行批处理和流式处理;使用 ***N+LSTM 的时空深度学习网络 对不同类型的流量进行分类;利用 redis 缓存加速实时流量的特征读取;利用 Docker 虚拟化容器对深度学习模型进行部署。该系统同时具有高隔离性、高 容错性、高准确性和高实时性特点,可以解决传统安全系统所面临的的挑战。

    目前系统版本为 V2.0,可以识别出包含加密与非加密的业务流量、 恶意软件流量和网络攻击流量这三种流量类型,并进行动态流量数据的可视化呈现。

2. 目标

2.1. CyberFlood 产生流量数据进行抓取、分析与分类。

2.2.能够实时、准确识别出网络上的 TLS 加密与非加密的正常业务流量、 网络攻击流量,恶意软件流量,模型上线后能够不断进行动态调整。

2.3.实现一个可交互的、具有高并发能力、高容错性的分布式网络流量监测 系统,并且能对流量数据可视化。

3.系统架构

系统架构大致分为以下几个部分:

3.1 流量生成模块:CyberFlood 生成包括 TLS 加密与非加密的业务流量 与恶意流量。

3.2 流量抓取模块:Python 抓取流量并解析。

3.2 批处理模块:将解析后流量以JSON 式的存储在 Hive 分布式数据库 中,然后由 Spark 对流量特征进行批处理。

3.3 流式处理模块:将解析后的流量由 Kafka 收集送往 Flink 对流量特征 进行流式处理。

3.4 Web 后端模块:批处理和流式处理的结果都送往后端服务器的 MySQL 数据库以 CSV 格式存储。

3.5 模型训练模块:使用带标签的流量数据对时空神经网络(***N+LSTM) 模型进行训练和交叉验证,然后对模型进行准确的评估,通过不断地调试调优改 进模型。

3.6 模型线上推断与在线学习模块:Java 后端将未知种类的流量特征从 MySQL 数据库中导出,送往 Redis 进行缓存,然后将 Redis 中的流量特征通  gRPC 请求发往 Docker 容器,然后以JSON 格式返回流量的分类结果。 在推断的过程中,模型权重会动态调整并更新。

3.7 流量可视化模块:通过前端可视化呈现流量的分析结果。

    整体系统架构如图 1 所示。

 1 系统架构

4.关键技术

4.1 数据采集与特征选取

    数据集通过组委会提供的 CyberFlood 工具,生成 TLS 加密与非加密的正常业务流量与网络攻击行为流量,再使用 Python 对指定的网络端口抓取 流量, 数据采集流程如图 2 所示。

 2 数据采集流程

    其中对于非加密流量我们为了使用模型精度达到最大化,我们直接匹配其 URL 字段用于模型训练。

    而对于 TLS 加密流量,检测加密流量中的恶意攻击行为通常应先解密相关 的加密流量(如 SSL  TLS),再检测相应恶意攻击行为,但通过 CyberFlood 所生成的加密流量并未给出相应证书签名,故本系统考虑在不解密加密流量的情 况下,通过获取数据流中的元数据特征并将其导入至机器学习模型中进行识别。

 3 TLS 握手协议示意图

    接下来介绍该操作的原理。由于加密流量的 TLS 数据流中的元数据包含了无法隐藏或者加密的指纹信息,TLS 数据流可被用于模糊明文数据,但同时必 须生成一组“可观测的复杂参数 ”,后者可用于训练数据模型。当一个 TLS  据流开始后,会先执行一次握手。客户端会向服务端发送一个 ClientHello 消息,该消息包括一组参数(包括加密算法、版本等信息)。像 ClientHello 的这种 TLS 元数据主要在加密数据传输前进行交互,没有被加密。这样,数据 模型就可以通过分析元数据来检测恶意攻击行为,而不需要对加密数据进行解密 操作。

    如图 3 所示 ,一个完整的 TLS 会话过程一定包含以下类型的消息:  ClientHello ServerHello ServerHelloDone ClinentKeyExchangeChangeCipherSpec。

    根据 TLS 流在交互之初需要同远程服务器进行握手是不加密的特性,可以 观测到的未加密 TLS 元数据包括 ClientHello  clientKeyExchange。从这 些包的信息中,我们可以推断出客户端使用的 TLS 库等信息。通过比较获取到 的特征信息,可以观察到业务流量与业务流量存在较大差别,因此将 TLS 流作 为本系统特征来源,利用思科研究人员开发的基于 libpcap 的通用工具,用于 分析并提取捕获到的数据流(恶意流量和正常流量) 的数据特征 ,包含 clientHello, serverHello, certificate  clien-tKeyExchange 等信息基于 进行特征提取。

    接下来介绍我们对特征分析方法进行介绍。客户端方面,我们首先观察两个 TLS 特征:Offered Ciphersuites  Advertised TLS Extensions 。对于 前  者                  在   clientHello     中  提   0x0004(TLS_RSA_WITH_RC4_128_MD5)套件,而业务流量则更多提供 0x002f(TLS_RSA_WITH_AES_128_CBC_SHA)套件;对于后者,大多数 TLS 流量提供 0x000d(signature_algorithms),但是业务流量会使用以下很 少在恶意流量中见到的参数,如表 1 所示。

Encode

Feature

0x0005

status request

0x3374

next protocol negotiation

0xFF01

renegotiation info

表 1 TLS 特征以及对应编码

    观察业务与恶意流量客户端公钥的区别。业务流量往往选择 256-bit 的椭圆 曲线密码公钥,而恶意流量往往选择 2048-bit  RSA 密码公钥。

    服务端方面,我们能够从 serverHello 流中得到服务端选择的 Offered Ciphersuites  Advertised TLS Extensions 信息。业务流量的选择比较多 元化,而恶意流量往往会选择较为过时的技术。在 certificate 流中,我们能够 得到服务端的证书链。无论是恶意流量还是业务流量,其证书的数量都是差不多 的,但若我们观察长度为 1 的证书链,就能够发现,其中的 70%都来自恶意流 量自签名,0.1%来自业务流量自签名。

    由上述分析可知,加密恶意流量与加密业务流量具有非常明显的 TLS 特征 差异,这些差异主要体现在客户端 TLS 扩展、客户端加密套件、客户端公钥长 度、服务端 TLS 扩展、服务端证书签名长度以及服务端证书签名算法等。如表 2 所示。

 2 TLS 特征选取结果

    具体特征选取操作,我们采用思科开发的基于 libpcap,可以从实时网络流 量中提取数据或直接捕捉到数据包文件的分析工Joy ,其工作机制跟 IPFIX  ***flow 有些类似,在捕捉到数据之后,Joy 将以JSON 格式呈现出这些数 据。除此之外,Joy 还包含了分析工具,用户可以直接使用这些分析工具来对数 据文件进行分析。

    利用该工具可以快捷的捕获实时流量并从中提取 TLS 类数据特征,并将分 析结果通过Json 文件存储在特定目录下。针对机器学习模型所需的特定 TLS 特征,可以利用Joy 工具的 Sleuth 分析功能,该功能通过类 SQL 语法选取指 定特征来进一步处理Json 文件,过滤出符合特定条件的流,从流中选择数据元 素并打印出结果。

4.2 流量存储

    经过特征提取后的业务类型或攻击类型流量都以 CSV 文件格式保存在 MySQL 数据库中 。加密流量的记录包括 ID 字段、Client_Extensions  Client_Key_lengthServer_Extensions 等。流量存储如表 3 所示。

 3 TLS 加密流量数据存储字段

非加密流量记录的包括 ID 字段,URL 字段与时间戳字段。  流量数据存

储如表 4 所示。

 4 非加密流量数据存储字段

    后期通过模型推断,完成分类后的流量则存储如表 5 所示,可通过后段代 码读取该表数据从而完成前端动态流量可视化呈现。其中 0 标签表示为业务流 量,1 标签表示为网络攻击流量,2 标签表示为恶意软件流量。

 5 流量预测结果存储

4.3 数据预处理

    该部分由数据获得、数据读取、特征提取三部分组成。先使用 Python  PyMySQL 库将数据从 MySQL 中提取出来,以 CSV 表格数据形式存储,然 后使用 Python  Pandas 库读取 CSV 格式的数据表格,以 DataFrame  式存于内存。

    对于加密流量,我们采用利用 Python  Pandas 库进一步进行处理,如 对离散型特征进行one-hot 编码来对于每一个特征的多个可能值进行处理转变 为多个二元特征,此外,对特征进行归一化、数值化等。

    对于非加密流量的 URL 特征,我们利用文本处理中常用的技术“单词向量 空间模型 (word vector space model)由字符型的 URL 构建数值特征。

数据预处理流程如图 4 所示。

 4 数据预处理流程

(1)数据获得

    使用 Python  PyMySQL 库将数据从 MySQL 中提取出来,以 CSV  格数据形式存储。

(2)数据读取

    然后使用 Python  Pandas 库读取 CSV 格式的数据表格,将mn维的流量记录以 DataFrame 格式存于mn列的矩阵X中。

(3)特征提取

    对于加密流量,由于 TLS 特征多为数值形式,我们直接利用 Python  Pandas 库进一步进行处理,对部分离散型特征进行 one-hot 编码来对于每一 个特征的多个可能值进行处理转变为多个二元特征。此外,对数值特征进行归 一化、数值化等操作。

    对于非加密流量,由于流量特征为 URL 文本格式,读取后得到的是一个文 本数据,设使用正则表达式解析预处理和分词之后的流量数据为单词-文本矩 阵,Ǒ条流量的 URL 数据对应m条文本,每条文本的向量空间为单词向量空 (word vector space) ,即对每一条流量 URL 文本,用一个向量表示该文本的“语义 ”,向量的每一维对一个一个单词,其数值为该单词在该文本中出 现的权值。

......

......

......

    目前我们模型的流量分类预测整体准确率达到了 93.5%,查准率为 96.2% 查全率为 99.3%,综合评价得分为 96.0%

4.6 数据可视化

1)使用Java 结合 Bootstrap 框架实现前端页面

2)使用 Echarts 图标库来对数据提供直观、可交互数据可视化图表

5. 创新点与特色

5.1 数据并行处理。采用 Hive 分布式数据库对原始流量数据进行存储。同 时使用 Spark 批处理机制与 Flink 流式处理机制对流量数据进行并行处理。

5.2 ***N+LSTM 时空神经网络使用。我们采用 ***N 对流量空间特征进 行提取,LSTM 对流量时序特征进行提取,既能完成不同种类流量分类,也能完成时序流量的动态预测功能。

5.3 在线学习与实时推断。我们引入虚拟化容器 Docker 对深度学习模型进 行部署,通过 gRPC 远程过程调用完成推断操作,具有高隔离性与容错性。引  redis 缓存流量特征确保实时性。同时,我们的模型具有在线学习特性,能 够根据线上流量特性自行进行动态调整,确保模型的准确度。

6. 系统界面设计

 9 系统界面

6.1 图1: 以饼状图的形式对恶意流量和业务流量进行显示,展示恶意流量 和业务流量的分布。

6.2 图2: 以折线图的形式展现各流量的时间序列分布图,可以直观的看出 业务流量、网络攻击流量、恶意软件流量在不同时间的动态变化趋势。

6.3 图3: 以条形图的形式统计单日内业务流量、网络攻击流量、恶意流量 的数量分布。

6.4 图4 :以条形图的形式展现所有流量总和随时间变化的趋势。

项目完整方案+源码地址:基于***N+LSTM时空神经网络的在线流量分类模型源码+说明文档+方案设计文档.zip资源-CSDN文库

转载请说明出处内容投诉
CSS教程_站长资源网 » 基于在线学习的分布式流量实时分析系统设计与实现

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买