首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Intel 處理器保護環:Ring 0 與 Ring 3 本質解析

     編輯:關於C++

架構概覽

Intel x86 架構實作 4 級特權環(Ring 0–3),Windows 僅使用 Ring 0(核心模式)與 Ring 3(使用者模式)。特權檢查核心機制:段選擇子 與 描述符表 的基址/限制/屬性。

關鍵段暫存器值對照

暫存器Ring 3 值Ring 0 值用途
CS0x1B (23)0x08 (8)程式碼段選擇子
DS/SS0x23 (35)0x10 (16)資料/堆疊段選擇子
FS0x3B (59)0x30 (48)Thread Information Block (TEB) / KPRCB

核心資料結構定址

  • 選擇子 0x30 (Ring 0 FS):基址固定 0xFFDFF000,指向 KPCR (Kernel Processor Control Region),包含當前執行緒、處理器號、IDT/GDT 基址等核心資料。
  • 選擇子 0x3B (Ring 3 FS):指向 TEB (Thread Environment Block),使用者模式執行緒區域儲存區(TLS、PEB 指標、例外處理鏈等)。

模式切換機制

  1. 系統呼叫:使用者模式執行 syscall/sysenter/int 0x2E,CPU 依據 MSR 切換至 Ring 0,載入核心 CS/SS,進入核心入口點。
  2. 中斷/例外:硬體中斷或例外(如 #PF、#GP)觸發 IDT 查表,若目標描述符 DPL=0,CPU 自動切換至 Ring 0 處理。
  3. 返回:sysret/iret/sysexit 恢復 Ring 3 暫存器上下文。

安全意涵

  • Ring 3 程式碼無法直接存取 Ring 0 記憶體(分頁保護 + 特權檢查)。
  • 驅動程式運行於 Ring 0,擁有完整硬體存取權,故驅動漏洞即意味著核心提權。
  • 現代防護:SMEP/SMAP 防止核心誤執行/存取使用者記憶體;KPTI 隔離核心頁表;CET 防止 ROP/JOP 攻擊。

除錯與逆向工程實用技巧

  • Windbg !pcr、!teb 快速檢視 KPCR/TEB。
  • 監控 FS:[0] (SEH 鏈) 與 GS:[0x188] (KPCR.CurrentThread) 追蹤執行緒切換。
  • 分析 syscall 進入點 KiSystemCall64 理解系統呼叫分派流程。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved