您现在的位置: 中国公众科普网-平阳科协 >> 科普创作 >> 科普小说 >> 正文

黑客张大民江南小城奇遇记(3)

作者:马丁 文章来源:cnsea.org 点击数:3975 更新时间:2005/7/23 22:58:00

“有没有这样简单的方法呢?”,张大民问。

  “随机”,老头说。

  “随机?什么意思?”,张大民问。

  “我们对一个报文中所有的域都随机产生一个值,这样我们就得到了一个随机的报文内容,如果我们产生足够多的随机值,那么我们就等于把这条黑线向右推了又远些·。老头说。

  “是这样”,张大民点头称是。“如果你用普通的PC,对于IPv4的报文头产生随机的内容,运行它个一两个月,也没有关系,没准儿还可能找到新的漏洞”

  “去看看那些大的网络设备供应商的网络安全漏洞列表”,老头说, “大部份都是这些最简单的,因为没有对报文中内容进行有效性检验,而造成的远程缓冲区溢出漏洞”,老头说。

  “嗯”,张大民说, “看样子这是攻击的第一步,那如果一个协议的报文格式解析程序已经完美无缺了,还可以怎么样来攻击呢?”,张大民又问。

  “呵呵”,老头笑道,“看样子你还真是很好”,老头说,“可我今天的活还没干完呢,我的去捡捡我的破烂了。”

  “我来帮你一起捡吧”,张大民已经对这个老头很是佩服了,觉得人家给自己讲了这么多东西,帮帮忙总是应该的。

  “吃饱了撑的!”,老头白了他一眼, “小伙子年纪轻轻,捡什么破烂!”。老头说, “这样吧,明天有船到岸,会卸下很多船上的垃圾,明天你到江边码头找我,如果我有空,再聊。”,老头说完,背起他的大袋子,不等张大民开口,就头也不回的就走了。

  张大民没办法,只好会到旅店,躺在床上,想着今天的收获,竟然完全没有了游山玩水的兴致。

  低速洪水攻击(Low Rate Flooding Attack)

  第二天,张大民早早起来,直奔码头。好说歹说,不管老头同意不同意,一定要帮老头捡破烂。老头峙不过他,也就随张大民去了。张大民跑前跑后,频献殷勤,不到半天时间就把老头一天想做的事都做完了。省下的时间,赶紧再接着和老头讨论。

  “看样子异常报文对网络协议的威胁还是很大的”,张大民说, “从而也就造成了对网络设备的威胁。看样子如果一个网络协议多做一些对异常格式报文的检测,,应该就没问题了”。

  “呵呵”,老头看着今天张大民帮着捡来的满满一大袋子易拉罐,脸上露出满足的笑容。 “不要以为能防备异常报文就高枕无忧了,一个格式上完全正常的报文也可以对网络设备造成和大威胁。”

  “怎么会呢?”,张大民不解的问?

  “还是给你举个例子吧”,老头说, “路由协议OSPF你是了解一些的了。每一个路由器上的OSPF协议都要和被的路由器上的OSPF协议建立邻居关系,对吧。”

  “是”,张大民说, “然后路由器之间才能交换彼此的路由”。

  “哪路由器是根据什么来建立OSPF的邻居关系呢?”,老头问。

  “是根据接收到的OSPF的HELLO报文,里面有对面邻居的ID”,张大民说。

  “正是”,老头点了一下头。“每接收到这样的一个HELLO报文,路由器就要看这个HELLO报文中邻居ID是否在自己的邻居数据库中,如果不在,就要把这个邻居ID也放到自己的邻居数据库中。”老头说, “这样也就造成了一个漏洞,我可以向一台运行OSPF的路由器发布很多OSPF HELLO报文,每个报文中的邻居ID都是随机的,看一看这台路由器到底能允许接收多少OSPF的邻居,如果程序员在实现OSPF的过程中没有注意这个限制条件,但邻居越来越多达到程序员当初没有考虑到的数目时,OSPF的运行就有可能会出问题。”。

  “为什么会出问题呢”,张大民问。

  “还是给你画个图吧”,老头说。

  此主题相关图片如下:




  “网络协议种类繁多,功能各有不同。但从一个程序实现的角度来看,几乎所有的网络协议程序都可以按照上面的图来分类。首先是报文格式解析部分,要把报文中的数据解析出来。然后就会把这些数据送给网络协议的算法。OSPF有OSPF的算法,BGP有BGP的算法,等等。当实现这些算法的时候,写过网络协议程序的人都知道,算法是由数据结构来驱动的。所有的从报文解析出来的数据都要首先存储在数据结构中,然后在网络运行的过程中,根据各种不同的情况,和数据结构中的数据,来实现各个不同网络协议,也就是RFC中定义的算法。”,老头说。 “以OSPF为例,如果要实现OSPF网络协议的算法,就要首先建立一个OSPF邻居的数据结构。然后要为每一个OSPF的邻居建立一个OSPF邻居数据结构的实体。写过程序的人也都知道,建立一个数据结构的实体的过程也是一个分配内存的过程。

 

  如果需要建立的实体越多,那么要分配的内存也越多。占用系统的资源也越多。象我们前面说的向一台路由器发布邻居ID随机的OSPF邻居报文,可以在短时间内消耗很多系统的内存,如果程序员当初没有考虑到这种情况,很有可能造成非法的内存操作,而导致OSPF完全不能工作。”

  “WOW”,张大民感叹说, “这也是挺厉害的一种攻击方法。而且这种攻击方法也不依靠协议的特殊功能。任何协议都有数据结构,如果我们能在远程向这些数据结构中插入一些无用的垃圾数据,或者可以远程操纵这些数据结构的运行和分配,那可以说是非常酷的一种攻击方法”。

  “没错”,老头说, “而且注意到我并不需要向一台路由器发布大量的报文,象现在这些DDOS攻击,动不动就要上G bps的网络流量。我只需要向一台路由器发布很少的报文,网络流量可能也就是几Kbps,就有可能把一台性能很高的路由器弄下线,可谓是四两搏千斤”。

  “嗯”,张大民点头称是。 “不管一台路由器的性能多么强大,是思科的GSR也好,还是JUNIPER的M系列,只要它们的网络协议实现上有这样的漏洞,发过去几百个类似的报文就有可能把它们弄下线”。

  “是”,老头说, “而且对一个网络协议的实现程序来来说,用到的数据结构就那么几个,所以试着攻击一下它们应该不很费时间。比用异常报文攻击的方法要省时多了”。

  逻辑运行攻击

  张大民对今天了解到的东西有无限感慨。网络安全真的是无处不在,博大精深。不论是在不同操作系统的主机上,还是在组成互联网的这些网络设备上,对任何一方面的网络安全作出有成效的研究都有可能要花费一两年的时间。而这个老头对自己讲的这些, 为自己在网络协议安全性上的知识有了一个质的飞跃,节省了自己很多的时间和很多可能要走的技术上的弯路。想到这里,张大民对老头充满了感激之情。一高兴,也不管哪个垃圾箱多脏多远,虽然有点后悔自己一天到晚弄电脑,没有好好锻炼一下身体,捡破烂也有点力不从心,还是爬上爬下,为老头多捡了好多值钱的破烂。晚上还要坚持请老头吃顿饭。老头争不过他,老少二人来到了镇边的一个小酒馆,要了些江南小菜。边吃边聊。

  “能对网络协议的数据结构进行远程的攻击当然好,但我需要对协议有比较深刻的理解,还要猜一下一个协议到底要使用什么样的数据结构,可能一开始操作起来还有些难度。而相对来说,使用异常报文的攻击就相对来说容易一些了”。张大民说。

  “你以为异常报文的攻击就那么容易么?”,老头问。

  “是啊,我只要找到报文的格式,然后修改一下就行了”。张大民说。

  “对于没有状态的协议来说,当然是这样的。例如IP,UDP等”,老头说, “但对于有状态的协议来说,可就不是这么简单了。”

  “什么是有状态的协议?”,张大民问。

  “例如TCP, 你应该知道TCP的哪个比较复杂的状态转换图吧?”,老头问。

  “当然”,张大民说, “在学校里面上计算机网络时就知道了”。

  “那就好”,老头说着,在地上又划了个图。

  此主题相关图片如下:





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

文章录入:admin    责任编辑:admin 
  • 上一个文章:

  • 下一个文章:
  • 去顶部