強制完整性控制

強制完整性控制(英語: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).