IPv6网络的可操作安全考虑——RFC9099解析(二)

2.2 扩展头

IPv4和IPv6扩展头有比较大的区别。在基于IPv4的数据包中,可以找到上层协议类型和协议头。而在IPv6中,它更复杂,因为扩展头链(header chain)必须完全解析(即使没有处理)从而去发现上层协议头。根据【RFC7045】定义,IANA已关闭现有的空“下一个头类型”注册,并将其用户重定向到“IPv6扩展头类型”注册表。

IPv6网络的可操作安全考虑——RFC9099解析(二)_第1张图片

 扩展头也已经成为一个非常有争议的话题,因为已知丢弃包含扩展头的数据包的转发节点会导致连接失败和部署问题【RFC7872】。理解各种扩展头的作用很重要,本节列举了需要仔细考虑的内容。

【RFC7045】对关于中间节点应该如何处理具有现有或未来扩展头的数据包进行了澄清。用于定义未来扩展标头的统一TLV格式见【RFC6564】。【RFC8504】的第5.2节和第5.3节提供了关于通过ipv6节点处理扩展标头的更多信息。

过滤解决方案的供应商和负责实现包过滤规则的操作人员应该知道,ipv6头中的“下一个头”字段既可以指向一个ipv6扩展头,也可以指向上层协议头。在设计过滤解决方案的用户界面时或在创建过滤规则集时,必须考虑到这一点。

2.2.1 扩展头的顺序和重复

虽然【RFC8200】建议在编写时进行扩展头的顺序和最大重复,但仍有IPv6实现支持不推荐的头顺序(如在路由前封装安全有效负载(esp))或头的非法重复(如多个路由头)。同样适用于扩展头中包含的选项(参见[IPv6解析])。在某些情况下,当接收或转发错误格式的数据包时,它会导致节点崩溃。应该使用防火墙或边缘设备通过删除不符合的数据包来执行推荐的顺序和扩展头的最大出现次数。

2.2.2 hop-by-hop选项导致ddos攻击

在早期的规范【RFC2460】中,逐跳选项头部要求所有节点都检测和处理。这使得拒绝服务攻击成为大多数,如果不是全部的话,路由器不能在硬件中处理这种类型的包;他们必须在软件中处理这些数据包,因此,这个任务与其他软件任务竞争,如控制和管理平面的处理。

目前IPv6的标准【RFC8200】已经考虑了这个攻击向量,并使中间路由对逐跳选项头的处理可明确配置。

2.2.3 分片头部

当必须分割数据包时,源(仅只有源)使用片段头。【RFC7112】和【RFC8200】section4.5解释了其重要性:

  • 防火墙和安全设备丢弃未包含完整IPv6头链(header chain)的第一个分片(包括传输层头);
  • 目标节点应该丢弃不包含整个ipv6头链的第一个片段(包括传输层头)。

如果以上要求不满足,攻击方就会绕过无状态的过滤规则。【RFC6980】通过强制删除分片的NDP包,对NDP应用更严格的规则(如2.3.3.2.1节所述)。【RFC7113】描述了【RFC6105】中描述的Ra-guard功能在存在分片的RA包时的行为。

2.2.4 IPv6安全扩展头

在网络中使用IPSec,需要使用【RFC4301】定义的IPSec扩展头AH和ESP。早期,IPSec在IPv6中是强制使用的。ESP/AH在【RFC6434】中作为可选。要求也保留在最新的ipv6节点要求标准【RFC8504】中。

2.3链路层安全

IPv6在很大程度上依赖于NDP【RFC4861】来执行各种链路操作,例如发现链路上的其他节点,解析它们的链路层地址,以及在链路上的路由器。如果没有安全保护,NDP很容易受到各种攻击,如路由器/邻居消息欺骗、重定向攻击、重复地址检测(DAD)攻击等。许多这些对NDP的安全威胁已经被记录在“ipv6邻居发现(ND)信任模型和威胁”【RFC3756】和“可操作的邻居发现问题”【RFC6583】。

