如果需要建立的实体越多,那么要分配的内存也越多。占用系统的资源也越多。象我们前面说的向一台路由器发布邻居ID随机的OSPF邻居报文,可以在短时间内消耗很多系统的内存,如果程序员当初没有考虑到这种情况,很有可能造成非法的内存操作,而导致OSPF完全不能工作。”
“WOW”,张大民感叹说, “这也是挺厉害的一种攻击方法。而且这种攻击方法也不依靠协议的特殊功能。任何协议都有数据结构,如果我们能在远程向这些数据结构中插入一些无用的垃圾数据,或者可以远程操纵这些数据结构的运行和分配,那可以说是非常酷的一种攻击方法”。
“没错”,老头说, “而且注意到我并不需要向一台路由器发布大量的报文,象现在这些DDOS攻击,动不动就要上G bps的网络流量。我只需要向一台路由器发布很少的报文,网络流量可能也就是几Kbps,就有可能把一台性能很高的路由器弄下线,可谓是四两搏千斤”。
“嗯”,张大民点头称是。 “不管一台路由器的性能多么强大,是思科的GSR也好,还是JUNIPER的M系列,只要它们的网络协议实现上有这样的漏洞,发过去几百个类似的报文就有可能把它们弄下线”。
“是”,老头说, “而且对一个网络协议的实现程序来来说,用到的数据结构就那么几个,所以试着攻击一下它们应该不很费时间。比用异常报文攻击的方法要省时多了”。
逻辑运行攻击
张大民对今天了解到的东西有无限感慨。网络安全真的是无处不在,博大精深。不论是在不同操作系统的主机上,还是在组成互联网的这些网络设备上,对任何一方面的网络安全作出有成效的研究都有可能要花费一两年的时间。而这个老头对自己讲的这些, 为自己在网络协议安全性上的知识有了一个质的飞跃,节省了自己很多的时间和很多可能要走的技术上的弯路。想到这里,张大民对老头充满了感激之情。一高兴,也不管哪个垃圾箱多脏多远,虽然有点后悔自己一天到晚弄电脑,没有好好锻炼一下身体,捡破烂也有点力不从心,还是爬上爬下,为老头多捡了好多值钱的破烂。晚上还要坚持请老头吃顿饭。老头争不过他,老少二人来到了镇边的一个小酒馆,要了些江南小菜。边吃边聊。
“能对网络协议的数据结构进行远程的攻击当然好,但我需要对协议有比较深刻的理解,还要猜一下一个协议到底要使用什么样的数据结构,可能一开始操作起来还有些难度。而相对来说,使用异常报文的攻击就相对来说容易一些了”。张大民说。
“你以为异常报文的攻击就那么容易么?”,老头问。
“是啊,我只要找到报文的格式,然后修改一下就行了”。张大民说。
“对于没有状态的协议来说,当然是这样的。例如IP,UDP等”,老头说, “但对于有状态的协议来说,可就不是这么简单了。”
“什么是有状态的协议?”,张大民问。
“例如TCP, 你应该知道TCP的哪个比较复杂的状态转换图吧?”,老头问。
“当然”,张大民说, “在学校里面上计算机网络时就知道了”。
“那就好”,老头说着,在地上又划了个图。
此主题相关图片如下:


对没有状态的网络协议的异常报文攻击是比较简单的。你构建好了异常报文,只管发就是了。但对于有状态的网络协议来说,如果它当前不在某一个状态,而你给它发布一个报文,它根本就不会处理这个报文,也就根本不会达到攻击的效果。你需要先送几个有效的报文,驱动网络协议到达某个状态,然后再送一个在这个状态内被网络协议接收的异常报文,才能达到攻击的效果”,老头说, “每一个协议的有限状态机都是不要一样的,BGP有BGP自己的状态转换,TCP有TCP自己的状态转换。所以如果你想攻击有状态的协议,要对协议如何运行非常了解才行”。