首页
社区
课程
招聘
[翻译]DNS 隧道: DNS怎样被恶意软件利用
2019-3-20 16:40 8554

[翻译]DNS 隧道: DNS怎样被恶意软件利用

2019-3-20 16:40
8554

DNS 隧道: DNS怎样被恶意软件利用

 

恶意软件作者利用域名服务搭建命令控制(C2)通信隧道,一些情况下,也利用DNS协议进行数据泄露。这已经超出了命令控制(C2)执行“心跳”连接的通信范畴。恶意软件作者还通过DNS协议将恶意数据或者恶意载荷渗透到受害者系统,并且,在过去几年中, Unit 42研究组还披露了已经发现的不同类型的滥用行为。

 

正如协议RFC所述,DNS是互联网的关键和基础协议 , 通常被描述为“互联网电话簿” ,DNS协议将域名映射到IP地址以及更多。DNS的无处不在且缺乏审查。DNS协议可以实现非常优雅和微妙的方法来进行通信和共享数据,这些功能超越了协议设计的初衷。

 

除了上面已经提到的DNS协议使用示例之外,还存在许多DNS工具,它们可以使攻击者通过DNS协议创建隐蔽通道,进行隐匿通信或绕过网络管理员实施的安全策略。一个流行的用例是使用开放和可用的DNS绕过酒店,咖啡馆等公共产场所Wi-Fi连接注册。最值得注意的是,这些工具可以在GitHub等地方免费在线获取,并且易于使用。 有关这些工具的更多信息,请参见本报告末尾的附录部分。

 

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

DNS

DNS协议使用53端口。53端口几乎总是在系统,防火墙和客户端上打开以传输DNS查询。 这些查询使用用户数据报协议(UDP)传输,而不使用更熟悉的传输控制协议(TCP)。UDP与TCP等效查询相比具有低延迟,低带宽和资源使用率高。 UDP没有错误或流量控制功能,也没有任何完整性检查以确保数据完好无损。

 

互联网如何使浏览网页,应用程序,聊天程序等如此可靠呢? 如果在第一个实例中UDP DNS查询失败(毕竟这是一个尽力而为的协议),大多数系统将重试多次并且仅在多次失败之后,可能在再次尝试之前切换到TCP; 如果DNS查询超出UDP数据报大小的限制,则也使用TCP, 对于DNS通常为512字节,但可能取决于系统设置。

 

下面的图1说明了DNS如何运行的基本过程:客户端使用特定类型发送查询字符串(例如,在本例子中为mail.google [.] com),通常类型为A. 我已经跳过了中间DNS系统,中间DNS系统先确定域名'.com'分,然后再找出'google [.] com'的位置,以此类推。

 

 

​ 图1 简化的DNS通信

 

一旦将域名解析为IP缓存也是有帮助的:解析得到的名称到IP的映射表通常在存储在本地系统(可能在中间DNS服务器上)并缓存一段时间。 对于同一客户端的相同域名的后续查询在本地系统使用如上所述的高速缓存,直到映射表到期为止。 当然,一旦知道远程服务的IP地址,应用程序就可以使用该信息来启用其他基于TCP的协议(例如HTTP)来完成其实际工作,例如确保可以与您的同事可靠地共享猫咪GIF图片。

 

总而言之,来自组织网络的很多UDP DNS查询将相当不明显,并且可能允许恶意有效载荷向对手发出信号; 命令也可以被请求的应用程序接收到,使网络管理员很难处理。

 

如果您想深入了解DNS的工作方式 ,请阅读本文

数据踪迹

就像您浏览互联网一样,无论是从搜索引擎结果转移还是直接访问网站URL,您的DNS查询也会留下痕迹。 跟踪的多少取决于从离开操作系统的查询到接收结果IP地址的过程中涉及的系统和过程。

 

仅关注服务器端,并且使用一些基本示例,我们就能够知道,DNS服务器(尤其是启用了扩展或调试日志记录的DNS服务器)可以收集有关整个主机请求的信息,以及请求该服务器的信息。

 

Microsoft的一篇文章提供了可以从DNS服务器日志中收集的信息类型的一些想法; 操作此类服务器的对手能够获取远程IP发送请求 ,尽管这可能是最后一跳或DNS服务器的IP,而不是确切的请求客户端的IP, 以及查询字符串和自服务器的响应。

DNS 隧道

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

C2

C2信道通常为敌人提供两个目的。 首先,它可以充当信标或心跳,表明他们的远程有效负载仍在运行 ,仍然有“心跳”- 因为它正在向服务器发送数据。

 

您可以将简化的DNS通信(如上面的图1所示)视为心跳的示例。 如果客户端系统上恶意植入载荷通过DNS基础设施反复向恶意软件控制端的服务器发送查询,则恶意软件控制者可以从日志中判断出恶意植入载荷正在运行。这使得在众多感染主机中区分恶意植入载荷变得困难。

 

