使用动态种子的DGA:DNS流量中的意外行为

news2024/11/15 21:28:59

Akamai研究人员最近在域名系统(DNS)流量数据中观察到:使用动态种子的域名生成算法(Domain Generation Algorithm,DGA)的实际行为,与对算法进行逆向工程推测的预期行为之间存在一些差异。也就是说,通过逆向工程得到的数据进行推断,认为某个算法应该产生行为A;但在现实环境中,该算法产生了行为B。

这种行为的变化表明恶意人员正试图进一步提升DGA的能力,以延长其C2通信通道的寿命,从而保护自己的爬虫网络。安全研究人员还发现,相较于使用静态种子的DGA,使用动态种子的DGA更难以预测未来生成的域名。对Pushdo和Necurs等DGA的深入研究还发现,它们在预期生成日期之前和之后都会输出恶意域名。

本文我们就一起来看看这些DGA到底要做什么,会对我们产生哪些影响。

背景

Akamai安全情报团队分析了来自CacheServe DNS服务器的匿名化DNS查询日志。作为我们对爬虫网络检测工作的一个环节,我们观察并监控了100多个已知DGA家族的实际行为。

观察发现,使用动态种子的DGA(DGA的一个子集),其行为往往与逆向工程DGA算法所推测的行为有较大差异。更具体来说,我们发现DGA域名在其预期生成日期之前就被激活了。

域名生成算法(DGA)是什么?

诸如爬虫等恶意软件通常需要与一个集中式服务器通信,以接收命令或更新。而DGA就是用于在恶意软件中生成大量半随机域名的算法。

被感染的设备将定期尝试连接由DGA所含算法生成的完整域名集。只需成功连接一个域名,就能与C2服务器建立连接。这使得网络安全研究人员更难以关闭C2通信。

DGA的工作原理

假设有一个使用虚构的DGA算法每天生成500个恶意域名的爬虫网络。

使用这个DGA的被感染设备将每天查询这500个域名。爬虫网络的C2服务器将在每天生成相同的500个域名(前提是使用了相同的种子,详见下文)。然而,恶意人员只需要控制这500个域名中的任何一个,就能与被感染的机器(爬虫程序)通信。

有时算法使用的种子会改变,从而生成一个新的域名集,然后重新开始上述过程。这使得安全研究人员难以阻止恶意流量,因为域名经常变化,往往看起来像是随机的域名,比如“ghlidae[.]com”。顶级域(TLD)通常是写死的,并且一般会使用那些售价较为低廉的TLD。

目前现实环境中有很多DGA。一旦安全社区发现了一个新算法(有时成功进行了逆向工程),通常会给它取一个“家族名称”。一些最著名的DGA家族包括Conficker、Mirai和CryptoLocker等。

DGA的历史

类似爬虫网络、犯罪软件和勒索软件这样的恶意软件需要与被自己感染的设备通信。在DGA出现前,恶意软件作者只是将域名或一组域名写死到恶意软件代码中。被感染的设备随后将定期尝试连接这些写死的域名,从而与C2服务器通信。

一旦安全团队获取了恶意软件的源代码,将这些写死的域名放到封锁列表中就成为一种非常容易的工作。

研究人员:1分;坏人:0分

第一个实施DGA的恶意软件是2008年初的Kraken。然而同年晚些时候,Conficker就让DGA变得流行起来。

Conficker.A每天生成250个域名。随后Conficker.C更胜一筹,每天生成大约50000个域名。这导致安全团队不得不每天检测和封锁大量新域名。然而,恶意人员仍然只需要每天控制其中任何一个域名。

研究人员:1分;坏人:1分

提高C2通信的健壮性

DGA使得多人员可以增强C2通信的健壮性,进而推动:

  • 分布式拒绝服务(DDoS)攻击
  • 加密货币挖矿
  • 出售受感染设备中的敏感信息
  • 间谍软件
  • 广告和电子邮件欺诈
  • 恶意软件的自我传播

这些情况持续困扰着网络安全社区,而这恰恰证明了DGA非常有效。

动态种子和静态种子是什么?

DGA分为两个主要类别:动态种子和静态种子。要了解其中的区别,首先必须先理解“种子(Seed)”的概念。

种子本质上是伪随机数生成器(PRNG)的起始输入。种子对于使用PRNG的任何算法的输出结果都会产生直接影响。例如,一个使用“42”作为种子的特定DGA家族算法将始终生成完全相同的域名列表。将种子更改为其他值,例如50,将导致完全不同的输出内容。

