ICMPv6协议脆弱性分析与攻击测试

ICMPv6协议脆弱性分析与攻击测试

刘武,段海新,林涛

(清华大学信息网络工程研究中心 北京 100084

1. 引言

由于IPv4地址的迅速枯竭,现有Internet向以IPv6协议为代表的下一代互联网过渡已成大势所趋。下一代互联网意味着更多的应用、更快的速度和更大的规模。然而,随着网络应用的增加、速度的加快和规模的变大,必然面对更多的安全风险,因此网络安全研究是下一代互联网研究中的一个重要的领域。

IPv6虽然解决了IP地址不足的问题,同时也提供了一定的安全机制如IPSec等,但是其实施与部署非常困难。研究表明,现有互联网上的安全问题在下一代互联网中仍然存在,同时还不断涌现出针对下一代互联网的攻击手段,给国民经济和个人隐私带来巨大损失。本文主要分析在IPv6协议族中起着核心作用的ICMPv6协议,并通过攻击实例验证相关协议的脆弱性,希望通过本文增强人们的IPv6网络安全意识。

2. ICMPv6协议简介

ICMPv6协议是IPv6协议族中的一个基础协议,它合并了IPv4中的ICMP(控制报文协议)IGMP(组成员协议)ARP(地址解析协议)RARP(反向地址解析协议)RA(路由广播)等多个协议的功能。ICMPv6协议在IPv6网络中主要通过ICMPv6信息报文(Informational Message)和错误报文(Error Message)的交换来实现以下核心功能:

l         路由前缀信息的获取

l         地址解析

l         差错控制

由此看出,ICMPv6协议控制着IPv6网络中的地址生成、地址解析、路由选择、以及差错控制等关键环节,因此对ICMPv6协议的安全性进行深入分析尤为重要。

如表1所示,无论是ICMPv6信息报还是错误报都存在着被利用的可能,本文以下部份将举例进行描述。

1 ICMPv6协议中部份信息报文(Informational Message)和错误报文(Error Message)

 消息类型

Type

Code

简要描述

攻击利用

Error Message

1

0:没有到达目的地的路由

1:与目的地的通信被管理员禁止

2: (not assigned)

3:地址不可达

4:端口不可达

路由器或源主机在由于除业务流拥塞之外的原因而无法转发一个包的时候产生

 

2

0

包太长

 

3

0:hop limit exceeded in transit

1: fragment reassembly time exceeded

超时

 

4

0:erroneous header field encountered

1:unrecognized Next Header type encountered

2:unrecognized IPv6 option encountered

参数问题

 

 Informational Message

128

0

Echo Request

 

129

0

Echo Reply

 

133

0

路由请求(RS)

 

134

0

路由宣告(RA)

 

135

0

邻居请求(NS)

 

136

0

邻居宣告(NA)

137

0

路由重定向(RR)

DDoS攻击

 

3. ICMPv6协议的脆弱性分析

本节重点分析部分ICMPv6消息的安全脆弱性。

3.1邻居发现协议脆弱性分析

IPv6用邻居发现协议Neighbor Discovery代替了IPv4下的ARP协议来获取局域网内部机器的Mac地址这是局域网内主机之间通信的前提条件。邻居发现协议主要包括两种格式的ICMP6报文:邻居请求NSNeighbor Solicitation)和邻居宣告NANeighbor Advertisement)。

邻居发现协议的工作原理:

当局域网中的两台主机AB之间通信前,A必须首先获取BMAC地址,主要步骤如下:

(1)    A以广播的方式向FE02::1 发送一个ICMPv6 NS消息,询问 B MAC地址

(2)    局域网中每个节点都能接收到该NS请求,当一个节点接收到该NS请求后,将目标MAC地址与自身MAC地址进行比较,如果不一致,则不应答;反之,如果所请求的MAC地址与自身MAC地址相等,则回应一个邻居宣告消息NA,表明自己就是所要请求的节点。本例中,在正常情况下,只有B回应NS请求,应答包中包含B MAC地址。

 

