天天看點

Windows 權限管理Windows 權限管理

Windows 權限管理

基礎概念

管理者使用者是被授予高特權(安全令牌)的賬戶。

标準使用者是被授予标準權限(篩選令牌)的賬戶。

使用者與權限

在windows vista之前,使用者登入,就會建立一個安全令牌(security token),當代碼試圖通路受保護的安全資源時,os會出示這個安全令牌。從包括windows資料總管在内的第一個程序開始,這個令牌會與建立的所有程序關聯。

在windows vista及之後,使用者登入,若是使用管理者登入,則會建立兩個令牌,一個是安全令牌,一個是篩選令牌。篩選令牌隻被授予标準使用者的權限。從包括windows資料總管在内的第一個程序開始,這個令牌會與系統代表最終使用者啟動的所有新程序關聯。
           

UAC

标準權限的應用程式如何通路需要高權限的受限資源?
可以要求os提升權限,但權限隻能在程序邊界提升。也就是一旦程序啟動後,就不能提升權限, 程序在啟動時,它會與目前登入使用者的篩選令牌進行關聯。
應用程式提升權限方式
右鍵run as Admininstrator,若是管理者使用者,則 提升權限确認對話框。若是标準使用者,則 登入憑證對話框,要求輸入具有提升權限的賬戶的登入憑證。
提升權限确認對話框的三種類型:
  • 藍色橫幅,應用程式是系統的一部分
  • 灰色橫幅,應用程式進行了簽名
  • 橙色橫幅,應用程式沒有簽名
程序提升權限方式
自動提升
  1. manifest嵌入到可執行檔案的資源中 (優先級高)
  2. manifest儲存到可執行檔案的目錄中,名稱與可執行檔案相同,擴充名為.manifest

    除通過xml manifest來明确設定所需的權限,os也會隻能判斷一個程式是不是安裝程式,若是,則提升權限對話框/登入憑證對話框,若不是安裝程式,則由最終使用者自行決定是否以管理者身份啟動程序(屬性->相容性)。

手動提升

ShellExecuteEx函數

權限上下文

如何判斷應用程式是否已管理者身份運作?

如何判斷使用的提升權限(安全令牌),還是使用标準權限(篩選令牌)?

  1. 先判斷程序使用的令牌是否是篩選令牌GetTokenInformation
  2. 在判斷程序運作的使用者身份是否是管理者

    若是安全令牌(未篩選令牌,權限被成功提升),IsUserAnAdmin函數判斷是否管理者使用者。

    若是篩選令牌,先擷取安全令牌的相關資訊看是否包含管理者的SID。

windows 完整性機制

安全描述符SID

通路控制清單ACL

系統通路控制清單SACL

在sacl中新增了強制标簽的通路控制項ACE,來為受保護的資源配置設定一個完整性級别(integrity level)。預設沒有ACE的安全對象,os預設其擁有Medium完整性級别。

每一個程序都有一個基于其安全令牌的完整性級别

完整性級别的比較在ACL之前(程序的完整性級别與核心對象的完整性級别)

級别 示例
IE
預設使用中信任級别,并使用一個篩選過的令牌
若應用程式使用提升後的權限啟動,則以高信任級别來運作
系統 Local System或Local Service的身份運作的程序,才能獲得這個信任級别

tools: AccessChk,可以列出通路檔案、檔案夾、系統資料庫項等各種資源所需的完整性級别。

使用者界面特權隔離UIPI

繼續閱讀