一. IPv6地址简介
随着物联网、5G的发展,网络应用对IP地址的需求呈现爆炸式增长,IPv4地址空间早已分配枯竭,并且分配十分不均匀,美国占全球地址空间的一半左右,中国全国的IPv4地址加起来都没有美国一所大学拥有的地址多。IPv6凭借充足的网络地址和广阔的创新空间,已经成为实现万物互联,促进生产生活数字化、网络化、智能化发展的关键要素,为我国网络设施升级、技术产业创新、经济社会发展提供了重大契机。 2019年4月,工信部发布《关于开展2019年IPv6网络就绪专项行动的通知》,以全面提升IPv6用户渗透率和网络流量为出发点,就推动下一代互联网网络就绪提出主要目标、任务举措和保障措施,持续推进IPv6在网络各环节的部署和应用[1] 。所以喊了这么多年的IPv6,这一次它真的来了。

随着IPv6地址使用的普及,安全漏洞和网络攻击也定会随之而来。所以IPv6地址的应用同样面临着资产管理和网络安全等方面的挑战。网络地址扫描是资产信息收集和漏洞发现的前提和手段。相比IPv4的32位地址,IPv6地址长度增加到128位,具有巨大的地址空间,而且在地址表示、地址配置等方面均有显著不同。因此,传统的地址扫描方法无法完全适用于IPv6网络,所以能够对IPv6资产和服务准确的扫描测绘,对于网络安全具有着重要的意义。
二. IPv6扫描的困难性
目前IPv6资产扫描还是比较困难的,主要有以下原因: IPv6地址数量是IPv4的2^96倍,有人做了个比喻,IPv6地址空间可以为地球上每一粒沙子分配一个IP,而且还有剩余。从这个地址量级来看,如果像IPv4资产的发现方式,通过对全网段扫描来发现IPv6资产,从时间和资源上都是不切实际的。此外,目前IPv6地址使用的实际数量较少,并且地址分布的随机性较大,这无形增加了扫描难度。当然,IPv6的地址扫描也并非是无从下手,本文接下来就分享IPv6地址分类扫描的实践过程以及扫描思路。
三. 常见IPv6地址分类
IPv6的地址长度为128位,是IPv4地址长度的4倍。于是IPv4点分十进制格式不再适用,采用十六进制表示。常用冒分十六进制法表示IPv6地址,格式为X:X:X:X:X:X:X:X,其中每个X表示地址中的16b,以十六进制表示。例如:ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,在某些情况下,一个IPv6地址中间可能包含很长的一段0,可以把连续的一段0压缩为“::”。但为保证地址解析的唯一性,地址中“::”只能出现一次。根据不同的生成策略,常见的IPv6地址有以下几类[2] [3] :
1. 低位地址
在某些情况下,节点的地址需要手动配置,例如路由器和服务器的地址,出于配置简单和容易记忆的考虑,通常会选择一些低位地址,即地址除了最后几位,其它地址位都是0。所以这部分IPv6地址的特征是前面的地址为一致,只有地址的最后几位随机分布。

图1 低位地址随机的IPv6地址
2. 部分位随机的地址
部分位随机的IPv6地址和低位地址类似,只不过并不是低位随机,而是地址中的特定的几位呈随机分布。

图2 部分位随机的IPv6地址
3. 内嵌MAC地址
内嵌MAC地址又称为EUI-64地址,是通过设备MAC地址产生的,首先在48位的MAC地址的中间位置,插入十六进制数FFFE,并且要U/L(Universal/Local)位(从高位开始的第7位)设置为1[1], 最后得到的就是64位EUI-64格式地址。这类地址的主要特征是地址中包含FFFE字符[4] 。
具体的转换过程如下图所示:

图3 MAC地址嵌入型生产过程

