在 Windows Vista 之前,如果該用戶具有 Administrator Group (admin user) 的話,執行任何程式會繼承該用戶在當初建立 logon session 時的 token,因此所有的 process 都會是 high integrity level。
User Access Control (UAC) 的設計可以讓 admin user 在預設狀態下都是以 medium integrity level 執行 process,在有需要的狀況下,可以將提升至 high integrity level。
在 Windows 10,UAC 可以透過 User Account Control Settings 來設定不同等級(UAC slider level)。
前三個等級差異是存取 resource 的範圍,最後的 Nevet notify 則會讓 notify (consent) 自動同意,而不是關閉 UAC。
根據 csandker 的文章,在 UAC 啟用的狀態下,每當 admin user 登入時會建立一組 tokens:
這一組 token 會相互連結 (linked),所以每當有新的 thread 執行時可以存取兩個 tokens。
需要以 high integrity level 執行時,在透過 consent.exe 提供的視窗進行提升權限。
Windows 預設的 Local Adminstrator 用戶(SID 的格式是 SID: S-1-5-21-DomainID-500) 是不屬於 UAC 的範疇,而其他的 admin user 預設則是屬於 UAC 的範疇。
根據 MSDN 的 UAC 介紹 ,大致說明了 UAC 的流程
大致上可以將 UAC 分成幾個步驟:
Application Information service 會負責以下事項:
- 檢查 manifest
- 彈出視窗 (consent.exe) 讓使用者點擊
- 取得使用者同意後會使用 Full Admin Token 執行 CreateProcess
User Account Control: Switch to the secure desktop when prompting for elevation
(預設是開啟)下一篇,我要介紹的是如何 Bypass UAC!