可想而知,种子对于DGA起着至关重要的作用。感染爬虫的设备和所联系的C2服务器不仅要使用相同的DGA算法,还要使用相同的种子。

DGA种子能以各种方式生成,并可基于各种来源。当DGA种子不随时间流逝而变(通常是写死的)时,即可将其称之为静态种子的DGA;一些DGA使用随时间流逝而变化的种子,即可将其称之为动态种子的DGA。

· 静态种子的DGA

静态种子可以是随机数、名人姓名、独立宣言、词典中的单词,或者恶意人员可以轻松替换的其他任何东西。这些种子通常在很长一段时间内保持不变,因而可以生成一致的域名序列。

只要算法没有被逆向工程,种子没有被网络安全研究人员发现,这些DGA和种子的组合就会始终有效。当这种组合失效后,所有生成的域名将被迅速放入封锁列表,恶意人员随后将不得不更改种子以生成一个新的域名列表。

在内部,我们将静态种子的DGA简称为“静态DGA”,下文将使用这个术语来称呼这一概念。

· 动态种子的DGA

动态种子的DGA(或简称“动态DGA”)会进一步让安全研究人员的工作变得更复杂。

动态DGA使用与时间相关的种子,最常用的是当前日期。此外还有一些DGA会使用外汇汇率、温度,甚至谷歌趋势或Twitter热门话题等。

如果种子是可预测的,网络安全研究人员就可以预测DGA在将来某个时候能生成哪些域名。当然,前提是成功地对DGA家族进行了逆向工程。

如果种子是基于日期的,我们通常会在24小时的窗口期内得到相同的一组域名(即每天午夜后刚过,会生成一组新域名)。

知道明天哪些DGA域名将被激活,让我们能主动将这些域名放入封锁列表,以保护最终用户免受爬虫网络的影响。然而,对于不可预测的种子(如谷歌趋势、温度或外汇汇率等),就无法提前进行封锁了。即便我们拥有DGA家族的源代码,也无法正确预测未来会生成哪些域名。

动态DGA:期望与现实

Akamai的研究团队观察并调查了十多个DGA的意外行为。下文会简单介绍其中两个特别有趣的。

这两个例子都是使用日期作为种子的动态DGA。这意味着通过将种子(日期)与逆向工程后的DGA相结合,我们应该能够预测自己将在DNS查询日志中看到哪些域名,以及这些域名何时会出现。

那就将我们的预测与我们在DNS流量数据中实际看到的情况对比一下吧。简洁起见,在下文中我们将简单地使用“DGA”或“DGA家族”来代表“使用日期作为种子的动态DGA”。

图1:流量中DGA的概览

流量数据中的DGA视图

图1是流量数据中DGA的概览。为了更方便大家了解其含义,我们需要先分享一些背景知识。

首先,让我们定义一下坐标轴:

  • x轴代表在DNS流量数据中看到的DGA域名的预期日期(种子日期)与实际日期之间的时间差(以天为单位)。
  • y轴是在流量数据中看到的唯一域名的数量。

我们预期种子每24小时更换一次。也就是说,每天午夜过后,DGA将激活一个由种子生成的新域名集,这种情况在图中用红色来代表。红条显示了我们在理想(即没有延迟)的情况下从这些DGA家族中所期望看到的情况。

右侧的紫色条形代表考虑到DNS数据到达我们系统前的各个阶段所经历的延迟后,应当期望看到的情况。大多数延迟只会导致略微向右移动,通常以分钟或小时为单位,而不是以天为单位,除非这是出于设计目的。

然而,左侧的绿色条代表一些意外情况。这代表什么?我们在理论生成日期之前就观察到了DGA生成的域名!这种奇怪的行为表明,恶意人员已经修改了这些DGA,以进一步使检测变得困难,并保护其恶意活动。

Pushdo家族的流量

图2:Pushdo恶意软件家族

对于Pushdo家族,我们预期在24小时窗口内可以从x轴上的0到1天之间看到所有查询的域名(图2),即图中的红色阴影区域。

然而实际上我们观察到的是从预期日期的前50天到后50天内,唯一域名呈分布态势,峰值恰巧位于“0”点之前,数值为10000。看起来种子(日期)经过了一个类似于正态分布的移位,最多可达50天。

