美文网首页
使用LSTM检测DGA

使用LSTM检测DGA

作者: doinb1517 | 来源:发表于2021-12-10 22:49 被阅读0次

前言

DGA可谓是网络安全领域的一个绕不过的话题,针对DGA的检测通常分为两类:一类是通过域名相关字符特征判断一个域名是否为DGA域名,另一类是对DGA所属家族的判别和划分。因为根据域名的字符特征进行DGA的检测可以抽象为NLP领域的二分类问题,NLP二分类问题目前已经有很多成熟的解决方案,本次实验尝试使用LSTM对DGA域名做检测,使用的数据集是360lab每日发布的DGA域名集合,将此数据集作为黑样本;白样本选择Alexa的域名集合。

实现

1、使用字符序列模型,将域名以单字符形式拆分,转换为对应的ASCII码。

2、设定最大域名长度,对长度不足的域名在前面填充0,对长度超过最大域名长度的直接截断。

3、对填充后的字符序列经过embedding层编码。

4、直接输入LSTM层

5、使用softmax做分类任务。

网络层级如下:

_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 input_2 (InputLayer)        [(None, 60)]              0         
                                                                 
 embedding_1 (Embedding)     (None, 60, 128)           1280000   
                                                                 
 lstm_1 (LSTM)               (None, 10)                5560      
                                                                 
 dense_1 (Dense)             (None, 2)                 22        
                                                                 
=================================================================

主要代码如下:

def char2num(domain_list):
    """使用字符序列模型
    @param domain_list:
    """
    t = []
    for i in domain_list:
        v = []
        for j in range(0, len(i)):
            v.append(ord(i[j]))
        t.append(v)
    return t

def do_lstm(x_train, x_test, y_train, y_test):
    """训练并保存LSTM模型
    """
    x_train = char2num(x_train)
    x_test = char2num(x_test)
    train_x = pad_sequences(x_train, maxlen=max_domain_length)
    test_x = pad_sequences(x_test, maxlen=max_domain_length)

    # 定义模型 size = (batch, 10)
    sequence_input = Input(shape=(max_domain_length,))
    embedding_layer = Embedding(input_dim=10000, output_dim=128, input_length=max_domain_length)
    embedding_sequences = embedding_layer(sequence_input)
    lstm1 = LSTM(10, dropout=0.2)(embedding_sequences)
    
    # 输出层
    preds = Dense(2, activation='softmax')(lstm1)
    model = Model(sequence_input, preds)

    # 训练模型
    model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
    model.fit(train_x, y_train, batch_size=100, epochs=epochs, validation_data=(test_x, y_test))
    model.save('lstm.h5')
    

def do_predict(domain_list, model):
    """实现预测结果输出
    @param domain_list:
    @param model:
    """
    t = []
    for d in domain_list:
        v = []
        for i in d:
            v.append(ord(i))
        t.append(v)
    seq = pad_sequences(t, maxlen=max_domain_length)
    probs = model.predict(seq)
    for i in range(len(domain_list)):
        if np.argmax(probs[i]) == 0:
            print("{} is dga".format(domain_list[i]))
        elif np.argmax(probs[i]) == 1:
            print("{} is legit".format(domain_list[i]))
    return probs

总结

  • 基于传统机器学习的DGA检测算法可解释性强,引入了安全专家选择的特征。LSTM等深度学习算法可解释性较差。
  • 目前97%的准确率在真实环境的海量DNS数据下误报率巨大,运营成本高,而且该算法仅在测试数据集表现良好,真实环境堪忧。
  • 对此类算法的黑盒攻击和白盒攻击技术都较为成熟,安全性堪忧,健壮性不足。
  • 在中文环境下,此类域名与拼音组成的域名,运营商随机域名的碰撞严重。
  • 有多种DGA算法的本质是异或操作,位移操作,此类算法很难学到位的运算这类特征,可能会强化一些随机性字符在判断域名时的比重。

总的来说不看好此类算法在实际工程环境中的作用,但是作为一个Demo来玩一玩还是很有意思的。

相关文章

  • DGA总结备忘

    1、适合中小企业的DGA域名检测 使用LSTM或者CNN构建的DGA检测模型,这种方法需要使用深度学习自动提取特征...

  • 使用LSTM检测DGA

    前言 DGA可谓是网络安全领域的一个绕不过的话题,针对DGA的检测通常分为两类:一类是通过域名相关字符特征判断一个...

  • 机器学习学习笔记--朴素贝叶斯实践

    朴素贝叶斯算法是应用最为广泛的分类算法之一。简称NB算法。可以用来检测异常操作,检测DGA域名,检测针对Apach...

  • DGA域名

    什么是DGA? dga是一种算法,作用生成随机数的。 什么是dga域名? 是用dga算法生成的域名,这种域名通常硬...

  • 2018-11-10

    LSTM的应用 文本分类LSTM文本分类:使用LSTM的最后一个状态 文本分类中不用one-hot编码,使用emb...

  • keras lstm return sequence参数理解

    使用keras构建多层lstm网络时,除了最后一层lstm,中间过程的lstm中的return sequence参...

  • BERT介绍及发展过程

    Shallow Model 不能考虑上下文Deep Model:LSTM —— ELMO 对LSTM进行叠加使用T...

  • 机器翻译seq2seq+Attention(理论+代码)

    导语:看本文之前,你应该熟悉RNN(LSTM、GRU)工作原理、pytorch中LSTM的使用以及一些张量操作。 ...

  • 复现论文Automated detection of atria

    摘要 本论文是基于RR间期的使用双向LSTM网络的房颤自动检测算法研究。房颤是成年人最常见的持久性的心律失调。在成...

  • Day15 #100DaysofMLCoding#

    2018-09-03 对参数初始化使,使用特定方法初始 LSTM给forget gate 高正值LSTM多需要4倍...

网友评论

      本文标题:使用LSTM检测DGA

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