萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 電腦基礎知識 >  >> 健康知識

Windows XP SP2 緩衝區溢位防護機制深度解析 (下):RtlEncodePointer 解碼流程、VEH 保護實作、利用可行性探討

續上篇,本文詳細追蹤 RtlEncodePointer/RtlDecodePointer 核心實作,揭示進程專屬隨機 Cookie 產生與驗證流程,並完整呈現 VEH 保護的執行時期解碼邏輯,最後探討實際利用可行性。

1. 進程專屬隨機 Cookie 產生與獲取 (NtQueryInformationProcess)

系統呼叫路徑

ZwQueryInformationProcess
  → 內核 NtQueryInformationProcess
    → 子功能碼 0x24 (ProcessExecuteFlags / 隨機 Cookie)

核心邏輯 (ntoskrnl.exe)

  1. 讀取進程物件偏移 0x258 儲存的隨機值 (edi = [Eprocess+0x258])。
  2. 若為 0 (進程剛建立) → 以 KeQuerySystemTime 取得系統時間 + 核心全域變數 0xFFDFF020+0x518 / +0x4B8 多輪 XOR 產生隨機數 → cmpxchg 寫回進程物件。
  3. 將 Cookie 複製至使用者模式堆疊臨時變量 (esi 指向) 返回。

特性

  • Cookie 與進程建立時間強相關,不可預測。
  • 進程生命週期內固定不變。
  • 若能任意讀取記憶體 (資訊洩露漏洞),可獲取 Cookie 並計算編碼後指標,實現繞過。

2. VEH 鏈表指標保護完整執行流程

XP SP2 實作 (ntdll.dll RtlCallVectoredExceptionHandlers)

_RtlCallVectoredExceptionHandlers@8:
  mov edi, offset _RtlpCalloutEntryList  ; 0x7C99C320
  cmp _RtlpCalloutEntryList, edi         ; 空串列檢查 (自指)
  jnz  Loc_7C962DA0
    ... 進入關鍵區域 (RtlEnterCriticalSection)
    mov esi, _RtlpCalloutEntryList
  Loc_7C962DC1:
    push dword ptr [esi+8]               ; 參數
    call _RtlDecodePointer@4             ; ★ 必須先解碼
    lea ecx, [ebp+var_8]
    push ecx
    call eax                             ; 呼叫處理函數
    ...
    mov esi, [esi]                       ; 移至下一節點 (已解碼指標)
    jmp short Loc_7C962DC1

關鍵點:指標在使用前必須經過 RtlDecodePointer 解碼,攻擊者直接覆寫 _RtlpCalloutEntryList 或節點 Next 指標,解碼後將變為亂碼導致崩潰。

XP SP1 對比 (無保護)

mov esi, _RtlpCalloutEntryList   ; 直接取得明文指標
call dword ptr [esi+8]           ; 直接呼叫,無解碼步驟

3. 實際利用可行性探討

遠端溢位場景

無法直接利用編碼指標繞過,因攻擊者無法預知 Cookie,亦無法在無資訊洩露情況下構造有效編碼指標。

本地/客戶端溢位場景 (較有機會)

  • 覆寫匯入表 (IAT): 系統 DLL IAT 受保護不可寫,但 主程式/非系統 DLL IAT 通常可寫。覆寫目標函數 IAT 入口 → 導向攻擊者代碼,繞過 SEH/VEH 機制。
  • 覆寫靜態資料區函數指標: 若程式在 .data/.bss 段儲存函數指標 (如回呼表、虛函數表指標),且可預測位址,覆寫後觸發呼叫同樣繞過編碼保護。
  • 資訊洩露組合: 先利用格式化字串/越界讀取洩露 Cookie/PEB 基址/模組基址 → 計算編碼指標 → 精確覆寫。

4. 通用性評估

若目標應用程式存在「可寫入的函數指標」且「可控制覆寫內容/位址」,結合資訊洩露,理論上仍可構造通用利用鏈。但較 SP1 純覆寫 SEH/VEH 指標的「通用模板」利用難度指數級上升。

5. 給防禦者的啟示

  1. 編譯器層面: 啟用 /GS (堆疊 Cookie)、/SAFESEH、/DYNAMICBASE (ASLR)、/NXCOMPAT (DEP) 完整組合。
  2. 執行期層面: 部署 EMET / Windows Defender Exploit Protection 強制啟用 DEP、ASLR、SEHOP、HeapSpray 防護、CallerCheck、SimExecFlow 等緩解措施。
  3. 原始碼層面: 避免危險函數 (strcpy, sprintf, gets);使用安全版本 (StringCchCopy, StringCbPrintf);最小權限原則執行服務。

總結: XP SP2 的指標編碼、隨機化、Cookie 三重奏,將溢位利用從「腳本小子可用」推向「專業研究員才能嘗試」,是防禦技術演進的關鍵里程碑。

copyright © 萬盛學電腦網 all rights reserved