1. 概述
SYN flood是Network layer的DDoS攻击之一。
该攻击利用TCP握手缺陷消耗被攻击方的资源从而导致被攻击方拒绝服务。
相关RFC请见tools.ietf.org/html/rfc4987
2. TCP握手正常情况
client ---------SYN (sequence: s_no, acknowledgment: 0)--------------> server
<-------SYN + ACK (sequence: a_no, acknowledgement: s_no + 1)--
--------ACK (sequence: a_no +1, acknowledgement: s_no + 1)----->
- Client发送SYN
- Server回SYN+ACK后建立一个半打开状态(SYN-RECEIVED)的连接,并存储在backlog中;
- Client收到SYN + ACL后发送ACK;
- Server收到ACK后,从blacklog中取出相应的半打开的连接,并建立TCB(Transmission Control Block)。
3. SYN flood攻击原理
- Client发送大量SYN后不再有任何回应(可以使用IP欺骗);
- Server回SYN+ACK后建立大量半打开状态的连接,并存储在backlog中等待ACK;
- Backlog中累积大量的等待ACK的半打开状态的连接,导致资源耗尽,新来的SYN被丢弃, 从而导致无法建立正常连接,服务器拒绝服务。
4. 防护
方法1. Filter -- 路由过程中根据IP地址前缀进行过滤,该方法需要全球部署。
方法2. Increasing Backlog
方法3. Reducing SYN-RECEIVED Timer
方法4. Recycling the Oldest Half-Open TCB
方法5. SYN Cache -- 常用方法之一
- Server收到client发的SYN
- 计算 hash(ip, port, secret bits)并随机均匀分配到 hash table bucket, 如果hash table bucket满了,则除旧迎新;
- Server收到ACK后, 查hash table,创建TCB
方法6. SYN Cookies -- 常用方法之二, 该方法不使用存储资源
- Server收到SYN后,将组成连接的最基本的数据ecode成ACK的sequence number(+ Timestamp option)-- a_no;
- Server发送携带该sequence number(+ Timestamp option)的SYN + ACK,不再分配SYN-RECEIVED状态的connection;
- Server收到ACK后,decode该sequence number(+ Timestamp option)-- a_no,创建TCB
方法7. Hybrid Approaches
- SYN cache + SYN cookie
方法8. Firewalls and Proxies
5. 其他
可以尝试outbound SYN flood。
网友评论