type
status
date
slug
summary
tags
category
icon
password
NDSS 2018 https://github.com/ymirsky/KitNET-py
🤔 Kitsune: An Ensemble of Autoencoders for Online Network Intrusion Detection
Summary
- 本文提出了一套即插即用的入侵检测方案Kitsune。可以在没有监督的情况下检测对本地网络的攻击,并以高效的在线方式。Kitsune的核心算法(KitNET)使用一组称为自动编码器的神经网络来共同区分正常和异常流量模式,通过计算RMSE(均方根误差),先保留一组正常的流量的RMSE,然后部署之后,接收未知的流量,当RMSE与正常的相比较大的时候,就会发出警报,说明新来的流量不正常。
- Contributions
- 基于自动编码器的 NIDS,用于简单的网络设备 (Kitsune),它是轻量级和即插即用的。
- 一种特征提取框架,用于从网络流量动态维护和提取隐式上下文特征。
- 无监督方式自动构建自动编码器集合的在线技术(即,将特征映射到 ANN 输入)
- 进行了大量的实验,并应用于实际环境中。
Method
Overview

- 由架构图可以看出,Kitsune主要由四部分组成,首先是数据预处理,将packet处理成需要的输出格式。然后是FE进行特征提取,提取完后交给FM进行映射,这里要将115个(代码是100个)特征进行聚类,将相关系数较大的特征归位一簇(处理所有的特征更高效),然后每个簇里的ni的特征由自动编码器AEi处理,输出给异常检测AD,AD主要由一个AE组成输出层,输出层AE的输入是n个自动编码器的输出。
- 实例代码由Python给出,作者实际部署在真实环境中是用CPython和C++写的,效率更高。
- Packet Capturer
- 使用外部库或者工具:tshark or scapy。主要负责捕获原始的数据流量。
- Packet Parser
- 接收原始二进制,解析数据包,并将数据包的元信息发送到FE。例如,数据包到达时间、大小和网络地址,还有协议类型、IP类型等信息,code提取了20个特征。
- 这里也需要使用外部库或者工具进行数据包解析,tshark或者Packet++(https://github.com/seladb/PcapPlusPlus)
- Feature Extractor
- 从解析后的数据包信息中提出特征,并将其处理成数值,而不是IP这种字符串。
- 比如code中的这一句,将MAC加IP作为一个特征,
MIstat[(i*3):((i+1)*3)] = self.HT_MI.update_get_1D_Stats(srcMAC+srcIP, timestamp, datagramSize, self.Lambdas[i]) #MAC IP关系
- 输出~x.
- Feature Mapper
- 负责从 ~x 创建一组较小的实例(表示为 v),并将 v 传递给异常检测器 (AD) 中的组件。该组件还负责学习映射,从 ~x 到 v。比如
- 这里分为连个模式。
- 训练模式
- 将 ~x 的特征分组为最大大小为 m 的集合(簇)。在训练模式结束时,map被传递到 AD,AD 使用map来构建集成架构(每组在集成中形成自动编码器的输入),就是map是100个特征中哪几个维组成一个簇,这一个簇是一个AE的输入。
- 执行模式
- 学习到的映射用于从 ~x 创建小实例 v 的集合,然后将其传递给 AD 集成层中的各个自动编码器。训练模式是获取映射,执行模式是从映射map到v(新实例)
- xi就是从100维输入x中提取每个AE的输入(根据map)。
- Anomaly Detector
- 接收FM的实例v,根据RMSE判断是否异常。
- 也分为训练和执行两个模式
- 训练Mode:训练集合层中的m个AE,保留训练用的正常数据的RMSE。
- 执行Mode:计算FM发生的实例v,比较输出层的输入RMSE与训练阶段记录的RMSE的差距,过大的话就警报。
- AD中的输出层和FM中的AE集成层训练执行过程一样,因为都是AE,只是集成层中的数量多。
Feature Extractor (FE)
- 从网络流量中提取一定的特征具有以下挑战
- 来自不同通道(对话)的数据包交错
- 任何给定时刻都有许多通道
- 数据包到达率可能非常高。
- 最原始简单的方法是监控每一条对话的所有通信,但这在存储和带宽上是无法接受的
- 因为上面的挑战,所以设计了在动态数量的数据流(网络通道)上进行时间统计的高速特征提取。该框架具有较小的内存占用,因为它使用在阻尼窗口上维护的增量统计信息。使用阻尼窗口意味着提取的特征是时间的。
- IS := (N, LS, SS),number,Liner sum,squared sum。通过接收Xi,不断更新元组IS。
- 下面是更新的代码。
- 针对要忘掉旧实例的问题:解决方案是使用阻尼增量统计。在阻尼窗口模型中,随着时间的推移,较旧值的权重呈指数下降。令 d 为定义为的衰减函数


- FE过程
- 每当数据包到达时,我们都会提取传送给定数据包的主机和协议的行为快照。 快照由 115 个流量统计信息组成,捕获一个小的时间窗口:(1) 数据包的一般发送方,以及 (2) 数据包发送方和接收方之间的流量。
- 一个时间窗口可以获取23个特征,从5个时间窗口就是115个特征。当有的窗口不包含某些特征的时候,进行归零,保证维度是115。code中一共100维特征。
- FE 从总共五个时间窗口中提取同一组特征:100ms、500ms、1.5sec、10sec 和 1min 过去(λ = 5, 3, 1, 0.1, 0.01),总共 115 个特征。λ也会作为一个参数传输IS更新,
Feature Mapper
- 将 ~x 的 n 个特征(维度)映射到 k 个较小的子实例中,每个子实例对应AD中的一个自动编码器、
- f(~x) = v,v就是x中的100维特征根据簇分为m个子特征集合。
- 产生map的code,具体看论文和代码。
Anomaly Detector
- 集成层
- 一组有序的 k 个三层自动编码器,映射到 v 中的相应实例。该层负责测量 v 中每个子空间(实例)的独立异常。在训练期间,自动编码器学习它们各自的子空间的正常行为。在训练模式和执行模式下,每个自动编码器将其 RMSE 重建误差报告到输出层。
- 输出层
- 一个三层自动编码器,它学习集成层的正常(即训练模式)RMSE。该层负责产生最终的异常分数,考虑(1)子空间异常之间的关系,(2)网络流量中自然发生的噪声
- AE初始化
- da利用dA_params的参数进行初始化。
- 训练mode
- 更新两个层中所以AE的参数

- 执行mode
- 只前向传播,没有参数更新

- 输出
- 输出:RMSE 异常分数,然后根据预警阈值进行判断。
- 异常阈值φ: 选择方法:1. 可以直接选择训练阶段最大的分数(认为是正常数据中最大的异常分数),那比正常更大的肯定更异常 2. 概率选择φ,具体就是将输出的 RMSE 分数拟合到对数正态或非标准正态分布,然后如果 s 发生的概率非常低,则发出警报。就是正常的分数已经有了个分布,然后将新的输出分数对照一下分布概率,太小就是之前没遇到过,可以发出警报
Conclusion
- 利用简单的ANN模型,用准确率换取实时性和处理速度。
- 工程上的贡献。
Experiment
Dataset
- 攻击数据集,而且表述了具体如何进行攻击(比如扫描和Fuzz),及破坏的什么特性.

Setup
- 离线的一般效果更好,但是需要更多的资源。所以这里将比较用的离线算法作为Kis 的上限。
- 在线的NIDS,评估了 Suricata ——一种基于签名的 NIDS。离线的,比较了Isolation Forests (IF,基于集合的离群点检测,应该是远离集合的就视为异常) [41] and Gaussian Mixture Models (GMM是一种基于期望最大化算法的统计方法)。
- 评估指标
- 真阳性率,TPR
- 假阴性率,FNR
- 假阳性率,FRP
Evaluation
- 在图 9 中,我们看到 Kitsune 相对于这些算法表现得非常好。特别是,Kitsune 在检测活动线点击方面的表现甚至比 GMM 更好。此外,我们的算法在 AR、Fuzziing、Mirai、SSL R.、SYN 和活动线点击数据集上实现了比 GMM 更好的 EER。

- 在树莓派和虚拟机上的读取速度。如果单个AE,那要一个AE处理所有的特征,所以会慢,如果用用35,则会提升很多倍。

致谢: