
1) 【一句话结论】TCP三次握手通过SYN、SYN-ACK、ACK完成连接建立,序列号用于同步数据流;若服务器生成初始序列号(ISN)的算法有规律(如线性递增),攻击者可预测ISN,伪造大量SYN包发动SYN攻击,耗尽服务器资源;结合360浏览器场景,假设某服务器的ISN按时间线性增长,攻击者通过抓包预测ISN,伪造大量SYN包,导致服务器SYN队列满,无法响应正常请求。
2) 【原理/概念讲解】TCP三次握手是客户端与服务器建立可靠连接的流程:
序列号用于确保数据包按序到达,避免重复。SYN攻击原理:若服务器生成ISN的算法简单(如线性递增、基于时间),攻击者可通过抓包获取前几个ISN,发现规律并预测后续ISN,伪造大量伪造源IP、目标IP为服务器、序列号为预测值的SYN包。服务器收到后回复SYN-ACK,但因连接未完成(客户端未发送ACK),资源被占用在SYN队列中,最终队列溢出导致拒绝服务。
3) 【对比与适用场景】
| 特性 | 正常三次握手 | SYN攻击(序列号预测) |
|---|---|---|
| 请求包 | 客户端SYN(含ISN1) | 攻击者伪造SYN(伪造源IP,ISN预测) |
| 服务器响应 | SYN-ACK(确认ISN1,发送ISN2) | SYN-ACK(服务器响应,但连接未完成) |
| 客户端确认 | ACK(确认ISN2) | 未发送(攻击者不完成连接) |
| 资源占用 | 正常(连接建立后资源分配) | 服务器资源(SYN队列)被大量占用 |
| 使用场景 | 正常网络通信,建立可靠连接 | 恶意攻击,耗尽服务器资源 |
| 注意点 | 序列号随机/复杂生成 | 序列号可预测,导致攻击 |
4) 【示例】假设360浏览器中某后台服务(如更新服务)的ISN按时间线性增长(每秒+1)。攻击者通过抓包获取前两个ISN(t1=10000,t2=10001),发现规律,预测t3=10002。攻击者伪造大量SYN包,源IP为任意(如攻击者IP),目标IP为服务器更新服务端口(如8080),序列号为10002。服务器收到后回复SYN-ACK(序列号10003,确认号10001),攻击者不发送ACK,导致服务器在SYN队列中保留该连接,最终队列满,无法响应正常请求。伪代码示例:
// 攻击者代码(伪代码)
for i in 1 to 10000:
isn = predict_isn(i) # 根据历史ISN预测
send_syn(target_ip, target_port, isn)
其中predict_isn函数根据线性规律计算下一个ISN。
5) 【面试口播版答案】
好的,首先解释TCP三次握手流程:客户端发送SYN包(含初始序列号ISN1),服务器回复SYN-ACK(确认ISN1,发送自己的ISN2),客户端发送ACK(确认ISN2),完成连接。序列号用于同步数据流。漏洞利用方面,若服务器生成ISN的算法有规律(比如线性增长),攻击者可预测后续ISN,发动SYN攻击。比如360浏览器中某个服务器的ISN按时间递增,攻击者通过抓包获取前几个ISN,预测下一个ISN,伪造大量SYN包,服务器回复SYN-ACK后,因连接未完成,资源被占用,最终导致服务器资源耗尽,无法响应正常请求。具体来说,三次握手步骤是:1. 客户端发送SYN(初始序列号ISN1);2. 服务器回复SYN-ACK(确认ISN1,发送ISN2);3. 客户端发送ACK(确认ISN2)。序列号预测的漏洞在于,若ISN生成方式简单(如时间递增),攻击者可预测,伪造SYN包,耗尽服务器的SYN队列,导致拒绝服务。比如360的某个后台服务,攻击者通过分析历史连接的ISN,发现规律,预测下一个ISN,然后发送大量伪造的SYN包,服务器处理这些包后,SYN队列满,无法处理正常连接请求。
6) 【追问清单】
7) 【常见坑/雷区】