图4 MAC地址嵌入的IPv6地址
当然除了这些分类以外,还有端口嵌入地址、内嵌IPv4地址、临时地址、IPv6过渡地址等等,感兴趣可以查阅相关资产进一步了解,在这里就不过多介绍。
四. IPv6地址扫描实践
上文我们提到了IPv6地址分布有一定特性,比如部分地址位随机、MAC地址嵌入等等,我们可以利用这些分布特性,加入一些扫描范围或限制条件,来降低需要扫描的IPv6地址扫描地址空间。
接下来对上面的扫描思路进行测试,扫描测试使用的是开源的IPv6扫描插件Scan6[5] [6] ,Scan6是IPv6地址扫描的工具,它是SI6 Networks IPv6工具包的一部分,包括了一些高级IPv6地址扫描方法。测试的数据源来自于开源的Hitlist[7] 存活的IPv6地址集合。
1. 低位地址扫描
低位IPv6地址扫描和IPv4的扫描类似,除了地址的后几个字节,其他位均为0,所以只需扫描对应的地址段就可以发现这些地址。
扫描命令:scan6 -i eth0 -d ****:ff40:8::0000/112,其中参数-i是选择扫描使用的网卡,参数-d是选择扫描的地址段,掩码/112共有65535个地址,扫描这个数量的地址耗时约5分钟,共发现15个存活地址。

2. 部分地址位随机扫描
如果地址随机位不在末端的部分位随机的IPv6地址,Scan6可以使用十六进制的区间来表示要扫描的地址范围,实现的效果只遍历扫描指定位地址,其它位的地址不变。
扫描命令:scan6 -i eth0 -d ****:983:0-3000::1,其中这个0-3000指的只扫描遍历范围所在位,扫描范围是16进制0-3000,也就是12288个地址。如下图所示,共用了约1分钟完成扫描,发现3853个存活的IPv6地址。

3. 内嵌MAC的地址扫描
MAC地址由两部分组成,前24位是厂商的ID,由美国电气和电子工程师协会(IEEE,全称是Institute of Electrical and Electronics Engineers)唯一分配,后24位厂商的扩展ID由厂商自己编制,组合产生全球唯一的48位MAC地址(也称IEEE 802地址),可以通过IEEE官网数据,来查询厂商对应的MAC地址前24位的厂商ID,具体信息格式如下图所示。

图5 MAC地址与厂商的对应信息
利用MAC地址嵌入的生成规则,以及IEEE提供的厂商ID对照表,就可以通过扫描指定IPv6址区间内某个厂商的地址来缩小扫描范围,进而缩短扫描时间。以H智能设备厂商MAC ID “BCAD28”为例,选取了一个有MAC地址嵌入资产存活的网段,做了如下扫描测试。
扫描命令:scan6 -i eth0 -d ****:****:5491:0:0000:0000:0000:0000/64 -K " **** Technology Co.,Ltd." 参数-K是厂商名称,表示只扫描配配置文件对应厂商的MAC地址段生成的IPv6地址。
扫描网段掩码/64,扫描耗时约19个小时完成扫描,虽然只发现1个存活地址,但是初步可以证明,增加厂商参数扫描MAC嵌入型地址是可行的。因为提供了6位厂商MAC ID以及4位的FFFE,扫描的随机的地址位从16位下降到6位,要扫描的地址数量就从2^64-1个下降到2^18-1,所以大大缩短了扫描时长。此外,MAC嵌入型的地址扫描,还有助于发现物联网设备的IPv6地址。通过输入物联网智能设备厂商的MAC,扫描存活地址大概率就是物联网设备。或者通过提取MAC嵌入地址中的MAC地址,并匹配厂商信息,有助于对资产的设备类型进行识别。

五. IPv6资产扫描思路
上文中简单介绍了IPv6的地址分类,并且做了扫描测试,初步得出通过地址分布特征来缩小IPv6地址扫描范围的方法来扫描存活资产是可行的。不难看出,IPv6的地址扫描过要比IPv4的全网扫描那种模式复杂的多,IPv6需要持续完善扫描的各个环节,简单整理IPv6地址扫描运营思路,如下图所示:

