在TCP/IP网络中,当一个正常的TCP连接建立时,目标主机会从源主机收到一个SYN(同步/开始)数据包,并返回一个SYN ACK(同步确认)数据包.目标主机在连接建立之前,必须要“听到”一个SYN ACK的ACK(确认)。此过程称之为“TCP三次握手”。如图1:
图1在等待SYN ACK的ACK时,目标主机上限定大小的连接队列将跟踪等待完成的连接。这个队列典型情况下会很快腾空,因为ACK在SYN ACK的几毫秒 之后就会到达。
TCP SYN攻击就利用了这种设计,其中攻击源主机生成随机源地址的TCP SYN数据包发往受害主机。受害者主机向某个随机源地址返回一个SYN ACK数据包,并向连接队列增加一个条目。因为SYN ACK被设计来用于一个不正确的或非存在的主机,所以“三次握手”的最后部分绝不可能完成,而此条目一直位于连接队列中直至计时器超时,典型情况下也就是大约一分钟的时间。通过以极高的速率生成来自随机IP地址的欺诈性TCP SYN数据包,就能够填满连接队列并对合法用户拒绝TCP服务(如电子邮件、文件传输、Web服务)。如图2:
图2并没有什么简单方法来跟踪攻击的始作俑者,因为源地址攻击是伪造的。
这种问题的外部体现包括无法接收电子邮件,不能接收与WWW或FTP服务的连接,或者是主机上在SYN_RCVD状态中有大量的TCP连接。
[1] [2] 下一页
防御对网络设备的攻击
1.防火墙之后的设备
TCP SYN攻击以大量的源自随机IP地址的SYN数据包的涌入为特征,如果配置防火墙使其可以阻止进入的SYN 数据包,那么防火墙之后的任何设备已经受到了保护,不需要采取进一步的保护。这种防火墙的例子很多,如思科的PIX防火墙,也可采用配置有访问列表的路由器。许多媒体上都有这方面的很多材料,在此不再赘述。
2.提供公共服务的设备
对于一个公共的web服务器或一台面向互联网的邮件服务器来说,没有什么方法可以决定哪些进入的IP源地址是友好的,哪些是恶意的。因此,并没有万能的防御手段可以对付来自随机IP地址的攻击。
对于主机来说,可以采用如下的一些选择:
增加连接队列(SYN ACK队列)的大小
减少等待三次握手的超时时间长度
如果可能,采用专用软件补丁来检测并解决问题。
用户应当查看相关的厂商是否开发了对付TCP SYN ACK攻击的特定补丁。
注意:在服务器上过滤IP地址是无效的,因为攻击者可以改变其IP地址,而且某个被禁止的地址可能与某台合法主机的IP地址相同。
那么,如何防止某个网络在不知情的情况下成为攻击的“窝点”呢?
既然这种拒绝服务攻击的一个主要机理就是生成源自随机IP地址的通信,那么我们可以这样建议,过滤那些目的地是互联网的通信。基本的理念是在拥有非法的源IP地址的数据包进入互联网之前,就丢弃之。这样做,并不会防止针对本地网络的拒绝服务攻击,但这却有助于被攻击的网络将你排除在攻击源范围之外。此外,这还使得你的网络不易成为这种攻击的基地。
1.防止传输非法的IP地址
通过在与互联网连接的路由器上过滤数据包,用户就可以仅准许那些拥有合法源地址的数据包离开本地网络进入互联网。
例如,如果用户的本地网络是172.16.0.0,用户的路由器使用serial 0/1接口连接到ISP,那么,用户就可以像下面这样运用访问列表:
access list 111 permit ip 172.16.0.0 0.0.255.255 any access list 111 deny ip any any log interface serial 0/1 ip access group 111 out
注意:上述访问列表的最后一行可以决定是否有非法源地址的任何通信进入互联网。这一行并非关键性的,不过它有助于定位可能的攻击源。
2.防止接收非法的IP地址
对于向终端网络提供服务的ISP来说,我们强烈建议其确认、验证来自客户端的进入型数据包。这可在在边界路由器上运用转入型数据包过滤器而实现。例如,如果客户端通过一个称为serial 1/0的接口连接到你的路由器,那么你就可以创建下面的访问列表:
网络号为192.168.0.0 to 192.168.15.0, 172.18.0.0. access list 111 permit ip 192.168.0.0 0.0.15.255 any access list 111 permit ip 172.18.0.0 0.0.255.255 any access list 111 deny ip any any log interface serial 1/0 ip access group 111 in