机器学习DGA域名检测

article/2025/9/20 19:25:56

恶意域名

恶意域名是指黑客在攻击过程中或者对目标网络实施控制时,使用dga算法生成的域名,这种域名通常硬编码在恶意软件中。我们在做流量分析时不仅要通过流量的指纹特征识别威胁,也可以通过检测是否解析了恶意域名来判断网络中是否存在肉鸡。

传统DGA域名检测方法

1、最直接的就是逆向恶意程序,这种办法要求高,并且只能查到已知样本的恶意dga域名。

2 、网络流量分析,抓出异常的dns请求,分析确认

3 、碰撞dga库,白帽子收集和用dga算法生成的域名库。

基于机器学习的检测方法

白样本:采用Alexa top1m

黑样本:http://data.netlab.360.com/dga/

初步分析:dga域名属于文本特征,我们先用最常用文本特征处理手段 N-gram+tf-idf 、NLP提取词向量特征+机器学习分类器,我们将黑白样本合并、打乱顺序,用N-gram+tf-idf方式进行初测试。(没得GPU,使用词向量提取时间过长,放弃…)

2-gram+tf-idf+XGBoost

样本稍微有点不均衡,而且维度很大训练吃力,不过测试效果不错。
在这里插入图片描述

数据分析特征提取

黑白样本不均衡,保留类别数目大于3000的家族样本,并使用随机下采样方式使黑白样本均衡。

仅做测试数据足够,而且高维文本特征表示,近乎两两正交,使用SMOTE类似方法过采样效果甚微。

最终数据分布如下:
在这里插入图片描述

DGA算法作为随机域名生成算法,它生成的域名与正常域名相比随机性更强。可以从如下几个方面考虑特征:

1、数字/字母 占比

2、元音字母/辅音字母 占比(合法域名一般由正常字母组成包含元音字母多,可读行强)

3、字母 重复出现次数占比

4、域名长度

5、香农熵(可以判断域名随机性)

特征数据分布图可以大概看出特征区分度:

在这里插入图片描述

特征相关性分布混淆矩阵:

在这里插入图片描述

特征关联性分布散点图:
在这里插入图片描述

使用SelectKBest对特征评分:
在这里插入图片描述

通过以上分析得出DGA域名中字母出现占比与字母重复出现次数占比相关性比较大,根据特征评分删除字母占比特征。

使用上述6个特征经XGBoost分类器训练结果如下:

在这里插入图片描述

合并TF-IDF特征经XGBoost分类器训练结果如下:

在这里插入图片描述

使用stacking模型融合尝试进一步提升模型效果:

KFOLD,n_splits=5
在这里插入图片描述

在这里插入图片描述

经测试在本数据集上stacking 在低维数据集表现不佳,使用stacking方法训练上述自己提取的六个特征,stacking模型准确率、roc值均与第一层最优分类器相近(仅适用本数据集)。但处理高维tf-idf特征相较第一层分类器有较大提升,特征融合后使用少量样本集做测试也均有较大提升。


http://chatgpt.dhexx.cn/article/v6pxsP24.shtml

相关文章

DGA 域名生成算法攻防

文章目录 一、简介二、背景三、作用四、攻击原理五、DGA域名分类按照种子进行分类按照生成算法进行分类 六、DGA域名举例Banjori DGA 域名生成算法 七、检测手段(研究现状)概述基于监督学习的检测基于无监督学习的检测基于注册状态进行检测基于威胁情报进…

基于Python深度学习的DGA域名检测

1 背景介绍 1.1 DGA 域名简介 如今,互联网上的很多恶意攻击行为开始借助由域名生成算法生成的域名来抵抗安防软件的检测。这些域名生成算法通常会借助一组随机种子,持续不断的生成大量随机域名。使用这些 DGA 域名进行攻击的流程如图 1.1 所示。 图 1.…

一个简单的DGA(Domain Generate Algorithm)

黑产的规模和技术是越来越强了,想到一句话:任何人都被骗过,所以同样的任何人都被黑过。 针对大规模简单而粗暴的DDoS网络破坏是如何实现的呢,通常除了一些大规模有组织且政府允许的,还有各种各样的个人组织&#xff0c…

DGA数据集和算法研究

针对DGA的研究现在已经很多了,cnki 里面有116篇论文,涉及到dga黑样本,域名白名单,dga算法分析等,在数据集和dga原理的基础上,提出创新检测方案。因此,抽取共性,综合各家dga之所长&am…

dga (Domain Generation Algorithm) 域名 生成算法 简介