1 邻居发现协议工作原理

邻居宣告报文的选项

需要特别注意的是NA3个特殊的标志位,R表示是否是路由,S表示是否是target本机做出的宣告,O表示是否覆盖原有的缓存。设置这几个标志位的主要目的原本是为了提高提高局域网节点工作的效率。

 

2 ICMPv6邻居宣告协议中的选项

邻居发现协议安全隐患分析

通过以上的分析我们可以看出,IPv6下的邻居发现协议于IPv4下的ARP协议相比,在安全方面,并没有改进。主要体现在以下几个方面:

第一,对于NSICMP6报文,局域网中的任意节点,只要在局域网中监听到,就能回复,缺乏认证过程。所以IPv4下的ARP欺骗,在IPv6下可以利用NA欺骗代替,其原理是一样的,此处不再重复。

第二,相对于IPv4下的ARP应答包,NA作为IPv6下的应答包多了上述所说的3个标志位,不可否认,在所有局域网内节点都正常工作的情况下,这3个标志位无疑可以提高局域网节点工作的效率,但是一旦存在某个恶意节点,这3个标志位,无疑将成为恶意节点的有力工具。

首先通过R标志位,恶意节点可以伪装成路由,通过S标志位,恶意节点可以伪装成本机,对恶意攻击最有利的要数O标志位,恶意节点可以向被攻击者路由表中植入虚假路由信息。因为在IPv4下,邻居缓存表是每隔一定的时间刷新一次,恶意节点要覆盖正确地缓存可能要发送大量的虚假应答,容易被检测出,而在IPv6下利用O标志位覆盖正确的缓存则只需要发送少量的虚假NA包,非常难检测。

3.2 ICMPv6重复地址检测协议脆弱性分析

IPv6网络中的节点地址配置可以采用动态分配或静态设置两种方式,对于目前广泛采用的动态IPv6地址配置,需要经过以下几个步骤:

(1)    从路由器或默认网关处获取IPv6地址前缀,如Prefix

(2)    节点生成一个后缀地址Suffix

(3)    将前缀地址与后缀地址拼接成完整的IPv6地址:Prefix-Suffix

(4)    执行重复地址检测(DAD: Duplicate Address Detection),判断Prefix-Suffix是否已经被网络中其它节点占用:

a)         A以广播的方式向FE02::1 发送一个ICMPv6 NS消息,询问 Prefix-Suffix是否已经被网络中其它节点占用。

b)        局域网中每个节点都能接收到该NS请求,当一个节点接收到该NS请求后,将目标地址与自身地址进行比较,如果不一致,则不应答;反之,则回应一个邻居宣告消息NA,表明自己已经使用了该IP地址。

(5)    如果没有收到回应,则将Prefix-Suffix配置本机地址;反之,转第(1)步,重复执行上述步骤。

 

3 重复地址检测协议工作原理

ICMPv6重复地址检测协议安全隐患分析

在执行重复地址检测的过程中,由于缺乏认证过程,局域网中任何节点都可以回应相应请求。这样,攻击者可以针对某个特定的主机(或局域网内所有主机)所发出重复地址检测消息进行回应,使得相应节点无法配置IPv6地址,从而无法连网。

3.2路由发现协议脆弱性分析

IPv4下,网关地址往往需要自己手动设定。IPv6下由路由请求RS和路由宣告RA两种ICMP6的报文共同构成了路由发现协议。该协议的作用一方面是为了帮助局域网内部的节点寻找网关或路由器,使该节点能够与外网通信,另一方面,对于刚接入网络的新IPv6节点,先根据网关或路由的信息设定自己的IPv6地址,才能和其他节点进行通信,两种报文的格式。

 

4 路由发现协议工作原理

路由发现协议的工作原理:

(1)    客户端向所有路由器地址(FF02::2)发送路由请求消息RS或者路由器周期性地向所有节点(多播地址FF02::1)发送路由宣告消息RA

