TCP/IP是網絡最基本的通信協議,任何廠家生產的計算機系統,只要遵守該協議,就能與因特網互聯互通。但是,TCP/IP存在的一些缺陷,常常被不法分子利用,成為他們發動攻擊的一種手段。
2020年初,黑客對著名代碼托管平臺GitHub發動攻擊,GitHub和旗下很多子站點均被提示有信息安全問題,大批訪問用戶被擋在網站之外。
這樣的例子還有很多,14年微軟賬號系統被入侵事件,16年美國網絡癱瘓事件等等等等。
今天,我們一起來看看TCP/IP常見的3種攻擊手段。
SYN Flood
要建立一個TCP連接,需要經過三次握手,過程如下:
(1) 客戶端向服務器發送SYN包,并進入SYN_SENT狀態,等待服務器確認;
(2) 服務器收到SYN包并進行確認,同時向客戶端發送SYN包,即SYN+ACK包。此時服務器進入SYN_RECV狀態。
(3) 客戶端收到服務器的SYN+ACK包后,向服務器發送確認包ACK,發送完畢后,TCP連接成功,完成三次握手。
為了保證三次握手TCP連接的順利建立,TCP協議在三次握手過程中,設置了一些異常處理機制。
第三步客戶端發送確認包ACK后,如果服務器沒有收到,會一直處于第二步的SYN_RECV狀態,并將客戶端IP加入等待列表,重發SYN+ACK報文試圖重試。
重發一般會進行3-5次,大約30秒左右輪詢一次等待列表重試所有客戶端。
SYN_RECV狀態如果一直存在,超過了服務器承受上限后,新的SYN報文將不再被接收,也就會拒絕新的TCP連接的建立。
SYN Flood正是利用了這一設定來攻擊目標,攻擊者偽裝大量的IP地址給服務器發送SYN報文,由于IP地址不存在,客戶端不會給服務器發送最終確認包ACK,使服務器要維持一個龐大的 等待列表,不斷重試發送SYN+ACK報文,SYN_RECV隊列被占滿后,服務器也就徹底崩潰了。
怎么防SYN Flood呢?最簡單的方法是使用DDoS云清洗。DDoS不僅能清洗SYN Flood攻擊,對其他類型的DDoS攻擊也有效,例如UDP Flood、CC等。
CDN也有緩解這類攻擊的作用,前提是攻擊量沒有達到CDN最大承受能力,否則就會直接穿透到達源站,很快源站也會失守,徹底淪陷。如果網站/App經常遭受DDoS攻擊,最好使用DDoS云清洗。
IP欺騙
我們知道,IP是識別身份的重要信息,所以它自然也成了黑客們極力想利用的對象。
假設一個用戶,已經和服務器建立正常的TCP連接,攻擊者會通過構造TCP數據,將自己的IP偽裝為與這名用戶相同的IP,并向服務器發送一個帶有RSI位的TCP數據段。
服務器收到這一數據后,會認為從用戶發送的連接有錯誤,將清空緩沖區中建立好的連接。
這樣一來,這名用戶再發送數據時,服務器已經沒有連接,無法響應,用戶必須從新建立連接。
黑客會偽造大量的IP地址,向目標發送RST數據,使服務器無法對正常用戶服務,這就是IP欺騙攻擊。
TCP重置攻擊
TCP連接有一個特別的設定,如果客戶端發現到達的報文段,對于相關連接而言是不正確的,TCP會發送一個重置報文段斷開連接,防止連接被用來進一步交換信息。
攻擊者正是利用了這一機制,通過向通信的一方或者雙方發送偽造的重置報文段,讓通信方提前關閉TCP連接。雖然服務器仍然可以創建一個新的TCP連接恢復通信,但還是很可能會被攻擊者重置。
TCP重置攻擊有兩種。
一種是攻擊者截獲了通信雙方的交換信息,讀取數據包上的序列號和確認應答號后,得出偽裝的TCP重置報文段的序列號。
另一種是攻擊者無法截取交換信息,無法確定重置報文段的序列號,但通過批量發出不同序列號的重置報文,盲猜序列號,一旦猜中,攻擊目的便達成了。