在2012年6月6日全球IPv6启动日,很多公司都为其产品和服务启用了IPv6协议,这也让我们有机会验证IPv6安全性的误解。人们普遍认为,因为IPv6增加的地址空间,从攻击者的角度来看,IPv6主机扫描攻击将需要花很多时间和精力,使得攻击几乎不可能。然而,事实并不是这样。通过分析IPv6地址在互联网上进行配置的方式,本文将介绍IPv6攻击可行性的真实情况分析。
IPv6不可战胜的神话
IPv6比IPv4有更大的地址空间。标准IPv6子网(在理论上)可以容纳大约1.844 * 1019 个主机,因此其主机密度要比IPv4子网低得多(即,子网中主机数与可用IP地址数量的比率较低)。
因为IPv6地址空间数量如此巨大,很多人认为IPv6将使潜在的攻击者很难对IPv6网络执行主机扫描攻击。有些人估计对单个IPv6子网的主机扫描攻击可能需要5千万年!
在IPv4互联网中的主机扫描攻击
在深入分析IPv6主机扫描攻击的细节之前,让我们来看看在IPv4互联网中,主机扫描攻击是如何执行的。 IPv4的地址空间数量有限,整个IPv4地址空间(在理论上)由 232 个地址组成,IPv4子网通常有256个地址。因此,在典型的IPv4子网中,主机密度相对较高。IPv4主机扫描攻击通常是按照以下方式执行的:
选定一个目标地址范围
发送一个测试数据包到该范围内的每一个地址
每个响应的地址都被认为是“可用的”
由于典型的IPv4子网的搜索空间比较小(通常是256个地址),并且这种子网的主机密度很高,对于大多数攻击者而言,在目标网络中按顺序尝试每个可能的地址已经足以发动攻击。
在IPv6互联网中的主机扫描攻击
有两个因素使IPv6的主机扫描攻击比IPv4的攻击更加困难:
典型的IPv6子网比IPv4子网更大(IPv6为264 个地址,而IPv4为256个地址) .
IPv6子网的主机密度比IPv4子网主机密度低得多
由于这两个因素,在目标IPv6子网中,按顺序试探每一个地址是不可行的,无论是从数据包/带宽的角度来看,还是从执行攻击需要的时间来看。
击破IPv6安全神话
然而,IPv6主机扫描攻击并非如此繁琐和费时。我们需要认识到,IPv6主机地址并不是随机分布在这相应的256个子网地址空间中,这意味着攻击者在试图确定“可行”节点时,实际上并不需要扫过整个子网地址空间。了解IPv6地址生成或者配置的方式,就明白了这种地址分配是非随机的。
IPv6地址选择
下图显示了IPv6全球单播地址。
IPv6全球单播地址,顾名思义,是用于互联网通讯的IPv6地址(而不是,比方说,仅用于本地子网内通讯的本地地址)。它类似于IPv4:全球路由前缀通常由上游供应商分配,本地网络管理员将组织网络分成多个逻辑子网,而接口ID(IID)用来确定该子网中的特定网络接口。
在选择接口ID(IPv6地址的低阶64位)时有很多选择,包括:
嵌入MAC地址
采用低字节地址
嵌入IPv4地址
使用“繁复”的地址
使用隐私或临时地址
依赖于过渡技术或共存技术
嵌入式MAC地址
大多数IPv6主机是根据非营利组织互联网协会(Internet Society)开发的无状态地址自动分配(SLAAC)来生成它们的地址。SLAAC获取MAC地址,在中间插入一个16位数字,在以太网的中,这让接口ID(还是地址的低阶64位)使用下面的语法:
在这种情况下,接口ID至少有16位是都知道的。接口ID的其余位(从底层以太网地址借来的位)也是按照特定的模式。
因此,在规划IPv6主机扫描攻击时,攻击者可能已经知道了目标企业购买网络设备的供应商的情况。攻击者可以据此减少搜索空间到只有这些OUI(企业唯一标识符),也就是分配到该供应商的标识符。然后他们可以进一步缩小搜索空间,因为以太网地址的低阶24位通常是根据制造的网络接口卡按顺序分配的。例如,如果企业从相应供应商购买了400个系统,这些系统可能有连续的以太网地址(并且连续的IPv6地址)。只要攻击者通过尝试随机地址发现目标网络中的一个节点,就可以根据尝试连续地址,得到其他节点。
虚拟化技术是一个有趣的特殊情况,因为大多数虚拟化产品对虚拟机的网络接口卡采用了特定的IEEE OUI,也就是说,当攻击者瞄准虚拟机时,搜索空间将被缩小为虚拟技术采用的已知的OUI.
这些情况都说明了只需要知道或者发现一些地址,攻击者就能够缩小他的搜索范围,使IPv6主机扫描攻击成为可能。
低字节地址
低字节地址是接口ID全是0的IPv6地址,除了最后8或16位(例如2001:db8::1、2001:db8::2等)。这些地址通常是手动配置的(通常用于基础设施),但是也可能是使用了一些动态主机配置协议版本6(DHCPv6)服务器,这些服务器会从特定地址范围按顺序分配IPv6地址。当采用低字节地址时,IPv6地址搜索空间被缩小到(最多)216个地址,这使IPv6主机扫描攻击变得更为可行。
嵌入式IPv4地址
互联网工程任务组(IETF)规范允许IPv6地址以“2001:db8::W.X.Y.Z”的形式来表达,而IPv4地址的形式为“W.X.Y.Z”.这种生成地址的形式通常出现在基础设施设备中,因为如果该设备的IPv4地址是已知的,就更容易“记住”设备的IPv6地址。其余的地址都是已知的或者可猜测出,所以采用嵌入式IPv4地址的网络将有助于攻击者将IPv6地址搜索空间缩小到与IPv4网络相同的搜索空间。
“繁复”的地址
IPv6地址采用十六进制(而不是小数)符号,这在手动配置地址时,增加一些创意。例如,Facebook的域名映射到IPv6地址是“2a03:2880:2110:3f02:face:b00c::”.确定这些“繁复”的地址的搜索空间并不简单,当然,与整个264个IPv6空间相比时,搜索空间还是有所减少了。曾经有针对“繁复”地址的基于字典的IPv6主机扫描攻击。
隐私/临时地址
为了响应主机跟踪问题,IETF在RFC 4941中标准化了“无状态地址自动配置的隐私扩展”.在本质上,RFC 4941规定接口ID应该是随机的,会随着时间的变化而变化,以创建一个不可预见的地址。
然而,RFC 4941规定除了传统SLAAC地址外还要生成临时地址(而不是替代它们),临时地址用于出站通讯,而传统SLAAC地址用于服务器功能(例如入站通讯)。因此,这些地址并不能缓解主机扫描攻击,因为在采用临时地址的主机上仍然配置了可预测的SLAAC地址(但OpenBSD除外,OpenBSD在启用隐私地址时,禁用了传统SLAAC地址)。
过渡/共存技术
有很多IPv4到IPv6的过渡技术或者共存技术(例如6to4和Teredo)为IPv6全球单播地址指定了特殊语法,在大多数情况下是在IPv6中嵌入IPv4地址,作为IPv6的地址的一部分。由于有很多这方面的技术,本文将不深入到具体细节,但需要注意这些地址遵循特定的模式,所以能减小IPv6地址搜索范围。
如何缓解IPv6主机扫描攻击
缓解IPv6主机扫描攻击最聪明的办法是从IPv6地址删除任何明显的模式。IETF的6man工作组目前正在研究一种生成IPv6地址的方法,它有以下特点:
产生的接口ID不容易被预测出
产生的接口ID在每个子网内是稳定的,但是当主机从一个网络移动到另一个网络时,接口ID会跟着变化
产生的接口ID独立于底层链路层地址
为了确保IPv6部署的安全性,IETF必须完成此标准化工作,并且更重要的是,需要供应商部署它。一旦这些工作都到位了,这些不可预测的地址将让攻击者的IPv6主机扫描攻击更难以执行。
其他缓解IPv6主机扫描攻击的措施包括使用基于网络的入侵防御系统(IPS):当在本地子网接收到大量针对不同IPv6地址的探测数据包时(尤其是当很多目标地址不存在时),可以从特定来源地址阻止入站数据包,来应对主机扫描攻击活动。另一种方法是为基于DHCPv6和手动配置的系统配置不可预测的地址。虽然windows系统生成不可预测地址,所有其他端点(包括基于思科和Linux的设备)还需要一些额外的配置,既可以启用DHCPv6服务器来发布不可预测地址,也可以手动配置系统,这样他们就可以使用不可预测地址。很显然,DHCPv6的方法应该是首选方法,因为它更容易扩展。然而,并不是所有DHCPv6软件都有这个功能,因此可能唯一的方法应该是手动配置每个系统的IPv6地址(当然这个工作会非常痛苦)。
读了本文关于IPv6地址在互联网上的分配方式的分析,大家应该提高认识:虽然IPv6的主机扫描攻击在很大程度上受到了阻止,但IETF和供应商仍然有很多工作要做,以增加IPv6主机扫描攻击的难度。