首页
论坛
专栏
课程

[翻译]DNS 隧道滥用

2019-6-2 17:44 2291

[翻译]DNS 隧道滥用

2019-6-2 17:44
2291
原文链接:https://unit42.paloaltonetworks.com/dns-tunneling-how-dns-can-be-abused-by-malicious-actors/
翻译:看雪翻译小组

在某些情况下,恶意攻击者可利用域名服务(DNS)上的命令和控制(C2)通信通道,甚至使用协议来过滤数据。这超出了C2“心跳”连接的通信能力。恶意攻击者还通过DNS向受害者系统渗透恶意数据/有效载荷。Unit 42的多年研究发现了多种类型DNS通道的滥用。

 

DNS是关键和基础的互联网协议——通常被描述为“互联网电话簿”——将域名映射到IP地址,如协议的核心rfc中所描述的。DNS的普遍存在(以及经常缺乏检查)使非常优雅的非常优雅方法的方法成为可能,但这常常违背了协议的初衷。

 

除了前面提到的DNS使用示例之外,还有一些工具可以使攻击者通过DNS创建隐蔽通道,以便隐藏通信或绕过网络管理员设置的策略。一个流行的用例是使用经常打开的可用DNS来绕过酒店、咖啡馆等Wi-Fi连接注册。最值得注意的是,这些工具在GitHub等网站上是免费的,而且使用起来很容易。有关这些工具的更多信息可以在本报告末尾的附录部分中找到。

 

在本报告中,我们介绍了各种基于DNS的数据渗透(进入和输出)的类型、方法和使用,并提供了一些针对性的防御指南。

DNS

使用在系统、防火墙和客户机上DNS几乎总是从端口53来传输DNS查询。这些查询使用用户数据报协议(UDP),而不是更熟悉的传输控制协议(TCP),因为与TCP等价的查询相比,它有更低的延迟、带宽和资源使用。UDP没有错误或流控制功能,也没有任何完整性检查来确保数据完整地到达。

 

那么,互联网的使用(浏览、应用、聊天等)怎么会这么可靠呢?如果UDP DNS查询在第一个实例中失败(毕竟这是一个“尽力”协议),大多数系统将重试许多次,并且只有在多次失败之后,才可能在重试之前切换到TCP;如果DNS查询超过UDP数据报大小的限制,也可以使用TCP——DNS通常是512字节,这可以依赖于系统设置。

 

下面的图1演示了DNS操作的基本过程:客户机发送一个查询字符串(例如mail.google[.]com 在这种情况下)与一个特定的类型-通常为一个主机地址。我跳过了中间DNS系统在找到mail.google[.]com之前,必须在找到'.com'存在于何处的部分。

 

一旦域名被解析为IP,缓存也会有所帮助:解析后的域名到IP通常在本地系统(可能在中间DNS服务器上)上缓存一段时间。然后,从同一客户机对相同域名的后续查询不会离开本地系统,直到所述缓存过期。当然,一旦知道了远程服务的IP地址,应用程序就可以使用这些信息来启用其他基于tcp的协议,比如HTTP,来完成它们的实际工作,例如确保可靠地与您的同事来共享cat GIF。

 

因此,总而言之,来自组织网络的几十个额外UDP DNS查询将相当不引人注目,并可能暗藏着指向攻击者的恶意负载;还可以轻松地将命令传送到请求应用程序来进行处理。

 

如果您想深入了解DNS的工作原理——从您键入关键字来拼写要浏览的域名——那么请阅读本文。

数据路径

正如您在浏览internet时一样,无论是从搜索引擎结果转出还是直接访问网站URL,您的DNS查询也会留下痕迹。此查询的跟踪程度在很大程度上取决于查询从离开操作系统到接收结果IP地址的整个过程中涉及的中间节点和进程。

 

使用一些基本示例只关注服务器端来看,DNS服务器(特别是启用了扩展或调试日志记录的服务器)可以收集关于请求和客户机请求的整个主机(没有双关语)信息。

 

