隧道战:使用生成式模型暴露DNS隧道活动- CoinLoader案例研究

安全 应用安全
DNS隧道是一种可能被称之为“老派”的技术。它起源于第一个防火墙的出现所创造的安全环境,以及简单边界的绘制:谁发起了连接?与谁?在哪个端口?使用什么协议?

严格来说,生成式人工智能已经存在了近十年,但最近这项技术的蓬勃发展激发了人们应用它来寻找潜在信息安全挑战的新兴趣。要想找到这些挑战,就必须进行“大海捞针式”的搜索,而这其中包括每天都会涌入网络的全新二进制文件、文档、域名和其他工件,任务的艰巨性可想而知。

在本文中,我们将深入介绍Check Point正用于开展“大海捞针式”搜索的一种生成式AI模型,该模型已被证实能够成功阻止滥用DNS协议与C&C服务器通信的恶意活动。下面将以CoinLoader活动为例,展示其基础设施以及对其DNS隧道功能的深入技术分析。

DNS隧道解析

什么是DNS?

域名服务器(DNS)协议可以被看作“互联网的电话簿”。当用户在浏览器的地址栏中输入一个网站地址(比如wikipedia.org)并按回车键时,其浏览器会向它最喜欢的DNS服务器发送一个DNS请求,询问哪些IP地址与该域名对应。此默认DNS服务器的IP地址可以由用户的网络提供商提供,也可以由用户手动指定。

在后端,典型的DNS查询在UDP协议上运行。一个DNS数据包,无论是查询还是响应,均由一个包头和4个主要部分组成:

  • 问题或查询列表——例如,“什么域名?你想要什么样的回答?”
  • 记录列表——对问题的回答;
  • 权威服务器列表——关于负责跟踪域地址的服务器的信息;
  • 附加信息列表——其他数据,如授权服务器的IP地址。

DNS隧道运行原理

“DNS隧道”技术已经存在了很多年,它是一种滥用DNS的实践,将DNS用作恶意软件与其C&C服务器之间的秘密通信通道。在这种情况下,恶意参与者将能同时控制客户端和服务器,从而在执行哪种查询以及在何处隐藏响应的“敏感”部分方面获得很大的回旋余地。

然而,参与者选择的方案本质上受制于DNS协议本身的限制。例如:

  • 请求和响应的长度是有限的。查找的整个域不能超过255字节,DNS数据包的最大长度为576字节。
  • DNS协议自适应缓存。服务器记录一小时前发送的响应,当被请求时,只需重复该响应,而不是一路跑到权威服务器并质询“一小时前的回答仍然有效吗?”这对于DNS的合法用户来说很好,但对于DNS隧道客户端来说就不太好了,因为它们通常求助于查询许多虚构的子域(maliciousdomain. xyz,然后是48bd9a577d114.maliciousdomain. xyz等等)以保持查询的新鲜感。

如果这一切听起来太过理论化,那么以一个众所周知的利用DNS隧道的恶意软件SUNBURST为例,作为2020年SolarWinds黑客攻击的一部分,它被传递给了毫无戒心的受害者。SUNBURST使用DNS查询作为轻量侦察通道,秘密传输作为标识符加密的受害者信息,然后将其用作DNS查询中的子域。此子域名被附加到四个主要域名之一:

  • appsync-api.us-east-1[.]avsvmcloud[.]com
  • appsync-api.us-east-2[.]avsvmcloud[.]com
  • appsync-api.eu-west-1[.]avsvmcloud[.]com
  • appsync-api.us-west-2[.]avsvmcloud[.]com

例如,生成的虚拟FQDN看起来像这样:

7cbtailjomqle1pjvr2d32i2voe60ce2[.]appsync-api[.]us-east-1[.]avsvmcloud[.]com

基于通过DNS请求传输的信息,DNS服务器将向感兴趣的目标返回CNAME记录。CNAME将指向通过HTTPS与恶意软件通信的C&C服务器。

引入DeepDNS

为了更好地解析DNS隧道和恶意网络流量,Check Point于今年引入了DeepDNS,这是一种人工神经网络,可以搜索和阻止滥用DNS的活动。DeepDNS是一种门控循环单元自动编码器(Gated Recurrent Unit Autoencoder,GRU-AE),基于Check Point常规可用的大量DNS流量训练而成。DeepDNS得出的结论也会自动推送到Check Point ThreatCloud。

