本小节是讲解DGA域名的识别,在《web安全之机器学习入门》中,曾经通过多节来讲解DGA域名,相关笔记如下:

《Web安全之机器学习入门》笔记:第七章 7.6朴素贝叶斯检测DGA域名_mooyuan的博客-CSDN博客

《Web安全之机器学习入门》笔记:第九章 9.4 支持向量机算法SVM 检测DGA域名_mooyuan的博客-CSDN博客

《Web安全之机器学习入门》笔记:第十章 10.3 K-Means算法检测DGA域名_mooyuan的博客-CSDN博客

通过如上笔记,相信大概也能分析出《web安全之机器学习入门》与《web安全之深度学习实战》的区别,前者以算法为章节题目,讲解这个算法可以应用哪些安全事件的解决。而后者则是以安全事件为标题,讲解可以通过哪些算法来进行建模。本章介绍DGA域名识别使用的数据集以及特征提取方法,包括N-Gram模型、统计特征模型和字符序列模型;还介绍使用的算法以及对应的验证结果,包括朴素贝叶斯算法、XGBoost算法和深度学习算法。

一、DGA域名简介

域名生成算法(Domain Generation Algorithm,DGA)是一项古老但一直活跃的技术,是中心结构僵尸网络赖以生存的关键武器,该技术给网络安全人员造成了不小的麻烦。针对基于DGA的僵尸网络(如图13-1所示),研究人员需要快速掌握域名生成算法和输入,对生成的域名及时进行处置。

DGA依赖时间、字典和硬编码的常量动态生成域名,原理如图13-2所示。

二、数据集

Alexa是一家专门发布网站世界排名的网站,创建于1996年4月,以搜索引擎起家。Alexa每天在网上搜集超过1000GB的信息,不仅给出多达几十亿的网址链接,而且为其中的每一个网站进行了排名。可以说,Alexa是当前拥有URL数量最庞大、排名信息发布最详尽的网站。我们使用Alexa全球排名前100万的网站的域名作为白样本。针对DGA样本数据,我们以360netlab的开放数据为黑样本。

dga_file="../data/dga/dga.txt"
alexa_file="../data/dga/top-1m.csv"def load_alexa():x=[]data = pd.read_csv(alexa_file, sep=",",header=None)x=[i[1] for i in data.values]return xdef load_dga():x=[]data = pd.read_csv(dga_file, sep="\t", header=None,skiprows=18)x=[i[1] for i in data.values]return x

二、特征提取

(一)基本特征

基于《web安全之机器学习入门》,统计特征模型包括元音字母个数、唯一字母个数、平均Jarccard系数,代码如下

def get_aeiou(domain):count = len(re.findall(r'[aeiou]', domain.lower()))return countdef get_uniq_char_num(domain):count=len(set(domain))return countdef get_uniq_num_num(domain):count = len(re.findall(r'[1234567890]', domain.lower()))return count

完整处理源码如下

def get_feature():from sklearn import preprocessingalexa=load_alexa()dga=load_dga()v=alexa+dgay=[0]*len(alexa)+[1]*len(dga)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)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-Gram

