声明:由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,知微安全以及文章作者不为此承担任何责任。知微安全拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经知微安全允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

IPv6(Internet Protocol version 6),意为“互联网协议第6版”,不仅解决了IPv4地址空间不够的问题,还优化了网络层的通信机制,提高了报文处理过程的性能与安全性。然而IPv6依旧面临着不少安全问题,例如NDP的中间人攻击、Smurf攻击、重复地址检测(DAD)攻击等网络攻击,因此本文介绍了IPv6的基础概念及相关技术,并对IPv6存在的安全问题进行简要分析。

0x00  IPv6基础概念


1、IPv6的地址表示

(1)用十六进制表示,如:FE80:….(2)4个十六进制数一组,共8组,中间用“:”隔开,如:2001:12FC:….(3)地址前缀长度用“/xx”来表示,如:1::1/64(4)简写规则:省略每组最前的0,全0的组可以用“::”表示,但“::”只能出现一次!

2、IPv6地址分类

单播地址

(a)全局单播地址(Global unicast address,GUA),2000::/3,第一组取值从2000到3fff;典型的GUA结构如下:(b)链路本地地址(Link-Local Address),前缀范围为fe80::/10,最后的64bit通常为Interface-ID(EUI-64,随机或手动配置)。单播地址作用:(1)在获取到GUA之前,可使用LLA作为源地址与本地路由器通信,或从DHCPv6获取地址。(2)ICMPv6 RA通告的默认网关为LLA。(3)IGP for IPv6使用LLA作为源地址与对端建立邻接关系,发送路由更新。

(4)来自动态路由协议的路由表项的下一跳使用LLA。

多播地址IPv6已经去除了广播,仅剩下多播地址,采用ff00::/8作为前缀。(所谓多播,即一对多的数据包)

(a)ff00:/8,为IPv6多播保留前缀;

(b)标志位,前三个bit皆为0,最后一个bit为T flag,用于标记两种类型的多播。

永久的(0),也被称为预定义多播,包括已知著名多播和请求节点多播。

临时的(1),也叫动态分配的多播,通常由多播程序分配使用。

(c)范围,定义了多播包所能转发的范围

(d)组ID,代表了不同的多播组

3、IPv6邻居发现协议NDP

NDP邻居发现协议是ICMPv6新增的功能,用于在相同子网内(或链路上)进行设备发现和消息控制。

NDP包含5种消息类型:

(1)邻居请求(NS)(2)邻居通告(NA):用于链路上两台设备的通信,常见的功能是完成ARP解析。

(3)路由器请求(RS)(4)路由器通告(RA):用于链路上设备和路由器之间的通信,常见的功能是IPv6地址的无状态自动配置。

(5) 重定向

4、IPv6的动态地址分配

(1)NDP中的RA消息包含了如下地址相关信息:

(a)网络前缀及前缀长度,以及关于本链路的其它一些信息;

(b)默认网关地址(链路上路由器接口的LLA,即RA消息的IPv6源地址)

(c)3个标志位,用于建议设备如何获取IPv6地址信息,分别为A(自主地址配置)、O(其它配置)和M(手动配置)

(d)可选的信息,如域名,DNS服务器列表。(2)与IPv4不一样的是,IPv6设备能够在无DHCP服务的情况下,动态的确定自己的编址。

如下图所示,使用路由器通告(RA)消息的情况下,可以选择以下三种方式的一种确定编址:

方法一:无状态地址自动配置(LAAC),设备仅使用RA消息确认自己的所有地址需求,即使用前缀生产自己的GUA,使用RA的源地址作为默认网关地址。方法二:SLAAC和无状态HCPv6务器,与方法一一样,通过RA消息确认自己的IPv6 GUA,使用RA源地址作为默认网关,但是通过无状态DHCPv6获取其它信息,如DNS服务器地址。此时DHCPv6服务器不提供和维护IPv6 GUA信息。方法三:有状态DHCPv6务器,与IPv4的DHCP一样,通过DHCPv6获取GUA,但是默认网关依然采用RA的源地址。5、IPv6与IPv4比较

