閱讀本文,你可以初步了解 windows 上的 uac 使用者賬戶控制機制。本文不會涉及到 uac 的底層實現原理和安全邊界問題。
在 windows 中有多種不同的賬戶:
users 使用者組
我們需要將這些賬戶列舉出來是因為在解釋 uac 賬戶控制的時候,會與此相關。
system 在系統中擁有最高許可權。
預設我們安裝 windows 時會建立乙個管理員賬戶,這也是 windows 系統推薦我們使用的管理員賬戶,其許可權等級比 system 低。
administrator 的許可權級別和我們使用者建立的管理員賬戶的許可權級別是一樣的,但是訪問令牌(access token)的管理方式不一樣,所以這裡我們需要分開說。
標準賬戶是我推薦大家使用的首選賬戶種類,因為在普通使用場景下,這個是最安全的。
windows vista 開始引入了 uac,不過在 windows vista 上只有兩種 uac 設定——開啟和關閉。如果開啟,那麼應用試圖安裝軟體或更改計算機、或者更改了 windows 設定時將彈出 uac 提示框;如果關閉,那麼 uac 就此關閉。windows vista 的 uac 一直飽受詬病就是因為這種情況下的 uac 提示是非常頻繁的(而且以前的程式遷移到不需要管理員許可權需要時間)。
在 windows 7 上,在開啟和關閉中間新引入了兩個 uac 級別,都是在更改 windows 設定時不通知(實際上就是加了一些 uac 提權的白名單)。只是乙個會進入「黑屏」狀態,另乙個不會進入此狀態。從表現上看這兩個只是黑屏與不黑屏,但從安全性上講黑屏的安全性會高很多。uac 通知時進入的黑屏狀態在 windows 中稱之為「安全桌面」,這時整個桌面進入了 system 賬戶,原使用者賬戶下的所有程式都無法得知此時 uac 彈窗的情況,也無法通過模擬使用者操作來跳過這個 uac 框。而不黑屏時,不會切換到新的桌面環境,原有程式依然可以獲得此 uac 彈窗的一些資訊,這很不安全。
但是!無論是 windows vista 還是 windows 7,一旦你將 uac 設定拖到最底,那麼此時 uac 將徹底關閉。如果你是管理員賬戶,那麼執行的程式都將以管理員許可權執行。
從 windows 8 開始到現在的 windows 10,雖然依然是上面四個設定,但拖到最底的「從不通知」時,uac 依然是開啟的狀態。也就是說,使用者正常啟動的程序依然是標準許可權,要獲得管理員許可權提公升依然需要重啟整個程序。這個安全性限制是很重要的。
特別說明!實際上 uac 拖到最頂部,也就是所有 uac 通知都顯示 uac 提示視窗才是真的在利用 uac 保護你的電腦。因為 windows 7 開始新增的兩個中間級別都是在部分情況下靜默提權,而這兩種級別因為可以靜默提權,所以也可以很容易被程式繞過。微軟認為繞過 uac 彈窗不是漏洞,因為這是使用者自己的選擇——如果使用者選擇全部通知是不會繞過的,使用者選擇了預設值,於是才可以繞過。所以這裡推薦大家使用 uac 的最高檔,也就是全部提權都通知,這可以讓大多數繞過 uac 的方法失效。
雖然說通知等級給了使用者四個設定項,但實際上真正有用的只有兩個而已,參見我的另一篇部落格:windows 的 uac 設定中的通知等級實際上只有兩個檔而已 - 呂毅。
從 windows vista 開始,程序在建立的時候,可以得到乙個訪問令牌(access token),這個令牌有四個完整性級別:
system 令牌是對系統完全操作的令牌,對應 system 使用者擁有的最高許可權,可以對 windows 作業系統做任何事。通常乙個服務程序會以 system 使用者啟動,拿到 system 令牌。
high 對應 administrators 組擁有的最高許可權,也就是前面所說的 administrator 使用者和使用者自己建立的管理員賬戶的許可權級別。此許可權級別用來管理計算機,可以修改其他使用者,可以修改系統的設定,這些設定可能會造成安全問題(比如更改系統時間可能導致防毒軟體失效)。
medium 對應 users 組擁有的最高許可權,也就是前面所說的使用者自己建立的標準使用者。此許可權級別用來日常使用。medium 許可權在 windows vista(實際上是其核心 nt6)中相比於之前版本的 windows 有一些許可權的提公升,不危及系統安全性的操作在 medium 下即可以完成,不需要切換到 high 級別。users 組的使用者是沒有 high 和 system 令牌的,程式在此使用者賬戶下,無論如何也無法拿到 high 和 system 令牌的,因為這個使用者沒有這樣的令牌;如果要許可權提公升,需要輸入管理員賬號密碼,而這時拿到的是這個管理員賬號的 high 和 system 令牌。
low 並不對應者乙個使用者組,這是為了一些需要特殊保護的應用程式準備的。有些應用容易受到攻擊,那麼使用 low 令牌啟動這些應用程式,可以最大程度減少利用這些應用對系統造成攻擊。比如 ie 瀏覽器的頁面程序使用 low 令牌執行,其對系統很難做出什麼改動,甚至也影響不了當前使用者的檔案;當需要需系統計算機進行互動的時候,會與 ie 的 ui 程序(medium 令牌)進行通訊,請求協助完成。
當 uac 是開啟狀態,無論是管理員賬戶還是標準賬戶,windows 資源管理器程序(explorer.exe)都是以 medium 令牌啟動程序。由於子程序通常能夠繼承父程序的令牌完整性級別,所以這樣的設定可以防止使用者雙擊開啟的程式得到過高的令牌,從而在使用者不知情的情況下危及系統安全。
當程式需要以管理員許可權執行(對應 high 級別的令牌)時,可以自己在 manifest 裡面宣告,也可以自己使用runas
謂詞重啟自己。而這個時候是會彈出 uac 提示的,使用者知情。
前面我們說過在 administrators 組中,administrator 賬戶和普通管理員賬戶要分開說。差別就在令牌的管理上。普通管理員賬戶下,正常啟動程序使用的是繼承自 explorer.exe 的 medium 訪問令牌,當程序需要提公升許可權時,會彈出 uac 提示框來啟動乙個子程序以獲得 high 令牌。而 administrator 賬戶下,正常啟動的程序也都獲得了 high 令牌。
在 windows 系統中,不同許可權的程序是隔離的(雖然不是完全隔離)。
如果你希望你的程式在執行某個操作的時候提公升許可權來執行,實際上你不能在你原來的程序上直接提公升許可權。你有很多種方法來提權,甚至繞過 uac 來提權,但無論哪一種,你的程序實際上都是重啟了,你是在新的提公升的程序中執行了這個需要許可權的操作。
對於管理員賬戶,如果啟動乙個普通程序,那麼此程序在管理員賬戶下執行,獲得的是 medium 訪問令牌。當此程序提公升許可權,將彈出 uac 提示框,使用者同意後繼續使用此同乙個管理員賬戶執行,但子程序將獲得 high 訪問令牌。
對於標準賬戶,如果啟動乙個普通程序,那麼此程序在標準賬戶下執行,獲得的是 medium 訪問令牌。當此程序提公升許可權,將彈出 uac 提示框,使用者輸入管理員賬號密碼後,子程序將在輸入的管理員賬戶下執行,獲得此管理員的 high 訪問令牌。標準賬戶沒有 high 訪問令牌,如果說繞過 uac 來提權是為了獲取 high 訪問令牌,那麼在標準賬戶下根本沒有 high 訪問令牌,所以你繞不過。
管理員賬戶的 uac 彈窗是這樣的,要求使用者選「是」或者「否」:
而標準賬戶的 uac 彈窗是這樣的,要求輸入管理員賬號和密碼:
以上兩個彈窗都是藍色的,代表發起此 uac 請求的子程序其程式的證書是經過認證的。如果沒有證書那麼提示框是黃色的,如果證書過期,那麼提示框是紅色的。這可以幫助使用者區分 uac 彈窗做出決策(雖然實際上沒什麼用)。
以上在標準賬戶下用管理員賬戶開啟子程序的例子可以看下圖:
lvyi 是我安裝系統時建立的管理員賬號,但是我使用的是 walterlv 標準賬號。正常是在 walterlv 賬號下啟動程式,但以管理員許可權執行時,會要求輸入 lvyi 賬號的密碼來提權,於是就會以 lvyi 的身份執行這個程式。這種情況下,那個管理員許可權執行的程式會以為當前執行在 lvyi 這個賬戶下,程式設計師需要小心這裡的坑,因為拿到的使用者路徑以及登錄檔不是你所期望的 walterlv 這個賬號下的。
在上圖中,你會發現當前賬戶下的任務管理器連管理員賬戶執行的程式圖示都拿不到。
我的部落格會首發於 而 csdn 會從其中精選發布,但是一旦發布了就很少更新。
Windows 中的 UAC 使用者賬戶控制
2019 05 05 09 02 07 walter lv 閱讀數 397 閱讀本文,你可以初步了解 windows 上的 uac 使用者賬戶控制機制。本文不會涉及到 uac 的底層實現原理和安全邊界問題。在 windows 中有多種不同的賬戶 users 使用者組 我們需要將這些賬戶列舉出來是因為...
Windows的使用者管理中的使用者模擬
使用者模擬 impersonation 是自從 windows 2000 時引入的強大的功能。windows 系統甚至允許使用者模擬 impersonation 被用在客戶端 服務端的程式設計模型裡面。在傳統模式下,比如乙個遠端伺服器可以提供檔案 印表機或者資料庫服務,希望使用這些資源的客戶端可以傳...
windows 7的uac功能受到影響
微軟正在對有關windows核心中存在一處缺陷的報告進行調查,但表示,這一缺陷的影響並不大,黑客需要利用另外乙個缺陷才能發動遠端攻擊。黑客可以利用該缺陷繞過windows vista和windows 7的使用者帳戶控制 以下簡稱 uac 功能,一家安全公司稱該缺陷為 惡夢 uac的目的是阻止惡意件 ...