我最近观看了一个渗透测试网络研讨会,其中演示了 DNS 隧道攻击。在网络研讨会的问答部分,有人问如何防止这种隧道。建议是不允许内部 DNS 服务器解析外部地址,并通过代理运行所有此类外部解析。有人能解释一下为什么这会阻止隧道吗?如果客户端正在运行某个程序,该程序会将带有隐藏有效负载的精心设计的 DNS 数据包发送到代理,那么它最终会到达相关的 DNS 服务器并通过代理返回给客户端吗?
答案1
简短回答:应用程序感知代理能够以协议智能的方式分析数据包的内容,并可以确定通过的重组数据包的有效负载是否符合该协议的数据结构。因此,如果您尝试在 DNS 段中隧道传输 HTTP 数据(例如),代理就会知道。
答案2
代理可以做的另一件事(或者说如果我担心隧道,我会做的事情 - 而且不需要代理 - 只需要一个像样的路由器)是简单地严格限制端口 53 上的流量。这不会完全阻止隧道,但会大大降低其效用。(例如,允许在 120 秒间隔内传输 100kbit 的数据。这相当于每秒的最大吞吐量小于 100 字节,因此您无法从此连接获取大量数据)