TCP安全:SYN Flooding 和 nmap

SYN flooding

簡介:向target持續發送SYN=1的TCP報文,使target因內存滿而拒絕服務。
命令:netwox 76 -i target_ip -p port
原理:TCP建立連接時,server收到SYN報文,會分配一個較大的TCB空間,存儲相關信息,並進入half-opening狀態。
防禦:發現這種攻擊後,開啓SYN Cookies:echo 1 > /prop/sys/net/ipv4/tcp_syncookies
SYN Cookies原理:
在ACK到達之前不分配任何資源。收到SYN數據包時,服務器構造SYN + ACK數據包發送回客戶端,該數據包中的序列號不再是隨機值,
而是SYN Cookie,它根據以下規則構建:

  1. 前5位:t mod 32.設t是一個緩慢遞增的時間戳(通常是time()邏輯上右移6個位置,這給出了64秒的分辨率)
  2. 中3位:表示m的編碼值 .令m爲服務器在SYN隊列條目中存儲的最大段大小(MSS)值
  3. 最後24位:s=Hash(server ip、port、client ip、port)

當客戶端向服務器發回ACK數據包後,服務器從確認號中減去1,得到發送給客戶端的 SYN cookie,並執行檢驗:
4. 檢查值t與當前時間,以查看連接是否已過期。
5. 重新計算s以確定它是否確實是一個有效的SYN cookie。
6. 從SYN cookie中的3位編碼解碼值m,然後可以使用它來重建SYN隊列條目。
SYN Cookie的缺點:
7. 服務器僅限於8個唯一的MSS值,因爲它只能以3比特編碼。
8. 服務器必須拒絕所有TCP選項(例如大窗口或時間戳)。

nmap

簡介:掃描工具,集成了多種掃描功能
端口檢測命令,nmap ip ,也稱作tcp connect(-sT)掃描
原理:向目標各端口發送SYN,若目標端口open,則建立連接,若close,則收到RST,若設置SYN過濾,則無回覆。
缺點:建立連接後會留下痕跡。

改進:sudo nmap ip, TCP SYN(半開-sS)掃描
原理:需要root權限,直接干預發包,在收到目標的syn+ack後,不回覆ack,而是回覆RST,避免連接建立。

-sF,FIN掃描,可以判斷port是close還是open/filter,掃描結果是closed 或 open|filtered
-sA,ACK掃描,判斷目標端口是否設置過濾。當port open/close時,收到ACK報,會回覆RST。掃描結果是filtered或 unfiltered
F和A的交集可判斷目標port的狀態。

target port open closed filtered
-sT SYN+ACK RST no reply
-sS SYN+ACK RST no reply
-sA RST RST no reply
-sF no reply RST no reply

nmap idle

與nmap比,不用自己給target發包,不留痕。利用了ip數據報標識(identifier,用於分片重組)自增1的規律(目前已修補該漏洞)。
步驟:

  1. hack 發SYN給zombie(殭屍,聯網但沒有活動的主機),zombie的RST迴應中帶有ip_id=1033
  2. hack 冒充zombie的ip,發SYN給target, 如果目標主機上該端口是開着的,那麼會發送SYN+ACK,zombie收到這個數據包,會發RST;如果是關着的,會發送RST,zombie收到這個數據包,會直接忽略。
  3. hack 發syn給zombie,zombie的RST回覆中帶有ip_id,若它=1033+1,說明zombie沒有與target建立連接,target爲close,
    若id=1033+2,說明target open,若id=1033+3,說明zombie不是真的殭屍。

原理:

  • 收到SYN包時,如果port open,回覆SYN+ACK,若close,則回覆RST。
  • 如果沒有發送SYN,卻收到一個SYN+ACK,會回覆RST。
  • 根據id自增1的規律,檢測identifier,判斷主機距離上一次發包之後又發了幾個數據包。

參考1:
https://zhuanlan.zhihu.com/p/59750145
《TCP/IP詳解》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章