网络安全
# Replay Attack
重放攻击的工作原理重放攻击(Replay Attack)是一种网络攻击,攻击者截获并重复发送合法的通信数据,以伪装成合法用户执行重复的交易或操作。它并不是简单的多次请求,而是攻击者利用截获的合法请求数据在不修改其内容的情况下重新发送,以达到非法访问或操作的目的
- 截获合法请求: 攻击者在网络上截获合法用户发送的请求数据包
- 重发截获的数据: 攻击者在稍后时间将这些截获的数据包重新发送到服务器
- 服务器处理请求: 如果服务器没有适当的防重放机制,就会认为重发的请求是合法的,从而处理这个请求,导致重复操作
# SYN 攻击
TCP 连接建立是需要三次握手,假设攻击者短时间伪造不同 IP 地址的 SYN 报文,服务端每接收到一个 SYN 报文,就进入 SYN_RCVD 状态,但服务端发送出去的 ACK + SYN 报文,无法得到未知 IP 主机的 ACK 应答,久而久之就会占满服务端的半连接队列,使得服务端不能为正常用户服务。更多查看:什么是 SYN 攻击?如何避免 SYN 攻击? (opens new window)
- 队列
在 TCP 三次握手的时候,Linux 内核会维护两个队列,分别是:
- 半连接队列,也称 SYN 队列;
- 全连接队列,也称 accept 队列;
- 正常流程:
- 当服务端接收到客户端的 SYN 报文时,会创建一个半连接的对象,然后将其加入到内核的「 SYN 队列」;
- 接着发送 SYN + ACK 给客户端,等待客户端回应 ACK 报文;
- 服务端接收到 ACK 报文后,从「 SYN 队列」取出一个半连接对象,然后创建一个新的连接对象放入到「 Accept 队列」;
- 应用通过调用 accpet() socket 接口,从「 Accept 队列」取出连接对象
SYN 攻击方式最直接的表现就会把 TCP 半连接队列打满,这样当 TCP 半连接队列满了,后续再在收到 SYN 报文就会丢弃,导致客户端无法和服务端建立连接
- 避免 SYN 攻击方式,可以有以下四种方法:
- 调大 netdev_max_backlog;
- 增大 TCP 半连接队列;
- 开启 tcp_syncookies;
- 减少 SYN+ACK 重传次数
上次更新: 2025/10/11, 09:25:12