OSPF协议与RIP协议的原理及脆弱性分析
范红艳1,成军2
1北京邮电大学计算机科学与技术学院,北京 (100876)
2西安邮电学院计算机科学与技术学院,陕西西安 (710061)
E-mail:fanicy@
摘要:本文首先介绍了OSPF(Open Shortest Path First,开放最短路径优先)路由协议和RIP(Routing Information Protocol,路由信息)协议工作的基本原理,之后分析研究了两种协议的脆弱性及攻击方法。
关键词:OSPF , RIP , 路由协议 , 脆弱性 , 攻击方法
中图分类号:TP 393.08
1.引言
这些年随着计算机网络规模的不断扩大,路由技术已经成为网络技术中的关键部分,路由器(Router)是因特网上最为重要的设备之一,而运行在这些路由器上的路由选择协议实现了一种用于在终端之间发现最佳路由,描述对等关系,交换信息方法以及其他各种策略的机制。正是这些遍布世界各地的数以万计的路由器构成了因特网这个庞大的网络神经系统,而路由器正是扮演着中枢神经的角色。
目前互联网安全方面已经定义了四大最高级别的要求:终端系统安全,端到端安全,服务质量安全(QoS),以及网络基础设施安全。本文中,我们关注网络基础设施安全问题,尤其是对常用的路由选择协议RIP和OSPF存在的安全隐患问题的关注。
本文接下来首先阐述了两种协议的基本工作原理以便我们更好的理解和发现这两种协议所存在的安全隐患,最后对RIP和OSPF协议的脆弱性方面进行了分析研究。
2.工作原理
2.1 RIP协议的工作原理
RIP(Routing Information Protocol)协议是基于贝尔曼-福特(Bellman-Ford)算法的,也称为距离矢量(Distance Vector)算法,该算法自从ARPANET网络初期就一直用于计算机网络的路由计算。
作为一种内部网关路由选择协议,用于在一个自治系统(AS)内的路由信息传递。 RIP 协议适合于在中小型的网络上配置,不适合复杂的大型网络环境,因为RIP协议的设计者当时认为一个网络的直径不应该超过15跳,所以RIP协议只支持15跳以内的中小型网络的路由。
2.1.1 RIP的路由表
RIP协议使用跳数(hop count)作为度量标准(metrics)来衡量到达目标地址的路由距离。每个运行RIP协议的路由器都维护着一张路由表,这张路由表中至少要包括以下信息[3]:(1)IP地址:该地址是所要到达的目的主机或网络的地址。
(2)下一跳:数据包所要到达的下一个路由器的地址。
(3)接口:数据包到达下一跳所使用的物理网络接口。
(4)跳数:即度量值。RIP的度量是基于跳数(hop count)的,并规定两个直连的路由器间的跳数为1,因此,每经过一台路由器,路径的跳数就加一。跳数越多,路径就越长,RIP
算法会优先选择跳数少的路径。RIP支持的最大跳数是15,跳数为16的网络被认为不可达。(5)计时器:有时也称为年龄,用于记录自上次路由更新以来的时间总和。RIP中路由的更新是通过定时广播实现的。缺省情况下,路由器每隔30秒向与它相连的网络广播自己的路由表,接到广播的路由器将收到的信息添加至自身的路由表中。每个路由器都如此广播,最终网络上所有的路由器都会得知全部的路由信息。正常情况下,每30秒路由器就可以收到一次路由信息确认,如果经过180秒,即6个更新周期,一个路由项都没有得到确认,路由器就认为它已失效了。如果经过240秒,即8个更新周期,路由器仍没有得到确认,它就被从路由表中删除。
另外,各种标志位和其他内部信息也有可能包括在路由表中。例如,有些标志位用于记录路由最近是否发生变化,以备触发更新时使用。
2.1.2 RIP的工作流程
图1 RIP的工作流程
RIP的工作流程很简单,如图1所示,当在Router A路由器的某接口上启动RIP,接口以广播形式向邻居发送路由表信息请求,邻居Router B接收到路由表信息请求,就发送整个路由表信息对请求进行响应;Router A和Router B在启动后就开始周期发送并周期更新路由。Router A检测到路由变化时,以广播形式向邻居发送触发更新,通知邻居路由变化。运行RIP 协议的路由器并不是把每一条新的路由信息都添加到自己的路由表中。只是在以下三种情况下,路由器会根据所获得的路由信息对路由表进行修改:
(1)如果收到的路由信息在自身的路由表中不存在,则添加。
(2)如果收到的路由信息的目的子网和现有路由表中一项相符,而且量度值比现有的度量值要小,则用新的路由替换现有的,否则,忽略该路由。
(3)如果收到的路由信息的目的子网和下一跳路由器地址和现有路由表中的某一项都相同,则无论度量值减小,还是增加,都修改度量值。
2.2 OSPF协议的工作原理
OSPF是一种典型的链路状态路由选择协议,该协议是基于链路状态算法,也称为
Dijkstras算法或最短路径优先(SPF)算法。使用OSPF的路由器彼此交换并保存整个网络的链路信息,每个路由器中都保存着一致的链路信息数据库,从而掌握全网的拓扑结构,独立计算路由。目前广为使用的是OSPF第二版,标准为RFC2328。
不同于基于距离矢量的RIP协议,作为链路状态协议的典型,OSPF具有支持大型网络,路由收敛快,占用网络资源少等优点,在目前应用的路由协议中占有重要地位,广泛应用于Internet和Intranet。
OSPF协议的基本思想是路由器先寻找它们相邻的路由器及其链路状态,然后通过链路状态公告(LSA)向整个区域通告后,各个路由器建立起完全相同的这个网络拓扑结构,每个路由器再据此以自己为树根(root)用生成树(SPF)算法产生自己的路由表。值得注意的是,运行OSPF协议的路由器要产生三个表:邻接数据库,拓扑数据库和路由表。
2.2.1 OSPF的链路状态通告
链路状态通告(LSA)就是路由器之间发送的路由选择信息的小分组。LSA以固定的时间间隔扩散至整个网络,每个初始路由器的最新的LSA仅在每次连接时传递一次。当路由器传递LSA时,它们会实时调整链路年龄域。
图2 LSA的头部结构
链路年龄从零开始,每经过一个路由器加1,保存在数据库中的LSA 每隔一秒也加1。当链路年龄达到3600(MaxAge)时,表示该LSA已过期,必须从数据库中移去[2]。
链路序号主要用来发现过时或重复的LSA数据包。从0x80000001(0x80000000系统保留)开始,路由器每新产生一个LSA,链路序号就加1。当链路序号超过最大值0x7FFFFFFF 时,该LSA必须首先从所有路由器的数据库中清除,然后路由器才能从头开始发送链路序号为
0x80000001的LSA数据包。方法如下:路由器维持该LSA 的链路序号0x7FFFFFFF不变,将链路年龄设为最大值3600,发送给相邻路由器。其他路由器接收到该LSA,知道LSA已过期,于是从数据库中清除该LSA记录。
LSA的更新由其链路序号,链路年龄和链路校验和来决定。
(1)拥有较新的链路序号值的LSA将是最新的LSA,如果链路序号相同,则不进行更新。