开发者学堂课程【互联网安全- DDoS 攻防原理及实战:DDoS 攻防之 Syn Flood】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/356/detail/4189
DDoS 攻防之 Syn Flood
内容介绍:
一、TCP/IP 协议介绍
二、SYN FLOOD 攻击方法
三、DDoS-TCP-攻击方式
四、防护思路(SYN COOKIE)
一、TCP/IP 协议介绍
1.Syn Flood 是DDos 中最古老最难防护的一类攻击,了解 Syn Flood 之前要了解 Syn Flood 所依赖的 TCP/IP 协议,TCP/IP 协议是一个协议族
2.模型介绍
(1)TCP 协议是面向连接、保证高可靠性(数据无丢失、数据无失序、数据无错误、数据无重复到达)传输层协议
(2)在日常的互联网中大量的服务均使用 TCP/IP 协议来进行通讯
(3)因特网浏览器和因特网服务器均采用 TCP/IP 来连接因特网。
(4)浏览器使用 TCP/IP 来访问因特网服务器,服务器使用 TCP/IP 向浏览器传回HTML。
3.TCP 的数据结构
(1)一行四个字节,从上往下,一开始有一个端口和目的端口各占两个字节,用端口来表示对应的不同的服务,平时最常用的 web 服务用得是 TCP 的80端口服务
(2)第二行四个字节是序列号,用来标识保序,标识本次报文的一个序号
(3)第三行是 ack,会对收到的报文进行嵌入的序列号的确认
(4)第四行,第一个是 offset 是偏移,后面有四个 bytes 的保留字段,在后面是TCP Flags 是 TCP 的标志位,用来标明本次报文的内容
主要对这六个标志问题介绍:
0x01 Fin 报文,表示会话关闭
0x02 Syn 报文,表示连接建立,Syn Flood 在这个连接上有效
0x04 Reset 报文,表示会话重置
0x08 push 报文,应该迅速将提交到应用层,而不是等缓冲区满以后再一并提交
0x10 Ack 报文 是第三排的 Acknowledgment number 劝阻字段
0x20 Urgent 报文,紧急字段 表明这是一个紧急标志
(5)第五行,checksum 校验和 对报文进行校验 接收端进行校验来保证数据的正确性;后面的 Urgent Pointer 是一个指针
(6)第六行开始是 TCP Options 可选字段,用来表明 TCP 的一些额外讯息
4.TCP 三次握手
(1)过程解析
左侧是客户端,右侧是服务端,首先由客户端发起请求,客户端发起一个 Syn 是建立连接的一个请求,发一个 TC P报文,然后 client 端进入 Syn 的状态,表明报文已发送。这是状态机的状态。Server 端收到报文以后会进入 SYN_RCVD 状态,然后向client 端回复 ACK 报文。
(2)序列号
lient 发送报文时会给序列号赋值,这里是X值,server 接收端会对序列号进行确认,也就是 ack=X+1。接收端本身也会有一个序列号这里为 Y。Client 收到回复报文以后进行校验,它知道 ack 报文是对它本身的报文回应以后,client 进入 ESTABLISHED状态,也就是连接已建立,随后会对 ack 报文再次进行确认,它的确认 ack 会等于server 端的 Y+1。在 server 最后收到 ack 报文以后,自身会进入 ESTABLISHED 状态。至此,client 端和 server 端建立了一次 TCP 会话。
二、SYN FLOOD 攻击方法
攻击者利用大量的肉鸡源向服务器发起大量的 SYN 包,服务器收到 SYN 包以后认为客户在向自己发起连接请求,然后发送 SYN+ACK。攻击者不再发报,服务器自身会在 SYN 状态等待第三次握手的 ACK 报文,当连接特别多的时候,服务器无法在接受新的 SYN 请求,这个情况下,客户再发送 SYN 请求。服务器不会在回复SYN+ACK,因为本身的连接已经满了。
三、DDoS-TCP-攻击方式
有伪造源 IP、肉鸡 IP、利用随机 IP 反射、TCP SEQ 猜测
对于 SYN FLOOD 它可以发起 SYN FLOOD 、ACK FLOOD 就是 TCP FLOOD SYN 置位,然后 RST FLOOD 等。在 TCP 协议上的诸多边中都可以发起进攻
示例:
当发起攻击请求以后,在服务端可以看到一个连接表,可以看到攻击者模拟8.8.8.8随机端口发起了大量的 SYN FLOOD,然后在80端口对其回应以后,攻击者没有任何的响应。服务端就会存在大量的 SYN 半连接队列,导致无法进一步连接服务。
这是一个真实的网络抓包,攻击源随机的发起了大量的 SYN 连接请求。
四、防护思路(SYN COOKIE)
1.业内有很多防护方案,介绍最通用的 SYN COOKIE
在 client 和 server 之间有一个防火墙,防火墙在客户端的请求发送以后代替 server回复一个 SYN 报文,客户端再次回 ack 报文进行 seq 校验。
只有真实的报文才会被认为为有效的请求,在中间做一次代理再向后面发送请求,代客户端和服务端建立连接以后,做一个 SYN COOKIE 代理校验,校验之后可以继续发包或者做一些请求,凡是可信的可以放行。这是整体的思路。
2.防御
防御都是模拟协议行为对访问表进行校验,当访问表不能够对正常协议做出响应时,认为它是攻击者。当然,随着攻击的发展,攻击者还会有更多的攻击方式来伪造自己,攻击和防护是互相隐逸的过程。