RA报文的IP包源地址必须填写本地链路地址,这是因为路由器往往有多块网卡,如果填写全局地址,接到宣告的节点不知道应该发给那个网卡,而利用本地链路地址与网卡Mac地址的一一对应性,能唯一的标识出为节点服务的网卡。IP包的目的地址分两种,如果RA是路由定期广播整个局域网的,就填广播地址,如果是对于RS的应答,则填写请求节点的地址。其他的诸如lifetimereachable time以及options等都是一些设置参数,比如prefix(地址前缀)、优先级等,大部分对于本文意义不大,但是优先级的设置可以让你在所有路由中,取得优势地位。

(2)    客户端根据RA消息配置地址前缀和路由信息。

路由请求RS报文比较简单,IP包的目的地址当然要填写广播地址,而源地址填写请求者的地址即可,options可以填写请求者的Mac地址。

路由发现协议安全隐患分析

通过以上分析我们不难发现这个协议的漏洞。由于缺乏源地址认证,局域网内任意节点都都可以发送路由宣告消息RA,从而将自己伪装成路由。对于动态获取IPv6地址的节点,它是无法分辨哪个才是正确路由的。如果恶意的节点伪装成路由,并且在RA中将路由的优先级设为最高,动态获取IP的节点极有可能将数据包交由这个恶意节点转发。

导致以上漏洞主要原因是缺乏认证机制。

3.3 ICMPv6重定向协议分析

IPv6协议中,重定向报文的主要作用是为局域网内的节点提供正确的路由选择。主机在启动时具有一定的路由信息,但不一定是最优的,通过ICMPv6重定向协议路由器检测到IP数据报经非最优路由传输,就通知主机去往该目的地的最优路径。

IPv6网络中,局域网一个节点是允许多个路由存在的,至于交给谁转发则由优先级决定,但是对于发往不同目的数据包,第一跳路由的选择将会影响数据包发送的效率。

ICMPv6重定向协议工作原理:

这种报文由路由器发给局域网内的节点。假设内部节点A要将数据包发送给外部节点X,当路由器B收到这个数据包并要转发的时候,B发现自己和A是出于一个局域网的,但这个数据包并不是由A直接发过来的,而是由局域网内另一个路由C发过来的,那么B就会告诉A,如果要发送数据包给X,直接发给B更好。这也就是报文中targetdestination的意义,在本例中,target就是BIPv6地址,destination就是XIPv6地址。而options里面可以包括BMac地址,或者包含BA转发的原IP包,这个IP包,对于传输层的协议也许会有帮助。A在收到Redir报文后自然会改变原有的路由表,将发往X的数据包直接交给B转发。

ICMPv6重定向协议安全隐患分析

ICMPv6重定向协议本身的主要功能是为了保证主机拥有动态的、小而优的路由表,以提高报文的转发效率。但是由于ICMPv6重定向协议同样缺乏源地址认证,对于局域网恶意节点来说,可以利用ICMPv6重定向报文实现数据报的非法重定向,从而实现多种攻击措施。比如它首先伪装路由器,然后再发送Redir报文告诉被攻击者:发往某个外网节点的数据包,走自己这条路由更好,那么被攻击节点就会将数据包交由恶意节点转发,恶意节点就可以不转发禁止其通信,或进行一些篡改。

恶意节点利用ICMPv6路由重定向报文实现数据报重定向的基本步骤:

(1)    恶意节点伪装路由器

(2)    发送Redir报文

(3)    告诉被攻击者:发往某个外网节点的数据报,走攻击者指定的路由更好

(4)    被攻击节点修改路由表,将数据报交由恶意节点转发

(5)    恶意节点控制被攻击者的数据报

(6)    实施其它攻击措施,如,丢弃、篡改等

3.4 ICMPv6 echo request/reply报文的安全脆弱性分析

IPv4一样IPv6网络中ICMPv6 echo request/reply报文一样可以被攻击者利用实现DDos攻击。主要步骤如下:

