DGA 域名生成算法攻防

一、简介

DGA(Domain Generation Algorithm,域名生成算法)是一种利用 随机字符 来生成 C&C(Command and Control,命令与控制)域名,从而 逃避域名黑名单检测 的技术手段。

攻击者利用DGA产生恶意域名后,选择部分域名进行注册并指向C&C服务器。当受害者运行恶意程序后,主机将通过恶意域名连接至C&C服务器,攻击者即可远程操控主机。在红队攻击和渗透测试中,好的DGA域名是攻击准备的一部分。

二、背景

僵尸网络由大量受控主机即僵尸(bot)和一个或多个命令和控制C2(Command &Control)服务器构成,bot与C2服务器相互通信以便传递命令和数据。为避免C2服务器被发现,恶意软件设法采用规避技术来隐藏bot与C2服务器的通信行为,其中,域名生成算法DGA(Domain Generation Algorithm)就是一种实用技术。简单地说,攻击者利用DGA算法和种子(如时间、词典等)生成大量算法生成域名AGD(最终生成域名,Algorithmically Generated Domain),然后只需要使用一个域名来进行C2通信,而防御者为了发现该域名,需要对所有AGD域名进行检测。基于这种攻防双方所需资源的不对称性,DGA技术被攻击者广泛使用。MITRE ATT&CK C2战术T1568.002技术记录了十几个使用DGA技术的APT组织,比如APT41、Aria-body等。从2008年臭名昭著的Kraken和Conficker恶意软件以来,为了绕过入侵检测系统的检查,几乎所有恶意软件都采用了DGA技术。最新的技术报告估计,恶意AGD域名数量约占域名总数的9.9%,其中1/5属于基于DGA的僵尸网络(约占所有注册域名的1.8%)。
当前,DGA域名检测研究是安全圈讨论的热点话题。传统的DGA域名检测方法是利用黑名单策略实现,但由于DGA域名容易生成且规模量大,这就导致不断收集和更新黑名单变得不现实。基于机器学习的DGA域名检测方法可以避免这一不足,实现实时检测,已成为DGA域名检测领域研究主流方向。
本文将向读者介绍DGA域名基础知识、DGA域名检测方法现状以及DGA域名检测方案。

三、作用

让C&C服务器更加隐蔽,降低攻击发现几率,增强僵尸网络的鲁棒性。

由于C&C服务器和受害机间通信运行同一套DGA算法,生成相同的备选域名列表,并且受害机会定时尝试连接C&C服务器。

当需要发动攻击的时候,选择其中少量进行注册,配置为C&C服务器的域名,受害机中的恶意程序便可以和C&C服务器建立通信,受害机上的恶意程序将接受C&C服务端指令,进行信息收集和恶意破坏等一系列恶意活动。
由于DGA算法可以生成大量备选域名,并且可以对注册的域名应用速变IP技术,快速变换IP,从而让C&C域名和IP都可以进行快速变化,增加安全检测排查难度。

僵尸网络中受到恶意软件感染的僵尸主机由僵尸控制者通过C&C主机进行控制。僵尸主机常常利用DNS授权服务器来解析域名,目的是为了跟C&C服务器创建通信通道,然后获取控制命令,从而进行网络恶意活动。
在早期,僵尸主机通产采用轮询的方法访问硬编码的C&C域名或IP来访问服务器获取域名,但是这种方式在安全人员进行逆向之后会得到有效的屏蔽。目前,黑客攻击者为了防止恶意域名被发现,会使用Domain Flux或者IP Flux来快速生成大量的恶意域名。

Domain Flux是通过不断变换域名,指向同一个IP。

IP Flux是只有一个域名,不断变换IP,一个域名可以使用多个IP。

DGA的危害
DGA每天可以生成成千上万的恶意域名,但仅选择一小部分作为后续的攻击域名,相对于传统硬编码的恶意域名,更难检测。

DGA的优点
1、使用DGA的僵尸网络有较为健壮的寻址方式,可对抗域名黑名单屏蔽、静态声望系统以及特征码检测系统。
2、DGA是一种理想的备用信道,可作为back up手段恢复僵尸网络控制,如Zeus v3。

DGA的缺点
1、需要逐一便利AGD,寻址效率低。
2、大量NXDomain流量导致通信易被检测发现。
3、如果AGD数量过多,出于时间和金钱成本开销,攻击者难以全部注册,防御人员可以抢注并通过sinkhole(又名沉洞,或网络沉洞)手段测量或劫持僵尸网络。
Sinkhole域名处理方法及服务器与流程