目录 一、引言 二、背景 三、检测 四、发展 五、总结 一、引言 恶意软件如今已经发展为威胁网络安全的头号公敌,为了逃避安全设施的检测,其制作过程也越来越复杂,其中一个典型做法是在软件中集成DGA(Domain Generation Algo…

你没见过的中文编程工具,用中文开发android安卓应用,安卓开发的初体验!

如果你对中文开发有一定的了解,那么你一定会知道易语言。易语言是仿VB制作的一款中文编程工具。它可以用来开发Windows软件。那有没有用于android安卓开发的中文编程工具呢?有!那就是猎码安卓中文开发工具 小编身为一个程序员,在…

自学android编程教程,安卓编程入门教程 安卓编程如何自学

安卓编程入门教程 安卓编程如何自学 时间:2017-04-10 来源:Android开发学习网 安卓编程越来越火,发展前景无比诱人,越来越多的人加入了android开发者的行列。安卓编程入门很简单,今天小编给大家提供一份安卓编程入门教程,告诉大家安卓编程如何自学,希望能够给您带去帮…

没有编程基础如何做安卓开发,试试这款简单易学的中文开发编程工具!

对于没有java编程基础的人来说,想要开发自己的安卓app可能很难。 我们都知道,现在流行的编程工具都是外国人开发的。全英文的界面,再加上全程使英文来写代码,让很多初学者望而却步。绝大部分人选择花费一大笔学费去参加培训班,一学就是几个月,有的甚至半年多。那有没有什…

安卓编程基础——网格布局

目录 前言 一、新课讲解 (一)网格布局概述 1、布局特点 2、继承关系图 3、常用属性 (二)案例演示:计算器界面 1、创建安卓应用 2、准备背景图片 3、字符串资源文件 4、自定义边框配置文件 5、主布局资源文件…

Android应用程序开发需要哪些编程语言?

开发一款Android上的应用程序通常需要以下编程语言: Java:Java是Android开发的主要编程语言。几乎所有的Android应用程序都使用Java进行核心开发。你可以使用Java编写应用程序的业务逻辑、界面设计和数据处理等。 刚好我这里有嵌入式、plc、单片机的资料…

安卓编程基础——触摸事件

文章目录 前言 一、安卓事件触摸概述 1、触摸分类 2、触摸动作 3、触摸监听器 4、触摸方法 5、触点个数与坐标 6、安卓触摸事件处理机制 二、使用步骤讲解 1.创建安卓应用 3、字符串资源文件 4、主布局资源文件 5、主界面类实现功能 6、启动应用,查看效果​编辑 总结…

在手机上如何用c语言编译器编程,如何用手机进行编程?

这里介绍3种可以在手机上编程的app,分别是c语言编译器(c语言)、AIDE集成开发环境(java)、QPython3(python),都不需要root,可以直接编写程序并运行,下面我简单介绍一下这3个app的安装和简单使用,主要内容如下&#xff1…

Android 网络编程

【Android 网络编程】 HTTP HTTP简介 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。 HTTP协议的主要特点 支持C/…

安卓编程基础——手势编程

目录 前言 (一)安卓手势操作原理 (二)安卓手势类与接口 二、利用手势切换图片 1.创建安卓应用 3、字符串资源文件 4、主布局资源文件 5、主界面类实现功能 6、启动应用,查看效果 总结 前言 现代智能手机都支持…

安卓编程基础——列表

零、本讲学习目标 理解列表视图的四大组成元素 能使用基于数组适配器的列表视图 能使用基于简单适配器的列表视图 能使用基于基适配器的列表视图 一、导入新课 列表视图是基于适配器的供用户从多个选项中进行选择控件,可以通过滑动显示很多列表项。 二、新课讲解…

安卓编程基础——标签

目录 前言 (一)继承关系图 (二)标签常用属性 (三)教学案例:标签演示 1、创建安卓应用 2、字符串资源文件 3、自定义边框配置文件 4、主布局资源文件 5、主界面类实现功能 6、启动应用&a…

安卓编程基础——菜单

前言:学习目标 知道三种菜单使用场景能够正确使用三种菜单 一、新课讲解 菜单在安卓应用程序中占有比较重要的位置。原生安卓提供了三种类型的菜单:选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜…

安卓并发编程基础

1.线程 1.线程与进程的区别。 进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。线程是…

【安卓开发】安卓网络编程

目录 一、安卓Socket客户端二、安卓Socket客户端优化(小车遥控器拓展)三、Android非UI线程修改空间程序崩溃问题一种新的解决办法:Handler类(倒计时软件) 四、Android网络接收数据并刷新界面(综合练习&…

storm-executor-spout(2)

2121SCSDUSC storm-executor-spout(2) 用一个spout读取Twitter数据。采用拓扑并行化,多个spout从同一个流读取数据的不同部分。如果有多个流要读取,可以在任意组件内(spouts/bolts)访问TopologyContext。…