对应的Python代码可能如下所示:

  import numpy as np
  import pandas as pd
  from datetime import datetime
seed = datetime.now().date()
shift = np.random.normal(loc=0, scale=15, size=1).astype(int)[0]
modified_seed = seed + pd.to_timedelta(f'{shift} days')

我们认为,造成这种情况的原因可能是恶意人员试图困扰或混淆安全研究人员。好在我们并没有为此感到困惑!因为我们的DGA检测系统覆盖了图2中可见的整个谱系。

Necurs家族流量

图3:Necurs恶意软件家族

对于Necurs家族,我们看到唯一域名分布在前后7天的范围内(图3),在后12天标记周围也有一个较小(其实已经足够大了)的峰值,这也可以看作是特意设计的产物。

这表明一些恶意人员会等待足够长的时间来使用相同的一组域名,但会在预期日期过后7天才开始使用,这也让域名经历了7天的延迟。

结论

在通过DNS请求日志分析动态种子DGA家族的活动时,我们观察到一些意外行为。Akamai认为,这些异常行为可以归因于恶意人员以各种方式修改DGA种子。我们所研究的两个DGA家族(Pushdo和Necurs),在其预期生成日期之前和之后都会输出恶意域名,范围可达预期生成日期的前后50天。

分析表明,这是恶意人员为避免DGA检测系统,并使安全研究团队的工作变得更加复杂所采取的措施。虽然恶意人员会继续设法保护其爬虫网络并延长C2通信通道的寿命,但安全研究人员的工作是对这些措施最好的反击。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1656642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【最大公约 调和级数 并集查找】2709. 最大公约数遍历

涉及知识点 最大公约 调和级数 并集查找(并差集) 质数、最大公约数、菲蜀定理 LeetCode 2709. 最大公约数遍历 给你一个下标从 0 开始的整数数组 nums ,你可以在一些下标之间遍历。对于两个下标 i 和 j(i ! j),当且…

tsconfig 备忘清单

前言 ❝ Nealyang/blog0 使用 ts 已多年,但是貌似对于 tsconfig 总是记忆不清,每次都是 cv 历史项目,所以写了这篇备忘录,希望能帮助到大家。 本文总结整理自 Matt Pocock 的一篇文章3,加以个人理解,并做了…

SpringBoot 使用Outlook邮箱发送邮件

目录 一、开启Outlook设置 二、依赖 三、配置文件 四、代码调用 一、开启Outlook设置 开启设置如图&#xff1a; 二、依赖 <!-- 邮箱依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mai…

【SpringBoot整合系列】SpringBoot整合RabbitMQ-消息可靠性

目录 确保消息的可靠性RabbitMQ 消息发送可靠性分析解决方案开启事务机制发送方确认机制单条消息处理消息批量处理 失败重试自带重试机制业务重试 RabbitMQ 消息消费可靠性如何保证消息在队列RabbitMQ 的消息消费&#xff0c;整体上来说有两种不同的思路&#xff1a;确保消费成…

C++音视频开发面试题

下面是音视频开发面试题精选&#xff1a; 1、纹理抗锯齿有哪些算法&#xff1f;各有哪些利弊&#xff1f;2、使用 OpenGL PBO 为什么能提高效率&#xff1f;3、iOS 如何使用分段转码&#xff0c;如何设置分片大小&#xff1f;4、VideoToolbox 中是不是不存在平面格式&#xff…

C#调用电脑摄像头拍照

1.打开VS2019&#xff0c;新建一个Form窗体&#xff0c;工具->NuGet包管理工具->管理解决方案的NuGet包&#xff0c;在浏览里搜索AForge.Controls、AForge.Video.DirectShow&#xff0c;安装AForge.Controls和AForge.Video.DirectShow 2.安装AForge组件完成后&#xff0c…

AI 绘画神器 Fooocus 本地部署指南:简介、硬件要求、部署步骤、界面介绍

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 大家好&#xff0c;我是水滴~~ 随着人工智能技术的飞速发展&#xff0c;AI 绘画逐渐成为创意领域的新宠。Fooocus 作为一款免费开源的 AI 绘画工具&am…

mysql等保测评2.0命令-三级

版本 Win默认安装位置 C:\Program Files\MySQL\MySQL Server 8.0\bin 版本&#xff1a;select version() from dual; 身份鉴别 a应对登录的用户进行身份标识和鉴别&#xff0c;身份标识具有唯一性&#xff0c;身份鉴别信息具有复杂度要求并定期更换&#xff1b; 1、SELEC…

