10.12 学习汇总

1. 基于主动学习的网络协议识别技术

1.1 模型汇总

模型摘要

1.2 系统模型

PRoLearner系统架构图 主动学习算法示意图
  • 算法过程如下:

输入:

​ 已标记训练样本集合X中少量已标记样本x(至少包含一个正样本和一个负样本),未标记测试样本集合U中(包含有正样本和负样本)大量未标记样本u。 r为主动学习中止条件。

输出:
分类器f,和已标注样本集合X

  1. 根据已标记训练样本集合X中少量已标记样本x,训练构造SVM分类器f,从而样本集合X被划分为两类, f : X → {-1, +1} ;
  2. 利用已构造的SVM分类器f,对U中所有未标记的样本u进行分类;
  3. 根据分类器f的分类结果,查询函数q判定未标记样本集合U中每个样本的信息量,将信息量最大、最不确定(距离分类超平面最近)的样本交由领域专家进行标;
  4. 将经由领域专家标记好的样本加入到已标记样本集合X中,根据更新后的已标记样本集合X,对分类器模型f进行评估;
  5. 若达到中止条件r时,则算法中止,返回分类器f,否则重复步骤1-4。

1.3 流程补充

  • 评价指标
  1. True Positives (TP): 被PRoLearner系统识别为某协议的网络数据包,且确实是属于该协议的网络数据包集合。
  2. False Positives (FP): 被PRoLearner系统识别为某协议的网络数据包,但并不属于该协议的网络数据包集合。
  3. False Negatives (FN): 被PRoLearner系统识别为非某协议的网络数据包,但其实是属于该协议的网络数据包集合。

准确率(precision) = TP / TP+FP

召回率(recall) = TP / TP+FN

F-Measure = 2*precision*recall / precision+recall

  • n-gram划分方法

在计算语言学与概率学领域中, n-gram是给定文本中(至少为n个元素的序列)n个连续元素的子序列。例如,如果将每个字节看作为一个元素,那么考虑SMTP协议中的协议报文――MAIL FROM 所产生的3-grams元素是: MAI, AIL, IL_, L_F, _FR, FRO 和ROM。

  • 参数选择
1
2
3
4
5
'''
1. 每个数据包分析的字节数 l=16
2. SVM模型 核函数“RBF” C=1000 gamma=0.5
3. n-gram n=3 齐夫定律找语言模型最佳拟合参数
'''

9.25 学习汇总

1. 面向数据包内容属性的流量分类技术

1.1 模型汇总

模型摘要

1.2 系统模型

EntroClass系统架构

1.3 流程补充

  • 熵向量——标准化的香农熵:H / log2 m

所有元素都不相同,熵值达到最大值1;反之相同熵值为0。

加密数据流的载荷内容随机化程度高。较优的选择是直接跳过应用协议报文的数据头,只对传输过程中承载的数据内容进行熵向量计算和分析。

H

将数据包F中任意k个连续字节视为集合S中的一个元素,进而对该数据包进行熵值计算。举例:假设所要分析的网络数据包集合是由n (n = 3)个不同元素{a, b, c}所组成的。数据包M (M =< a, a, b, b, b, b, c >) 是要进行熵值计算的目标数据包。假定我们把每三个连续字节作为集合S中的一个元素,则可以得到数据包M 的一个新的序列形式: < aab, abb, bbb, bbb, bbc >。在这个例子中,元素个数的总和m=1+1+2+1=5,熵值H(X) = -3 × (1/5) log(1/5) - (2/5) log(2/5) = 1.922。通过计算得到的熵值H(X)通常被我们转化为标准化的香农熵,经过标准化计算后得到的最终结果为1.922 / log 5 =0.828。

用fk来表示k个连续字节所有可能的组合情况,用hk来表示数据包F(数据包F是集合fk上一系列k个连续比特的组合)的熵值。

Hk
  • SVM参数选择

10折交叉验证方式,选取1500个样本,算出大小为6的熵向量{h1,h2,h3,h4,h5,h6}

真实环境中使用随机1024连续字节计算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 模型参照代码,未调试通过
# SVM中的SVC进行分类任务
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
def rbf_svc(C=1024, gamma=2.0):
return Pipeline([ # 数据管道
("std_scaler", StandardScaler()), # 数据标准化
("rbfsvc", SVC(kernel="rbf", gamma=gamma, C=C)) # 使用RBF核函 γ=2 C=1024
])

# 多分类(one-against-one)
from sklearn.multiclass import OneVsOneClassifier
def svm_ovo(classifier=rbf_svc):
ovo = OneVsOneClassifier(classifier) # 两两配对
ovo.fit(X_train, y_train)
return ovo
  • 改进压缩与加密内容的识别

改进区分压缩内容和加密内容,4比特的统计频次;将每一个字节都划分为高位的4比特字符和低位的4比特字符,每个四比特字节被看作一个独立的元素。

\0f, \07, \0e, \0b, \00

4bit区分

定义以下四个参数,偏离度(deviation degree, DD),加密内容的4比特字符频率(FE),压缩内容的4比特字符频率(FC) 和4比特字符的平均频率(AF)。 计算偏离度数值,从而选择具有明显偏离度的字符来构建特征。最终选择的4比特字符是\0f, \07, \0e, \0b,\00。

DD
  • 压缩和加密样本有效性(与真实网络流量差异对比)

使用Jensen-Shannon分度(JSD)来衡量两个概率分布之间的相似程度。 Jensen-Shannon分度是基于Kullback-Leibler 分度而构建的一种衡量标准。

jsd距离 jsd计算公式

从实验结果中,我们可以发现概率分布P 和Q 在f1 和f2 两种情况下的Jensen-Shannon分度数值都较小。因此,我们可以认为数据集合7与数据集合8和真实的压缩内容之间几乎没有差别 。

  • SFS算法步骤

SFS算法的具体步骤如下:从一个空集合开始,顺序地增加使得目标函数J(Yk + x+) 达到最大值的特征x+(与已经选择的特征Yk相组合)。当使用SVM算法进行特征集合选择时,在准确率以容忍度为2%下降的情况下,我们选择使得分类准确率达到最大值的特征集合。通过使用SFS算法进行特征选择后的特征向量是――ϕsvm = {h0, h1, h2, h3}。我们将通过上面方法所获得的特征集合做为最终用于在线实时分类的特征向量。