基于OSPF路由协议安全角度的分析
下面我们来介绍一下OSPF路由协议。这个协议的使用在路由器当中是有着非常重要的地位的。那么接下来就让我们来细细了解一下。OSPF是动态连接状态路由协议,其保持整个网络的一个动态的路由表并使用这个表来判断网络间的最短路径,OSPF路由协议是内部使用连接状态路由协议,协议通过向同层结点发送连接状态信息(LSA)工作。
当路由器接收到这些信息时,它就可以根据SPF算法计算出到每个结点的最短路了。其他相临路由器通过使用OSPF路由协议的Hello协议每10秒发送一个问候包给224.0.0.5,然后接收这些路由器发回的信息。一个OSPF路由协议的hello信息包头可以通过iptraf来嗅探到,如下所示:OSPF hlo (a=3479025376 r=192.168.19.35) (64 bytes) from 192.168.253.67 to 224.0.0.5 on eth0。192.168.253.67边界路由器发送一个helo信息包给多播(224.0.0.5)来告诉其他路由器和主机怎样从192.168.19.35联系区域a(a=3479025376)。一旦路由器接受到Hello信息包,它就开始同步自己的数据库和其他路由一样。
OSPF协议相关的漏洞和防范措施
OSPF由于内建几个安全机制所以比起RIP协议安全的多,但是,其中LSA的几个组成部分也可以通过捕获和重新注入OSPF路由协议信息包被修改,JiNao小组开发了一个FREEBSD divert socket的LINUX实现并在它们的测试中使用到。
OSPF可以被配置成没有认证机制,或者使用明文密码认证,或者MD5,这样如果攻击者能获得一定程度的访问,如他们可以使用如dsniff等工具来监视OSPF信息包和或者明文密码,这个攻击者可以运行divert socket或者其他可能的各种类型ARP欺骗工具来重定向通信。JiNao小组发现了有关OSPF路由协议的4种拒绝服务的攻击方法,下面是简单的说明:
Max Age attack攻击 LSA的最大age为一小时(3600)
攻击者发送带有最大MaxAge设置的LSA信息包,这样,最开始的路由器通过产生刷新信息来发送这个LSA,而后就引起在age项中的突然改变值的竞争。如果攻击者持续的突然插入最大值到信息包给整个路由器群将会导致网络混乱和导致拒绝服务攻击。
Sequence++ 攻击 即攻击者持续插入比较大的LSA sequence(序列)号信息包,根据OSPF的RFC介绍因为LS sequence number(序列号)栏是被用来判断旧的或者是否同样的LSA,比较大的序列号表示 这个LSA越是新近的。所以到攻击者持续插入比较大的LSA sequence(序列)号信息包时候,最开始的路由器就会产生发送自己更新的LSA序列号来超过攻击者序列号的竞争,这样就导致了网络不稳定并导致拒绝服务攻击。
最大序列号攻击
就是攻击者把最大的序列号0x7FFFFFFF插入。根据OSPF的RFC介绍,当想超过最大序列号的时候,LSA就必须从路由domain(域)中刷新,有InitialSequenceNumber初始化序列号。这样如果攻击者的路由器序列号被插入最大序列号,并即将被初始化,理论上就会马上导致最开始的路由器的竞争。但在实践中发现在某些情况下,拥有最大MaxSeq(序列号)的LSA并没有被清除而是在连接状态数据库中保持一小时的时间。
伪造LSA攻击
这个攻击主要是gated守护程序的错误引起的,需要所有gated进程停止并重新启动来清除伪造的不正确的LSA,导致拒绝服务的产生。这个攻击相似对硬件的路由器不影响并且对于新版本的gated也没有效果。nemesis-ospf能对OSPF路由协议产生上述攻击,但是,由于nemesis-ospf太多的选项和需要对OSPF有详细深刻的了解,所以一般的攻击者和管理人员难于实现这些攻击。并且也听说nemesis-ospf也不是一直正常正确的工作,就更限制了这个工具的使用价值。
OSPF认证需要KEY的交换,每次路由器必须来回传递这个KEY来认证自己和尝试传递OSPF消息,路由器的HELLO信息包在默认配置下是每10秒在路由器之间传递,这样就给攻击者比较的大机会来窃听这个KEY,如果攻击者能窃听网络并获得这个KEY的话,OSPF路由协议信息包就可能被伪造,更严重的会盲目重定向这些被伪造的OSPF路由协议信息包。当然这些攻击少之又少,不光光是其难度,重要的是因为还有其他更容易的安全漏洞可以利用,谁不先捏软柿子。这里建议如果一个主机不要使用动态路由,大多数的主机使用静态路由就能很好的完成起功能。因为使用动态路由协议很会受到攻击,例如,几年以前gated软件就被发现有一个认证的问题。
关于使用IRPAS对CDP和IRDP攻击