考虑下面图2所描述的另一个示例,其中客户端系统受到恶意软件的攻击,该恶意软件正在构建通过DNS发送奇怪外观的查询字符串。 像这样的查询仍然充当心跳指示敌人他们的恶意载荷仍然是活跃的,但是他们还提供关于受害者的一些基本元数据,并且更重要的是,其提供了唯一地识别一个受害者的方式。

 


​ 图2 C2 DNS查询通信的例子

 

用户名和主机名可能并不总是唯一的,并且由于使用网络地址转换(NAT)机制,在多个网络中会出现重复的IP地址。但是系统确实可以使用通用唯一标识符(UUID)或其他属性,或者这些属性组合在一起来创建唯一标识符,以此来给主机或受害者命名。

 

来自受感染主机的一些元数据可以作为纯文本发送,但对于在DNS查询中看到此类字符串的任何人来说,乍一看似乎非常可疑。 在许多情况下,数据将包含DNS不支持的字符,在这种情况下需要将数据编码。 在图2中,您可以看到元数据的base64编码等效项,它使用“ - ”分隔符号构造,用于在服务器端进行简单的解析和解码,如下面的图3所示。

 

 

​ 图3 服务端DNS日志追踪C2通信

 

图3显示了来自DNS服务器应用原始DNS日志的示例,其中包含恶意软件查询和DNS服务器响应的记录。图3例子中显示没有找到相关的域名。

 

在某些方面,像这样的日志,或者可能是包含来自它们的解码记录的小型数据库,能够将其更加时髦的僵尸网络控制面板进行比较。这些僵尸网络控制面板允许僵尸网络牧民控制他们的僵尸受害者系统。

数据泄露

那么,还有什么可以在DNS查询报文中发送呢? 理论上的任何数据都可以发送,只要它编码正确并且DNS报文不超过UDP报文大小限制。 解决后一种约束的方法是发送多条A类型记录消息,并在服务器端以某种方式将它们拼接在一起。 然而,在UDP数据报丢失或缺失时会出现问题。

 

与拥有重发机制的TCP协议不同,UDP没有这种机制。 将需要一种算法来计算需要发送多少消息,并检查正确的数字到达,但是比这更复杂的,是以某种方式确认客户端再次重新传输数据的某些段直到100%到达。 根据要传输的数据量(例如,系统上的每个PDF)传输可能需要一定时间,这对网络管理员来说非常可疑。

数据渗透

相比之下,数据的渗透(无论是代码、命令或二进制文件)可以更轻易地存储到磁盘上并执行,特别是使用DNS类型的TXT(而不是主机记录类型A)。TXT类型旨在提供描述性文本,如服务详细信息、联系人姓名、电话号码等,以响应TXT DNS对域名的查询。

 

猜猜看,什么是看起来像文字的东西? Base64编码的非文本数据! 下面的图4显示了发送到恶意站点的相同查询,如图2所示。但是,请求和响应上的类型现在是TXT,响应数据包含Base64编码的二进制可执行文件的前300个左右字符。 可以由主机恶意软件执行。 再次,使用日志,攻击者将能够知道哪个主机请求恶意载荷,并且发送恶意载荷(谁知道它是否真的到达了......)。

 


​ 图4 C2 DNS查询报文和TXT类型响应报文的例子

 

但是,恶意载荷如何知道将类型更改为TXT或何时请求“文本”数据中的内容? 在其执行过程中,它可以内置到有效载荷中,以便在某个时间发送查询请求,或在一段时间之后进行查询。但实际上,它将由恶意软件使用者进行驱动,以便达到如上的第二个目的——控制。

 

在我之前的C2 DNS通信示例中,来自DNS服务器的响应是NXDOMAIN。 此消息显然会到达客户端系统(和恶意软件),并且可以用于恶意负载传输消息或指令,但它的限制是没有参数和细节。 输入NOERROR。

 

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

 

恶意软件可以使用IP响应是4,294,967,296个可能命令或指令中的任何一个。 同样,简单的使用IP的第四个八位字节中的特定值(例如100),可能指示恶意软件向恶意软件攻击者的域发送TXT类型 DNS查询以收集和执行有效载荷。使用 第一个八位字节中的特殊值值10,可能意味着从操作系统和事件日志中卸载并擦除恶意负载的痕迹。 从字面上看,选项是无穷无尽的,其复杂程度也是如此。

 

鉴于攻击者可以控制DNS服务器,并且某些DNS服务器应用或守护进程具有高度可配置性,因此可以根据从他们发送的请求将条件响应发送回受害者系统上的恶意软件。

 

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

结论

DNS是一种非常强大的工具,几乎可以在任何地方使用,允许应用程序和系统查找与之交互的资源和服务。 DNS提供了一个通信基础,能够使更高级别和更强大的协议运行,但是从安全角度来看,这可能意味着它被忽视,特别是当您考虑这样一个问题时,即有多少恶意软件是通过电子邮件协议传送的,或使用HTTP协议从Web下载的。

 

