自由可用的IPv4地址即将“枯竭”,多年以来,这促使大多数通用操作系统开始添加IPv6支持。然而,很多应用(例如VPN客户端和服务器软件)一直都没有准备好迎接IPv6。而这将导致这样的情况:双协议栈主机部署不支持IPv6的VPN软件,从而为安全漏洞广开大门,并导致VPN流量泄露。
在本文中,我们将讨论这些VPN安全问题是如何出现的。
介绍:VPN泄露的风险
从远程地点工作的员工通常会建立虚拟专用网络(VPN)连接来访问企业网络内部的服务,以及保护必须经过不安全网络的相应的流量。在某些情况下,由于VPN提供安全服务,例如对所有通过VPN的通信进行保密,我们认为使用VPN连接让不安全的协议可以接受(例如以纯文本传输敏感信息)。
很多VPN连接只支持IPv4协议。然而,部署这些技术的主机通常是双协议栈的,这意味着它们同时支持IPv4和IPv6(默认启用)。目前,很多主机只使用IPv4,因为大多数网络不提供IPv6连接。IPv6支持仍然存在于主机,但需要被启用。当发生这种情况时,主机可能会不知不觉中在双协议栈网络中使用不支持IPv6的VPN。
IPv4和IPv6协议在双协议栈网络中这种交互和共存的微妙关系可能无意或有意(蓄意攻击)导致VPN泄露安全问题——通过VPN连接传输的流量可能会泄露出VPN连接外,并在本地网络上以纯文本形式发送,而根本不使用VPN服务。
IPv4和IPv6的相互作用
IPv4和IPv6协议的共存有一些有趣且微妙的方面可能会导致意想不到的后果。虽然IPv6无法向后兼容IPv4,但这两种协议被域名系统(DNS)“粘”在一起。对于依赖于名称解析服务(例如DNS提供的服务)的双协议栈系统,不保护这两种协议,就不可能保护这两个系统之间的通信。
很多VPN部署不支持IPv6协议,或者更糟糕的是,它们完全忽略了IPv6。当建立VPN连接时,VPN软件通常插入IPv4默认路由,让所有的IPv4流量通过该VPN连接发送(而不是用本地路由器以纯文本形式发送流量)。然而,如果不支持IPv6,发往IPv6地址的所有数据包都会使用本地IPv6路由器以纯文本形式发送,VPN软件将无法保护IPv6流量安全。
例如,假设有一个网站同时支持IPv4和IPv6,相应的域名中包含A和AAAA DNS资源记录(RR),每个A包含一个IPv4地址,而每个的AAAA包含一个IPv6地址,每个这些记录类型可以有多个实例。当双协议栈客户端应用尝试与服务器通信时,它可以请求A和AAAA RR,并使用任何可用的地址。优选的地址族(IPv4或IPv6)和将被使用的具体地址(假设每个族有多个地址可用)部署各有不同,而很多主机部署更喜欢Pv6地址,而不是IPv4地址。
意外和故意的VPN流量泄漏
假设有一个双协议栈主机,它采用仅支持IPv4的VPN软件来建立与服务器的VPN连接。如果该主机连接到双协议栈网络会发生什么?如果主机的应用尝试与双协议栈系统通信,这通常要求查询A和AAAA DNS资源记录。如果主机同时支持IPv4和IPv6连接,但更青睐于IPv6目的地址,即使另一个系统有A和的AAAA DNS资源记录,主机都将使用IPv6来与上述系统进行通信。如果VPN软件不支持IPv6,IPv6流量将不会采用VPN连接,它将会通过本地IPv6路由器以纯文本形式传输。
这无意中暴露了潜在的敏感流量,这些流量本该受到VPN软件的保护。在这个情况下,VPN泄露是在双协议栈网络中采用不支持IPv6软件(VPN)的消极作用。