打印本文 关闭窗口 | |
TCP/IP攻击原理 | |
作者:不详 文章来源:瓷都热线http://cidu.net 点击数 更新时间:2002/1/27 文章录入:不详 责任编辑:不详 | |
|
|
TCP/IP攻击原理 利用协议实现的攻击方法,都是故意错误地设定数据包头的一些重要字段,例如,IP包头部的Total 在最后,是一个服务程序错误而导致攻击的例子:OOB。 在本章,我们将结合一些程序来讨论这种攻击能够实施的原理的同时,读者也可以使用这些程序来检查自己系统针对这类攻击的安全程度,并采取相应的措施。 1 攻击的现象及其后果 使用了Windows 95和Windows 98 NT的人们都经历过系统陷入混乱,对任何输入都没有响应的情况。这时候,屏幕出现蓝屏,迟迟无法重新刷新。按下Ctrl+Alt+Del时,看到系统CPU利用率达到100%,同时显示一个应用程序无响应。这是程序出错或者使用了盗版软件的缘故。 通过网络,也可以使正在使用的计算机出现这种无响应、死机的现象。事实上,大量的程序往往经不住人们恶意的攻击。 人们已经使用了许多方法来专门对付上网的Windows 95和Windows NT。目前,能够对Windows 95和Windows NT进行攻击的方法很多,当前流行的有:tearDrop(也称为“泪滴”)、OOB、Land和Ping of Death等。其中,关于Ping of Death在缓冲区溢出一章中对这种攻击做了介绍,并给出了一些对策。 一般的攻击过程是这样的:当入侵者发现了一台Windows 95或者Windows NT(这只需用端口扫描工具扫一 能够实施这种攻击的原因是在Windows 95和Windows NT中存在错误,这是一种处理TCP/IP协议或者服务程 这些攻击的危险性在于可以通过网络发起攻击,当攻击者发现了一台上网的Windows 95、Windows NT或者 服务程序存在错误的情况是很多的,例如,Windows NT中的RPC服务存在漏洞。某个用户可以远程登录到 对于OOB攻击,人们已经提出一些对策,如在Windows NT 4.0 中,呆以对发到端口若悬河39的包进行过滤 目前网上已经出现补丁程序,用来对付这些攻击方法的攻击。在 Windows 95和Windows NT上的安装非常 在没有找到补丁程序之前,也可能性安装一个PC防火墙。该工具非常有效,例如,当禁止从主机的所有端 可以用该工具来过滤发向本主机一些端口(例如139)的数据包。 2 泪滴(TearDrop)攻击工具 这个攻击工具起名为泪滴,它确实可以让人们恨得咬牙切齿。 当辛苦的劳动成果突然因为一次莫名其妙的当机而化为乌有。也许,这次当机便是一个人随意地向你的计 这个攻击利用的是系统在实现时的一个错误,我们以Linux上的一个实现为例,也就是说,某些Linux操作 Linux操作系统在它的IP数据包重装模块有一个严重的错误,更确切一点地说,是在ip-glue()函数中。 这段代码如下: fp = qp->fragments; while (fp ! =NULL) { if (count +fp ->len >skb ->len)] { error-to-big; } memcpy (ptr + fp ->offaet ), fp-> ptr, fp->len); count +=fp ->len; fp =fp->next; } 在程序中,检查了每段数据是否过长,因为如果数据部分过长,将会向内核拷贝过多的数据,引起内核 以下,让我们看看Linux是如何将收到的IP数据加入到组装队列中去的。 计算这一fragmrnt的终结位置: /* l Determine the position of this fragmrment. l / end =offset +ntohs(iph ->tot-len) –ihl; 在正常情况下一切也正常。但是,当我们精心准备这样的数据包,让前后包中的“fragment offset”字 看看程序对“fragment offset”做了那些处理: if (prev != NULL&& offset I =prev->end –offset; Offset +=I : /*ptr into datagram */ Ptr += I /* ptr into fragment data */ } 如果我们发现当前包的段偏移在前一包数据内部,也就是说根据偏移字段的值,前后两数据包的数据部 /* Fill in the structure. */ fp->offset =offset; fp->end =end; fp->len =end –offset; 在这种极少见的情况下,计算出来的fp-len竟变成了一个负数,于是memcpy()最终将会把大量的数据拷贝 这种情况完全可以通过编程来实现,例如可以发送两个特殊的数据包,第一个包中的“offset”域置为0, 当将收到的两个数据包组装时,先将第一个数据包拷贝到一个缓冲区中去,然后拷贝第二个数据包。因为 cur ->end =next ->offest +(next->iph ->tot-len)-ihl); cur ->len =cur->end-cur->offest; 当ntohs(next->iph->tot-len)-ihl<(pre->end-next->offset)时,错误就发生了。这时候,cur->len为 在正常情况下,无法预言这种情况是否会发生,发生的频率如何。但是在人为的情况下,尤其是在一处故 人们可以自己编写发送raw数据包的程序。在数据包中,从IP包头开始,都可以填入自己想要的任意数值。 当前的许多Linux的实现中都有这个错误,向Linux发送很少几个这样的数据包,便可以引起Linux当机, 现在在网上已经出现了大量类似这样的程序,这些攻击的方法依然是对一些字段使用错误的值,但和 |
|
打印本文 关闭窗口 |