图6 IPv6地址扫描运营思路
1. 地址收集
我们已经知道盲扫IPv6是不现实的,所以第一步我们需要收集可能存活的地址或者网段,明确扫描范围。这个数据来源可以是开源的数据集、IPv6 DNS服务器、公网流量中获取等等。
2. 地址分类与扫描
地址集合积累到一定数量后,根据上文提到的地址分布特征进行分类,并且使用对应策略的扫描组件扩展扫描对应特征的地址段存活的IPv6地址。其次还需要寻找没有被分类的地址或地址段的特征,对地址分类的种类需要持续更新。
3. 扫描地址集更新
扫描地址集合需要不断更新,一方面是通过扫描的存活结果进行更新,还有就是持续增加新的地址数据源。通过持续运营来积累更多的IPv6存活地址。
六. 总结
上文介绍的利用地址分布特性的扫描方法,确实能大大缩小扫描的范围,但缺点也是十分明显的。一方面,需要提供存活地址或网段并且不断更新;其次,这种方法并不能发现那些无规律随机分布的地址。当然还有一些其他的方式来发现IPv6地址,比如Cisco博客中提到了通过UPnP服务发现IPv6地址,在我之前写的微信文章也提到过[8] 。此外,还有DNS反向映射获取、公网流量获取、抽样扫描等方法等等。目前,虽然IPv6地址扫描可能还没有一个完美的扫描方法,但可以将主动扫描和被动流量获取等多种发现方法相结合,通过持续的运营,来不断的积累更多存活的IPv6地址。想了解更多的IPv6资产分析相关的内容,敬请期待我们绿盟科技《2019年物联网安全年报》。
[1] IPv6网络就绪专项行动: 645K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3y4F1K9h3W2Q4x3X3g2U0L8$3#2Q4x3X3g2U0L8W2)9J5c8Y4N6D9K9$3u0Q4x3V1k6J5L8i4W2V1j5W2)9J5c8X3y4G2L8Y4c8W2L8Y4c8Q4x3V1j5J5x3o6p5&6i4K6u0V1x3e0m8Q4x3V1j5J5y4q4)9J5c8X3y4G2L8Y4c8W2L8Y4c8Q4y4h3j5J5x3e0V1I4x3K6f1H3i4K6u0W2K9s2c8E0
[2] 理解IPv6的地址分类108K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6&6M7g2)9J5k6h3q4D9K9i4W2#2L8W2)9J5k6h3y4G2L8g2)9J5c8X3q4J5N6r3W2U0L8r3g2K6i4K6u0r3y4o6l9%4x3o6V1^5
[3] IPv6地址扫描技术的研究与应用 刘林波
[4] EUI-64格式生成1a0K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8X3&6T1N6X3&6$3L8Y4k6T1L8W2)9J5c8X3q4J5N6r3W2U0L8r3g2Q4x3V1k6V1k6i4c8S2K9h3I4K6i4K6u0r3z5e0M7&6x3o6t1I4y4e0f1`.
[5] Scan6使用文档 f88K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2K6K9e0k6F1k6i4c8%4L8%4u0C8M7#2)9J5k6h3y4G2L8g2)9J5c8Y4c8G2L8$3I4K6i4K6u0r3K9i4m8$3y4Y4c8G2L8$3I4C8K9i4c8Q4x3V1k6K6j5$3q4F1y4W2)9J5k6r3#2S2L8Y4g2S2L8q4)9J5k6i4m8V1k6R3`.`.
[6] Scan6 f3aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6X3k6$3!0F1N6q4)9J5c8X3W2H3N6U0k6@1L8$3!0D9K9$3W2@1i4K6u0r3j5X3I4G2j5W2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8Y4c8G2L8$3I4K6i4K6u0r3M7$3y4S2L8U0k6Q4x3X3g2U0
[7] IPv6 Hiltlist b92K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6A6M7s2j5$3K9r3W2@1L8r3W2K6N6q4)9J5k6h3N6A6N6r3S2#2j5W2)9J5k6h3W2G2i4K6u0r3
威胁狩猎告别"刻舟求剑"——物联网资产变化研究3b4K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7q4)9J5k6i4N6W2K9i4S2A6L8W2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3M7#2)9J5c8W2N6n7g2r3!0a6g2e0M7J5e0%4u0^5f1q4g2D9j5X3p5&6f1X3y4w2e0f1p5`.[1] 在EUI-64的IPv6地址格式中,第7位为0表示本地管理,为1表示全球管理为每个网卡生成一个Link-Local的IP地址,简单点说就是一个固定的前缀加上MAC地址,由于MAC地址全球唯一,所以这样构成的IP地址是唯一的,有了这个地址后,就可以局域网进行通信了,但是这种地址路由器是不会转发的。