前言:信任關係的破壞者
IP 欺騙並非攻擊終點,而是破壞主機間信任關係的手段。TCP/IP 協議族設計初期忽視安全性,導致序列號預測、路由誘導、來源位址偽造、授權繞過等攻擊成為可能。本文深入剖析 TCP 序列號預測機制、Rlogin 信任模型弱點,並提供系統級防禦建議。
一、核心機制:TCP 序列號預測
1. 信任關係與 Rlogin 弱點
Unix 系統透過 ~/.rhosts 建立主機級互信:主機 A 信任主機 B 的 IP,允許 B 上同帳號用戶免密碼 rlogin、rsh、rcp 至 A。驗證僅基於來源 IP 位址,成為 IP 欺騙的切入點。
2. TCP 三向交握與序列號邏輯
- ISN (Initial Sequence Number):連線發起端選擇的初始序列號,隨機性決定預測難度。
- 三向交握流程:
- Client → Server:
SYN (ISN_C)
- Server → Client:
SYN (ISN_S), ACK (ISN_C+1)
- Client → Server:
ACK (ISN_S+1)
- 序列號演算法:早期 Berkeley 實作 ISN 每秒遞增 128,000,每新連線再增 64,000。32 位計數器約 9.32 小時輪轉一次,設計目的是避免舊連線殘留封包干擾新連線(2MSL 等待機制)。
3. Morris 攻擊模型
攻擊者 X 欲偽裝受信任主機 T 與目標 S 建立連線:
- X → S:
SYN (ISN_X), SRC=T(偽造來源 IP)
- S → T:
SYN (ISN_S), ACK (ISN_X+1)(回應被導向真實 T)
- X 預測 ISN_S,向 S 發送
ACK (ISN_S+1), SRC=T 完成交握。
關鍵難點:X 無法直接收到步驟 2 的回應,必須精準預測 ISN_S。Morris 證明早期 TCP 實作 ISN 可預測性極高,攻擊可行。
4. 處理真實主機 T 的干擾
真實 T 收到非預期的 SYN/ACK 會回應 RST 拆毀連線。解決方案:
- SYN Flood 湮沒 T:佔滿 T 的連線佇列,使其無法處理 S 的回應。
- 等待 T 關機/重啟:物理層面排除干擾。
二、IP 欺騙完整攻擊鏈
- 目標選定與信任關係發現:掃描
r* 服務、分析 /.rhosts、/etc/hosts.equiv。
- 使受信任主機失能:發動 SYN Flood 攻擊目標信任主機,佔滿其 TCP 連線佇列(Backlog),使其無法回應 RST。
- 採樣目標主機 ISN:建立合法連線觀察 ISN 增長規律,推算下一連線 ISN。
- 偽造身份建立連線:使用預測 ISN、偽造來源 IP,完成三向交握並注入惡意指令(如植入
+ + 至 ~/.rhosts 建立後門)。
三、SYN Flood 攻擊機制詳解
攻擊者向目標大量發送偽造來源 IP 的 SYN 封包。目標回應 SYN/ACK 並將半開連線存入 Backlog 佇列。因偽造 IP 不存在,無主機回應 ACK,目標持續重試並佔用佇列槽位。佇列滿時拒絕新連線,導致服務癱瘓。關鍵點:攻擊者絕不使用存活主機 IP,否則真實主機會回應 RST 釋放佇列。
四、防禦對策體系
1. 協議與系統層面
- 隨機化 ISN 生成演算法:現代作業系統(Linux 2.6+、Windows Vista+、BSD)採用加密強隨機數生成 ISN,徹底阻斷預測攻擊。
- 啟用 TCP SYN Cookie:不分配佇列資源即可應對 SYN Flood,Linux 核心參數
net.ipv4.tcp_syncookies=1。
- 縮短 SYN_RECV 超時:減少半開連線存活時間。
- 擴大 Backlog 佇列:
net.core.somaxconn、net.ipv4.tcp_max_syn_backlog。
2. 網路架構層面
- 入口/出口過濾(BCP 38/RFC 2827):邊界路由器丟棄來源 IP 不屬於本網段的出站封包,防止內部發起欺騙。
- 反向路徑轉發(uRPF):嚴格/鬆散模式驗證封包來源 IP 可達性。
- 廢棄 r* 服務:全面改用 SSH、SCP、SFTP,停用基於 IP 信任的脆弱協議。
3. 監控與審計
- 部署 NIDS/NIPS 偵測異常 SYN 速率、半開連線堆積。
- 啟用防火牆/路由器日誌記錄欺騙嘗試(如偽造私有 IP 從外部介面進入)。
結語
IP 欺騙利用協議層面的信任假設與早期實作缺陷。現代防禦已從「預測困難」轉向「協議隨機化、架構過濾、服務淘汰」的系統性方案。企業應優先淘汰 r* 服務,部署 SYN Cookie 與 uRPF,並納入供應鏈要求廠商提供安全的 TCP/IP 實作。