html--瀑布效果

<!doctype html> <html> <head> <meta charset"utf-8"> <title>瀑布效果</title><style> body {background: #222;color: white;overflow:hidden; }#container {box-shadow: inset 0 1px 0 #444, 0 -1px 0 #000;height: 1…

Windows远程桌面实现之十四:实现AirPlay接收端,让苹果设备(iOS,iPad等)屏幕镜像到PC端

by fanxiushu 2024-05-04 转载或引用请注明原始作者。 这个课题已经持续了好几年&#xff0c;已经可以说是很长时间了。 实现的程序是 xdisp_virt&#xff0c; 可以去github下载使用:GitHub - fanxiushu/xdisp_virt: xfsredir file system 一开始是基于测试镜像驱动的目的随便开…

【FX110】2024外汇市场中交易量最大的货币对是哪个?

作为最大、最流动的金融市场之一&#xff0c;外汇市场每天的交易量高达几万亿美元&#xff0c;涉及到数百种货币。不同货币对的交易活跃程度并不一样&#xff0c;交易者需要根据货币对各自的特点去进行交易。 全年外汇市场中涉及美元的外汇交易超过50%&#xff01; 实际上&…

对象复制工具Orika,快速实现两个java对象的属性赋值

一、maven依赖引入orika <dependency><groupId>ma.glasnost.orika</groupId><artifactId>orika-core</artifactId><version>1.5.4</version></dependency>二、Orika工具类 import io.swagger.annotations.ApiModel; import io…

百面算法工程师 | 支持向量机面试相关问题——SVM

本文给大家带来的百面算法工程师是深度学习支持向量机的面试总结&#xff0c;文章内总结了常见的提问问题&#xff0c;旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中&#xff0c;我们还将介绍一些常见的深度学习算法工程师面试问题&#xff0c;并提供参考的回答…

Leetcode127.单词接龙

https://leetcode.cn/problems/word-ladder/description/?envTypestudy-plan-v2&envIdtop-interview-150 文章目录 题目描述解题思路代码-BFS解题思路二——双向BFS代码 题目描述 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 …

django中的cookie与session

获取cookie request.COOKIE.GET 使用cookie response.set-cookie views.py from django.http import HttpResponse from django.shortcuts import render# Create your views here. def cookie_test(request):r HttpResponse("hello world")r.set_cookie(lan, py…

设计软件有哪些?渲染软件篇(2),渲染100邀请码1a12

好用的渲染软件有很多&#xff0c;今天我们接着介绍。 1、渲染100(http://www.xuanran100.com/?ycode1a12) 渲染100是网渲平台&#xff0c;为设计师提供高性能的渲染服务。通过它设计师可以把本地渲染移到云端进行&#xff0c;速度快价格便宜&#xff0c;支持3dmax、vray、c…

k8s 理论知识基本介绍

目录 一 k8s 理论前言 &#xff08;一&#xff09;微服务是什么 1&#xff0c;应用场景 2&#xff0c;API 是什么 &#xff08;二&#xff09;&#xff0c;微服务 如何做版本迭代 1. Docker镜像构建 2. 版本标记 3. Docker Registry 4. 环境一致性 5. 滚动更新…

《二十一》QT QML编程基础

QML概述 QML&#xff08;Qt Meta-Object Language&#xff09;是一种声明性语言&#xff0c;它被用于描述Qt框架中用户界面的结构和行为。QML提供了一种简洁、灵活的方式来创建动态和交互式的界面。 QML基于JavaScript语法&#xff0c;通过使用QML类型和属性来定义界面的元素…

[C++核心编程-01]----C++内存四区详细解析

目录 前言 正文 01-内存区域简介 02-全局区 03-栈区 04-堆区 05-new操作符 总结 前言 当程序运行时&#xff0c;操作系统会为程序分配一块内存空间&#xff0c;这块内存空间被划分为不同的区域&#xff0c;每个区域有其独特的作用…

ps5电玩计时收费系统软件教程,电玩店适合的计时器,电脑定时语音提醒

ps5电玩计时收费系统软件教程&#xff0c;电玩店适合的计时器&#xff0c;电脑定时语音提醒 一、前言 以下软件操作教程以&#xff0c;佳易王电玩计时计费管理软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、计时计费功能&#xff1a;只…