(1)    攻击者Attacker冒充被攻击者victim向组播地址FF02::1发送一个 ICMPv6 echo

(2)    局域网内所有活跃主机收到该请求后,将向victim回复ICMPv6 reply

(3)    Victim在短时间内收到大量ICMPv6 reply包,超出其处理能力,导致拒绝服务,严重时,可能导致整个局域网瘫痪。

 

5 ICMPv6 echo request/reply报文的利用

4 ICMPv6脆弱性攻击测试实验

针对ICMPv6协议的上述安全威胁,本文实现了基于ICMPv6协议的几种典型网络攻击,虽然每种具体攻击的实施细节略有不同,但其核心思想就是基于ICMPv6消息的“欺骗”技术,并在此基础上开发实现了ICMPv6脆弱性攻击测试代理H6Proxy

4.1 ICMPv6脆弱性攻击测试代理H6Proxy功能结构

如图6所示为本文所实现的ICMPv6脆弱性攻击测试代理H6Proxy,其工作原理如下:

(1)    H6proxy启动后,首先通过活跃性探测模块探测局域网的活跃主机,并记录下相关重要信息,如IPv6地址(全局地址,链路本地地址)MAC地址,以及默认路由、缺省网关等。

(2)    综合利用ICMPv6消息报文和差错报文如NSNARSRA以及RR等,向攻击对象V注入虚假路由信息、虚假IPv6地址(全局地址,链路本地地址)和虚假MAC地址,将攻击对象V的数据流重定向到事先指定的攻击主机上。

(3)    根据攻击者的需要,执行相应攻击命令。首先进行协议分析,然后根据攻击命令的需要,篡改相关数据包。

(4)    转发篡改后的数据包。

 

6 ICMPv6脆弱性攻击测试代理H6Proxy

4.2攻击测试举例

由于版面所限,本文仅以消息篡改攻击来展示ICMPv6协议的脆弱性。如图7所示为攻击前的正常网页。注意,正常情况下,该网页第一行显示的内容为:The KAME project

7 攻击前的正常网页

现在,启动ICMPv6脆弱性攻击测试代理H6Proxy(如图8所示)

 

8 启动ICMPv6脆弱性攻击测试代理H6Proxy

H6proxy启动后在后台等待具体的攻击命令。

现在,通过Web攻击界面发布消息篡改命令。如图9所示,分别输入攻击对象、攻击目标,被篡改内容,和篡改后的内容等,然后点击“启动攻击”按钮。

 

9 发布消息篡改命令

执行消息篡改命令后,重新访问网页http://www.kame.net。发现原来的“The KAME project”已经被篡改为“The HACK project”了!

 

10 执行消息篡改命令后的页面

总结

通过本文的分析与实验,我们发现,IPv6仍然存在着许多安全隐患,希望本文能起到一个抛砖引玉的作用,以此吸引更多的人来关心IPv6网络的安全性问题。

如何同时运行同一个应用程序的多个实例

在Windows系统中,有的应用程序只能运行一个实例,为了在一个登录界面中运行两个或多个应用程序实例可以采取以下方法:
1. 创建新的用户
进入[控制面板]–>[用户账户]–>[创建一个新帐户]–>“为新帐户键入一个名称”(假设为user01)–>下一步–>创建账户。
创建账户完毕后继续在 [用户帐户]对话框中为刚才创建的用户“user01”设置一个密码(假设为userabcd)。
2. 在同一个登录终端上运行多个应用程序
右键点击应用程序名(无论是桌面上的,还是开始菜单上的,还是快速启动栏…)–>选择[运行方式...]–>选择[下列用户]–>在[用户名]中输入user01,在[密码]框中输入userabcd。这样就能打开应用程序的新实例了。

说明:如果想运行更多的实例,那就创建更多的系统帐户。

Hello world!

Welcome to blog.cost.edu.cn. This is your first post. Edit or delete it, then start blogging!

WordPress Themes