
1) 【一句话结论】TCP SYN Flood攻击通过大量伪造源IP的SYN请求耗尽目标服务器的半开连接资源,导致正常连接被阻塞;360安全卫士/浏览器常用防御技术包括SYN Cookie、连接速率限制、源IP验证等。
2) 【原理/概念讲解】老师口吻解释:TCP三次握手是建立连接的关键步骤,正常流程是客户端发送SYN(同步序列编号)→服务器返回SYN+ACK(同步确认)→客户端发送ACK(确认),完成三次握手后进入ESTABLISHED状态。而SYN Flood攻击者会伪造大量源IP(通常是随机或无效IP),向目标服务器发送SYN请求,但不会完成后续的ACK步骤,导致服务器在“SYN-SENT”(半开连接)状态积累大量未完成的连接。当服务器的“SYN-SENT队列”满时,新来的正常SYN请求会被直接丢弃(因为队列无法接收新连接),从而阻塞正常用户连接。类比:想象餐厅的等位区,正常用户预订座位(SYN)→等位(SYN-SENT)→服务员确认(SYN+ACK)→入座(ESTABLISHED)。攻击者大量预订座位(SYN)但不来等位(不发送ACK),导致等位区满,新来的正常用户(正常连接请求)无法预订到座位,从而无法入座(建立连接)。
3) 【对比与适用场景】
| 特性/方面 | 描述 |
|---|---|
| 攻击方式 | 发送大量伪造源IP的SYN包,利用TCP三次握手的半开连接状态耗尽资源 |
| 受影响资源 | 服务器端的SYN-SENT队列(半开连接队列) |
| 攻击效果 | 阻塞正常连接,导致服务不可用 |
| 使用场景 | 对目标服务器进行DoS攻击,尤其是Web服务器、FTP服务器等依赖TCP连接的服务 |
4) 【示例】
伪代码模拟SYN Flood攻击:
import socket
import random
def syn_flood(target_ip, target_port, num_packets):
for _ in range(num_packets):
# 伪造源IP(随机或无效IP)
source_ip = ".".join(map(str, random.randint(0, 255) for _ in range(4)))
# 创建socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置源IP(伪造)
s.setsockopt(socket.SOL_IP, socket.IP_SRCADDR, socket.inet_aton(source_ip))
# 发送SYN包
s.connect((target_ip, target_port))
s.send(b'') # 发送空数据
s.close()
# 示例:攻击目标服务器192.168.1.100的80端口,发送10000个SYN包
syn_flood("192.168.1.100", 80, 10000)
5) 【面试口播版答案】
“TCP SYN Flood攻击的核心原理是利用TCP三次握手的半开连接状态耗尽目标服务器的资源。具体来说,正常TCP连接需要三次握手完成,而攻击者会伪造大量源IP地址,向目标服务器发送SYN请求,但不会完成后续的ACK步骤,导致服务器在SYN-SENT状态积累大量未完成的连接,当队列满时,正常连接请求会被丢弃,从而实现DoS。360安全卫士和浏览器常用的防御技术包括SYN Cookie(通过随机数和序列号验证连接合法性,避免伪造SYN包)、连接速率限制(限制单位时间内允许的SYN请求数量)、源IP验证(检查源IP是否合法或已知的攻击源)。这些技术能有效应对SYN Flood攻击,保护服务器的连接资源。”
6) 【追问清单】
7) 【常见坑/雷区】