DoS(Denial of Service,拒絕服務)攻擊層出不窮,許多人知其名不知其理。本文從 TCP 協議核心機制切入,剖析 DoS 攻擊如何利用協議特性耗盡資源,並列舉常見攻擊變體,為防禦部署提供理論依據。
1. 什麼是 DoS 攻擊?
DoS 旨在使目標主機/服務停止提供正常功能或資源存取。譬若餐廳客滿拒客,攻擊者透過大量偽造或畸形請求,佔滿連線佇列、耗盡頻寬/CPU/記憶體,導致合法用戶無法獲得服務。注意:此處 DoS 與微軟舊作業系統 MS-DOS 無關。
2. TCP 協議關鍵特性回顧(RFC 793/1122/1323)
- 可靠傳輸:序號、確認號、重傳機制、滑動視窗、流量控制。
- 連線建立:三向交握
Client → SYN (seq=x) → Server → SYN+ACK (seq=y, ack=x+1) → Client → ACK (ack=y+1) → ESTABLISHED。
- 連線拆除:四向揮手:FIN/ACK 交換,進入 TIME_WAIT 狀態。
- TCP 標頭關鍵欄位(20 Bytes 基礎 + 選項):
Source/Destination Port (16-bit) | Sequence Number (32-bit) | Acknowledgment Number (32-bit) | Data Offset (4-bit) | Reserved (6-bit) | Flags (6-bit: URG, ACK, PSH, RST, SYN, FIN) | Window (16-bit) | Checksum (16-bit) | Urgent Pointer (16-bit) | Options | Padding | Data
3. 常見 DoS 攻擊手法與原理
① SYN Flood(SYN 洪水)
攻擊者大量發送 SYN 封包(常偽造來源 IP),Server 回 SYN+ACK 並分配半連線資源(TCB),等待最終 ACK。因來源 IP 偽造或攻擊者不回 ACK,半連線佇列填滿,合法連線被拒。利用點:三向交握中 Server 須預先分配資源、半連線佇列有限。
② ACK Flood / RST Flood
大量發送 ACK 或 RST 封包,強迫目標處理無效封包、消耗 CPU/頻寬,或干擾正常連線狀態機。
③ Smurf / Fraggle 攻擊
- Smurf:攻擊者對廣播位址發送 ICMP Echo Request(偽造受害者為來源 IP),所有主機回應 Echo Reply 淹沒受害者。
- Fraggle:同理但用 UDP Echo (Port 7) 或 UDP Chargen (Port 19)。
利用點:ICMP/UDP 回應機制 + 廣播放大 + IP 位址偽造。
④ 連線耗盡攻擊
建立大量完整 TCP 連線(完成三向交握)並保持閒置(或慢速傳送資料),佔滿 Server 連線表/檔案描述符/執行緒池。
⑤ 應用層 DoS(Layer 7)
針對特定應用(HTTP、DNS、資料庫)發送資源密集型請求(如大量複雜查詢、大檔下載、SSL 重新協商),以極低頻寬耗盡應用伺服器運算資源。
4. 防禦啟示
- 協議層面:啟用 SYN Cookie、縮短半連線逾時、限制半連線佇列、啟用 TCP Intercept(Cisco)或同等機制。
- 網路層面:入口/出口過濾(BCP 38/84 防 IP 偽造)、封鎖廣播 ICMP/UDP、部署 DDoS 清洗設備/服務。
- 主機層面:調大連線佇列、限制單一 IP 連線數、啟用應用層 WAF/速率限制。
- 架構層面:多層級負載平衡、任何業務可快速切換至備援節點、制定事件響應手冊。
理解協議弱點才能對症下藥;DoS 攻擊手法持續演進,防禦需持續演進。