我有一些十六进制字符串代表tcp数据包有效载荷。有效载荷是用TLS加密的,我想找到它的模式。问题是tcp数据包分类只是通过使用tcp有效载荷,出于这个原因,我使用le = preprocessing.LabelEncoder()
KNN
分类,以便将有效载荷的十六进制字符串更改为一个值。结果分类准确率为5%,我将分类改为Random Forest
,但结果与之前一样。您的基于加密有效负载分类的解决方案是什么?
le = preprocessing.LabelEncoder()
df['payload'] = le.fit_transform(df['payload'])
one_hot_encoded_data = pd.get_dummies(df, columns = ['class'])
print(one_hot_encoded_data)
X = one_hot_encoded_data.iloc[:, one_hot_encoded_data.columns != 'class_1']
y = one_hot_encoded_data.class_1
#-----------------------------------------
x_train, x_test, y_train, y_test = train_test_split(X, y, train_size=0.6, random_state = 0)
model4 = RandomForestRegressor(random_state=0).fit(x_train, y_train)
print ('Random_Forest_train_accuracy:', model4.score(x_train, y_train))
print ('Random_Forest_test_accuracy:', model4.score(x_test, y_test))
y_pred4 = model4.predict(x_test)
使用(适当)加密的内容作为机器学习的功能是没有意义的。适当加密的一个主要特性是原始内容和加密内容之间没有统计上显著的关系。加密内容的统计属性与随机数据相似,因此在机器学习中绝对没有提供任何价值。
有一些信息可以使用,比如
- 加密有效载荷的大小,与原始有效载荷的大小相似,但不完全相同
- 数据的时序和方向,也反映了原始数据的时序和方向
- 来自TLS握手的一些元信息,如服务器名称(SNI),证书信息(高达TLS 1.2), TLS客户端指纹(JA3),选择的密码…
实际上有很多关于这个话题的出版物。