四、攻击原理

DGA是一组算法机制,被各种恶意软件家族用来生成大量的伪随机域名。伪随机意味着字符串序列似乎是随机的,但由于其结构可以预先确定,因此可以重复产生和复制。
大多数随机生成的域名是不存在的,只有其中一小部分域名会被注册以供受控主机与C2服务器进行通信,从而获取信息或跟踪其他恶意任务。此外,当一个域名被成功阻止时,攻击者会从DGA生成的域名列表中注册其他域名。

攻击者端(bot-master)
使用种子运行DGA生成大量域名,随机选择少量的域名进行注册(可能生成了5000个只注册1-2个),攻击者将该域名注册并指向其C&C服务器。

受害者端(bot)
使用同样的种子运行DGA,生成大量域名,逐个访问这些域名,检测是否存在。
如果该域名未注册,程序继续检测其他域名。
如果该域名已注册【如果某生成域名发生被抢注则不处理,因为那些域名并不能发攻击指令,看设计方案是否要继续进行轮询】,那么恶意软件将选择使用该域名联系C&C服务器

五、DGA域名分类

按照种子进行分类

种子是攻击者和客户端恶意软件共享的DGA算法的输入参数之一,不同的种子得出的DGA域名是不一样的。

DGA使用的种子有很多种类,包含日期、社交网络搜索热词、随机数或词典,DGA根据种子生成一串字符前缀,添加TLD(顶级域名,top-level domains,如com、org等)后得到最终生成域名AGD(Algorithmically Generated Domain) 。

一般来说,种子可按如下方式进行分类:

基于时间的种子:DGA算法使用时间信息作为输入(如:受控主机的系统时间,http响应的时间等);

是否具有确定性:主流的DGA算法的输入是确定的,因此AGD可以被提前计算,但是也有一些DGA算法的输入是不确定的(如:Bedep以欧洲中央银行每天发布的外汇参考汇率作为种子,Torpig用Twitter的关键词作为种子,只有在确定时间窗口内注册域名才能生效)。

根据种子的分类方法,DGA域名可以分为以下4类:

TID(time-independent and deterministic):与时间不相关,可确定;

TDD(time-dependent and deterministic):与时间相关,可确定;

TDN(time-dependent and non-deterministic):与时间相关,不可确定;

TIN(time-independent and non-deterministic):与时间不相关,不可确定;

按照生成算法进行分类

现有DGA生成算法一般可以分为如下4类:

基于算术(Arithmetic-based):该类型算法会生成一组可用ASCII编码表示的值,从而构成DGA域名,流行度最高;

基于哈希(Hash-based):用哈希值的16进制表示产生的DGA域名,常使用的哈希算法有:MD5,SHA256;

基于词典(Wordlist-based):该方式会从专有词典中挑选单词进行组合,减少域名字符上的随机性,迷惑性更强,词典内嵌在恶意程序中或者从公有服务中提取;

基于排列组合(或称置换,Permutation-based):对一个初始域名进行字符上的排列组合。

六、DGA域名举例

DGA的使用非常广泛,目前已知的DGA家族有40多个。下表列举了4个DGA家族的TLD(顶级域)、SLD(二级域)和样例:
在这里插入图片描述

Banjori DGA 域名生成算法

def map_to_lowercase_letter(s):
    return ord('a') + ((s - ord('a')) % 26)


def next_domain(domain):
    dl = [ord(x) for x in list(domain)]
    dl[0] = map_to_lowercase_letter(dl[0] + dl[3])
    dl[1] = map_to_lowercase_letter(dl[0] + 2 * dl[1])
    dl[2] = map_to_lowercase_letter(dl[0] + dl[2] - 1)
    dl[3] = map_to_lowercase_letter(dl[1] + dl[2] + dl[3])
    return ''.join([chr(x) for x in dl])


seed = 'earnestnessbiophysicalohax.com'  # 15372 equal to 0 (seed = 0)
domain = seed
for i in range(1000):
    print(domain)
    domain = next_domain(domain)

选取其中几个,效果如下:

earnestnessbiophysicalohax.com
kwtoestnessbiophysicalohax.com
rvcxestnessbiophysicalohax.com
hjbtestnessbiophysicalohax.com
txmoestnessbiophysicalohax.com
agekestnessbiophysicalohax.com
dbzwestnessbiophysicalohax.com

多种DGA算法的python实现

七、检测手段(研究现状)

