SYN-Flood防御方法之一Synproxy

SYN-Flood攻击:

       攻击者发送大量的SYN给服务器. 服务器必须针对每一个SYN请求回送一个SYN-ACK 应答包,此时服务器就必须保持一条半开放的连接,直到接收到一个对应的ACK应答包为止. 保持如此数目巨大的半开放连接,将会持续消耗掉服务器的资源,直到资源枯竭

什么是SYN-PROXY?

SYNPROXY是一个TCP握手代理,该代理截获TCP连接建立的请求,它可以保证只有与自己完成整个TCP握手(该握手过程非常轻量级,采用Syncookie机制,不会涉及任何关于socket的逻辑)的连接才被认为是正常的连接,此时才会由代理真正发起与真实服务器的TCP连接

SYN-PROXY作用:

 主要用SYN-PROXY来进行防御SYN-Flood 攻击。

Syncookie机制:

当收到客户端的SYN请求时,服务器需要回复SYN+ACK包给客户端,客户端也要发送确认包给服务器。在SYN cookies中,根据客服端发来的SYN包计算出一个cookie值。这个cookie作为将要返回的SYN ACK包的初始序列号。当客户端返回一个ACK包时,根据包头信息计算cookie,与返回的确认序列号(初始序列号 + 1)进行对比,如果相同,则是一个正常连接,否则被认为是SYN-Flood攻击

关键部分是cookie的计算,cookie的计算应该包含本次连接的状态信息,使攻击者不能伪造。

cookie的计算:

服务器收到一个SYN包,计算一个消息摘要mac。

mac = MAC(A, k);         

MAC是密码学中的一个消息认证码函数,也就是满足某种安全性质的带密钥的hash函数,它能够提供cookie计算中需要的安全性。

在Linux实现中,MAC函数为SHA1。

A = SOURCE_IP || SOURCE_PORT || DST_IP || DST_PORT || t || MSSIND

k为服务器独有的密钥,实际上是一组随机数。

t为系统启动时间,每60秒加1。

MSSIND为MSS对应的索引。

SYN-PROXY原理:

      图中红线部分是由代理模拟发出的

     上图流程

  • 1: Client 与 Proxy 三次握手
  • 2: Proxy 与 Server 三次握手
  • 3:Client与Server之间传输数据
  • 利用 Syn Cookie 原理,实现对非 Syn 包有 Cookie 检测,不符合Cookie算法数据包直接丢弃
  • 只有在 Client 与 Proxy 三次握手之后才会与 Server 连接,实现了对Syn Flood的防御

posted on 2019-03-01 17:26  平平仄平仄  阅读(1829)  评论(0编辑  收藏  举报

导航