Mandatory Integrity Control (MIC)


在管理權限下與一般使用者權限的應用程式共用同一個桌面環境,會造成一些安全性的威脅:

  • 跨處理程序的視窗訊息
  • DLL injection、建立遠端執行序

因此需要處理程序隔離機制來確保處理程序安全

  • 介面權限隔離 (也就是前面所介紹的 UAC)
  • 低權限的處理程序不可以影響高權限的處理程序 (這個就需要 Mandatory Integrity Control 的支援)

因此,從 Windows Vista 開始,處理程序 (process) 與資源 (具備 ACL,能夠設權限,例如: 檔案) 兩者都具備 Mandatory Integrity Level (IL),IL 總共有四級:

  • Low (100):保護模式下的 IE
  • Medium (200):一般正常的處理程序
  • High (300):提升特權後的處理程序
  • System (400):系統處理程序 (包含 Automatic Update)

在某一個處理程序嘗試要修改某一個資源時,會在檢查權限之前,先檢查兩者的 IL 等級,只有在處理程序的 IL 等級大於等於所要修改的資源的 IL 等級時,才會去檢查資源的權限,否則就直接拒絕修改。

例如 C:\Demo.txt 檔的 IL=High,NTFS 權限是設定為 Everyone 完全控制,當使用者嘗試開啓記事本去修改該檔時,會無法成功,原因是雖然該檔案是 Everyone 完全控制,但是在檢查 NTFS 權限前會先比對記事本的 IL 等級與檔案的 IL 等級,由於記事本預設執行起來的處理程序 IL = Medium,小於檔案的 IL=High,因此就無法修改它。

這時候如果我們以提升特權的方式來執行記事本,那麼記事本的處理程序 IL = High,就等於所要修改的檔案的 IL,這樣就通過 IL 檢查,接下來再檢查 NTFS 權限是 Everyone 完全控制,因此就可以修改該檔案。

除此之外,當某一個處理程序嘗試去存取另一個處理程序時,作業系統也會先檢查兩者的 IL 等級,一定要大於等於對方才行,否則存取就會失敗。

所以,以正常方式執行起來的處理程序 IL=Medium,而以提升特權方式執行起來的處理程序 IL=High,除此之外,我們是沒有辦法將程式以另外兩種等級執行起來的 (就算是系統管理者)。

不過 IE 如果是在保護模式下執行,那麼此時的 IE 處理程序就會在 IL=Low 的等級執行。

在保護模式執行下的 IE,如果下載並執行了惡意程式 (例如 ActiveX 控制項),這些惡程式就無法對系統造成任何傷害,因為系統上的其它處理程序和資源的 IL 一定都在 Medium 等級以上。

所以問題就來了,如果使用者在保護模式執行下的 IE 中去使用銀行的 Web ATM,就可能無法存取讀卡機,這時候可以將該網站的網址加入「信任的網站」區域,這樣以後瀏覽該網站時,就會另外開一個 IL=Medium 的 IE 來顯示網站內容與執行網站上的用戶端程式。

那麼除了透過提升特權來執處理程序式之外,是不是也可以調整資源的 IL 等級呢? 這是可以做到的,只要使用 icacls.exe 這個命令列工具,但是要以提升特權的方式執行命令提示字元,才可以正常執行 icacls.exe 工具:

設定並顯示 C:\ 的 IL 等級:

icacls.exe 指令也可以針對檔案進行處理,只要將上述的 c:\ 改成其它資料夾或檔案的路徑即可,例如:

icacls  c:\demo.txt  /SetIntegrityLevel  L

但是 /SetIntegrityLevel 的參數只能是 L, M, H 三者其中一個。

最後要特別提醒的是,IL 的檢查只會出現在針對資源的變動 (修改、刪除、建立) 時才會進行,也就是如果只是讀取資源,是不會檢查 IL 的。

 

返回上一頁 >