名词解释:
ISP:提供互联网接入服务的公司或组织,就是「联通、移动」
DNS 缓存:DNS 服务器上存储的 DNS 查询结果
人物介绍:
Alice:攻击者;
Bob:内容提供者;
Alice:访问者;
数据都是真实的吗?
Alice 想访问 Bob 的网站,她在浏览器里输入了 Bob 的网址。过了几秒,就出来一个网页。
可是,这个网页真的 Bob 的网站么?有可能是,也有可能不是。
Trudy 可以截 Alice 发出的所有数据包,看看里面是什么。如果她捕捉到一个指向 Bob 网站的 HTTP 请求,她就可以拿到 Bob 网站的内容,然后随心所欲地修改页面。之后,Trudy 可以把修改后的假页面发给 Alice,而 Alice 对此一无所知。
这种经典的中间人攻击有个明显的缺点,就是 Trudy 必须在能拦截 Alice 出站流量并且可以伪造入站流量。
实际上,Trudy 必须要接入 Alice 的电话线或者 Bob 的电话线,但是这样做的方法相当困难。
中间人攻击
Trudy 精通入侵 DNS 系统,可以篡改 Alice 的 ISP 上的 DNS 缓存。她巧妙地利用了自己的 IP 地址(42.9.9.9)替换了 Bob 的 IP 地址(36.1.2.3)。
一、Alice 向 DNS 请求 Bob 网站的 IP 地址;
二、Alice 收到了 IP 地址;
三、她向 Bob 请求其网站;
四、Alice 得到了网站内容;
然而,如果 Trudy 将 Bob 的 DNS 记录改成包含自己的 IP 地址,而非 Bob 的地址,则会出现以下情况:
当 Alice 查询 Bob 的 IP 地址时,她实际上得到了 Trudy 的 IP 地址,因此所有发送到 Bob 的流量都会被重定向到 Trudy。
通过入侵 DNS 服务器并篡改其中的记录,Trudy 成功实施了中间人攻击。
Trudy 如何欺骗 DNS 呢?
Trudy 利用了 DNS 查询的特性,可以诱使 Alice 的 ISP 向 DNS 服务器发送一个查询请求,请求查找 Bob 的 IP 地址。
由于 DNS 使用的是 UDP,因此 DNS 服务器无法确定答案的来源。
Trudy 充分利用了这一点,她伪造了一个预设的应答数据包,将一个虚假的 IP 地址插入到 DNS 服务器的缓存中。
我们假设 Alice 的 ISP 初始时并不包含与 bob.com 相对应的 DNS 表项。如果存在,则 Trudy 等待一段时间,直到超时,然后重试。
Trudy 的攻击方式是通过伪造 DNS 响应,将虚假的 IP 地址注入到 ISP 的 DNS 缓存中,以便将 Alice 的请求重定向到 Trudy 控制的恶意服务器上。 Trudy 可以通过这种方式进行中间人攻击,窃取或篡改 Alice 和 Bob 之间的通信。
Trudy 如何操作的?
Trudy 向 Alice 的 ISP 发送了一个查询请求,请求获取 bob.com 的 IP 地址。由于该 DNS 名字不存在于缓存中,ISP 的缓存服务器会向顶级 com 域名服务器询问,获取该 DNS 名字的 IP 地址。
此时,Trudy 抢先发送了一个虚假的应答:bob.com 的 IP 地址是 42.9.9.9,这个 IP 地址是她自己的 IP 地址。
如果 Trudy 的虚假应答首先到达 Alice 的 ISP,那么这个 IP 地址将会被缓存下来,而真正的应答则会被拒绝。这种技术被称为 DNS 欺骗,它诱使 DNS 服务器缓存了一个虚假的 IP 地址。
Trudy 可以通过这种方式实施中间人攻击,控制 Alice 与 bob.com 之间的通信,窃取敏感信息或者篡改通信内容。
首先,Alice 的 ISP 会检查收到的应答是否包含顶级服务器的正确 IP 地址。由于顶级 com 域名的服务器地址是公开的,Trudy 可以在这个 IP 域中设置任何值。
为了让 DNS 服务器能够辨别哪个应答对应哪个请求,所有的请求都会携带序列号。
为了欺骗 Alice 的 ISP,Trudy 必须知道正确的序号。为了了解当前序号的特点,最简单的办法就是注册一个域名,比如说:trudy-the-intruder.com 。我们假设她的 IP 地址是 42.9.9.9,她为这个新的谋划域创建了一个 DNS 服务器:dns.trudy-the-intruder.com,并且这个服务器仍然使用的是 IP 地址 42.9.9.9。
现在,她必须让 Alice 知道她的 DNS 服务器。Trudy 向 Alice 的 ISP 请求 foobar.trudy-the-intruder.com。这样一来,Alice 的 ISP 就会询问顶级 com 服务器,获取 Trudy 新域名的 DNS 服务。
Trudy 利用这种方法使得她可以控制 DNS 解析过程。
真正的攻击开始了
随着 dns.trudy-the-intruder.com 安全地进入 Alice 的 ISP 缓存中,真正的攻击开始了。
现在 Trudy 向 Alice 的 ISP 服务器请求查询 www.trudy-the-intruder.com ,这个 ISP 很自然地向 DNS 服务器发送了一个同样的查询请求,这个请求携带的序号就是 Trudy 想要获取的。
她立即请求 Alice 的 ISP 查询 Bob 的地址,并迅速地发送一个伪造的应答来回答自己的问题。谎称这个应答来自顶级 com 域名服务器,内容是:bob.com 是 42.9.9.9。
这个伪造的应答中携带的序号比她刚刚接收到的序号大 1。她可以发送一个大 2 的序号应答,甚至可以发送几十个序号增加的伪应答。这些应答总有一个会匹配到 Alice 的 ISP 所发送的 DNS 请求,剩下的会被丢弃。
当这个伪造的应答到达时,它被缓存起来。而当真正的应答稍后到达时,却遭到了拒绝,因为那个时候已经没有正在等待回应的查询。
现在 Alice 查询 bob.com 时,她被告知应该使用 42.9.9.9,也就是 Trudy 的地址。
Trudy 成功地实施了中间人攻击。
这种特定的攻击可以通过让 DNS 服务器在发出的查询中使用随机 ID,而不是仅仅用计数值来查询。然而,每当我们修复一个漏洞时,另一个漏洞就会出现。如果 ID 为 16 位,则计算机又很容易尝试出所有可能的数字。
DNS 攻击持续威胁着网络安全,所以我们可以通过采取有效的防御措施,包括加密通信、安全加固、异常行为检测等方法,来降低 DNS 攻击的风险。
内容来源:《计算机网络》
如果您对本篇文章中提到的问题有任何疑问或想法,请在评论区留言,我将尽力回复。
微信公众号「小道研究」,获取更多关于前端技术的深入分析和实践经验。