TCP SYN 洪水(又名 SYN 洪水)是一種 分布式拒絕服務(wù) ( DDoS ) 攻擊,它利用正常 TCP 三向握手的一部分 來(lái)消耗目標(biāo)服務(wù)器上的資源并使其無(wú)響應(yīng)。本質(zhì)上,對(duì)于 SYN flood DDoS,攻擊者發(fā)送 TCP 連接請(qǐng)求的速度比目標(biāo)機(jī)器處理請(qǐng)求的速度快,從而導(dǎo)致網(wǎng)絡(luò)飽和。
攻擊描述
當(dāng)客戶(hù)端和服務(wù)器建立正常的 TCP“三次握手”時(shí),交換看起來(lái)像這樣:
- 客戶(hù)端通過(guò)向服務(wù)器發(fā)送 SYN(同步)消息來(lái)請(qǐng)求連接。
- 服務(wù)器通過(guò)向客戶(hù)端發(fā)送回 SYN-ACK(同步確認(rèn))消息進(jìn)行確認(rèn)。
- 客戶(hù)端以 ACK(確認(rèn))消息響應(yīng),并建立連接。
在 SYN 泛洪攻擊中,攻擊者向目標(biāo)服務(wù)器上的每個(gè)端口重復(fù)發(fā)送 SYN 數(shù)據(jù)包,通常使用偽造的 IP 地址。服務(wù)器不知道受到攻擊,收到多個(gè)看似合法的請(qǐng)求以建立通信。它使用來(lái)自每個(gè)開(kāi)放端口的 SYN-ACK 數(shù)據(jù)包響應(yīng)每次嘗試。
惡意客戶(hù)端要么不發(fā)送預(yù)期的 ACK,要么(如果 IP 地址被欺騙)從一開(kāi)始就不會(huì)收到 SYN-ACK。無(wú)論哪種方式,受到攻擊的服務(wù)器都會(huì)等待一段時(shí)間來(lái)等待對(duì)其 SYN-ACK 數(shù)據(jù)包的確認(rèn)。
在此期間,服務(wù)器無(wú)法通過(guò)發(fā)送 RST 數(shù)據(jù)包關(guān)閉連接,連接保持打開(kāi)狀態(tài)。在連接超時(shí)之前,另一個(gè)SYN 數(shù)據(jù)包將到達(dá)。這導(dǎo)致越來(lái)越多的連接處于半開(kāi)狀態(tài)——事實(shí)上,SYN 泛洪攻擊也被稱(chēng)為“半開(kāi)”攻擊。最終,當(dāng)服務(wù)器的連接溢出表填滿(mǎn)時(shí),對(duì)合法客戶(hù)端的服務(wù)將被拒絕,服務(wù)器甚至可能出現(xiàn)故障或崩潰。
雖然上面描述的“經(jīng)典”SYN 泛洪試圖耗盡網(wǎng)絡(luò)端口,但 SYN 數(shù)據(jù)包也可用于DDoS 攻擊,這些攻擊試圖用虛假數(shù)據(jù)包堵塞您的管道以實(shí)現(xiàn)網(wǎng)絡(luò)飽和。數(shù)據(jù)包的類(lèi)型并不重要。盡管如此,SYN 數(shù)據(jù)包仍經(jīng)常被使用,因?yàn)樗鼈冊(cè)谀J(rèn)情況下最不可能被拒絕。
緩解方法
雖然現(xiàn)代操作系統(tǒng)可以更好地管理資源,這使得連接表溢出變得更加困難,但服務(wù)器仍然容易受到SYN 洪水攻擊。
有許多常用技術(shù)可以緩解 SYN 泛洪攻擊,包括:
微塊——管理員可以在服務(wù)器內(nèi)存中為每個(gè)傳入的 SYN 請(qǐng)求分配一個(gè)微記錄(少至 16 字節(jié)),而不是一個(gè)完整的連接對(duì)象。
SYN cookies——使用加密哈希,服務(wù)器發(fā)送其 SYN-ACK 響應(yīng),其中包含一個(gè)序列號(hào) (seqno),該序列號(hào)由客戶(hù)端 IP 地址、端口號(hào)和可能的其他唯一標(biāo)識(shí)信息構(gòu)成。當(dāng)客戶(hù)端響應(yīng)時(shí),此哈希包含在 ACK 數(shù)據(jù)包中。服務(wù)器驗(yàn)證 ACK,然后才為連接分配內(nèi)存。
RST cookies——對(duì)于給定客戶(hù)端的第一個(gè)請(qǐng)求,服務(wù)器故意發(fā)送無(wú)效的 SYN-ACK。這應(yīng)該會(huì)導(dǎo)致客戶(hù)端生成一個(gè) RST 數(shù)據(jù)包,告訴服務(wù)器出了什么問(wèn)題。如果收到,服務(wù)器知道請(qǐng)求是合法的,記錄客戶(hù)端,并接受來(lái)自它的后續(xù)傳入連接。
堆棧調(diào)整——管理員可以調(diào)整 TCP 堆棧以減輕 SYN 泛洪的影響。這可能涉及減少超時(shí),直到堆棧釋放分配給連接的內(nèi)存,或有選擇地丟棄傳入連接。
顯然,上述所有方法都依賴(lài)于目標(biāo)網(wǎng)絡(luò)處理大規(guī)模流量 DDoS 攻擊的能力,其流量為每秒數(shù)十G(甚至數(shù)百G)。