SYN攻击原理与防御2

五、 SYN 攻击防范技术
  关于 SYN 攻击防范技术,人们研究得比较早。归纳起来,主要有两大类,一类是通过防火墙、路由器等过滤网关防护,另一类是通过加固 TCP/IP 协议栈防范 . 但必须清楚的是, SYN 攻击不能完全被阻止,我们所做的是尽可能的减轻 SYN 攻击的危害,除非将 TCP 协议重新设计。
   1 、过滤网关防护
  这里,过滤网关主要指明防火墙,当然路由器也能成为过滤网关。防火墙部署在不同网络之间,防范外来非法攻击和防止保密信息外泄,它处于客户端和服务器之间,利用它来防护 SYN 攻击能起到很好的效果。过滤网关防护主要包括超时设置, SYN 网关和 SYN 代理三种。
   网关超时设置:防火墙设置 SYN 转发超时参数(状态检测的防火墙可在状态表里面设置),该参数远小于服务器的 timeout 时间。当客户端发送完 SYN 包,服务端发送确认包后( SYN ACK ),防火墙如果在计数器到期时还未收到客户端的确认包( ACK ),则往服务器发送 RST 包,以使服务器从队列中删去该半连接。值得注意的是,网关超时参数设置不宜过小也不宜过大,超时参数设置过小会影响正常的通讯,设置太大,又会影响防范 SYN 攻击的效果,必须根据所处的网络应用环境来设置此参数。
   SYN 网关: SYN 网关收到客户端的 SYN 包时,直接转发给服务器; SYN 网关收到服务器的 SYN/ACK 包后,将该包转发给客户端,同时以客户端的名义给服务器发 ACK 确认包。此时服务器由半连接状态进入连接状态。当客户端确认包到达时,如果有数据则转发,否则丢弃。事实上,服务器除了维持半连接队列外,还要有一个连接队列,如果发生 SYN 攻击时,将使连接队列数目增加,但一般服务器所能承受的连接数量比半连接数量大得多,所以这种方法能有效地减轻对服务器的攻击。
   SYN 代理:当客户端 SYN 包到达过滤网关时, SYN 代理并不转发 SYN 包,而是以服务器的名义主动回复 SYN/ACK 包给客户,如果收到客户的 ACK 包,表明这是正常的访问,此时防火墙向服务器发送 ACK 包并完成三次握手。 SYN 代理事实上代替了服务器去处理 SYN 攻击,此时要求过滤网关自身具有很强的防范 SYN 攻击能力。
 
 
   2 、加固 tcp/ip 协议栈
  防范 SYN 攻击的另一项主要技术是调整 tcp/ip 协议栈,修改 tcp 协议实现。主要方法有 SynAttackProtect 保护机制、 SYN cookies 技术、增加最大半连接和缩短超时时间等。 tcp/ip 协议栈的调整可能会引起某些功能的受限,管理员应该在进行充分了解和测试的前提下进行此项工作。
   SynAttackProtect 机制
  为防范 SYN 攻击, win2000 系统的 tcp/ip 协议栈内嵌了 SynAttackProtect 机制, Win2003 系统也采用此机制。 SynAttackProtect 机制是通过关闭某些 socket 选项,增加额外的连接指示和减少超时时间,使系统能处理更多的 SYN 连接,以达到防范 SYN 攻击的目的。默认情况下, Win2000 操作系统并不支持 SynAttackProtect 保护机制,需要在注册表以下位置增加 SynAttackProtect 键值:
   HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  当 SynAttackProtect 值(如无特别说明,本文提到的注册表键值都为十六进制)为 0 或不设置时,系统不受 SynAttackProtect 保护。
  当 SynAttackProtect 值为 1 时,系统通过减少重传次数和延迟未连接时路由缓冲项( route cache entry )防范 SYN 攻击。
SynAttackProtect 值为 2 时( Microsoft 推荐使用此值),系统不仅使用 backlog 队列,还使用附加的半连接指示,以此来处理更多的 SYN 连接,使用此键值时, tcp/ip TCPInitialRTT window size 和可滑动窗囗将被禁止。
  我们应该知道,平时,系统是不启用 SynAttackProtect 机制的,仅在检测到 SYN 攻击时,才启用,并调整 tcp/ip 协议栈。那么系统是如何检测 SYN 攻击发生的呢?事实上,系统根据 TcpMaxHalfOpen,TcpMaxHalfOpenRetried TcpMaxPortsExhausted 三个参数判断是否遭受 SYN 攻击。
   TcpMaxHalfOpen 表示能同时处理的最大半连接数,如果超过此值,系统认为正处于 SYN 攻击中。 Win2000   server 默认值为 100 Win2000   Advanced server 500
   TcpMaxHalfOpenRetried 定义了保存在 backlog 队列且重传过的半连接数,如果超过此值,系统自动启动 SynAttackProtect 机制。 Win2000   server 默认值为 80 Win2000 Advanced server 400
   TcpMaxPortsExhausted  是指系统拒绝的 SYN 请求包的数量,默认是 5
  如果想调整以上参数的默认值,可以在注册表里修改(位置与 SynAttackProtect 相同)

你可能感兴趣的:(职场,安全,syn,休闲)