跳至內容

強制完整性控制

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

強制完整性控制(英語:Mandatory Integrity Control)是一個在微軟Windows操作系統中從Windows Vista開始引入,並沿用到後續版本系統的核心安全功能。強制完整性控制通過完整性級別標籤來為運行於同一登錄會話的進程提供隔離。此機制的目的是在一個潛在不可信的上下文(與同一賬戶下運行的其他較為可信的上下文相比)中選擇性地限制特定進程和軟件組件的訪問權限。

實現

強制完整性控制在對象的安全描述符中使用了一個新的訪問控制項(ACE)類型來代表對象的完整性級別。在Windows中,訪問控制列表(ACL)被限制為授予訪問權限(讀取、寫入、執行權限)和特權給用戶和組。在安全引用監視器執行授權授予對象的訪問權限前,會將訪問令牌中的完整性級別與安全描述符中的完整性級別比較。Windows 根據主體的完整性級別是高於還是低於所請求的對象,以及訪問控制項中的完整性策略標誌來決定是否授予訪問權限。安全子系統以強制標籤的形式實現完整性級別,以便和訪問控制列表提供的自由訪問控制區別開來。

Windows Vista定義了四個完整性級別: (SID: S-1-16-4096)、 (SID: S-1-16-8192)、 (SID: S-1-16-12288)、系統 (SID: S-1-16-16384)。默認情況下,普通用戶啟動的進程將獲得中完整性級別,而提升的進程則獲得高完整性級別。[1]通過引入完整性級別,強制完整性控制可以分類隔離程序,使得沙箱化潛在危險程序(如進行網絡通信的程序)成為可能。低完整性進程所擁有的訪問權限少於那些擁有更高完整性級別的進程。

帶有訪問控制列表的對象(如命名對象,包括文件註冊表項,甚至進程線程)有一個訪問控制項,定義着最低需要哪個完整性級別才能訪問此對象。Windows確保只有當進程的完整性級別等於或高於所請求的對象的完整性級別時,它才能寫入或刪除此對象。此外,擁有更高完整性級別的進程對象甚至不允許讀取訪問。[2]

於是,一個進程就不能與另一個更高完整性級別的進程交互了。所以,進程不能通過 CreateRemoteThread()[3] API執行DLL注入到更高完整性級別的進程之類的功能,也不能使用 WriteProcessMemory()[4] 函數發送數據到另一個進程。

參考

  1. ^ Steve Riley. Mandatory Integrity Control in Windows Vista. [2007-10-08]. (原始內容存檔於2007-09-29). 
  2. ^ Mark Russinovich. PsExec, User Account Control and Security Boundaries. [2007-10-08]. (原始內容存檔於2010-04-15). 
  3. ^ CreateRemoteThread Function (Windows). MSDN. [2007-10-08]. (原始內容存檔於2007-10-23). 
  4. ^ WriteProcessMemory Function. MSDN. [2007-10-08]. (原始內容存檔於2007-10-08).