为了加深了解,下面将对“门控循环单元自动编码器”进行简单解释。

首先,自动编码器是一种人工神经网络,也就是说,它是一个虚拟的大脑,生命始于一张白纸。在训练阶段,给它一个输入,然后观察输出,之后用微积分来确定大脑参数的变化,使输出更理想,然后进行应用。这个过程不断重复,直到虚拟大脑的实际输出与期望的输出完全相似。

【人工神经网络(ANN)示意图】【人工神经网络(ANN)示意图】

人工神经网络具有学习各种函数的惊人能力(这甚至在理论上得到了证明)。其中一个函数就是“将此文本映射到一些简短的表示(代码),然后将代码更改回文本,以便最终文本尽可能地与初始文本相似”。被训练来学习这种函数的神经网络被称为“自动编码器”。自动编码器可以作为生成式模型:以某种方式在代码空间中获得一个新点(通过随机选择或只是将一些已知点混合在一起),如果模型已经学习了数据的良好表示,那么解码这个点将产生新的文本。

【自动编码器的结构示意图】【自动编码器的结构示意图】

自动编码器的另一个相关用例是异常检测。应用一些数学直觉将使您得出这样的结论:“典型”输入将被自动编码器压缩和重构,并且相对成功,而“非典型”输入的压缩和重构更有可能引入错误。这基本上是出于同样的原因,如果我说“敏捷的棕色狐狸跳过了懒惰的狗”,然后五分钟后让你重复这句话,你可能会成功,但对于“深奥的紫色鸭嘴兽迷惑了多产的猎豹”来说,情况就不一样了。

DeepDNS的工作原理与此相同。通过深入检查子域名,这些子域名被进一步分解成更小的组成部分,它使用它学会的编码-解码过程来对简单的问题——如“这组查询看起来有多正常?”——做出判断。如果重构完全失败,DeepDNS就会得出结论,认为答案“不够正常”,并发出恶意判决。如果忽略训练模型涉及一堆偏导数的部分,那么这种方法的简单性是毋庸置疑的。

挖出并深入研究CoinLoader DNS隧道

既然我们已经大致了解了理论部分,现在是时候付诸实践了。了解了DeepDNS在黑匣子层面的工作原理(甚至是它的一些内部工作原理),很自然地就引出了一个问题:如果我们让它在可用的遥测中搜索异常情况,它能找到什么?Check Point研究人员对此进行了实践,并在样本上运行了DeepDNS。在它标记为异常的许多结果中,研究人员注意到了一组前所未知的域名集群:

  • rqmetrixsdn[.]info
  • candatamsnsdn[.]info
  • mapdatamsnsdn[.]info

仔细观察与这些域名相连的基础设施,可以发现它们是用于CoinLoader感染的DNS备份通道的一部分。

Coinloader样本包含以下几个文件,虽然名称各不相同,但或多或少地代表了每个示例的文件结构。

【CoinLoader文件结构】【CoinLoader文件结构】

可执行文件(图像中的ZD_1.4.24.17)始终是用于DLL附带加载的合法工具。主要的恶意逻辑在侧加载的DLL中(这里是AppleVersions.dll)。加载后,它要经历几层解包,包括一个很好地混淆了的检查,检查它的父进程是从Z-1-36-81目录(同样,目录名称因样本而异)中启动的,该目录隐藏在一些复杂的控制流结构中。

【CoinLoader执行流程】【CoinLoader执行流程】

一旦解包完成,恶意逻辑就可见了。最后阶段仍然包含一些反分析特性,例如花指令(junk code,主要用于干扰);使用简单的替换密码实时解密的加密堆栈字符串;以及使用自制函数表解析的间接调用,其中寄存器(register)指向传递给ecx中每个函数的内容。然后每次将其复制到一个随机寄存器,该寄存器用于实现调用。

【花指令(junk code)用作反分析】【花指令(junk code)用作反分析】

【混淆堆栈字符串】【混淆堆栈字符串】

【使用自制函数表的间接调用】【使用自制函数表的间接调用】

虽然研究人员很好地忽略了junk code,并且通过动态执行代码和观察解码器输出很好地处理了混淆的字符串,但是在IDA数据库中解析函数调用需要专门的脚本。

其中一个样本产生的流量捕获似乎大有所获:

