关于DNS隧道技术的滥用调查

在本报告中,我们将介绍基于DNS的数据过滤和渗透的类型,方法,并提供了一些防御机制。

DNS

DNS使用端口53,你几乎可以在任何系统,防火墙和客户端上打开并进行DNS查询。这些查询使用UDP协议,而不是TCP协议,所以它与TCP等效查询具有更低的延迟,带宽和资源。但是UDP没有错误或流量控制功能,也没有任何完整性检查以确保数据完好无损。所以互联网如何保证用户浏览网页,使用应用,聊天可靠呢?比如如果在一个实例中UDP DNS查询失败,大多数系统将在多次失败之后,可能切换到TCP; 如果DNS查询超出UDP数据报大小的限制,则也使用TCP 。下面的图1说明了DNS如何运行的基本过程:客户端使用特定类型发送查询字符串(例如,在这种情况下为mail.google [。] com) – 通常为主机地址的A. 我已经跳过了中间DNS系统可能必须确定’.com’存在的部分,然后找出可以找到’google [。] com’的位置。

如果您想深入了解DNS的工作原理 – 从您键入密钥以拼写您想要浏览的域名 – 请阅读本文。

数据踪迹

一般我们上网,无论是从搜索引擎结果转移还是直接访问网站,都会留下DNS查询痕迹。留下的多少取决于操作系统,DNS服务器(特别是启用了扩展或调试日志记录的服务器)可以收集关于请求和客户机请求的整个主机信息。这篇文章介绍可以从DNS服务器日志中收集的信息类型的一些想法; 操作此类服务器的管理员获取远程IP发送请求 – 尽管这可能是最后一跳或DNS服务器的IP,而不是确切的请求客户端的IP – 以及查询字符串本身,以及来自服务器的响应。

DNS隧道

现在我们对DNS有了一些认识,以及它在网络中的运行方式以及服务器端跟踪功能,让我们深入了解一下隧道功能。在本节中,我们将描述命令和控制(C2)信标如何在DNS上运行,以及如何实现数据的过滤和渗透。

C2

C2通常有两个目的。首先,它可以充当信标或心跳包,表明他们的远程payload仍在运行(仍然有心跳 ) 因为它正在向服务器发送(通信)。您可以将基本DNS操作(如上面的图1所示)看作一个心跳包的示例。如果客户端系统上的恶意软件通过DNS反复向攻击者的服务器发送查询,则攻击者可以从日志中判断出肉鸡正在运行。下面图2所描述的另一个示例,其中客户端系统受到恶意软件的攻击,该恶意软件正在构建通过DNS发送奇怪外观的查询字符串。像这样的查询仍然充当心跳指示攻击者他们的payload仍然是活跃的,但是他们还提供关于受害者的一些基本元数据,并且重要的是,如何识别一个受害者。

用户名和主机名可能并不能识别主机,但是系统确实具有通用唯一标识符(UUID)或其他属性,这些属性在组合时可以为创建唯一标识符。受感染主机的一些元数据可以作为纯文本发送,但对于在DNS查询中看到此类字符串的任何人来说,乍一看似乎更可疑。在许多情况下,数据将包含DNS不支持的字符,在这种情况下将需要编码。在图2中,您可以看到元数据的base64编码等效项,它使用“ – ”分隔符号构造,用于在服务器端进行简单的解析和解码,如下面的图3所示。