不同点:

(1)名称相同的字段:

版本(version):IPv4的值为4,IPv6的值为6;

源地址与目的地址:IPv4的长度为32bit,IPv6的长度为128bit;

(2)名称已更变的字段,以及名称相同但一些情景下功能不同的字段:

ToS字段更变为Traffic Class,IPv4可以选择使用IP优先级(3bit)或DSCP,IPv6只使用DSCP方法;

总长度字段更变为Payload Length,IPv4总长度字段包含了IPv4头部和数据,而IPv6的长度字段仅为净荷长度(包含扩展头部);

TTL字段更变为Hop Limit,作用相同,仅名称发生变化;

协议字段更变为Next Header,协议字段用于指示数据包净荷所承载的数据类型,IPv6的下一头部功能相似,但还可以指示下一扩展头部;

(3)以下IPv4字段已经从IPv6中移除:

Header Length:由于IPv6的头部为固定长度(40字节),因此不再需要该字段;

Identification,Flags,Fragment Offset:这些字段用于IPv4的报文分片,而IPv6仅在数据源执行分片,且分片通过分片扩展包头实现;

Header Checksum:由于TCP、UDP都拥有自己的校验和,因此无需在L3再加入本字段

Option:已被IPv6扩展头部替代。

Padding:由于IPv6头部长度为固定的40字节,因此无需进行填充。

(4)以下字段为IPv6新增:Flow Label:可以对数据包进行流标记,被定义用于“real-time”服务;(5)以下头部为IPv6新增:Extension Header:扩展头部用于为IPv6提供功能扩展性。其它特性:L2帧头中EtherType字段为0x86dd;分片由分片扩展头部实现。0x02 IPv6过渡技术


1、双栈技术

所谓双栈设备,是指该设备既安装IPv4又安装IPv6的协议栈,从而实现分别与IPv4或IPv6节点间的信息互通。双栈设备可以是主机、打印机、服务器、路由器或其它配置支持两个协议的设备。

2、翻译技术

由于IPv4与IPv6共存必然存在很长时间,除了通过双栈的逐步演进,成熟可靠的过渡技术也能更好地支持网络平滑迁移至IPv6。早期的过渡技术NAT-PT,在实际网络应用中存在各种缺陷,IETF已不推荐使用,被RFC4966废除。当前较为主流的过渡技术为IETF设计的新的解决方案:NAT64和DNS64。

NAT64与DNS64协同,主要实现IPv6-Only的客户向IPv4-Only的服务端发起通信的场景。当然,NAT64也能够使用静态或手动绑定实现IPv4-Only的客户端向IPv6-Only的服务端发起通信的场景。

NAT64主要工作在有状态的形式(与IPv4的NAT相似),它将维护IPv6与IPv4之间的绑定(binding),具体操作如下:

(a)在两个协议之间执行IP头部转换

(b)在两个协议之间执行IP地址转换

如图:来看一个IPv6-Only的客户端向IPv4-Only发起通信的实例:

步骤1:客户端A想要访问www.example.com,于是向LDNS(DNS64)请求AAAA解析。

步骤2-5:DNS64本地无相关缓存,向IPv6 DNS权威服务器请求解析,依然无记录(error),转而向IPv4 DNS权威请求解析,得到该域名的A记录,10.10.10.10。

步骤6-7:DNS64服务器接收到域名的A记录,然后使用DNS64前缀2001:db8:cafe:aaaa::/96,及IPv4地址10.10.10.10,生成IPv6AAAA解析,即2001:db8:cafe:aaaa::0a0a:0a0a/96。

步骤8:客户端A使用自己的IPv6地址作为源地址,获得的IPv6AAAA解析作为目的地址,发出通信报文。

源地址为:2001:db8:cafe:1::100

目的地址为:2001:db8:cafe:aaaa::0a0a:0a0a

步骤9:NAT64路由器接收到该数据包,执行如下行为:

(a)将IPv6头部转换为IPv4头部

