破坏TCP/IP
个利用TCP/IP协议软件弱点进行进攻的经典的例子是Ping of Death攻击.利用的具体方法是,你的对手创建一个超过了IP标准的最大长度--65535个字节的IP数据包.当这个"浮肿的"数据包到达的时候,它就使得一个使用脆弱的TCP/IP协议软件和操作系统的服务器瘫痪.
所有现代的操作系统和协议软件对Ping of Death攻击都有免疫力,但是老的Unix系统可能仍然是脆弱的.
另一个利用粗制滥造的TCP/IP软件进行攻击的例子是Teardrop,它利用了系统重组IP数据包过程中的漏洞.一个数据包在从互联网的另一端到你这里的路上也许会被分拆成更小的数据报文.这些数据报中的每一个都拥有最初的IP数据报的报头,同时还拥有一个偏移字节来标示它拥有原始数据报中的哪些字节.通过这些信息,一个被正常分割的数据报文能够在它的目的地被重新组装起来,并且网络也能够正常运转而不被中断.当一次Teardrop攻击开始时,你的服务器将受到拥有重叠的偏移字段的IP数据包的轰炸.如果你的服务器或是路由器不能丢弃这些数据包而且如果企图重组它们,你的服务器就会很快瘫痪.如果你的系统被及时更新了,或者你拥有一个可以阻挡Teardrop数据包的防火墙,你应该不会有什么麻烦.
利用TCP/IP协议本身的漏洞来进行攻击的手段也很多.这些手段中最流行的就是SYN攻击.SYN工作的原理就是利用两个互联网程序间协议握手的过程进行的攻击.协议握手的过程如下,其中一个应用程序向另一个程序发送一个TCP SYN(同步)数据包.然后目标程序向第一个程序发送一个TCP-ACK应答数据包作为回答;第一个程序最后用一个ACK应答数据包确认已经收到.一旦这两个程序握手成功,它们就准备一起运行了.
SYN攻击用一堆TCP SYN数据包来淹没它的受害者.每个SYN数据包迫使目标服务器产生一个SYN-ACK应答数据包然后等待对应的ACK应答.这很快就导致过量的SYN-ACK一个接一个的堆积在缓存队列里.当缓存队列满了以后,系统就会停止应答到来的SYN请求.
如果SYN攻击中包括了拥有错误IP源地址的SYN数据包,情况很快就会变得更糟.在这种情况下,当SYN-ACK被送出的时候,ACK应答就永远不会被收到.飞快充满的缓存队列使得合法程序的SYN请求无法再通过.
更加厉害的是,与之相似的Land攻击手段使用欺骗性的SYN数据包,它带有一个伪装的IP地址,使得它看起来像是来自你自己的网络.现在,SYN攻击就像是来自于你防火墙的内部,这使得问题更加严重.
大多数时新的操作系统和防火墙可以阻止SYN攻击.另一个简单的阻止SYN攻击的方法是阻塞掉所有带有已知的错误的IP源地址的数据包.这些数据包应该包括带有错误的为内部保留的IP地址的外部数据包,它的范围是从10.0.0.0到10.255.255.255,127.0.0.0到127.255.255.255,从172.16.0.0到172.31.255.255以及从192.168.0.0到192.168.255.255