概述

大多数DGA算法都具有时间依赖性和确定性,即它们的生成参数是可获取和可重用的,从而计算出所有可能的结果。基于此特点,可以对每个恶意软件及其变体进行逆向分析获得域名生成算法和种子,从而提取给定日期和时间的有效域名集合,加入黑名单进行DGA域名检测。
但是,当考虑到每天发现的恶意软件及变种的数量时,这种方法是不可行的。原因有两个方面,其一是黑名单的更新速度远远赶不上DGA域名的生成速度;其二是必须阻断所有的DGA域名才能阻断受控主机与C2服务器通信。开源黑名单的DGA覆盖率低,仅不到1.2%的DGA包含在黑名单中。因此,粗暴用DGA构建黑名单的方法并不能解决根本问题。

基于机器学习的DGA域名检测方法大部分是直接从完全合格域名FQDN(Fully Qualified Domain Name)提取特征,将FQDN作为一个字符串,提取长度、熵、NGram等特征,这类方法不依赖于上下文信息,例如时间、环境配置等,因此,可以实现实时检测。

目前传统机器学习算法和深度学习都被用于DGA域名检测,并都取得了不错的效果。传统机器学习算法分为监督学习和无监督学习两类,这两类算法都在DGA域名检测中有应用。

基于监督学习的检测

常用的监督学习算法有决策树和随机森林,例如使用决策树解决区分DGA域名和正常域名的二分类问题,使用的特征有域名长度、字符比例(包括元音字母、辅音字母、数字)和NGram熵;使用决策树算法进行二分类,使用的特征为域名长度和自定义的域名期望值。随机森林有助于解决决策树的过拟合问题,文献中广泛使用随机森林来处理基于DGA的僵尸网络问题,例如文献[5]就是使用随机森林算法解决二分类问题,使用的特征有四类:分布特征、结构特征、发音特征、通用特征。

基于无监督学习的检测

基于决策树和随机森林的模型属于监督学习,都需要特征才能工作。无监督学习与有监督学习相比有一个重要的优势是不需要带标记的数据集。众所周知的K-Means算法是一个简单常用的无监督学习算法,被广泛应用在DGA域名检测中,例如使用KMeans进行DGA家族的多分类,使用了域名的长度、熵和NGram相关特征;使用KMeans进行区分正常和DGA域名,使用了可读性(NGram)、信息熵、结构(长度、字符比例等)三类特征。在过去十年中,只有少数无监督算法用来解决DGA域名检测问题。除了KMeans还有两种聚类方法:混合模型(MM)和HC,但它们的使用非常有限,效果不理想。

基于注册状态进行检测

基于注册状态进行检测主要是通过域名在商业平台注册的情况评判,本质是通过财力等指标判别域名性质。例如以下指标:
· 注册时间不超过一周的新域名
· 通配符域名
· 二级域名不在Alexa top 10K
· .xyz,.biz,.info等审核不严的TLD

绕过检测的主要方法有:
· 在使用域名之前保持较久的注册时间
· 避免在使用ccTLD中的一级域名
· 使用云计算服务商的cname域名

基于威胁情报进行检测

通过威胁情报平台和DGA数据集进行检测主要用于检测已知的DGA域名,一些常见的的数据集和威胁情报平台如下:
· 306netlab dga 360dga数据集
· virustotal.com virustotal平台
· x.threatboot.com 微步威胁情报平台
· ti.360.cn 360威胁情报平台
· tj-un.com 天际友盟平台

绕过检测的主要方法有:
· 启用whois隐私保护
· 使用CDN保护域名
· 注册已过期域名
· 在实际使用前将ip解析到安全站点上
· 使用之前提交到威胁情报平台做检测,加入白名单

目前基于模型的DGA域名检测已经成为主流安全产品检测DGA域名的必备技术,主流的检测算法如下:

基于熵检测

熵在计算机领域中用于描述随机变量中的不确定度度量,即一段信息的随机程度有多高。通常情况下,基于随机算法生成的DGA域名有比正常域名更高的熵,可以通过熵的大小分类DGA域名。

基于隐式马尔科夫模型检测

隐式马尔科夫模型主要通过检测字符串中各个字符之间的转换概率来分类域名。在正常的域名中,多个字符之间的转换概率会收敛到一个特定的区域中(由于正常的域名更带有自然语言的特征,有一定的单词结构),而随机性较高的DGA域名在统计特征上不符合正常的域名,故而可以通过该方法检测DGA域名。

