SYN攻击基本原理与防范技术(2)

SynAttackProtect机制 为防范SYN 攻击 ,Windows2000系统的tcp/ip协议栈内嵌了SynAttackProtect机制,Win2003系统也采用此机制。SynAttackProtect机制是通过关闭某些socket选项,增加额外的连接指示和减少超时时间

  •SynAttackProtect机制

  为防范SYN攻击,Windows2000系统的tcp/ip协议栈内嵌了SynAttackProtect机制,Win2003系统也采用此机制。SynAttackProtect机制是通过关闭某些socket选项,增加额外的连接指示和减少超时时间,使系统能处理更多的SYN连接,以达到防范SYN攻击的目的。默认情况下,Windows2000操作系统并不支持SynAttackProtect保护机制,需要在注册表以下位置增加SynAttackProtect键值:

  HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

  当SynAttackProtect值(如无特别说明,本文提到的注册表键值都为十六进制)为0或不设置时,系统不受SynAttackProtect保护。

  当SynAttackProtect值为1时,系统通过减少重传次数和延迟未连接时路由缓冲项(routecacheentry)防范SYN攻击

  当SynAttackProtect值为2时(Microsoft推荐使用此值),系统不仅使用backlog队列,还使用附加的半连接指示,以此来处理更多的SYN连接,使用此键值时,tcp/ip的TCPInitialRTT、windowsize和可滑动窗囗将被禁止。

  我们应该知道,平时,系统是不启用SynAttackProtect机制的,仅在检测到SYN攻击时,才启用,并调整tcp/ip协议栈。那么系统是如何检测SYN攻击发生的呢?事实上,系统根据TcpMaxHalfOpen,TcpMaxHalfOpenRetried和TcpMaxPortsExhausted三个参数判断是否遭受SYN攻击

  TcpMaxHalfOpen表示能同时处理的最大半连接数,如果超过此值,系统认为正处于SYN攻击中。Windows2000server默认值为100,Windows2000Advancedserver为500。

  TcpMaxHalfOpenRetried定义了保存在backlog队列且重传过的半连接数,如果超过此值,系统自动启动SynAttackProtect机制。Windows2000server默认值为80,Windows2000Advancedserver为400。

  TcpMaxPortsExhausted是指系统拒绝的SYN请求包的数量,默认是5。

  如果想调整以上参数的默认值,可以在注册表里修改(位置与SynAttackProtect相同)

  •SYNcookies技术

  我们知道,TCP协议开辟了一个比较大的内存空间backlog队列来存储半连接条目,当SYN请求不断增加,并这个空间,致使系统丢弃SYN连接。为使半连接队列被塞满的情况下,服务器仍能处理新到的SYN请求,SYNcookies技术被设计出来。

  SYNcookies应用于linux、FreeBSD等操作系统,当半连接队列满时,SYNcookies并不丢弃SYN请求,而是通过加密技术来标识半连接状态。

  在TCP实现中,当收到客户端的SYN请求时,服务器需要回复SYN+ACK包给客户端,客户端也要发送确认包给服务器。通常,服务器的初始序列号由服务器按照一定的规律计算得到或采用随机数,但在SYNcookies中,服务器的初始序列号是通过对客户端IP地址、客户端端囗、服务器IP地址和服务器端囗以及其他一些安全数值等要素进行hash运算,加密得到的,称之为cookie。当服务器遭受SYN攻击使得backlog队列满时,服务器并不拒绝新的SYN请求,而是回复cookie(回复包的SYN序列号)给客户端,如果收到客户端的ACK包,服务器将客户端的ACK序列号减去1得到cookie比较值,并将上述要素进行一次hash运算,看看是否等于此cookie。如果相等,直接完成三次握手(注意:此时并不用查看此连接是否属于backlog队列)。

  在RedHatlinux中,启用SYNcookies是通过在启动环境中设置以下命令来完成:

  #echo1??/proc/sys/net/ipv4/tcp_syncookies

  •增加最大半连接数

  大量的SYN请求导致未连接队列被塞满,使正常的TCP连接无法顺利完成三次握手,通过增大未连接队列空间可以缓解这种压力。当然backlog队列需要占用大量的内存资源,不能被无限的扩大。

  Windows2000:除了上面介绍的TcpMaxHalfOpen,TcpMaxHalfOpenRetried参数外,Windows2000操作系统可以通过设置动态backlog(dynamicbacklog)来增大系统所能容纳的最大半连接数,配置动态backlog由AFD.SYS驱动完成,AFD.SYS是一种内核级的驱动,用于支持基于windowsocket的应用程序,比如ftp、telnet等。AFD.SYS在注册表的位置:

  HKLM\System\CurrentControlSet\Services\AFD\Parameters\EnableDynamicBacklog值为1时,表示启用动态backlog,可以修改最大半连接数。

  Minimum Dynamic Backlog表示半连接队列为单个TCP端囗分配的最小空闲连接数,当该TCP端囗在backlog队列的空闲连接小于此临界值时,系统为此端囗自动启用扩展的空闲连接(Dynamic Backlog Growth Delta),Microsoft推荐该值为20。

  Maximum Dynamic Backlog是当前活动的半连接和空闲连接的和,当此和超过某个临界值时,系统拒绝SYN包,Microsoft推荐Maximum Dynamic Backlog值不得超过2000。

  Dynamic Backlog Growth Delta值是指扩展的空闲连接数,此连接数并不计算在Maximum Dynamic Backlog内,当半连接队列为某个TCP端囗分配的空闲连接小于Minimum Dynamic Backlog时,系统自动分配Dynamic Backlog Growth Delta所定义的空闲连接空间,以使该TCP端囗能处理更多的半连接。Microsoft推荐该值为10。

  LINUX:Linux用变量tcp_max_syn_backlog定义backlog队列容纳的最大半连接数。在Redhat7.3中,该变量的值默认为256,这个值是远远不够的,一次强度不大的SYN攻击就能使半连接队列占满。我们可以通过以下命令修改此变量的值:

  #sysctl-wnet.ipv4.tcp_max_syn_backlog=`2048`

  Sun Solaris Sun Solaris用变量tcp_conn_req_max_q0来定义最大半连接数,在SunSolaris8中,该值默认为1024,可以通过add命令改变这个值:

  #ndd-set/dev/tcptcp_conn_req_max_q02048

  HP-UX:HP-UX用变量tcp_syn_rcvd_max来定义最大半连接数,在HP-UX11.00中,该值默认为500,可以通过ndd命令改变默认值:

  #ndd-set/dev/tcptcp_syn_rcvd_max2048

  •缩短超时时间

  上文提到,通过增大backlog队列能防范SYN攻击;另外减少超时时间也使系统能处理更多的SYN请求。我们知道,timeout超时时间,也即半连接存活时间,是系统所有重传次数等待的超时时间总和,这个值越大,半连接数占用backlog队列的时间就越长,系统能处理的SYN请求就越少。为缩短超时时间,可以通过缩短重传超时时间(一般是第一次重传超时时间)和减少重传次数来实现。

  Windows2000第一次重传之前等待时间默认为3秒,为改变此默认值,可以通过修改网络接囗在注册表里的TcpInitialRtt注册值来完成。重传次数由TcpMaxConnectResponseRetransmissions来定义,注册表的位置是:

  HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parametersregistrykey

  当然我们也可以把重传次数设置为0次,这样服务器如果在3秒内还未收到ack确认包就自动从backlog队列中删除该连接条目。

  LINUX:Redhat使用变量tcp_synack_retries定义重传次数,其默认值是5次,总超时时间需要3分钟。

  Sun Solaris Solaris默认的重传次数是3次,总超时时间为3分钟,可以通过ndd命令修改这些默认值。

(责任编辑:闫小琪)

顶一下
(1)
100%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
图片资讯

企业需要全新方式管理安全风险

企业需要全新方式管理安全风险

如今随着企业的信息化水平不断提高,IT系统的规模在不断的扩大,网络结构也日益复杂,...[详细]

如何搞定Fedora 18上的防火墙配置?

如何搞定Fedora 18上的防火墙配置?

经历了几次跳票之后Fedora 18正式版于2013年1月15日面世,凝聚了许多开发者的心血。很...[详细]

揭穿黑客关于Ashx脚本写aspx木马的方法

揭穿黑客关于Ashx脚本写aspx木马的方法汇总

.Net环境,上传处未限制Ashx和Asmx,后者上传无法运行,提示Asmx脚本只能在本地运行,...[详细]

家用路由器巧用防火墙免攻击

家用路由器巧用防火墙免攻击

随着网络信息安全的需求度提高,个人信息与网络安全逐渐被提上了台面。人们越来越意识...[详细]

Windows安全攻略:教你完全修复系统漏洞

Windows安全攻略:教你完全修复系统漏洞

目前互联网上的病毒集团越来越猖狂,对用户的危害也愈演愈烈,大家要懂得保护自己的电...[详细]