跳到主要內容

Teardrop 攻擊深度解析:IP 分段重疊漏洞如何癱瘓目標系統

Teardrop 攻擊出現於 1990 年代末期,曾讓無數 Windows 與 Linux 系統直接藍屏崩潰。它的武器只有一樣:精心錯位的 IP 封包片段,足以讓作業系統的重組邏輯徹底失控。

IP 分段重疊:攻擊的核心原理

IP 協定允許將大型封包切割成多個片段(Fragment),透過 Fragment Offset 欄位標記每個片段在原始資料中的起始位置,接收端再依序重組。Teardrop 的手法是偽造多個片段的 Offset 值,使第二個片段的起始位置落在第一個片段的範圍之內,造成重疊(Overlap)。當系統計算重組長度時,會出現負數或非預期的記憶體寫入範圍,觸發核心層的緩衝區錯誤,最終導致 BSOD(藍屏當機)或系統掛起。受影響的系統包括 Windows 3.1、95、NT,以及 Linux kernel 2.1.63 以前的版本。

攻擊封包結構解析

一次典型的 Teardrop 攻擊至少發送兩個惡意片段。第一個片段 Offset 為 0,長度正常;第二個片段的 Offset 被設為小於第一個片段結尾的值,例如第一片段涵蓋 byte 0–35,第二片段 Offset 卻宣告從 byte 24 開始,實際資料卻只有 4 bytes。重組演算法在計算「需填入的位置」時,會得到 負數長度(Negative Length),直接引發核心記憶體操作錯誤。攻擊者可用原始 Socket(Raw Socket)持續大量發送此類封包,即便單次流量極低,仍能穩定觸發崩潰,使防禦難度提升。

# Teardrop 概念示意(Scapy,僅供學術研究)
from scapy.all import *
# 片段1:offset=0,正常資料
frag1 = IP(dst="目標IP", flags="MF", frag=0) / ("A" * 36)
# 片段2:offset 刻意重疊,觸發負數長度計算
frag2 = IP(dst="目標IP", frag=3) / ("B" * 4)
send([frag1, frag2])

💡 重點整理

  • 攻擊核心:偽造 Fragment Offset 製造片段重疊,使重組長度為負數。
  • 影響目標:舊版 Windows(95/NT)與 Linux kernel 2.1.63 以前版本最易受害。
  • 防禦方式:更新 OS 修補重組邏輯;現代防火牆可透過分段重組檢查(Fragment Reassembly Inspection)直接過濾異常封包。
  • 現代關聯:概念延伸至 IPv6 的 Atomic Fragment 攻擊,原理如出一轍。

Teardrop 雖已是歷史漏洞,但其核心思路——利用協定重組邏輯的邊界假設發動攻擊——至今仍是網路安全設計的重要警示,值得每位工程師深刻理解。

📚 參考文獻

  1. CERT Advisory CA-1997-28 — IP Denial-of-Service Attackshttps://resources.sei.cmu.edu/library/asset-view.cfm?assetid=496172
  2. RFC 791 — Internet Protocol (IP Fragmentation)https://www.rfc-editor.org/rfc/rfc791
  3. CVE-1999-0035 / NVD — Teardrop Attack 漏洞

留言