def get_feature_2gram():alexa=load_alexa()dga=load_dga()x=alexa+dgamax_features=10000y=[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

(三)2-4Gram

def get_feature_234gram():alexa=load_alexa()dga=load_dga()x=alexa+dgamax_features=10000y=[0]*len(alexa)+[1]*len(dga)CV = CountVectorizer(ngram_range=(2, 4),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

三、模型构建

(一)NB

def do_nb(x_train, x_test, y_train, y_test):gnb = GaussianNB()gnb.fit(x_train,y_train)y_pred=gnb.predict(x_test)print(classification_report(y_test, y_pred))print (metrics.confusion_matrix(y_test, y_pred))

(二)XGBOOST

def do_xgboost(x_train, x_test, y_train, y_test):xgb_model = xgb.XGBClassifier().fit(x_train, y_train)y_pred = xgb_model.predict(x_test)print(classification_report(y_test, y_pred))print (metrics.confusion_matrix(y_test, y_pred))

(三)MLP

def do_mlp(x_train, x_test, y_train, y_test):global max_features# Building deep neural networkclf = MLPClassifier(solver='lbfgs',alpha=1e-5,hidden_layer_sizes = (5, 2),random_state = 1)clf.fit(x_train, y_train)y_pred = clf.predict(x_test)print(classification_report(y_test, y_pred))print (metrics.confusion_matrix(y_test, y_pred))

(四)MLP

def do_rnn(trainX, testX, trainY, testY):max_document_length=64y_test=testYtrainX = pad_sequences(trainX, maxlen=max_document_length, value=0.)testX = pad_sequences(testX, maxlen=max_document_length, value=0.)# Converting labels to binary vectorstrainY = to_categorical(trainY, nb_classes=2)testY = to_categorical(testY, nb_classes=2)# Network buildingnet = tflearn.input_data([None, max_document_length])net = tflearn.embedding(net, input_dim=10240000, output_dim=64)net = tflearn.lstm(net, 64, dropout=0.1)net = tflearn.fully_connected(net, 2, activation='softmax')net = tflearn.regression(net, optimizer='adam', learning_rate=0.001,loss='categorical_crossentropy')# Trainingmodel = tflearn.DNN(net, tensorboard_verbose=0,tensorboard_dir="dga_log")model.fit(trainX, trainY, validation_set=(testX, testY), show_metric=True,batch_size=10,run_id="dga",n_epoch=1)y_predict_list = model.predict(testX)#print (y_predict_list)y_predict = []for i in y_predict_list:print  (i[0])if i[0] > 0.5:y_predict.append(0)else:y_predict.append(1)print(classification_report(y_test, y_predict))print( metrics.confusion_matrix(y_test, y_predict))

四、运行结果

(一)Char-seq特征

Hello dga
text feature & nbprecision    recall  f1-score   support0       0.65      0.92      0.77      40191       0.86      0.51      0.64      3974accuracy                           0.72      7993macro avg       0.76      0.71      0.70      7993
weighted avg       0.76      0.72      0.70      7993[[3704  315][1956 2018]]text feature & xgboostprecision    recall  f1-score   support0       0.83      0.91      0.87      40191       0.90      0.81      0.85      3974accuracy                           0.86      7993macro avg       0.86      0.86      0.86      7993
weighted avg       0.86      0.86      0.86      7993[[3658  361][ 749 3225]]text feature & mlpprecision    recall  f1-score   support0       0.82      0.92      0.87      40191       0.91      0.80      0.85      3974accuracy                           0.86      7993macro avg       0.87      0.86      0.86      7993
weighted avg       0.87      0.86      0.86      7993[[3704  315][ 804 3170]]

(二)N-gram

Hello dga2-gram & mlpprecision    recall  f1-score   support0       0.94      0.94      0.94      40041       0.94      0.94      0.94      3989accuracy                           0.94      7993macro avg       0.94      0.94      0.94      7993
weighted avg       0.94      0.94      0.94      7993[[3764  240][ 226 3763]]
2-gram & XGBoostprecision    recall  f1-score   support0       0.93      0.96      0.94      40041       0.95      0.93      0.94      3989accuracy                           0.94      7993macro avg       0.94      0.94      0.94      7993
weighted avg       0.94      0.94      0.94      7993[[3829  175][ 283 3706]]
2-gram & nbprecision    recall  f1-score   support0       0.72      0.95      0.82      40041       0.93      0.63      0.75      3989accuracy                           0.79      7993macro avg       0.82      0.79      0.78      7993
weighted avg       0.82      0.79      0.78      7993[[3815  189][1489 2500]]

《Web安全之深度学习实战》笔记:第十三章 DGA域名识别相关推荐

  1. 转:tensorflow深度学习实战笔记(二):把训练好的模型进行固化

    原文地址:https://blog.csdn.net/chenyuping333/article/details/82106863 目录 一.导出前向传播图 二.对模型进行固化 三.pb文件转tfli ...

  2. Keras深度学习实战(37)——手写文字识别

    Keras深度学习实战(37)--手写文字识别 0. 前言 1. 手写文字识别相关背景 1.1 Connectionist temporal classification (CTC) 1.2 解码 C ...

  3. 《深度学习实战》第1章 深度学习的发展介绍

    参考书籍<深度学习实战>杨云.杜飞著 第1章 深度学习的发展介绍 介绍 python是一种非常简单易学的解释性语言.由于强大的开源库支持(numpy,scipy,matplotlib),其 ...

  4. keras之父《python深度学习》笔记 第五章

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 深度学习用于计算机视觉 前言 一.卷积神经网络介绍 1.卷积神经网络简介 2.卷积网络特点 3.卷积网络中一些重要操作 4.池化层 二 ...

  5. keras之父《python深度学习》笔记 第六章

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 深度学习用于文本和序列 前言 一.处理文本数据 1.文本向量化介绍 2.one-hot编码 3.embedding编码 4.预训练词向 ...

  6. 深度学习实战笔记三:编码器、解码器+mnist+kears

    对matplotlib的解释 import matplotlib.pyplot as plt import numpy as np a = [[1,2]] a = np.array(a) c = a[ ...

  7. Pytorch深度学习实战笔记

  8. 深度学习入门笔记(十六):计算机视觉之边缘检测

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  9. 深度学习入门笔记(十五):深度学习框架(TensorFlow和Pytorch之争)

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

最新文章

  1. Linux下USB suspend/resume源码分析【转】
  2. SAP RETAIL 我的第一个寄售类型的跨公司采购订单
  3. WEB学习-CSS盒模型
  4. IT人士还是要善待自己
  5. RedHat Enterprise Linux 5 安装GCC过程
  6. rxjava获取异步请求的结果_我为什么不再推荐用 RxJava
  7. 等式成立JAVA_java – 找到两个线性等式成立的整数集
  8. Unable to locate the default servlet for serving static content. Please set the 'defaultServletName'
  9. 交替领先的赛跑(洛谷P1568题题解,Java语言描述)
  10. TensorFlow-RNN循环神经网络 Example 2:文本情感分析
  11. Congratulations! A Success Case on GDPR
  12. win10怎么设置默认输入法_电脑输入法怎么设置成搜狗双拼?
  13. jQuery Mobile 中文手册 Ajax开发版(2)
  14. IIS出现server application error解决方案
  15. 计算机的实现的理论基础
  16. [C#][共享网络] Netsh命令实现共享,并查询连接用户
  17. crf的实现 keras_keras 解决加载lstm+crf模型出错的问题
  18. 计算机存储容量的基本单位pb,pb存储单位是什么
  19. Pytorch实战宝可梦分类-自定义数据集完成宝可梦分类案例分步解析
  20. web端实现视频播放,视频地址切换,清晰度切换,断点续播

热门文章

  1. Python编程从入门到实践 第十章:文件和异常 练习答案记录
  2. slf4j.Logger的全面讲解及e.getMessage()为何为空
  3. stackoverflow 查看最新回复
  4. Android Studio Chipmunk 同时打开多个项目的正确方法
  5. Oracle回收站及flashback drop(上)
  6. HTML开发 完美解决移动端H5页面pop弹出蒙版后底层滑动问题
  7. 2017年11月最新Nagios4.3.4部署 邮件音频告警 自定义监控脚本
  8. android高德地图demo,Android :高德地图demo
  9. 20155227辜彦霖《基于Cortex-M4的UCOSIII的应用》课程设计个人报告
  10. 热烈欢迎领导莅临指导主题PPT模板