这年头,连DNS隧道都被玩坏了( 二 )


对DNS载荷的编码是DNS Tunneling的另一个核心技术 。从高层来看,载荷只是客户端和服务器通信的正常流量 。例如客户端发送一个A记录请求给服务器,查询的主机名为
2roAUwBaCGRuc3R1bm5lbGluZwo.test.domain.com,其中
2roAUwBaCGRuc3R1bm5lbGluZwo则是客户端传递给服务器的信息,这串字符解码后的信息便是dnstunneling 。
最后,因为大多数场景下,内网的Client位于防火墙后,Server不可能发起连接 。所以大多数工具,Client会定时向Server发送请求,保证二者之间的通信状态 。
C2通常有两个目的 。首先,它可以充当信标或心跳包,表明他们的远程payload仍在运行(仍然有心跳 ) 因为它正在向服务器发送(通信) 。您可以将基本DNS操作看作一个心跳包的示例 。如果客户端系统上的恶意软件通过DNS反复向攻击者的服务器发送查询,则攻击者可以从日志中判断出肉鸡正在运行 。另一个示例,其中客户端系统受到恶意软件的攻击,该恶意软件正在构建通过DNS发送奇怪外观的查询字符串 。像这样的查询仍然充当心跳指示攻击者他们的payload仍然是活跃的,但是他们还提供关于受害者的一些基本元数据,并且重要的是,如何识别一个受害者 。

这年头,连DNS隧道都被玩坏了

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

文章插图
 
显示了来自DNS服务器应用程序的原始DNS日志的示例,其中包含恶意软件的查询和DNS服务器的响应(在本例中为NXDOMAIN(或不存在域)的行条目 。在某些方面,像这样的日志,或者可能是包含来自它们的解码记录的小型数据库,可以与僵尸网络控制面板进行比较,控制面板允许黑客控制他们的僵尸系统 。
Infiltration,相比之下,无论是代码,命令还是二进制文件删除磁盘和执行可能会容易得多,特别是使用DNS类型的TXT(而不是主机记录类型A) 。
TXT类型旨在提供描述性文本,例如服务详细信息,联系人姓名,电话号码等,以响应对域名的TXT DNS查询 。
下面显示了发送到恶意站点的相同查询,但是,请求和响应上的类型现在是TXT,响应数据包含编码的二进制可执行文件的前300个左右字符 。可以由客户端恶意软件执行 。再次,使用日志,攻击者将能够知道哪个客户端要求Payload 。
这年头,连DNS隧道都被玩坏了

文章插图
 
但是,恶意软件如何知道将类型更改为TXT或何时请求"文本"数据?
在我之前的C2 DNS通信示例中,来自DNS服务器的响应是NXDOMAIN 。此消息显然会到达客户端系统(和恶意软件),并且可以用于Payload的消息或指令 。
NOERROR,该术语暗示一切正常 – 您的请求已得到处理并且答案等待着您 。使用NOERROR可以处理响应 。通常这是IPv4(用于A类型请求)或IPv6(用于AAAA类型请求)或者它可以是TXT 。一个简单的例子 – IPv4地址响应 – 恶意软件不需要实际的IP与之通信,不像您的浏览器询问"google [ 。] com在哪里?" 。
恶意软件已使用C2 over DNS与其目的地进行通信 。恶意软件可以使用IP响应的是4,294,967,296个命令或指令中的任何一个 。同样这个非常简单,IP的第 4 个八位字节中的特定值(例如100)可能指示恶意软件向行动者的域发送TXT DNS查询以收集和执行Payload 。第一个八位字节中的值10可能意味着从操作系统和事件日志中卸载并擦除Payload的痕迹 。从字面上看,选项是无穷无尽的,可能的复杂程度也是如此 。鉴于攻击者可以控制DNS服务器,并且某些DNS服务器应用程序或守护进程具有高度可配置性,因此可以根据从他们发送的请求将条件响应发送回受害者系统上的恶意软件 。例如,如果传入查询包含某个标志(字符)作为域名的第一个子域,则可以由在服务器上的DNS服务内运行的程序读取,并向客户端提供自定义响应 。这可以用于恶意软件自动处理一组任务,并相应地向受害者报告以接收他们的下一个任务 。


推荐阅读