2.3.1 NS的速率限制

NDP容易受到远程DoS攻击,例如,当一个路由器被迫对大量未分配的地址执行地址解析时,例如,当一个前缀被一个攻击者快速扫描时。这可以防止新设备加入网络,或由于CPU使用率高而使最后一跳路由器失效。简单的缓解步骤包括速率限制邻居请求,限制为未解析的请求保留的状态数量,以及巧妙地管理缓存/计时器。【RFC6583】讨论了off-link DoS潜力,并建议可用于减轻或缓解此类攻击的影响的实施改进和操作缓解技术。以下是当今网络运营商可以采用的一些可行的缓解方案:

通过ACL对未使用地址的入口域过滤。这需要对地址进行稳定的配置,例如,从/120中分配地址并使用特定的acl只允许这个/120的传输(当然,实际的主机配置了/64前缀)。

  • 对NDP进程的调整(在支持的地方),例如,对数据结构施加限制,例如处于“不完整”状态的邻居缓存条目数量(例如,256个不完整条目允许接口)或每个接口的NA速率(例如,每秒100NA)
  • 在点对点链路上使用/127前缀。
  • 在只有路由器的链接上只使用链接-本地地址,参见【RFC7404】。

2.3.2 路由器和邻居广告过滤

2.3.2.1 路由器广告过滤

路由器广告欺骗是一个众所周知的,在链路上的攻击向量,并已有广泛的记录。流氓RAs的存在,无论是无意的还是恶意的,都可能导致ipv6链路上的主机操作部分或完全失败。例如,一个节点可以选择一个错误的路由器地址,然后可以用于路径攻击,或者该节点可以将一个错误的前缀用于SLAAC。【RFC6104】总结了流氓RAs可能被观察到的情况,并提出了一系列可能的问题解决方案。【RFC6105】(ra-guard)描述了一个流氓RA问题的解决框架,其中网络段在交换设备周围设计,这些设备能够识别无效的RAs,并在攻击包实际到达目标节点之前阻止它们。

然而,一些规避RA-Guard提供的保护的逃避技术已经出现,IPv6分片引入了这种缓解技术的一个关键挑战。攻击者可以通过将他们的包分割成多个分片来隐藏他们的攻击,这样负责阻止无效RAs的交换设备就无法找到对同一包进行包域过滤所需的所有必要信息。【RFC7113】描述了这种规避技术,并为ra-guard实现者提供了建议,从而可以消除上述的规避向量。

鉴于IPv6碎片头可以用来规避RA-guard的某些实现,【RFC6980】更新了【RFC4861】,除了“证书路径广告”之外,在所有邻居发现消息中都禁止使用IPv6分片头,从而允许简单和有效的措施来对抗分片NDP攻击。

2.3.2.2 邻居广告过滤

源地址验证改进(SAVI)工作组已经研究了其他消除此类攻击缺陷的方法。【RFC7513】在DHCPv4或DHCPv6创建源IP的地址绑定,绑定一个锚点在一个SAVI设备【RFC7309】。此外, 【RFC6620】描述了在不使用DHCP时如何收集类似的绑定。绑定可用于过滤伪造的本地链接上生成的数据包。

2.3.2.3 主机隔离

NDP流量的隔离主机可以通过每个主机使用/64来完成。一种防止所有NDP攻击的更激烈的技术是基于使用特定配置。隔离所有主机在这种情况下,主机(即所有不是路由器的节点)无法将数据链路层帧发送到其他主机;因此,不会发生主机对主机的攻击。这种特殊的设置可以在一些交换机或wi-fi接入点上建立。这并不总是可行的当主机需要与同一子网中的其他主机进行通信时,例如为了访问共享文件。

2.3.2.4 NDP建议

仍然建议使用RA-Guard和SAVI作为攻击的第一道防线,包括配置错误的主机。此建议也适用于DHCPv6,因为RA消息用于发现默认路由器(s)和链路前缀确定。如第2.2.3节所述,当路由器和L2交换机丢弃不完整的分片时,这条防线最有效。还应分析生成的日志,以识别并对违规行为采取行动。

