安全部署IPv6在2020年第一部分:互联网面向边界
引言
2020年初告诉我们,互联网互联服务的需求比以往任何时候都高。IPv4已耗尽,过度使用、滥用,且超出其寿命。尽管我们通过变长子网划分英勇尝试,但这给企业路由器带来了巨大负担,并呈指数级增长全球路由表,我们仍然用尽了地址。
网络地址转换(NAT)同样被过度使用和滥用。它并非也从未意图成为一种安全技术。NAT只是地址保护,而我们现在在全球部署了嵌套在其他NAT网络后的NAT网络,这超出了荒谬,更延伸了其原始设计意图。我们向所有勇敢延长IPv4寿命的人致敬,但现在是时候承诺IPv6了。
IPv6基础
IPv6是一个128位地址空间,在以太网头中称为IEEE 802协议0x86DD,或在IPv4头中封装时作为IP协议号41(6in4)携带。截至今天,IANA已将IPv6地址空间分配给各种区域互联网注册机构,包括ARIN、RIPE NCC、APNIC、AFRINIC、LACNIC。
地址分配如下:
- /12:七个IPv6块分布在不同RIR中
- /16:一个块用于6to4转换
- /18:一个块给RIPE NCC
- /19:两个块,一个给RIPE NCC,另一个给APNIC
- /20:三个块,一个给RIPE NCC,两个给APNIC
- /22:三个块给RIPE NCC
- /23:十八个地址块分布在不同RIR中
这些地址分配巨大!如果只设置12位用于网络前缀,那么互联网服务提供商可以进一步分配116位。纯主机地址术语中,那是2^116,即8.4e24个地址!
大多数服务提供商会进一步分配/32、/48和/64块。参考https://tools.ietf.org/html/rfc6177获取更多信息。要查看当前IPv6 BGP全局路由表状态,参考https://bgp.potaroo.net/v6/as2.0/index.html。
安全主题
IPv6地址和范围
有三种IPv6地址:单播、任播和多播。单播和任播地址有两种不同范围:链路本地和全局。对于多播,第二个地址八位组中的四个最低有效位决定范围。多播地址以“ff0”开头,不同范围地址如下:
- FF00 => 保留/未使用
- FF01 => 接口本地(主机绑定/环回多播)
- FF02 => 链路本地
- FF03 => 领域本地
- FF04 => 管理本地
- FF05 => 站点本地
- FF08 => 组织本地
- FF0E => 全局
- FF0F => 保留/未使用
互联网控制消息协议版本6(ICMPv6)
IPv4地址解析协议(ARP)已消失!IPv6非常依赖多播实现许多功能,大量发现使用ICMPv6和多播一起。类似于v4中的ICMP,数据包中有ICMP类型和代码。
ICMPv6可分为四类:错误消息、信息消息、邻居发现消息和其他IPv6协议控制消息。
错误消息
- 类型0:保留/未分配
- 类型1:目的地不可达。代码字段包含原因。
- 代码0:无路由到目的地
- 代码1:管理禁止
- 代码2:未分配
- 代码3:地址不可达
- 代码4:端口不可达
- 类型2:数据包太大。对路径MTU发现机制正常工作很重要。
- 类型3:时间超出消息
- 代码0:传输中跳数限制超出
- 代码1:分片重组时间超出
- 类型4:参数问题消息
- 代码0:遇到错误头字段
- 代码1:未识别下一头类型
- 代码2:未识别IPv6选项遇到
- 类型5到127:未分配或保留用于实验
信息消息
- 类型128:回显请求
- 类型129:回显回复
- 类型130:多播监听查询
- 类型131:多播监听报告
- 类型132:多播监听完成
邻居发现消息
- 类型133:路由器请求
- 类型134:路由器广告
- 类型135:邻居请求
- 类型136:邻居广告
- 类型137:重定向
其他IPv6协议控制消息
类型138到161当前已定义。参考https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml获取更多信息。类型162到255:未分配、保留或实验使用。
边界网络安全
分配地址空间过滤
简短来说,IPv6中有大量未分配地址空间,除非数据包来自分配地址块,否则不应允许进入网络。实际上,这很简单。IANA今天分配了35个地址块。您可以在边界路由器上定义ACL,只允许来自这些35个块的数据包,并丢弃其他所有内容。
反欺骗过滤
黄金规则是:不应有任何数据包进入网络,其源地址代表您的分配地址块。同样,不应有任何数据包离开网络,其目的地址匹配您的分配地址块。
ICMPv6过滤
对于ICMPv6,IPv6协议会中断,使得保护ICMPv6的主题不仅对边界而且对网络内部极其关键。您不能采取IPv4风格的幼稚方法只是丢弃此协议,而是需要更细致。
过滤ICMPv6可分为两类:从边界安全设备发起的流量与应传输通过安全设备的流量。我将讨论部分限于对组织边界安全策略立场重要的传输流量。
应允许传输流量通过往返互联网。所有其他传输ICMPv6流量应丢弃。这些是我的意见结合https://www.ietf.org/rfc/rfc4890.txt的解释。
多播过滤
如果域间多播不可取,那么严格边界过滤至关重要。此外,任何以多播作为源地址的数据包欺骗肯定是欺骗的,应丢弃。假设您的策略是不参与域间多播,那么您应在边界过滤以下内容:
- 任何源地址为多播的数据包
- 阻止/丢弃保留和未使用/未分配的多播目的地
协议规范化
IPv6有一个标记为“下一头”的协议头。可以在遇到OSI第4层头之前继续将扩展头链接在一起形成极长的扩展头链。
使用长链扩展头可能创建拒绝服务攻击,所有这些都需要由边界安全防火墙和/或路由器处理。扩展头攻击还可以通过防止完整数据包检查来盲化入侵防御系统(IPS)。
外部边界网关协议安全
边界网关协议(BGP)仍然与我们同在,并广泛用于IPv4和IPv6广域路由表。幸运的是,随着IPv6路由表的引入和类特定地址边界的利用,大小和处理要求显著低于高度分散的IPv4路由表。
在IPv6世界中部署BGP的类似安全关切与IPv4一样存在。
DMZ/互联网面向服务器地址分配
一旦您保护了地址分配,您可能处理/48或/64地址块。现在,当然,像任何其他组织一样,欢迎您进一步子网化此分配。
无论是在云托管情况还是您自己的DMZ/互联网面向部署中,我建议您保持子网规模相当大。例如,您可能选择将/64块切割成/72子网或类似,并可能分配一两个用于组织DMZ。
当您执行子网划分时,虽然您的路由器网关地址可能为一致性可预测分配,但强烈建议以随机方式分配服务器地址。这将减轻扫描/侦察攻击阶段服务器发现的风险。由于地址空间如此巨大,这实际上成为一种“稀疏”分配,使发现显著具有挑战性。
基础设施安全测试工具
在本文中,您已经看到我使用了许多工具进行测试和探测。一些包含在标准Linux发行版中,而一些更高级的工具没有。
- Scapy Python数据包制作和研究工具(http://scapy.net)
- Ping6(Linux内置)
- Traceroute6(Linux内置)
- https://www.si6networks.com/tools/ipv6toolkit/
- https://github.com/vanhauser-thc/thc-ipv6
结论
毫无疑问,我们有足够的经验深度投身IPv6世界。组织绝对应该考虑在IPv6域中提供具有适当保护的互联网面向服务。住宅互联网服务提供商已经在努力继续任何IPv4,并将继续向IPv6移动。这给我们留下了内部网络安全关切,我将在未来文章中撰写。
许多不同信息源用于构建本文,包括: