RIP路由协议漏洞利用及防范措施
2019-06-18李建新
李建新
(常州信息职业技术学院软件与大数据学院 江苏常州 213164)
0 引言
路由器在实现网络数据的转发前首先需要配置网络路由信息,配置的方法主要有静态配置和动态配置两种,静态路由配置需要人为地逐条在各路由器中添加,配置较为烦琐,比较适合网络结构相对稳定的小型网络,不能自动适应网络拓扑结构的改变。动态路由配置后期无需人工干预,通过各自的路由算法能够自动适应网络拓扑结构的改变,但对系统资源的占用高于静态路由配置。常用的动态理由配置协议主要有RIP、OSPF、IGRP、BGP等。其中RIP、OSPF、IGRP是内部网关协议,一般位于一个自治系统内部,具有统一的自治系统号。BGP是外部网关协议,是自治系统间的路由协议。而RIP协议由于配置简单,系统开销较小,因此在小型网络中通常会使用RIP作为路由协议[1]。但是RIP协议其自身的安全漏洞会给网络的正常运行带来一定的安全隐患,因此在使用RIP协议的时候,需要做好相应的安全防范措施。
1 RIP协议工作原理
1.1 工作原理
RIP协议是应用较早、使用较普遍的内部网关协议,比较适合在小型同类的一个自治系统内的路由信息的传递。它是基于距离矢量算法的协议,根据RFC1058、RFC2453等文件的规范标准,该协议使用跳数(metric)来衡量到达目标网络的路由距离。
RIP协议在实现时作为路由设备系统中的一个常驻进程,负责从所处网络的其他路由器接收路由信息,更新维护本地的路由表,保证IP层在转发报文时能使用正确的路由。同时,它还负责广播本地的路由表中的路由信息,通知与其相邻的路由器进行路由表的更新[2]。RIP协议在TCP/IP协议族中是位于UDP协议之上的一个应用层协议,路由器借助RIP协议交换路由信息,从而实现属于网络层的路由规则的改变。RIP协议所接收的路由信息都是封装在UDP协议的数据包中的,使用UDP的520号端口接收来自相邻路由器的路由表信息,并对本地的路由表进行相应的修改,同时通告其他的路由器,通过上述方式实现全局路由的有效。
RIP协议是距离向量路由选择协议,从一个路由器到与连接的网络的距离定义为1,因此每经过一个路由器,其跳数会自动加1。任何距离向量路由协议都存在以下问题。每个路由器不知道网络的全局情况,它必须依靠相邻的路由器来获取网络的可达信息。而该路由更新信息在网络中传播慢,存在慢收敛的问题[3]。RIP协议采用计数到无穷大机制来防范这一点,RIP协议中规定其最大的跳数为15,即当经过的路由器的个数超过15个依然不能到达目标网络,即认为上述网络不可达。
1.2 报文格式
目前,RIP协议广泛应用的是V1和V2两个版本,V1版本是有类别路由协议,只支持以广播方式发布协议报文,没有掩码信息,无法支持路由聚合,也不支持不连续的子网。V2版本是无分类的路由协议,可以携带掩码信息,支持路由聚合和CIDR。支持在广播报文中选择到最优下一跳的地址,支持简单鉴别和组播。RIP报文的格式封装如图1所示。
2 RIP协议漏洞利用
根据上述RIP协议原理和报文结构的特点,可以从以下两个方面进行漏洞的利用:
一是运行RIP协议的路由器默认没有采用认证机制,即路由器可以接收来自任何相邻设备的路由信息,而无需验证对方的身份,这就给恶意攻击者实施攻击带来便利。
图1 RIP数据报的封装
二是由于RIP协议下层使用不可靠的UDP协议来进行传输,而UDP协议是一种无连接的、不可靠的传输层协议,在网络会话过程中没有报文时序控制机制,相比TCP报文的时序验证机制安全性较差。在现有的网络报文结构中,基于UDP的报文无法扩充身份验证和报文时序验证机制。恶意攻击者在构造基于UDP的虚假RIP报文数据包时无需考虑当前UDP报文的时序问题。
综上所述,运行RIP协议的网络存在一定的安全隐患。若该网络中存在恶意用户,向网络中发送虚假的路由更新信息,则接收该错误更新信息的路由器则会将该错误路由条目在本地进行存储更新,网络层的IP数据包将按照错误的路由信息进行转发,则有可能造成信息的丢失或泄露,给用户造成一定的损失。
2.1 RIP路由欺骗信息场景构造
基于上述分析,可以搭建如图2的网络拓扑场景。分别对三个路由器的各个接口进行相应的IP地址配置。
图2 RIP路由欺骗场景
在路由器R0、R1和R2上分别配置基于RIPV2的路由协议,当攻击计算机没有发起攻击的情况下,路由表收敛后,R0、R1和R2中的路由表条目分别如表1、表2和表3所示:
表1 R0路由器的路由条目
表2 R1路由器的路由条目
表3 R2路由器的路由条目
2.2 基于Scapy的RIP路由欺骗报文构造
攻击计算机利用Wireshark等工具可以从捕获的数据报中分析出R1路由器发出的路由更新报文,如图3所示:
图3 捕获R1发送的路由更新报文
基于Scapy模块构造虚假的路由更新报文,将到达目标网络192.168.11.0的度量值设置为0,构造以下Python代码进行虚假数据报的发送。
targetip="192.168.8.126"
packet = IP(dst=targetip)/UDP(sport=520,dport=520)/RIP(cmd=2,version=2)/RIPEntry(addr="192.168.11.0",metric=0)
send(packet, iface=dev, loop=1, verbose=0)
利用Wireshark工具捕获上述Python代码运行过程中R2路由器接收到的虚假路由更新报文如图4所示:
图4 捕获攻击计算机发送的欺骗路由更新报文
此时,路由器R2认为从192.168.8.100主机到达目标网络192.168.11.0的度量值为1,而原先存储的路由表信息为从R1路由器到达目标网络192.168.11.0的度量值为2,选取度量值为小的路由表项目,R2路由器被欺骗后的路由条目如表4所示。
表4 R2路由器被欺骗后的路由条目
此时通过R2路由器到达目标网络192.168.11.0/24的数据包都会被转发到192.168.8.100这台攻击计算机上,而操纵这台计算机的恶意用户就可以通过Wireshark等捕获工具分析其中用户的敏感信息。
3 RIP协议防范措施
通过上述分析可以看到利用RIP协议漏洞进行路由欺骗的严重后果,恶意用户在窃取敏感信息的同时有可能导致网络的瘫痪,为避免造成这种后果,可以采用以下措施进行防范。
3.1 使用RIP报文验证机制
在RIPV2协议报文中配置验证字段,其扩充后的报文结构如图5所示,使用20Bytes用于存储验证字段。
1) 0xFFFF:验证标志,该值表明路由表信息需要验证通过后才能交换。
2) Authentication Type:验证类型,当值为0x0002时表明采用明文验证。
3) Authentication Data:验证信息,使用16个Bytes用于存储明文密码字符。
采用验证信息的RIPV2报文在路由器之间交换路由信息就必须先通过身份验证,身份验证成功后,路由器之间才能交换路由表信息;如果身份验证不成功,则路由器之间无法交换路由表信息,使得恶意用户无法直接攻击路由器进行路由欺骗。
图5 带验证的RIPV2报文格式
采用明文的身份验证机制,路由器之间交换路由表的报文如图6所示,路由器之间的验证信息不通过,则无法交换路由报文信息,这就使得恶意攻击者无法直接轻易攻击路由器。
图6 带明文验证的RIPV2报文格式
3.2 采用PPP验证机制
由于RIP协议的路由表信息交换是使用UDP报文进行传递的,UDP报文本身无法扩充身份验证及报文时序验证机制,但是UDP报文是封装在IP数据报中的,IP数据报的传递需要借助于数据链路层的协议,可以通过启用数据链路层上PPP协议的身份验证机制,采用PAP或CHAP身份验证机制,使得路由器之间的数据交换在数据链路层上的连接是安全的。通过下层链路的安全连接间接保证RIP路由信息交换的安全。采用PPP协议在链路层上握手时的报文结构如图7所示。若恶意攻击者试图欺骗目标路由器,则必须与目标路由器在链路层上通过PPP的协议认证,这就给恶意攻击者带来了一定的难度。
图7 PPP协议握手报文结构
4 结束语
RIP协议由于实现和配置简单、占用系统资源较小等优点被广泛应用于企业内部网络中。现如今网络安全问题日益突出,在采用RIP协议部署企业网络的同时也需要充分考虑RIP协议自身的不足,采取相应的措施来保障网络信息的安全。