DNS
DNS is the domain name system.
Getting started
首先我们了解一下 DNS 基本运行过程,我们在访问网络的时候会先将域名转换为 IP 地址,这个过程是由 DNS Client 来进行的,DNS Client 通过 UDP 协议将域名请求打包为 Question 数据包,发送给 DNS Server 服务器,DNS 服务器是一个分布式架构,采用树状结构拓扑,DNS 客户端会将 DNS Question 发送给多个 DNS Server 来获取最先应答的 Answer 结果。
DNS Rebinding
DNS Rebinding 是一种网络攻击技术,它利用 DNS(域名系统)的工作原理来绕过防火墙和其他网络安全设备,实现对目标网络或系统的非法访问。
通常来说,DNS 的基本功能就是将用户可读的域名转换为对应的 IP 地址,这样电脑就能通过 IP 地址找到目标服务器。但是,在 DNS Rebinding 攻击中,攻击者会通过一些特殊的设置,使得同一个域名在不同的时间点可以解析到不同的 IP 地址。
这种攻击的基本步骤大致如下:
-
攻击者设置并控制一个恶意网站(或广告等),并对该网站的 DNS 服务器进行设置,使得该网站的域名初始时解析到一个公网 IP。
-
受害者浏览到这个恶意网站,进行 DNS 查询,得到该公网 IP,并建立连接。
-
在受害者与该网站的交互过程中,网站执行一段 JavaScript 代码,再次发起 DNS 查询。
-
这时,攻击者的 DNS 服务器会返回一个新的 IP 地址,这个 IP 地址是受害者内网中的一个 IP。由于浏览器对同源策略的实施是基于域名而不是 IP 地址,因此这段 JavaScript 代码就获得了与内网目标系统交互的能力。
通过这种方法,攻击者可以绕过一些网络安全设备,直接从受害者的浏览器进入内网进行攻击。这种攻击方法常常被用于窃取内网信息、实施远程控制等。
对于如何防御 DNS Rebinding 攻击,一种方法是在 DNS 服务器上设置一些防护规则,比如限制同一域名在一定时间内只能解析到一个固定的 IP 地址。另一种方法是在浏览器上实施一些防护措施,比如限制 JavaScript 的运行权限等。
DNS 污染
DNS 污染是一个网络审查策略,其目的是阻止用户访问某些被审查的网站。其工作原理是对某些网站的 DNS 请求返回错误的、随机的或者不正确的 IP 地址,从而使得用户无法访问目标网站。下面简要描述 DNS 污染的工作机制:
- 用户发起请求:当用户在其浏览器中输入一个网址,例如
www.example.com
,他的计算机会自动向配置的 DNS 服务器发起一个查询,请求该网址的 IP 地址。 - DNS 拦截:在某些网络环境中,网络中的审查设备会监听这些 DNS 查询请求。当检测到对某些被列为禁止的域名的查询请求时,审查设备会立即响应,而不是让 DNS 服务器正常响应。
- 返回错误的 IP:审查设备会返回一个错误的、随机的或预设的 IP 地址给用户 [1]。有时,这个 IP 地址可能是一个空的或不存在的地址,有时可能是一个告知用户网站被封锁的页面的地址。
- 访问失败或被误导:由于用户得到了错误的 IP 地址,他们的请求会被发送到错误的服务器,导致页面加载失败,或者被重定向到一个完全不同的页面。
这种方法是一种相对简单的网络审查机制,因为它只需要在 DNS 解析阶段干预,而不需要对实际的网络流量进行深入分析。然而,有多种方法可以绕过 DNS 污染,其中一种常见的方法是使用外部的、可靠的 DNS 服务器,例如 Google Public DNS (8.8.8.8 和 8.8.4.4) 或 Cloudflare 的 1.1.1.1,但遗憾的是这并不能完全绕过,也有一些运营商会直接丢弃 Google DNS(8.8.8.8,8.8.4.4) 的 DNS Query 查询请求,来做到 Access Control 的效果。下面我们了解一下 「DNS 劫持」的原理。
DNS 劫持
在某些地区,即使用户尝试使用像8.8.8.8这样的公共DNS服务器,当地的网络运营商或审查机构仍然可以拦截DNS查询请求,并返回污染的结果。这种策略被称为“DNS劫持”或“透明DNS代理”。
- 当用户的设备尝试向8.8.8.8发送DNS查询时,该查询首先会经过他们的ISP。
- ISP的设备可以被配置为识别出向8.8.8.8等知名公共DNS服务器的DNS查询。
- 而不是让查询继续传输到8.8.8.8,ISP会立即拦截并返回一个“污染”的IP地址或他们选择的IP地址。
- 对于终端用户来说,尽管他们认为自己正在使用一个可靠的外部DNS服务器,但实际上他们得到的是被污染的结果。
为了应对这种DNS劫持,用户可能需要采取更进一步的措施。例如:
- 使用VPN:VPN可以加密用户的整个网络连接,包括DNS查询,这样本地ISP就无法识别和拦截特定的DNS请求了。
- 使用 DNS-over-HTTPS (DoH)或DNS-over-TLS (DoT):这些协议提供了加密的DNS查询方式,可以阻止中间人的监听和干预。
- 直接在本地的
hosts
文件中为常用网站设置静态解析,这样就可以完全绕过DNS查询。
然而,值得注意的是,尽管上述方法可以帮助绕过DNS污染和劫持,但它们可能并不总是有效,因为审查机构可能会采取进一步的措施来阻止这些方法,例如阻止VPN流量或封锁VPN服务器的IP地址。
DNS over TLS (DoH / DoT)
DNS over TLS (DoH / DoT) 是一种新的DNS安全协议,它可以加密用户的 DNS 查询请求,阻止中间人的监听和干预。