本文讨论了可从DNS服务器日志中收集信息的一些想法;在服务器上获得这种操作的攻击者将获得发送请求的远程IP(尽管这可能是最后一跳或DNS服务器的IP,而不是确切的请求客户机的IP)以及查询字符串本身,以及来自服务器的任何响应。

DNS隧道

既然我们已经对DNS、它在网络中如何运行以及服务器端跟踪功能有了一个共同的理解,那么让我们更深入地研究一下隧道功能。在本节中,我们将描述如何在DNS上运行命令和控制信道(C2),以及如何实现数据的过滤和渗透。

C2

C2信道通常为攻击者提供两个功能。首先,它可以充当信标或心跳,表明远程有效负载仍然在运行—仍然有心跳—因为它正在发送信标(通信)到服务器。

 

您可以将基本DNS操作(如上面的图1所示)视为心跳的一个示例。如果客户上的恶意植入通过DNS基础设施反复向参与者的服务器发送查询,参与者可以从日志中判断恶意软件正在运行。困难的是如何区分感染了恶意代码的的多个受害者。

 

考虑下面图2所描述的另一个示例,其中客户机系统受到恶意软件的攻击,恶意软件正在构造看起来很奇怪的查询字符串,以便通过DNS发送。像这样的查询仍然作为一个心跳,向对手表明它们的有效负载仍然是活动的,但是它们也提供了一些关于受害者的基本元数据,重要的是,提供了一些方法来惟一地识别一个受害者。

 

 

用户名和主机名可能并不总是惟一的,一些ip可以使用网络地址转换(Network Address Translation, NAT)跨多个网络复制,但是系统确实具有通用惟一标识符(Universal unique identifier, uuid)或其他属性,当它们组合在一起时,可以为给定的主机或受害者创建惟一标识符。

 

受攻击主机的一些元数据可以以明文形式发送,但对于在DNS查询中看到此类字符串的任何人来说,乍一看可能更可疑。在许多情况下,数据将包含DNS不支持的字符,在这种情况下需要编码。在图2中,您可以看到对应于元数据的base64编码,它是使用'-'分隔符号构造的,用于在服务器端进行简单的解析和解码,如下面的图3所示。

 

图3显示了来自DNS服务器的原始DNS日志的示例,其中包含恶意代码的查询和DNS服务器的响应,在本例中为NXDOMAIN(或不存在域)的行条目。

 

在某些方面,像这样的日志,或者一个包含解码记录的小型数据库,可以与看起来更时髦的僵尸网络控制面板相比较,后者允许僵尸网络牧人控制他们的僵尸节点。

 

那么,DNS查询中还可以发送什么?好吧,可以发送的是理论上任何被正确编码,不超过UDP大小限制的消息。解决后一种约束的方法是发送多个A记录消息,并在服务器端以某种方式将它们拼接在一起。然而,丢失和丢掉数据报会出现并发问题。

 

与确保重传失败包的TCP不同,UDP没有这样的机制。需要一种算法来理解将发送多少消息,并检查正确的消息到达的数量,但比这更复杂的是,以某种方式要求客户机重新传输某些数据段,直到100%到达为止。根据要传输的数据量(例如,系统上的每个PDF),可能需要花费很长时间,而且对于网络管理员来说非常可疑。

 

相比之下,渗透数据无论是代码,命令,释放或执行二进制文件可能会容易得多,尤其是使用TXT类型的DNS(而不是主机记录类型)。TXT类型被设计用来提供描述性的文本,如服务细节,联系人的名字,电话号码等,以应对TXT DNS查询域名。

 

猜猜什么看起来像文本?base64编码的非文本数据!下面的图4显示了相同的查询发送到恶意网站在图2中,不过,现在是三种类型的请求和响应,和响应数据包含的前300名左右的字符编码的二进制可执行文件,可以通过客户端执行恶意软件。同样,使用日志,对手将能够知道哪个客户机请求有效负载,以及有效负载已经发送(谁知道它是否真的到达了……)。

 

图4

 

