
1) 【一句话结论】
SYN攻击通过伪造大量伪造的SYN请求耗尽服务端TCP半连接队列资源,导致合法连接被拒绝;360通过SYN cookies(临时序列号替代真实序列号避免队列占用)、限流(漏桶算法控制请求速率)、黑名单(机器学习识别恶意IP并封禁)等技术,结合队列管理(如队列大小、超时清理)与资源权衡(队列大小与CPU负载平衡),动态调整参数以防御攻击,保障服务可用性。
2) 【原理/概念讲解】
TCP三次握手机制中,正常连接需完成三次消息交换(客户端SYN→服务端SYN-ACK→客户端ACK)。服务端在收到SYN后,会为每个请求分配半连接资源(如创建队列条目,等待客户端ACK),若大量伪造SYN(如来自僵尸网络),半连接队列会迅速耗尽,导致新连接被拒绝。类比:服务端像排队系统,正常连接是客户完成整个排队流程(买票、检票、入场),而SYN攻击是客户只买票(SYN)就离开,导致售票窗口(队列)被大量未完成流程的客户占用,新客户无法买票(连接被拒)。此外,队列耗尽后,服务端需要不断处理这些无效的半连接,占用CPU计算资源,导致CPU负载飙升,间接消耗服务端CPU资源。具体来说,半连接队列通常有固定容量(如Linux系统默认为128或256,可通过/proc/sys/net/ipv4/tcp_max_syn_backlog调整),当队列满时,新SYN请求会被丢弃(RST响应),攻击者可利用此特性持续发送SYN,直到队列耗尽。超时清理机制:半连接在队列中保留一段时间(如30-60秒,具体值由tcp_synack_retries等参数控制),若超时后无ACK,服务端会清理该条目,释放资源。但攻击速率过高时,清理速度跟不上创建速度,导致队列持续满。
3) 【对比与适用场景】
| 特性/技术 | 正常TCP连接 | SYN攻击 | 360防御手段 |
|---|---|---|---|
| 定义 | 合法客户端发起的TCP连接,完成三次握手 | 攻击者伪造大量源IP的SYN请求,不完成后续步骤 | 防御SYN攻击的技术组合 |
| 半连接队列状态 | 队列正常(有空间处理合法连接) | 队列溢出(队列满,拒绝新连接) | 通过SYN cookies避免队列占用,限流控制速率,黑名单封禁恶意IP |
| 资源消耗 | 正常(CPU处理合法连接) | CPU间接消耗(队列耗尽后处理无效连接,负载飙升) | 优化资源消耗,避免队列耗尽导致的CPU负载 |
| 防御方式 | 无 | 无 | SYN cookies(临时序列号)、限流(漏桶/令牌桶)、黑名单(IP识别) |
| 攻击目的 | 建立正常连接 | 破坏服务端资源,阻断合法连接 | 阻断攻击,保障服务可用性 |
4) 【示例】
伪代码模拟SYN攻击(展示大量SYN请求导致队列满):
import socket
import time
target_ip = "192.168.1.1"
target_port = 80
attack_count = 10000
for i in range(attack_count):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
try:
s.connect((target_ip, target_port))
print(f"发送SYN请求 {i+1}")
except:
print("连接失败,可能队列已满")
finally:
s.close()
time.sleep(0.001)
实际攻击中,攻击者会使用僵尸网络,循环发送SYN,导致目标服务端半连接队列耗尽。例如,攻击者控制1000台僵尸主机,每台每秒发送100个SYN,总攻击速率达10万次/秒,远超服务端队列处理能力(如队列大小为256,处理速率约每秒1000次),导致队列迅速溢出。
5) 【面试口播版答案】
“面试官您好,SYN攻击的原理是利用TCP三次握手的半连接队列机制。正常TCP连接需要客户端发送SYN,服务端回复SYN-ACK,客户端再发送ACK完成。而攻击者伪造大量源IP的SYN请求,服务端收到后为每个请求分配半连接资源,但攻击者不完成后续步骤,导致半连接队列被耗尽,合法连接被拒绝。360的防御主要通过三方面:一是SYN cookies,服务端在收到SYN后,不分配真实序列号,而是生成随机序列号(结合客户端IP、目标端口、时间戳计算哈希值),客户端在后续ACK中携带该序列号,服务端验证序列号是否匹配且时间未过期(比如缓存1分钟内有效),若匹配则建立连接,否则丢弃;二是限流,采用漏桶算法控制SYN请求速率,比如每秒允许100个SYN,超过则丢弃,允许短时间突发(如突发50个请求);三是黑名单,通过机器学习分析异常SYN模式(如短时间内大量来自同一IP的SYN),识别恶意IP并封禁,误报时自动恢复。比如,SYN cookies的实现中,服务端生成128位随机数,结合客户端信息计算SHA-256哈希作为临时序列号,客户端ACK中携带,服务端验证序列号是否在缓存且哈希匹配,通过则建立连接;限流方面,漏桶维护令牌桶,每秒生成100个令牌,每个SYN消耗一个,超过则丢弃;黑名单通过分析SYN频率、源端口分布等特征,用决策树模型识别,误报时连续10次正常请求后恢复IP。这些技术结合队列管理(如队列大小、超时清理)与资源权衡(队列大小与CPU负载平衡),动态调整参数以有效防御攻击。”
6) 【追问清单】
7) 【常见坑/雷区】