(b)IPv6目标地址移除NAT64前缀,将低位32bit的0a0a:0a0a转换为10.10.10.10。

(c)IPv6源地址使用地址池进行转换,可以是1:1或PAT。这里源地址被转换成192.168.99.9。

(d)完成上述动作,NAT64路由器生成一条包含源目的地址的有状态转换条目,当数据包返回时,执行反向转换。

3、隧道技术

隧道技术允许处于孤岛的IPv6设备通过IPv4网络环境相互通信。隧道拥有两种类型的协议,即传输(Transport)协议和被运载(Passenger)协议。在IPv6过渡技术中,传输协议为IPv4,而被运载协议为IPv6。

隧道涉及两台设备,隧道的端点及管理协议,因此拥有三个组件:隧道进入点,隧道离去点,隧道管理协议。按照隧道端点设备的类型,可以分为:主机到主机,主机到路由器,路由器到路由器所谓隧道,即双层报文头部,具体如图:

0x03 IPv6面临的网络攻击


1、NDP的中间人攻击

IPv4中的ARP协议正是由于其默认子网内节点可信而导致其易受Spoofing、DoS等攻击,而且在IPv6中节点除需要利用 NDP进行地址解析之外,还需利用其进行网络配置,如获取地址前缀、MTU等网络参数和进行路由器发现等,所以当 IPv6 被部署在一个非可信网络中,或当可信网络中某节点被入侵而成为恶意节点时,网络中的节点就可能遭受恶意节点利用NDP的安全缺陷进行中间人攻击。

2、Smurf攻击

在IPv4网络中,Smurf攻击可以通过发送伪造的ICMP回应请求到广播地址。请求的源地址是攻击的目标。IPv6没有广播地址,但是它具有一个多播地址,可以到达网络中的所有节点,从而达到完成Smurf攻击。

3、重复地址检测(DAD)攻击

在无状态地址自动配置中,新IP地址在使用前需要进行重复地址检测。在检测过程中,一旦有攻击节点声称解析地址已经被占用,将导致节点地址配置失败,从而形成重复地址检测攻击。

4、其他攻击

  • 由于分段过程是由源设备和目标设备执行的,因此IPv6分段攻击可用于绕过入侵检测系统。

  • 为了帮助IPv4到IPv6机制,有一些已知的隧道技术容易受到拒绝服务攻击。

  • 在IPv4网络中使用Teredo隧道的计算机可以用来绕过防火墙和IDS作为网络外围防御。

  • 对TCP的ICMP攻击仍然有效

0x04 IPv6防护思路


目前正处在IPv4和IPv6共存的时期,对于过渡时期的安全防护可以从以下几个方面着手。

  • 将传统不支持IPv6地址的安全设备,更换为支持IPv6的安全设备进行日常防护;

  • 为了防护IPv6的扩展头攻击,防火墙设备需要支持检查IPv6扩展头合法性的功能;

  • 在防火墙设备和边界设备上实施入口过滤机制,来缓解网络间的源地址伪造攻击;

  • 过渡技术中采用隧道技术时,要尽量使用静态配置隧道,来降低动态隧道的伪造和非法接入的安全风险;

  • 做好IPv6的安全隔离,缩减暴露面,减小被攻击的风险。

