随着国民经济发展 , 网络成为生产生活的必需 。 分支机构众多的各类企事业单位、公有云、政务云、高性能计算平台等等 , 它们的内部网络规模越来越大 , 子网数量激增 , 加上早期 IPv4 地址规划的不合理 , 许多大型组织不得不在RFC 1918[1]以及 RFC 6598[2]定义的地址之外想办法 。
然而他们既没有通过正常渠道(购买、申请、租用)获得额外的 IPv4 地址 , 也没有迁移到 IPv6 上来规避这个问题 , 而是随意使用互联网上其他组织所拥有的 IPv4 地址 , 这其中就有许多地址与美国国防部(Department of Defense , 简称 DoD)拥有的地址段重叠 。
2021 年第一季度 , 美国国防部在互联网路由表中 , 开始宣告一部分自己拥有的 IP 地址 。 这件事在互联网上 , 既寻常 , 又反常 。
寻常之处在于:通过 BGP (边界网关协议)与互联网交换路由信息 , 宣告自身地址路由 , 每时每刻都在发生(图1) 。
反常之处在于:美国国防部拥有的海量地址 , 过去近三十年间并未出现在互联网路由表中 。
本文图片
图1 BGP 路由信息传递示意
笔者根据自己所见所闻 , 结合互联网路由知识 , 意识到上述两个时间和地理空间上看似独立的事件 , 很可能在网络空间造成一些混乱 , 甚至影响网络安全 。
互联网的各个参与方 , 必须行动起来了 。
(一)美国国防部开始宣告自身地址
由于历史原因 , 美国国防部建立的 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
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 类地址块 。
(二)内部网络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对自身的影响 。
(三)地址重叠影响内部用户访问互联网服务
在网络内部使用侵占的公网地址访问互联网服务 , 根据所侵占的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的路由 。
眼下 , 美国国防部刚开始宣告自身地址 , 并没有提供对公众的服务 , 直接造成的影响微乎其微 。 但如果美国国防部未来开始出售所持有的这些地址 , 云提供商作为最大的潜在买家 , 购买并开始使用这些地址 , 内部用户访问互联网服务 , 迟早会从上述第一种情况变成第二种情况 , 即无法访问 。
假设美国国防部无意出售这些地址 , 只是将路由信息发布在互联网路由表上 , 会造成什么影响呢?
(四)地址重叠可能泄漏信息造成网络安全隐患
网络安全是一个宏大复杂的话题 , 在此仅仅讨论什么情况下会出现信息泄露 , 以及可能泄露的信息内容 。
笔者此处将“信息泄露”简单地定义为“发送方没有期望接收方之外的第三方获取、理解的信息 , 第三方获取并理解了这样的信息 。 ”
内容侵占公网地址 , 什么情况下发生信息泄露?
设想一个客户端地址为7.2.1.10/24 , 一个服务器端地址为7.1.1.100/24 。
对此网络做如下合理假设:
- 客户端和服务器端使用 UDP (用户数据报协议)通讯 。
- 客户端和服务器每两分钟通讯一次 , 两者之间没有类似 TCP的ACK 确认机制 。
- 客户端和服务器交互的数据包的所有内容 , 包括IP 地址、端口、数据报文内容 , 均定义为敏感信息 , 不得落入第三方手中 。
- 此网络规模很大 , 无法稳定使用二层结构 。
- 客户端和服务器在不同子网 , 连接了不同的三层网络设备 , 整个网络运行动态路由协议 。
- 客户端和服务器均可以通过一个互联网网关访问互联网 , 所有三层设备均存在指向互联网方向的默认路由 。
- 除了 NAT 的配置 , 互联网网关唯一安全策略是禁止互联网发起的入方向数据包 。
- 客户端和服务器之间的其他三层网络设备 , 使用 ACL (访问控制列表)配置为只允许客户端和服务器指定 IP 地址和端口之间的通讯 。
本文图片
图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(封装安全负载)等等 , 在网络中被嗅探都有其独特的价值 。
- 在没有返回通路 , 无法建立 TCP 连接时 , 能接触到 TCP SYN 包的第三方可以构建内部网络服务器的地址分布和端口分布情况 。
- 最典型的两个 UDP 应用 , DNS 和 syslog(系统日志) , 数据均以明文存放 。 如果说 DNS 请求大多价值较低 , 那 syslog 携带的各种日志价值就很高了 。
- GRE 作为无连接的隧道协议 , 在内部网络通常是不加密的 , 其内部可以封装很多不同类型的数据包 , 以太网、IPv4、IPv6、MPLS 等 , 部分设备的端口镜像功能可以把交换机物理端口的双向流量封装在 GRE 包内 , 供远程抓包分析 。 相比 TCP 和 UDP , GRE 可以包括更多完整信息 。
由此可见 , 形成数据泄露风险的根源 , 完全在于我方网络的 IP 地址规划的失误和网络健壮性不足 。
(五)实验验证
本实验(图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 实验示例
(六)临时补救措施与修复方案
适合大多数内网的临时补救措施
1. 停止在新建和改扩建网络中使用不合法地址 。
2. 在网络边界 , 主要是互联网边界 , 综合使用黑洞路由、访问控制列表、安全策略等 , 阻止使用内网不合法地址的数据包进出 。
3. 在网络文档中明确内网可用的合法地址范围 。
彻底修复安全隐患
1. 规划地址迁移方案 , 同时规划内网 IPv6 地址方案 。
2. 根据路由表排查内部错误地址方案 。
3. 根据迁移规划的新地址 , 对现有网络 ACL 和安全策略进行修正 , 对内网 DNS 进行修正 。
4. 使用 DHCP (动态主机配置协议)协助迁移 , 逐个子网重新分配地址 。
5. 验证路由表中的错误地址段路由已消失 。
6. 清理 ACL 和安全策略中引用的旧地址 。
(七)给互联网建设者的建议
遵守互联网的运行规则 , 不要侵占其他组织的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、上游运营商故障、内部路由混乱等等 。 如果今天内部网络用了其他组织未宣告的地址 , 就要想到明天地址所有者开始宣告后会产生什么影响 。 网络的可靠性和健壮性不能只靠硬件、软件的冗余 , 而是靠完善细致的总体设计 , 以防御性的姿态设计和运行网络 。
参考资料
? IPv4 Prefix for Shared Address Space https://tools.ietf.org/html/rfc6598#section-3
? ARIN Blog - To Squat Or Not To Squat? https://teamarin.net/2015/11/23/to-squat-or-not-to-squat/
? IANA - IPv4 特殊地址列表 https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml
? 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)
【路由表|内部网络使用其他组织的IP地址有何风险?】责编:项阳
推荐阅读
- 年轻人|呼叫全城玩家,魔都首发「表情包地铁」启程,2022蓝不倒!
- 真皮|小米 Watch S1 商务智能手表今日开售
- 能力|有了长续航的独立通信手表,就不必为出门没带手机而焦虑了
- 手表|采用美信光学传感器,豪鹏科技电池,GARMIN佳明VENU2手表拆解报告
- Apple|新专利显示 苹果计划用光学传感器取代手表的数码表冠
- 通信技术|万兆四频36天线 网件开卖2万元路由器 首发价1.4万
- 最新消息|紫光集团发布公告 公司重整计划已经获得表决通过
- IT|研究表明奥密克戎正在取代德尔塔 潜伏期更短更趋常态化
- 沈余银|视频化趋势下,云技术如何让视频表达更高效?
- 导论|时隔五年,普林斯顿大学经典书《在线凸优化导论》第二版发表