《web安全之深度学习实战》第十三章:DGA域名识别通过使用Alexa平台的白名单域名和360netlab发布的DGA域名,探究朴素贝叶斯算法、XGBoost算法、多层感知机在域名识别上的准确率。
01 数据介绍
(1)白样本
Alexa平台发布全球前10000域名
(2)黑样本
360netlab发布的DGA域名10000条
·
02 数据预处理
(1)统计特征
域名实质是文本处理,统计域名中出现的元音字母、唯一字母数量、数字数量、长度等形成新的数据集,用来进行模型训练。
1、读入白名单、黑名单,合并为一个数据集V
2、白名单结果y都是0,黑名单标记为1
3、统计每个域名元音个数、唯一字母个数、数字个数、域名长度组成新数据集X
4、标准化数据集X,公式为:(X-X_mean)/X_std 计算时对每个属性/每列分别进行
5、划分训练集train、测试集test
def get_feature():
from sklearn import preprocessing
alexa=load_alexa()#白名单读入
dga=load_dga()#黑名单读入
v=alexa+dga #v数据集
y=[0]*len(alexa)+[1]*len(dga)#白样本为0,dga样本为1
x=[]
for vv in v:
vvv=[get_aeiou(vv),get_uniq_char_num(vv),get_uniq_num_num(vv),len(vv)]
#每一行域名;#元音个数、唯一字母数、数字、域名长度
x.append(vvv)
x=preprocessing.scale(x)#sklearn.preprocessing.scale():数据预处理直接标准化数据X;
x_train, x_test, y_train, y_test=train_test_split(x,y,test_size=0.4)
return x_train, x_test, y_train, y_test
·
(2)2gram提取
2-Gram形式的数据集.类似滑动窗形式提取域名内容。
以百度域名为例:
baidu.com---->2-Gram处理---->'ba''ai''id''du''uc''co''om'---->向量化---->['ba''ai''id''du''uc''co''om']
2gram提取大致如下
1、读入白名单、黑名单,合并为一个数据集V
2、白名单结果y都是0,黑名单标记为1
3、Countvectorizer()通过计数来将一个文档转换为向量,实现2gram提取
4、划分训练集train、测试集test
def get_feature_2gram():
alexa=load_alexa()#白样本
dga=load_dga()#黑样本
x=alexa+dga#数据集
max_features=10000
y=[0]*len(alexa)+[1]*len(dga)
CV = CountVectorizer(ngram_range=(2, 2),token_pattern=r'\w',
decode_error='ignore',strip_accents='ascii',
max_features=max_features,stop_words='english',
max_df=1.0,min_df=1)
x = CV.fit_transform(x)
x_train, x_test, y_train, y_test=train_test_split(x,y,test_size=0.4)
return x_train.toarray(), x_test.toarray(), y_train, y_test
·
03 模型处理——统计特征
使用统计特征形成的数据集,探究朴素贝叶斯算法、XGBoost算法、多层感知机在域名识别上的准确率。
(1)朴素贝叶斯算法
朴素贝叶斯算法域名判断准确率为75%。
判断 | 白名单 | 黑名单 |
---|---|---|
判断为白名单 | 3461 | 360 |
判断为黑名单 | 1998 | 1994 |
(2)XGBoost
XGBoost算法域名判断准确率为86%。
判断 | 白名单 | 黑名单 |
---|---|---|
判断为白名单 | 3648 | 353 |
判断为黑名单 | 795 | 3197 |
(3)多层感知机
多层感知机算法域名判断准确率为86%。
判断 | 白名单 | 黑名单 |
---|---|---|
判断为白名单 | 3634 | 367 |
判断为黑名单 | 783 | 3209 |
·
04 模型处理——2gram提取
使用2gram提取的数据集训练,朴素贝叶斯算法、XGBoost算法、多层感知机在域名识别上的准确率如下:
(1)朴素贝叶斯算法
朴素贝叶斯算法域名判断准确率为83%。
判断 | 白名单 | 黑名单 |
---|---|---|
判断为白名单 | 3835 | 174 |
判断为黑名单 | 1480 | 2504 |
(2)XGBoost
XGBoost算法域名判断准确率为83%。
判断 | 白名单 | 黑名单 |
---|---|---|
判断为白名单 | 3053 | 956 |
判断为黑名单 | 456 | 3528 |
(3)多层感知机
多层感知机算法域名判断准确率为94%。
判断 | 白名单 | 黑名单 |
---|---|---|
判断为白名单 | 3797 | 212 |
判断为黑名单 | 245 | 3739 |
显然当数据集使用2Gram提取、模型使用多层感知机,DGA的识别效果最好。
网友评论