【在CoinLoader执行中捕获的数据包】【在CoinLoader执行中捕获的数据包】

所以我们开始对这个特性进行了技术分析。

函数get_c2_domain接收一个枚举参数(这里在寄存器edx中传递)。值0、1、2和3分别导致函数解密并返回每个恶意软件的硬编码C&C域名——在本例中是rqmetrixa.info、rqmetrixb.info、rqmetrixc.info、rqmetrixd.info。

【“get c2”函数的不同反馈结果】【“get c2”函数的不同反馈结果】

最后,如果此enum值等于4(上面注释为GET_DOMAIN_DNS_TUNNEL_BACKUP),那么恶意软件会诉诸备份计划,并试图通过与一个不同的服务器(rqmetrixsdn.info)协商,通过TXT DNS隧道查询获得域名,如流量捕获中所示。

【DNS TXT查询】【DNS TXT查询】

FQDN是通过获取一个硬编码域并在其前面加上hexlify(md5,时间戳)来创建的。在下图中,我们将其显示为一个代码块,用于过滤掉垃圾指令。

时间戳md5使用SystemFileToFileTime获得(然后使用额外的WinAPI函数转换为时间戳)。一旦服务器响应,它的响应将被馈送到一个内联BASE64解码器。结果被解释为要check in的C&C域,类似于我们前面提到的SUNBURST设置。check in格式是string_decoder去混淆处理程序的输出,如下所示。

【C&C check in的结构】【C&C check in的结构】

结语

DNS隧道是一种可能被称之为“老派”的技术。它起源于第一个防火墙的出现所创造的安全环境,以及简单边界的绘制:谁发起了连接?与谁?在哪个端口?使用什么协议?因此,允许或拒绝。从那以后,这个行业已经有了很大的变化,DNS隧道的好处已经变得不那么明确了。但与此同时,攻击者开始使用各种技术(如隐写术和加密)来改进他们对如何使用HTTP有效通信和隐藏的理解。

不过,DNS隧道显然还没有消亡。攻击者认为这种技术值得一试,现代恶意软件也并不羞于从事这种实践。作为防御者,我们自然会对如何在行动中捕获它感兴趣。在这篇文章中,我们解释了如何将DNS隧道建模为异常,并从不寻常的角度寻找它们——正如DeepDNS所演示的那样。这次搜索让我们找到了一些证据,表明目前仍有很多人在使用这种技术,包括国家支持的网络犯罪分子,甚至黑客活动分子。

作为一个例子,我们对一个Coinlander样本及其隧道协议进行了技术分析,DeepDNS发现它存在异常。除了满足研究目的之外,这也为DeepDNS的能力提供了一个很好的概念证明。

虽然学术界肩负着推动科学边界和证明可能性的重任,但大规模实施学术理念的任务往往落在业界身上,以引导它们沿着“从有希望的白皮书到在混乱的现实世界中实践”的道路前进。如今,业界正在不断努力将人工神经网络应用于该成熟级别的安全,随着最近对人工神经网络及其应用的兴趣激增,相信未来将有越来越多的人工大脑用于做出现实世界的安全决策。

原文链接:

https://research.checkpoint.com/2023/tunnel-warfare-exposing-dns-tunneling-campaigns-using-generative-models-coinloader-case-study/

本文作者:晶颜123, 转载请注明来自FreeBuf.COM


责任编辑:武晓燕 来源: FreeBuf.COM
相关推荐

2014-07-15 09:46:04

2022-12-01 17:23:45

2015-10-19 10:11:50

2023-11-08 07:39:42

2015-10-27 09:55:59

2013-10-21 09:54:23

ISATAP技术网络协议

2010-04-09 16:34:37

无线监控系统

2009-12-28 16:55:25

2011-11-25 13:14:16

2019-02-12 15:39:52

2018-12-13 17:56:31

2023-10-22 11:54:19

2024-01-09 12:05:24

SSH协议端口

2010-06-01 23:16:16

IPv6隧道机制

2023-04-18 23:33:46

分类模型辨别式模型生成式模型

2012-12-03 10:39:28

Intel生态链挑战

2009-12-28 13:52:55

DMVPN网络

2015-09-22 11:18:56

网络虚拟化NVGREVXLAN

2021-01-29 11:43:53

SSHLinux命令

2010-05-24 16:20:32

IPv6隧道技术
点赞
收藏

51CTO技术栈公众号