基于深度学习模型检测

深度学习模型通过一个神经网络对已知的DGA域名和正常域名进行学习,从而获得一个鉴别DGA域名的分类器,深度学习模型解释性较低,难于调试,但是较传统模型效果更好,故而也有很多产品使用此方法。

基于模型的DGA域名检测本质是通过统计的方式发现DGA域名在语义上的特征,从而将其和正常域名加以区分,故而绕过此类模型需使用类似的方法生成DGA域名,在此介绍基于生成对抗网络(GAN)生成DGA域名的方法。

深度学习也在DGA域名检测中有广泛的应用,循环神经网络(RNNs)、长短期记忆网络(LSTM)和卷积神经网络(CNN)都被应用到了DGA域名检测中。例如:使用LSTM解决DGA域名和正常域名二分类、DGA家族多分类问题;研究并开发了经典LSTM的变体,也用来进行二分类和多分类;比较了RNN、LSTM、CNN和CNN-LSTM组合进行DGA二分类和多分类的效果。深度学习在二分类中表现出色,但在多分类中此类方法在精确度和召回率方面都取得了令人怀疑的结果。最后需要说明的是深度学习虽然可以提供很好的分类效果,但它们往往是过度拟合的,尤其是不透明的,缺乏透明度最终导致无法对算法进行微调,也无法解释结果背后的原因。

还值得一提的是,有研究使用深度学习算法进行特征提取,然后使用分类算法进行分类,例如使用CNN生成特征,这些特征随后由决策树和随机森林分类器进行分类。

长短期记忆网络(LSTM)的好处

深度学习近年来在机器学习社区中可以说是占尽风头。深度学习是机器学习中一种基于对数据进行表征学习的方法。其好处是用非监督式或半监督式的特征学习和分层特征提取高效算法来替代手工获取特征。随着数十年的不断发展,深度学习在过去四五年间一直很受欢迎。再加上硬件的不断升级优化(如GPU的并行处理改进),也使得培训复杂网络成为了可能。LSTM是一种RNN的特殊类型,可以学习长期依赖信息,如文本和语言等。LSTM是实现循环神经网络的一个这样的技巧,意味着包含循环的神经网络。LSTM在长时间的学习模式方面非常擅长如文本和言语。在本文的例子中,我将使用它们来学习字符序列(域名)的模式,从而帮助我们识别哪些是DGA生成域哪些不是。

使用深度学习的一大好处就是我们可以省去特征工程这一繁杂的过程。而如果我们使用常规方法来生成一长串特征列表(例如长度,元音,辅音以及n-gram模型),并使用这些特征来识别DGA生成域和非DGA生成域。那么就需要安全人员实时的更新和创建新的特征库,这将是一个异常艰巨和痛苦的过程。其次,一旦攻击者掌握了其中的过滤规则,那么攻击者就可以轻松地通过更新其DGA来逃避我们的检测。而深度学习的自动表征学习能力,也让我们能够更快的适应不断变化的对手。同时,也大大减少了我们人力物力的巨大投入。我们技术的另一个优点是仅对域名进行识别而不使用任何上下文功能,如NXDomains

我们技术的另一个优点是,我们仅对域名进行分类而不使用任何上下文功能如NXDomain。上下文功能的生成往往需要额外昂贵的基础设施(如网络传感器和第三方信誉系统)。令人惊讶的是对于没有上下文信息的LSTM,执行却明显优于它们。

GAN网络–生成难以被模型鉴别的DGA域名

生成式对抗网络(GAN, Generative Adversarial Networks )是无监督学习领域的重要模型,在GAN中存在两个神经网路,分别称为生成器和判别器。在初始状态下,生成器将自动的生成噪音,并将噪音和真实数据共同发送给判别器判定,并根据判别器的反馈结果调整网络权重。在多次轮流训练生成器和判别器之后,两个互相博弈的神经网络将达到均衡状态,生成器生成的数据将在统计特征上接近真实数据。故而可以利用已知的DGA数据集训练用于生成DGA域名的GAN网络,来生成难以被模型鉴别的DGA域名。

参考链接:

天融信——AI安全应用:DGA域名检测

安全内参 - DGA域名的今生前世:缘起、检测、与发展

朴素贝叶斯算法检测DGA

用机器学习识别随机生成的C&C域名

fodcha 僵尸网络病毒分析

posted @ 2022-03-11 21:52  Hardworking666  阅读(561)  评论(0编辑  收藏  举报  来源