随着国民经济发展,网络成为生产生活的必需。分支机构众多的各类企事业单位、公有云、政务云、高性能计算平台等等,它们的内部网络规模越来越大,子网数量激增,加上早期 IPv4 地址规划的不合理,许多大型组织不得不在RFC 1918[1]以及 RFC 6598[2]定义的地址之外想办法。
然而他们既没有通过正常渠道(购买、申请、租用)获得额外的 IPv4 地址,也没有迁移到 IPv6 上来规避这个问题,而是随意使用互联网上其他组织所拥有的 IPv4 地址,这其中就有许多地址与美国国防部(Department of Defense,简称 DoD)拥有的地址段重叠。
2021 年第一季度,美国国防部在互联网路由表中,开始宣告一部分自己拥有的 IP 地址。这件事在互联网上,既寻常,又反常。
寻常之处在于:通过 BGP (边界网关协议)与互联网交换路由信息,宣告自身地址路由,每时每刻都在发生(图1)。
反常之处在于:美国国防部拥有的海量地址,过去近三十年间并未出现在互联网路由表中。
图1 BGP 路由信息传递示意
笔者根据自己所见所闻,结合互联网路由知识,意识到上述两个时间和地理空间上看似独立的事件,很可能在网络空间造成一些混乱,甚至影响网络安全。
互联网的各个参与方,必须行动起来了。
01
美国国防部开始宣告自身地址
由于历史原因,美国国防部建立的 ARPANET 作为互联网的前身,优先考虑了自身的需求,为美国国防部多个系统分别分配了大块 A 类地址(有类地址是历史上的概念。现代的写法是“地址前缀 /8”),三十多年过去了,今天依然属于美国国防部的 A 类地址有以下这些:
6.0.0.0 - 6.255.255.255
7.0.0.0 - 7.255.255.255
11.0.0.0 - 11.255.255.255
21.0.0.0 - 21.255.255.255
22.0.0.0 - 22.255.255.255
26.0.0.0 - 26.255.255.255
28.0.0.0 - 28.255.255.255
29.0.0.0 - 29.255.255.255
30.0.0.0 - 30.255.255.255
33.0.0.0 - 33.255.255.255
55.0.0.0 - 55.255.255.255
214.0.0.0 - 214.255.255.255
215.0.0.0 - 215.255.255.255
美国国防部所拥有的多个 IPv4 地址段,过去三十年间并没有出现在全球 BGP 路由表中,说明互联网上没有使用这些地址。然而到了 2021 年,这些地址的所有者美国国防部,开始在互联网上“复苏”这些休眠数十年的 IPv4 地址。
2021 年 4 月 24 日,据华盛顿邮报和美联社报道,美国国防部的一个数字精英部门 Defense Digital Service(简称 DDS),自 2021 年 1 月 20 日就开始以佛罗里达的 Global Resource Systems LLC(GRS 有限公司)名义,使用 AS8003 的自治域号码,通过 BGP 向全球路由表宣告属于美国国防部的地址段(图2、图3)。
图2 AS8003 IPv4 路由传播路径
图3 AS8003 宣告的部分地址
截至目前,这些地址段共有 174,784,512(约 1.75 亿)个IPv4地址,占全球可用IPv4地址空间约6%。其中包括了完整的7.0.0.0/8,11.0.0.0/8,21.0.0.0/8,22.0.0.0/8,30.0.0.0/8 等 A 类地址块。
02
内部网络IPv4地址短缺的“应对之道”
一般来说,IPv4 地址短缺,特指互联网可路由地址(简称“公网地址”)空间的地址不够分配,而且公网地址空间的地址侵占行为一般是有组织的黑客所为,不在本文的讨论范围。
大部分情况下,持有 ASN (自治域号码)和公网 IP 地址段的互联网参与方,必须证明自己是地址的合法所有者,才能向上级运营商宣告自己的 BGP路由,并被传递到互联网的其他参与者路由器上。
前文提到,由于内部网络规模越来越大,出现了 RFC 1918和RFC 6598定义的私有地址空间不够用的情况。部分网络设计师和运营者开始使用其他组织在互联网上的 IP 地址,有的 IP 地址存在于互联网路由表中,有的不在(如 2021 年之前的美国国防部的 IP 地址)。
经过观察分析可以发现,这些大型内部网络获得“额外”的 IP 地址主要有以下两种方式。
第一种,有意为之。
不少网络设计师和运营者,查看了全球 IPv4 地址分配结果,与实际使用中的全球 BGP 路由条目对照,发现美国国防部拥有多个 A 类地址段,这些地址空间没有出现在全球 BGP 路由表中,在互联网上没有使用,便认定没有风险,开始在自己的内部网络使用这些地址。
RFC 6598 第三节和 ARIN 的博客介绍了这种行为,即“squat space”,侵占他人的 IPv4 地址。
在中国,由于政府、企业、高校等大型网络大多没有使用 BGP 进行网际互联的条件,因而这种地址侵占几乎没有机会对全球 BGP 路由表产生负面影响。
而世界范围内,在使用侵占地址的一方由于没有对 BGP 路由过滤,在不知情的情况下造成 BGP 劫持的案例屡见不鲜。注意地址侵占并不必然造成 BGP 劫持。
第二种,无意过失。
有一些网络设计师和运营者,对私有地址空间定义的两个 RFC 文档不熟悉,对 IP 地址前缀长度的理解不够。常见的一种情况是,了解 192.168.0.0/16 的范围属于私有地址空间,但却错误地将 192.0.0.0/8 也认定是私有地址空间。
相似的例子还有CGNAT(运营商级地址转换方案)地址池100.64.0.0/10,对应的范围是100.64.0.0 ~ 100.127.255.255。这一段地址之后的100.128.0.0 ~ 100.255.0.0 属于美国T-Mobile 通讯公司,这段地址之前的100.0.0.0 ~ 100.63.255.255空间属于多家电信运营商和亚马逊。然而,据笔者了解,部分地区的运营商却将整个100.0.0.0/8,即100.0.0.0 ~ 100.255.255.255视为可用于CGNAT的地址池。
无论有意或是无意,上述使用IP地址的行为侵占了其他组织合法的IP地址空间。
接下来分析一下使用重叠地址,侵占其他组织(以美国国防部为例)IP对自身的影响。
03
地址重叠影响内部用户访问互联网服务
在网络内部使用侵占的公网地址访问互联网服务,根据所侵占的IP地址与所访问的地址是否存在重叠,分为两种情况。
1. 侵占的IP地址不在互联网路由表,或出现在互联网路由表但不是所访问的服务:
例如内网侵占了 7.0.0.0/8 的地址,互联网网关的 NAT (网络地址转换)地址池是 203.0.113.1 ~ 203.0.113.10,虽然 7.0.0.0/8 存在于互联网路由表,但客户端要访问在 3.0.0.0/8 内的服务。
这种情况下,与正常使用合法私有地址配置的网络行为是一致的。受互联网出口的源地址 NAT 功能影响,凡是需要访问互联网的数据包的源地址,均会被替换成 NAT 出口地址池中的公网地址,目的地址不变。数据包离开网络经过多重路由到达服务器,返回时数据包的目的地址是 NAT 出口地址池地址,到达 NAT 设备后,NAT 设备查找地址转换状态表,替换目的地址为网内地址。
上述情况是网络配置完成后的符合预期的状态。
2. 侵占的IP地址在互联网路由表,恰好是所访问的服务(为贴近事实,此处选择亚马逊,其拥有整个3.0.0.0/8):
例如内网侵占了3.0.0.0/8 的地址,互联网网关的 NAT 地址池是203.0.113.1 ~ 203.0.113.10,客户端恰好要访问在3.0.0.0/8内的服务。
内网存在一条路由3.1.1.0/24,客户端所希望访问的具体服务器地址(例如3.1.1.10)在内部网络中不存在,或并没有提供客户端期望的服务。这种情况下,数据包在到达边界 NAT 设备之前,就会被送达到3.1.1.0/24这个子网,然而此网络内没有对应服务器能够提供客户端期望的响应,客户端请求失败。
该情况有一个广为人知的真实案例,Cloudflare 在2018年开始使用1.1.1.1提供DNS服务,结果发现很多用户无法访问,除了一些运营商网络内部使用了1.1.1.1,还有很多网络设备操作系统或默认配置中包含到1.1.1.0/24的路由。
眼下,美国国防部刚开始宣告自身地址,并没有提供对公众的服务,直接造成的影响微乎其微。但如果美国国防部未来开始出售所持有的这些地址,云提供商作为最大的潜在买家,购买并开始使用这些地址,内部用户访问互联网服务,迟早会从上述第一种情况变成第二种情况,即无法访问。
假设美国国防部无意出售这些地址,只是将路由信息发布在互联网路由表上,会造成什么影响呢?
04
地址重叠可能泄漏信息造成网络安全隐患
网络安全是一个宏大复杂的话题,在此仅仅讨论什么情况下会出现信息泄露,以及可能泄露的信息内容。
笔者此处将“信息泄露”简单地定义为“发送方没有期望接收方之外的第三方获取、理解的信息,第三方获取并理解了这样的信息。”
内容侵占公网地址,什么情况下发生信息泄露?
设想一个客户端地址为7.2.1.10/24,一个服务器端地址为7.1.1.100/24。
对此网络做如下合理假设:
1. 客户端和服务器端使用 UDP (用户数据报协议)通讯。
2. 客户端和服务器每两分钟通讯一次,两者之间没有类似 TCP的ACK 确认机制。
3. 客户端和服务器交互的数据包的所有内容,包括IP 地址、端口、数据报文内容,均定义为敏感信息,不得落入第三方手中。
4. 此网络规模很大,无法稳定使用二层结构。
5. 客户端和服务器在不同子网,连接了不同的三层网络设备,整个网络运行动态路由协议。
6. 客户端和服务器均可以通过一个互联网网关访问互联网,所有三层设备均存在指向互联网方向的默认路由。
7. 除了 NAT 的配置,互联网网关唯一安全策略是禁止互联网发起的入方向数据包。
8. 客户端和服务器之间的其他三层网络设备,使用 ACL (访问控制列表)配置为只允许客户端和服务器指定 IP 地址和端口之间的通讯。
正常运行时,在客户端相连的三层设备上,有以下四条路由(图4):
图4 正常时客户端交换机路由表
假设此时服务器相连的三层设备因为种种原因离线:硬件故障,接线不牢,操作员误配置,路由进程重启,客户端相连的三层设备路由表会变成如下状态(图5):
图5 服务器交换机故障后客户端交换机路由表
在服务器交换机恢复正常前,客户端的数据包就会沿着默认路由,逐跳到达互联网网关。
互联网网关根据此刻自身的路由表,判定目的地址为 7.1.1.100 的数据包下一跳是互联网运营商路由器,网关的 NAT 功能将数据包源地址 7.2.1.10 替换成 NAT 地址池中的地址 203.0.113.1,数据包目的地址 7.1.1.100 保持不变,送往运营商路由器。
运营商路由器根据全球路由表找到最匹配的 7.0.0.0/8 路由,将包传递给自己的 BGP 邻居 AS6939 的互联路由器。
AS6939 的多个路由器逐跳将数据包送往 AS8003 的路由器,到达美国国防部控制的网络。
由于没有明细路由,更没有合适的服务器接收数据包,此数据包在 AS8003 的网络内部被丢弃。
以上,可以说此含有敏感数据的数据包离开了内部网络,途经至少三个第三方网络(本地 ISP,中间 ISP,美国国防部控制的网络),中间有无数的机会被截获监听。
泄露的信息内容
在进一步探讨信息泄露的内容前,先介绍一个略反常识的概念——网络本身是单向的。
数据包有去有回,是两个单向通道叠加的结果。有高级网络知识的读者应该知道MPLS(多协议标签交换)中Label Switching Path(标签交换路径,LSP)是单向通道,双向的通讯要求建立一对方向相反的LSP。
纯IP网络中的路由与之相似,一个数据包的接收方(通常为服务器端)需要有到达请求方的路由,才能将响应的数据包发送给请求方。
在简单的网络中往往两个单向通道由相同的物理层承载。复杂的网络的设计师虽然会尽力避免来回路径不一致的情况,但也是无法完全消除路径可能会由不同设备、链路承载的情况。
而在IP之上的TCP,作为有状态协议,必须要求网络上两个节点之间是双向畅通的,但并非只有建立了 TCP 连接之后传递的数据才有网络安全意义上的价值。
TCP的SYN(同步序列编号)包,UDP报文,其他IP之上的协议如ICMP(Internet控制报文协议),GRE(通用路由封装协议),IPsec ESP(封装安全负载)等等,在网络中被嗅探都有其独特的价值。
1. 在没有返回通路,无法建立 TCP 连接时,能接触到 TCP SYN 包的第三方可以构建内部网络服务器的地址分布和端口分布情况。
2. 最典型的两个 UDP 应用,DNS 和 syslog(系统日志),数据均以明文存放。如果说 DNS 请求大多价值较低,那 syslog 携带的各种日志价值就很高了。
3. GRE 作为无连接的隧道协议,在内部网络通常是不加密的,其内部可以封装很多不同类型的数据包,以太网、IPv4、IPv6、MPLS 等,部分设备的端口镜像功能可以把交换机物理端口的双向流量封装在 GRE 包内,供远程抓包分析。相比 TCP 和 UDP,GRE 可以包括更多完整信息。
从网络攻防的角度来看,这种安全威胁不同以往,假想敌没有任何攻击性行为,即使设置网络嗅探装置,也是在自己的网络内。对方调整路由,完全是合理范围内的操作,对方没有主动干扰我方网络。世界上有多家公司和研究机构在跟踪全球路由表变化。全球路由表的变化是透明的、可追溯的。
由此可见,形成数据泄露风险的根源,完全在于我方网络的 IP 地址规划的失误和网络健壮性不足。
05
实验验证
本实验(图6)验证了如下内容:
1. 目的地在 7.0.0.0/8 范围的数据包起码可以到达位于华盛顿旁边的弗吉尼亚州 Ashburn 市, AS6939 与 AS8003 的边界路由器 72.52.92.226( DNS名称为:100ge5-1.core2.ash1.he.net);
2. 即使源地址列表匹配目的地址,源地址 NAT 也不会改变目的地址或目的端口;
3. 源地址列表匹配的数据包,经过路由器 NAT 转换后,离开路由器的源地址和源端口都变了。
图6 实验示例
06
临时补救措施与修复方案
适合大多数内网的临时补救措施
1. 停止在新建和改扩建网络中使用不合法地址。
2. 在网络边界,主要是互联网边界,综合使用黑洞路由、访问控制列表、安全策略等,阻止使用内网不合法地址的数据包进出。
3. 在网络文档中明确内网可用的合法地址范围。
彻底修复安全隐患
1. 规划地址迁移方案,同时规划内网 IPv6 地址方案。
2. 根据路由表排查内部错误地址方案。
3. 根据迁移规划的新地址,对现有网络 ACL 和安全策略进行修正,对内网 DNS 进行修正。
4. 使用 DHCP (动态主机配置协议)协助迁移,逐个子网重新分配地址。
5. 验证路由表中的错误地址段路由已消失。
6. 清理 ACL 和安全策略中引用的旧地址。
07
给互联网建设者的建议
遵守互联网的运行规则,不要侵占其他组织的IP地址。
熟悉 RFC 1918 和 RFC 6598 定义的地址,或参考 IANA 发布的 IPv4 和 IPv6 特殊地址列表。
要检索一段地址的 BGP 路由和 WHOIS 域名信息,可以使用 https://bgp.he.net 进行查询。
使用了这些地址的终端用户
已经在使用这些地址的用户,主要参考是前面提到的补救措施和修复方案。
使用了这些地址的大型互联网公司
根据自身网络和应用情况,以补救措施和修复方案为指导,逐步替换不合法地址。
有 BGP 接入的互联网公司和其他组织,应当正确配置路由过滤,防止内部正在使用的地址路由从互联网接收和向互联网宣告。
互联网运营商
运营商的核心网络对众所周知的私有网络地址已经进行了屏蔽,这是每个 ISP 都会做的。
不建议运营商对文中任何地址段采取特殊策略,这样做不符合运营商在互联网中的定位。
运营商如果已经侵占 IP 地址在内部使用,则应在边界做好 BGP 过滤器在内的防范措施,并逐步替代这些地址段。
网络设备厂商
网络设备厂商的手册中,如果为了提高可读性,在文档中需要使用公网可路由地址,需说明此地址不代表真实网络,仅作为示例使用。
新撰写的文档首选使用 RFC 5737 规定的文档专用地址,包括:
192.0.2.0/24 (TEST-NET-1)
198.51.100.0/24 (TEST-NET-2)
203.0.113.0/24 (TEST-NET-3)
网络工程师培训班
网络工程师的培训需要强调侵占 IP 地址的危害,让学员熟知 RFC 1918 和 RFC 6598 定义的私有地址。
与网络设备厂商类似,为了便于学员理解掌握网络知识,培训和实验时使用公网可路由地址是可以的,但仍需说明此地址不代表真实网络,仅作为示例使用。
总之,要最大限度避免本文介绍的种种风险,首先要尊重、遵守网络世界的一般规则。其次,在设计网络时除了理想的正常工作状态,也要考虑种种可能的意外情况,如软硬件故障、人工误操作、自动化脚本 bug、上游运营商故障、内部路由混乱等等。
如果今天内部网络用了其他组织未宣告的地址,就要想到明天地址所有者开始宣告后会产生什么影响。网络的可靠性和健壮性不能只靠硬件、软件的冗余,而是靠完善细致的总体设计,以防御性的姿态设计和运行网络。
参考资料
1. IPv4 Prefix for Shared Address Space
https://tools.ietf.org/html/rfc6598#section-3
2. ARIN Blog - To Squat Or Not To Squat?
https://teamarin.net/2015/11/23/to-squat-or-not-to-squat/
3. IANA - IPv4 特殊地址列表 https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml
4. IANA - IPv6 特殊地址列表 https://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-special-registry.xhtml
*注释:
[1] RFC 1918定义的私有网络地址空间10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
[2] RFC 6598定义的CGNAT专用地址100.64.0.0/10
作者:宋崟川(Red Hat)
责编:项阳
相关内容:
特别声明:本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。