图3显示了来自DNS服务器应用程序的原始DNS日志的示例,其中包含恶意软件的查询和DNS服务器的响应(在本例中为NXDOMAIN(或不存在域)的行条目。在某些方面,像这样的日志,或者可能是包含来自它们的解码记录的小型数据库,可以与僵尸网络控制面板进行比较,这些控制面板允许黑客控制他们的僵尸系统。

Exfiltration

那么,还有什么可以在DNS查询中发送?好吧,理论上的任何东西,只要它编码正确并且不滥用UDP大小限制。解决后一种约束的方法可能是发送多条A记录消息,并在服务器端以某种方式将它们拼接在一起。与确保重传失败包的TCP不同,UDP没有这样的机制。需要一种算法来理解将发送多少消息,并检查正确的消息到达的数量,但比这更复杂的是,以某种方式要求客户机重新传输某些数据段,直到100%到达为止。根据要传输的数据量(例如,系统上的每个PDF),可能需要花费很长时间,而且对于网络管理员来说非常可疑。

Infiltration

相比之下,无论是代码,命令还是二进制文件删除磁盘和执行可能会容易得多,特别是使用DNS类型的TXT(而不是主机记录类型A)。

TXT类型旨在提供描述性文本,例如服务详细信息,联系人姓名,电话号码等,以响应对域名的TXT DNS查询。

下面的图4显示了发送到恶意站点的相同查询,与如图2一样的,但是,请求和响应上的类型现在是TXT,响应数据包含编码的二进制可执行文件的前300个左右字符。可以由客户端恶意软件执行。再次,使用日志,攻击者将能够知道哪个客户端要求Payload。

但是,恶意软件如何知道将类型更改为TXT或何时请求“文本”数据?

在我之前的C2 DNS通信示例中,来自DNS服务器的响应是NXDOMAIN。此消息显然会到达客户端系统(和恶意软件),并且可以用于Payload的消息或指令。

NOERROR,该术语暗示一切正常 – 您的请求已得到处理并且答案等待着您。使用NOERROR可以处理响应。通常这是IPv4(用于A类型请求)或IPv6(用于AAAA类型请求)或者它可以是TXT,如上面的图4所示。一个简单的例子 – IPv4地址响应 – 恶意软件不需要实际的IP与之通信,不像您的浏览器询问“google [。] com在哪里?”。

恶意软件已使用C2 over DNS与其目的地进行通信。恶意软件可以使用IP响应的是4,294,967,296个命令或指令中的任何一个。同样这个非常简单,IP的第 4 个八位字节中的特定值(例如100)可能指示恶意软件向行动者的域发送TXT DNS查询以收集和执行Payload。第一个八位字节中的值10可能意味着从操作系统和事件日志中卸载并擦除Payload的痕迹。从字面上看,选项是无穷无尽的,可能的复杂程度也是如此。鉴于攻击者可以控制DNS服务器,并且某些DNS服务器应用程序或守护进程具有高度可配置性,因此可以根据从他们发送的请求将条件响应发送回受害者系统上的恶意软件。例如,如果传入查询包含某个标志(字符)作为域名的第一个子域,则可以由在服务器上的DNS服务内运行的程序读取,并向客户端提供自定义响应。这可以用于恶意软件自动处理一组任务,并相应地向受害者报告以接收他们的下一个任务。

结论

DNS是非常强大的工具,几乎可以在任何地方使用,允许应用程序和系统查找与之交互的资源和服务。DNS提供了一个通信基础,使更高级别和更强大的协议能够运行,但从安全角度来看,这可能意味着它被忽略,特别是当您考虑通过电子邮件协议传送多少恶意软件或使用HTTP从Web下载时。出于这些原因,DNS是黑客的完美选择,以利用来自受感染主机的通信。Unit 42已经看到多个恶意软件实例及其背后的参与者滥用DNS以实现其目标,如本报告所述。无论是使用Palo Alto Networks的安全操作平台还是开源技术,组织都可以通过多种不同的方式保护自己免受DNS隧道攻击。

防御可以采取许多不同的形式,例如但不限于以下内容:

1.根据已知声誉或感知危险阻止域名(或IP或地理定位区域);
2.关于“strange looking”DNS查询字符串的规则;
3.有关出站或入站DNS查询的长度,类型或大小的规则;
4.客户端操作系统的一般强化,并了解名称解析功能及其特定搜索顺序;
5.用户和/或系统行为分析,可自动发现异常情况,例如访问的新域,尤其是访问方法和频率异常时。

*参考来源: unit42 ,FB小编周大涛编译,转载请注明来自FreeBuf.COM