MS05-051 漏洞 (MSDTC 服務 BuildContextW 記憶體損壞) 利用代碼與蠕蟲已現身。現有 Snort 規則僅匹配 DCE/RPC 協定特徵 (如 IXnRemote 介面綁定、BuildContextW 呼叫特徵碼),誤報率高,無法精準識別攻擊載體本身。
均針對 TCP/UDP 1024+ 埠,匹配 DCE/RPC 封包結構中的特定位元組模式 (如 |05|、|04 00|、|E0 0C|k|90 0B C7|g|10 B3 17 00 DD 01 06|b|DA| 等),並檢查 flowbits:isset,dce.bind.IXnRemote。正常 RPC 請求亦可能觸發,缺乏攻擊載體特徵。
遠程呼叫 msdtcprx!BuildContextW() (DCE-RPC Opnum 7) 時存在記憶體損壞。最簡請求封包參數結構 (手工解碼):
// param0: 2 bytes + 2 bytes padding 0x00,0x00, 0x00,0x00 // param1: 24 bytes (全0) 0x00 x24 // param2: max/actual length = 1, Unicode空字串 + 2 bytes padding 0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x01,0x00,0x00,0x00, 0x00,0x00, 0x00,0x00 // param3 (pwszHostName): 同上結構,長度1,空字串 // param4 (pwszUuidString): max length 應為 0x25 (37字元),超過即為畸形 // param5: 同 param4
關鍵點:param4/param5 的 最大可能長度 正常為 0x00000025,超過此值即構成畸形請求,觸發緩衝區溢位。
BuildContextW 參數欄位。param4/param5 max length > 0x25 設定規則,直接鎖定攻擊載體。dce.bind.IXnRemote 狀態位,確認會話上下文。下一步工作:開發 Snort 預處理器或 Lua 腳本實現 DCE/RPC 參數級解析,實現 MS05-051 攻擊的精準零誤報檢測。