ipv6转换成ipv4_IPv6协议及其安全浅析相关推荐

  1. 如何将html转换成url,HTML之Data URL(转)

    Data URL给了我们一种很巧妙的将图片"嵌入"到HTML中的方法.跟传统的用img标记将服务器上的图片引用到页面中的方式不一样,在Data URL协议中,图片被转换成base6 ...

  2. C语言Socket之iOS项目中的socket应用/IPV6 转换/域名转IP/解析socket接受的数据/心跳包

    使用系统API合成IPv6: 如果你的APP需要连接的服务器 只有IPv4地址,没有域名,可以用 getaddrinfo 来解决.下面的代码,将IPv4地址(如:192.0.2.1) 地址转换为IPv ...

  3. fiddler下如何将HTTPS转换成HTTP

    Fiddle里将HTTP和HTTPS互相转换 一.为什么要修改协议:为了提高安全性,请求协议为https,但测试环境暂不支持https,在完善测试环境期间,为了把控测试进度,临时采取将https协议改 ...

  4. RGBD 转换成点云 open3d

    深度图转为点云说白了其实就是坐标系的变换:图像坐标系-->世界坐标系.变换的约束条件就是相机内参,公式很简单: ,其中x,y,z是点云坐标系,x',y'是图像坐标系,D为深度值. 在进行上述转换 ...

  5. php把数组转换成对象,php怎么将数组转换成对象

    echoecho() 函数输出一个或多个字符串.注释:echo() 函数实际不是一个函数,所以您不必对它使用括号.然而,如果您想要传多于一个参数给 echo(),使用括号将会生成解析错误.print ...

  6. 用 ffmpeg + m3u8-segment 将h264的ES流转换成m3u8的过程记录

    from:http://blog.chinaunix.net/uid-8489474-id-4538230.html 苹果公司的 HLS(HTTP Live Streaming) 使用的是m3u8这种 ...

  7. 用 Python 将微信热文转换成Word文档 | 神级操作

    不得不说微信公众号已经成为了一个开放平台,每天数以万计的微信公众号文章在这产生,我们关注一个微信公众号每天便可以看到新的文章,我们同时也不知不觉的将好的文章分享到给朋友. 那么如何保存一个好的文章呢? ...

  8. Vue.JS项目输入框中使用v-model导致number类型值自动转换成string问题的解决方案

    老文章了,目前用el-input v-model.number就能解决 很简单的操作,不知道当初在做什么,下文请直接忽略- Vue.JS项目中v-model导致输入框中number类型值自动转换成st ...

  9. python list转换成array_一文掌握Python【不定期更新】

    目录 一.Numpy 1 基本操作 2 随机数 3 打乱训练数据 4 得到元素的最值 5 拼接数组 6 得到函数的信息 7 得到累乘即各项相乘的结果 8 判断一个数是否在数组中 9 数组的变换 10 ...

最新文章

  1. android camera工程师,浅析Android Camera架构
  2. C语言中的scanf()函数介绍
  3. 简述python程序结构_Python程序结构
  4. python检查目录是否存在,如果不存在则创建
  5. css设置并排,CSS并排排列2个div
  6. 完整的聚合支付中心设计方案
  7. RabbitMQ的5种队列_路由模式_入门试炼_第8篇
  8. 一文搞懂注册中心 zookeeper 和 eureka 中的CP和 AP
  9. .NET的可调信号量
  10. 返回值带头信息 php_php与Redis实现分布式锁
  11. golang ide 下载
  12. Linux系统下卸载jdk的步骤
  13. r730服务器安装系统蓝屏6,安装系统蓝屏解决解决方法
  14. 2021年末大盘点。IT行业那些薪资高前景好的岗位,你知道几个?
  15. deepin[idea添加桌面]
  16. linux下运行和打包electron项目遇到的错误处理(打包使用electron-builder)
  17. 【数据挖掘】主成分分析Python实现
  18. 97年的Mekka ’97 4K Intro世界编程大赛冠军作品
  19. 文字翻译软件-文字批量翻译转换器免费
  20. 【UE4】蓝图结构体入门及案例

热门文章

  1. 什么是 SAP Commerce yForms
  2. npm publish 发布一个 Angular 库的时候报错以及解决方法
  3. 为 Angular service 注册 provider 的三种方式
  4. 为什么我们需要给 Angular library 创建多重入口 multiple entry point
  5. TypeScript 里 never 类型的用法举例
  6. 介绍一个 Windows 10 资源管理器的替代工具 - Explorer++
  7. 我这满目疮痍的2020年
  8. 推荐一个好用的Chrome扩展,专门处理xml的,名叫XML Tree
  9. MyTask - old implementation - getEntitySet
  10. SAP ui5 setModel 的核心逻辑