但是恶意植入如何知道将类型更改为TXT,或者何时请求“文本”数据中的内容?做法是将代码嵌入到到载荷中,以便在执行的某个点或一定时间后查询,但实际上,它将使用由actor驱动的C2通道第二个目的--控制。

 

在我前面的C2 DNS通信示例中,来自DNS服务器的响应是NXDOMAIN。这条消息显然到达了客户端系统(和恶意软件),这可以作为有效载荷的消息或指令,但是由于缺少参数和细节,它是有限制的。输入NOERROR。

 

NOERROR,正如这个术语所暗示的那样,意味着一切都很好——您的请求已被处理,一个答案正发送给您。带有NOERROR的响应可以被处理。通常这是IPv4(用于类型请求)或IPv6(用于AAAA类型请求),也可以是TXT,如上面的图4所示。来看一个简单的例子——IPv4地址响应——恶意软件不需要一个实际的IP来与之通信,不像您的浏览器询问“where is google[.]com at?”。恶意软件已经通过DNS使用C2与目标通信。

 

恶意软件可以使用IP响应来执行4,294,967,296个可能的命令或指令中的任意一个。同样,保持这个非常简单,有可能在IP的第4八位中有一个特定的值,比如100,指示恶意软件发送TXT DNS查询到参与者的域,以收集和执行有效负载。第一个八位组中的值10可能意味着从操作系统和事件日志中卸载和清除恶意负载的跟踪。从字面上看,选项是无穷无尽的,可能的复杂程度也是如此。

 

考虑到攻击者已经控制了DNS服务器,并且某些DNS服务器的应用或守护进程是高度可配置的,可以根据受害者系统发送的请求将一定条件下的响应发送回恶意软件。

 

例如,如果传入查询包含某个标志(字符)作为域名的第一个子域名,则可以由服务器上DNS服务内部运行的程序读取它,并向客户机提供自定义响应。这可以用于恶意软件自动完成一组任务,并相应地向参与者报告以接收他们的下一个任务。

结论

DNS是一个非常强大的工具,几乎在任何地方都可以使用,它允许应用程序和系统查找与可交互的资源和服务。DNS提供了一个通信基础,以来支持更高级别和更强大的协议,但它的安全性一直处于被忽略的境地,特别是当看到多少恶意软件是通过电子邮件协议来传播时,或者使用HTTP从web下载的时候。

 

由于这些原因,对于那些针对一种开放的、常常被忽视、甚至可能被低估的协议的攻击者来说,DNS是一个完美的选择。Unit 42已经看到了多个恶意软件实例和它们背后的参与者通过滥用DNS来达到他们的目标,正如本报告中所讨论的。

 

各组织可以通过许多不同的方式保护自己免受DNS隧道的侵害,无论是使用Palo Alto Networks的安全操作平台,还是使用开源技术。防御可以采取许多不同的形式,包括但不限于以下几种方式:
1.基于已知的声誉或感知到被禁止的危险域名(或ip或地理位置区域);
2.围绕“随机字符串”DNS的查询;
3.关于出站或入站的DNS查询的长度、类型或大小的规则;
4.全面加强客户操作系统,并了解DNS解析功能及其特定的搜索顺序;
5.自动发现异常的用户和分析系统行为,例如正在访问的新域名,特别是当访问方法和频率异常时。
5.帕洛阿尔托网络公司(Palo Alto Networks)最近推出了一项新的DNS安全服务,专注于阻止对恶意域名的访问。

 

进一步的信息也可以在Mitre网站上的ATT&CK框架文档中找到。具体来说,以下技术与本报告中讨论的概念有关。

 

#附录 使用到的工具和使用到的恶意软件见原文网站。



[推荐]看雪企服平台,提供安全分析、定制项目开发、APP等级保护、渗透测试等安全服务!

上一主题 下一主题
最新回复 (3)
岁月别催 2019-6-3 10:41
2
0
https://bbs.pediy.com/thread-250230.htm
icesnowwise 6天前
4
0
这和利用dns隧道绕过校园网认证是差不多的,这些人还是会玩。
游客
登录 | 注册 方可回帖
返回