DNS协议总是开放的,且容易被忽视和低估。出于这些原因,DNS是攻击者寻求加以利用,来与受感染主机通信的完美选择。Unit 42已经观察到多个恶意软件实例及其背后的攻击者滥用DNS以实现其目标,如本报告之前所述。

 

无论是使用Palo Alto Networks的安全操作平台还是开源技术,组织都可以通过多种不同的方式保护自己免受DNS隧道攻击。防御可以采取许多不同的形式,例如但不限于以下内容:

  • 根据已知情报(IP地址或地理定位区域)阻断相关域名
  • 对“看起来奇怪”的DNS请求建立规则
  • 对有关出站或入站DNS查询的长度,类型或大小等建立规则;
  • 对客户端主机进行一般性安全加固,理解自治域中域名解析功能和特定搜索顺序
  • 对用户和(或)系统行为进行分析,可自动发现异常情况,例如访问新域时,尤其是访问方法和频率异常时

更多信息也可以在Mitre网站上的ATT&CK框架文档中找到。 具体而言,以下技术涉及本报告中讨论的概念。

ID 使用技术
T1048 转换传输协议数据泄露技术
T1320 数据隐匿技术
T1094 k客户端命令控制协议

附录:工具列表

工具名称 描述
dns2tcp dns2tcp由Olivier Dembour和Nicolas Collignon编写。 它是用C语言编写的,可以在Linux上运行。 客户端可以在Windows上运行。 它支持KEY和TXT请求类型。[4]
tcp-over-dns tcp-over-dns(TCP-over-DNS)于2008年发布。它有一个基于Java的服务器和一个基于Java的客户端。 它可以在Windows,Linux和Solaris上运行。 它支持LZMA压缩以及TCP和UDP流量隧道。[4]
OzymanDNS OzymanDNS是由Dan Kaminsky在2004年用Perl编写的。它用于通过DNS设置SSH隧道或进行文件传输。 请求是base32编码的,响应是base64编码的TXT记录。[4]
iodine iodine是一个DNS隧道程序,于2006年首次发布,最近更新于2010年。它由Bjorn Andersson和Erik Ekman开发。 iodine是用C语言编写的,它可以在Linux,Mac OS X,Windows等上运行。 iodine被移植到Android。 它在端点上使用TUN或TAP接口。[4]
SplitBrain SplitBrain是OzymanDNS的变种。
DNScat-P / dnscat2 DNScat(DNScat-P)最初于2004年发布,最新版本于2005年发布。它由Tadeusz Pietraszek撰写。 DNScat是一种“瑞士军刀”工具,有许多用途,涉及通过DNS进行双向通信。 DNScat是基于Java的,可以在Unix系统上运行。 DNScat支持A记录和CNAME记录请求(Pietraszek,2004)。 由于有两个名为DNScat的实用程序,因此本文中将其称为DNScat-P,以区别于其他实用程序。[4]
DNScapy DNScapy由Pierre Bienaime开发。 它使用Scapy进行数据包生成。 DNScapy支持通过DNS进行SSH隧道,包括Socks代理。 它可以配置为CNAME类型或TXT类型记录或两者随机使用。[4]
TUNS TUNS是一个IP over DNS隧道,由Lucas Nussbaum开发,用Ruby编写。 它不使用任何实验或很少使用的记录类型。 它仅使用CNAME记录。 它使用140个字符的MTU来匹配DNS请求中的数据。 TUNS可能更难以检测,但它会带来性能成本。
PSUDP PSUDP由Kenton Born开发。 它通过修改IP / UDP长度,将数据注入到现有DNS请求。 它要求参与隐蔽网络的所有主机将其DNS请求发送到Broker服务,Broker该服务保存特定主机的消息,直到DNS请求来自该主机。 然后发送响应消息。
Your Freedom 适用于Windows,Mac OSX,Linux和Android的HTTPS 、UDP 、 FTP 、 DNS 、 ECHO VPN隧道解决方案。 绕过代理并匿名访问Internet。
Hexify Infoblox公司开发的一种工具,用于DNS隧道的渗透测试。

附录:恶意软件列表

恶意软件名称 描述
DNS_TXT_Pwnage 一种能够从DNS协议TXT类型请求中收取命令和Power Shell脚本的后门。
DNSMessenger 一种远程访问木马,能够建立后门,以便黑客远程控制受感染计算机。
OilRig – BONDUPDATER 一种针对中东地区政府机构的木马,在DNS隧道中使用A类型和TXT类型记录与C2服务器通信。
 

By Alex Hinchliffe

 

原文地址


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞1
打赏
分享
最新回复 (1)
雪    币: 19586
活跃值: (60163)
能力值: (RANK:125 )
在线值:
发帖
回帖
粉丝
Editor 2019-3-20 18:32
2
0
感谢分享~
游客
登录 | 注册 方可回帖
返回