什么是 DNS 隧道?

DNS 隧道是把数据藏在域名系统查询里传输的方法。因为几乎所有的网络都允许 DNS 查询通过,攻击者可以把要外传的数据编码进域名,发给自己控制的服务器,防火墙往往看不出来。它常被用来在入侵后建立隐蔽通道。

域名系统的作用是把域名翻译成地址。每次上网,设备都会发出大量 DNS 查询,因此绝大多数网络都对 DNS 流量放行,很少逐条检查内容。第 65 期介绍过域名解析会被攻击者盯上,DNS 隧道用的是另一种方式——不是篡改解析结果,而是把 DNS 查询本身当作传输通道。

做法是把要传的数据编码后放进域名里。例如把一段信息的编码拼成一个很长的子域名,向攻击者控制的域名发起查询;这台域名的权威服务器收到查询,就能还原出数据。反过来,服务器也能把指令编码进 DNS 的响应里发回。由于查询和响应看起来都是正常的域名解析,这种传输不容易被识别。

DNS 隧道常出现在入侵的后半程:攻击者已经控制了某台设备,需要一条不易被发现的路来偷传数据或接收指令。2020 年的 SolarWinds 事件里,被植入的恶意代码就用了基于 DNS 的通信。检测这类流量的一个思路是看域名特征——隧道用的域名通常又长又乱、随机性高,和正常域名不太一样。