SYN泛洪攻擊

SYN攻擊利用的是TCP的三次握手機制,攻擊端利用偽造的IP位址向被攻擊端發出請求,而被攻擊端發出的回響 報文將永遠傳送不到目的地,那么被攻擊端在等待關閉這個連線的過程中消耗了資源,如果有成千上萬的這種連線,主機資源將被耗盡,從而達到攻擊的目的。

什麼是SYN泛洪攻擊

TCP SYN泛洪發生在OSI第四層,這種方式利用TCP協定的特性,就是三次握手。攻擊者傳送TCP SYN,SYN是TCP三次握手中的第一個數據包,而當伺服器返回ACK後,該攻擊者就不對其進行再確認,那這個TCP連線就處於掛起狀態,也就是所謂的半連線狀態,伺服器收不到再確認的話,還會重複傳送ACK給攻擊者。這樣更加會浪費伺服器的資源。攻擊者就對伺服器傳送非常大量的這種TCP連線,由於每一個都沒法完成三次握手,所以在伺服器上,這些TCP連線會因為掛起狀態而消耗CPU和記憶體,最後伺服器可能當機,就無法為正常用戶提供服務了。

SYN泛洪攻擊原理

大家都知道一個TCP連線的啟動需要經歷三次握手的過程。正常情況下客戶端首先向服務端傳送SYN報文,隨後服務端回以SYN+ACK報文到達客戶端,最後客戶端向服務端傳送ACK報文完成三次握手,後續就是上層業務數據互動,直到某一方下線。


TCP三次握手示意圖 TCP三次握手示意圖

那么假如在這“握手”的過程中,客戶端程式因為莫名崩潰等原因,收到SYN+ACK報文後不再回以ACK,服務端將如何處置呢?這時服務端會“優雅地”再等等,會不會是傳送的包丟失了呢?於是重新傳送一遍SYN+ACK,再收不到來自客戶端的ACK回響的話,就把這次連線丟棄掉。這個過程大約會“優雅地”持續分鐘級,這個持續時間被稱作SYN timeout時間。如果只有個別這樣的異常情況,目標服務端處理起來自是毫不費力;可如果大量這樣的情況出現,對服務端來說就不堪重負了。這是為什麼呢?

如果大量的握手請求湧向TCP服務端,而它們只發出SYN報文而不以ACK回響結束握手,服務端就要為這每一個請求都維持約一分多鐘的連線去等待ACK,也就形成所謂的“半連線”。維護這些半連線是需要消耗很多伺服器的網路連線資源的。如果短時間內這些資源幾乎都被半連線占滿,那么正常的業務請求在這期間就得不到服務,處於等待狀態。

SYN泛洪攻擊示意圖 SYN泛洪攻擊示意圖

更進一步的,如果這些半連線的握手請求是惡意程式發出,並且持續不斷,那么就會導致服務端較長時間內喪失服務功能——這就形成了DoS(Denial of Service拒絕服務)攻擊。這種攻擊方式就稱為SYN泛洪(SYN flood)攻擊。

由於正常的TCP三次握手中發出去多少SYN報文,就會收到多少SYN+ACK報文。攻擊方需要將這些訊息丟棄,同時為了隱藏自己,於是需要大量偽造泛洪攻擊的源地址,隨機改成其它地址。為達到SYN泛洪攻擊的效果,這些偽造的源地址最好無法回響SYN+ACK,如這些源地址的主機根本不存在,或者被防火牆等網路設施攔截,等等。

防範措施

對於SYN泛洪攻擊的防範,最佳化主機系統設定是常用的手段。如降低SYN timeout時間,使得主機儘快釋放半連線的占用;又比如採用SYN cookie設定,如果短時間內連續收到某個IP的重複SYN請求,則認為受到了該IP的攻擊,丟棄來自該IP的後續請求報文。此外合理地採用防火牆等外部網路安全設施也可緩解SYN泛洪攻擊。

相關詞條

熱門詞條

聯絡我們