网络运营商应该意识到,RA-Guard和SAVI不能像预期的那样工作,甚至在特定的网络配置中可能有害(特别是当可能有多路由器时)。在管理的网络中缺省开启RA-Guard应该强烈考虑。

2.3.3 DHCP安全

IPv6的动态主机配置协议(DHCPv6),如【RFC8415】中所述,允许DHCP服务器向IPv6节点传递配置参数,如IPv6网络地址和其他配置信息。DHCP在大多数大型网络中扮演着重要的角色,它在自动化系统配置中提供健壮的有状态配置。

对DHCP客户端最常见的两种威胁来自于恶意的或无意中错误配置了DHCP服务器。在这些场景中,建立了一个恶意的DHCP服务器,目的是向客户端提供不正确的配置信息,从而导致拒绝服务攻击或发起路径攻击。虽然无意,但错误配置的DHCP服务器可能产生同样的影响。针对DHCP的其他威胁在【RFC8415】安全考虑部分讨论。

DHCPv6-shield【RFC7610】指定一种使用DHCPv6服务器保护连接的DHCPv6客户端的机制。该机制基于L2设备上的DHCPv6数据包文件过滤,即管理员指定连接到DHCPv6服务器的接口。然而扩展头可以绕过DHCPv6-shield除非强制执行【RFC7112】。

建议使用DHCPv6屏蔽,并分析相应的日志消息。

2.3.5 多播流量影响

IPv6广泛地使用多播用于信令传输,以避免广播的on-the-wire效率。

多播的使用对无线网络有一些副作用,比如对智能手机和其他连接到子网络的电池驱动设备的电池寿命产生负面影响。【RFC7772】和【RFC6775】(针对特定的无线网络)讨论了在无线网络上的速率限制和其他消息的方法,以解决这个问题。

使用链路层多播地址(例如,ff02::1对于所有节点的链路本地多播地址)也可能被误用于放大攻击。想象一个敌对节点用欺骗的源地址发送到ff02::1,然后所有链接本地节点将ICMPv6_ECHO_REQUEST应答包回复到源地址。这可能是对地址所有者的DoS攻击。这种攻击纯粹是L2网络的本地攻击,因为具有链路本地目的地的数据包永远不会由IPv6路由器转发。

这就是为什么大型Wi-Fi网络部署经常限制链路层组播的使用,从Wi-Fi接入点,即Wi-Fi站发送链路本地组播到直接邻近的Wi-Fi站;该策略还通过多播DNS(mDNS)【RFC6762】和链路本地多播名称解析(LLMNR)【RFC4795】阻止服务发现。

2.3.6 SEND and CGA

安全邻居发现(SEND)【RFC3971】是一种用于保护消息的机制。这种方法涉及到使用新的NDP选项来携带基于公共密钥的签名。加密生成的地址(CGA)【RFC3972】用于确保邻居发现消息的发送方是所声明的IPv6地址的实际“所有者”。引入了一个新的NDP选项,即CGA选项,并用于携带公钥和相关参数。另一个NDP选项,RSA签名选项,用于保护与邻居和路由器发现相关的所有消息。

SEND保护措施防止:

  • 邻居请求/广告欺骗;
  • 邻居不可达性检测失败;
  • 重复地址检测DoS攻击;
  • 路由器请求和广告攻击;
  • 重放攻击;
  • 邻居发现DoS攻击;

SEND不涉及:

  • 保护静态配置的地址;
  • 保护使用固定标识符(即eui-64)配置的地址;
  • 为NDP通信提供安全保密性;
  • 补偿不安全的链接——发送不要求链接和邻居广告上的地址对应

然而,从SEND和CGA规范发布的十多年来,SEND和CGA并没有广泛部署在IPv6设备。因此,它们的用途是有限的,不应该依赖。

-------Part2 END-------

你可能感兴趣的:(IPv6安全,网络,安全)