美文网首页
unit 13 DGA域名识别

unit 13 DGA域名识别

作者: 巴拉巴拉_9515 | 来源:发表于2018-05-29 15:41 被阅读0次

    《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的识别效果最好。

    05 小结

    相关文章

      网友评论

          本文标题:unit 13 DGA域名识别

          本文链接:https://www.haomeiwen.com/subject/zmqajftx.html