DGA - 研究内容整理

2024-06-15 16:32
文章标签 整理 内容 研究 dga

本文主要是介绍DGA - 研究内容整理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

20200809 -

引言

DGA算法是一种生成域名的算法:以时间或者一些特定字符串作为种子,然后利用一定的算法(例如加密算法),来生成随机域名的方式。
恶意软件的制作者通过这种方式来迷惑安全工作者,传统的恶意软件利用硬编码的方式将CC域名保存在程序中,安全工作者可以对这部分域名进行封堵实现截断通信的过程。在DGA算法的帮助下,恶意程序会发出大量DNS请求(包含DGA生成的域名),而制作者利用同样的算法和同样的种子生成同样的列表,从中挑选任意个在DNS厂商进行注册,以此躲避封堵。

而针对DGA的研究,可以有以下几点:正常域名与DGA域名的分类,DGA域名的家族分类等。本篇文章将记录一些研究DGA的文章或者思路,还有自己的实验;为其他研究者提供一些思路,同时给自己做备忘。

文章及数据资源

  1. 样本数据(DGA域名、正常域名)
  2. Domain提取的第三方库
  3. 不错的文章

1. 样本数据(DGA域名、正常域名)

DGA域名获取的资源有很多,这里仅记录360 netlab的地址。

  • 360 DGA

正常域名可以从AWS上获取。

  • 正常域名(TOP-1M)

上述资源应该是随着时间更新的,如果有时候分析效果不一样,可能是因为时间不一致。
同时github上一位研究者收集了很多DGA家族生成算法的脚本,可以自己利用种子以及时间来生成大量样本[2]。

2. Domain提取的第三方库

关于域名的结构,专门的讲解,后续补充上。之前提取顶级域名,或者提取域名的时候都是自己用Python的split(’.’)分解。但是这种方法其实是很弱,无法应对复杂的情况。后来找到了一个库tldextract;这个库[1]可以帮助提取这部分信息。

>>> import tldextract
>>> tldextract.extract('http://forums.news.cnn.com/')
ExtractResult(subdomain='forums.news', domain='cnn', suffix='com')
>>> tldextract.extract('http://forums.bbc.co.uk/') # United Kingdom
ExtractResult(subdomain='forums', domain='bbc', suffix='co.uk')
>>> tldextract.extract('http://www.worldbank.org.kg/') # Kyrgyzstan
ExtractResult(subdomain='www', domain='worldbank', suffix='org.kg')
>>> ext = tldextract.extract('http://forums.bbc.co.uk')
>>> (ext.subdomain, ext.domain, ext.suffix)
('forums', 'bbc', 'co.uk')

以上代码是从他pypi的网站上复制过来。按照他的提取结果,分为三个部分子域名,域名,后缀
后续研究也将按照这种方式来分析,就不按照什么三级域名、二级域名来说明了。

3. 不错的文章

3.1 Getting Started with DGA Domain Detection Research

该篇文章算是一个入门的文章,介绍了很多基础的内容;本篇博客前面的内容很多就是抽取了这部分信息。

3.2 使用生成对抗网络(GAN)生成DGA

这篇文章通过训练GAN来生成正常的域名,我之前的时候是思考能不能生成DGA域名,但是仔细想了想,还是这篇文章的意思对。如果是生成DGA域名,本身这种域名就具备一定的随机性,那么你生活生成的域名还是带有一定的随机性,这个没办法判断。特别是,如果模型学习的时候也学习了一种随机性,那么这个肯定能骗过GAN的判别器
那么是不是说明,假设你完全用随机的字符串来生成域名,也算是DGA呢?
不过,我反过来想象,虽然他生成域名的时候是具备一定随机性的,但是实际上,根据你的种子,他每次生成的是时候,都是决定性的序列。所以,你想学习的是这种序列模式,如果从这个角度来思考就能理解了。

参考文章

[1]tldextract
[2]baderj/domain_generation_algorithms

这篇关于DGA - 研究内容整理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1063975

相关文章

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

如何解决Pycharm编辑内容时有光标的问题

《如何解决Pycharm编辑内容时有光标的问题》文章介绍了如何在PyCharm中配置VimEmulator插件,包括检查插件是否已安装、下载插件以及安装IdeaVim插件的步骤... 目录Pycharm编辑内容时有光标1.如果Vim Emulator前面有对勾2.www.chinasem.cn如果tools工

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

rtmp流媒体编程相关整理2013(crtmpserver,rtmpdump,x264,faac)

转自:http://blog.163.com/zhujiatc@126/blog/static/1834638201392335213119/ 相关资料在线版(不定时更新,其实也不会很多,也许一两个月也不会改) http://www.zhujiatc.esy.es/crtmpserver/index.htm 去年在这进行rtmp相关整理,其实内容早有了,只是整理一下看着方

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern