跳到主要內容

發表文章

目前顯示的是有「Teardrop」標籤的文章

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 製造片段重疊,使重組長度為負...