用戶賬戶控制
深刻了解 Windows 7 用戶賬戶控制
Mark Russinovich
概覽:
在家庭和公司環境中,使用標準用戶賬戶能夠提升安全性並下降整體擁有成本。當用戶使用標準用戶權限(而不是管理權限)運行時,系統的安全配置(包括防病毒和防火牆配置)將獲得保護。這樣,用戶將能擁有一個安全的區域,能夠保護他們的賬戶及系統的其他部分。對於企業部署,桌面 IT 經理設置的策略將沒法被覆蓋,而在共享家庭計算機上,不一樣的用戶賬戶將受到保護,避免其餘賬戶對其進行更改。
可是,好久以來,Windows 的用戶一直都在使用管理權限運行。所以,軟件一般都開發爲使用管理賬戶運行,而且(一般無心間)依賴於管理權限。爲了讓更多軟件可以使用標準用戶權限運行,而且幫助開發人員編寫可以使用標準用戶權限正常運行的應用程序,Windows Vista 引入了用戶賬戶控制 (UAC)。UAC 集成了一系列技術,其中包括文件系統和註冊表虛擬化、受保護的系統管理員 (PA) 賬戶、UAC 提高權限提示,以及支持這些目標的 Windows 完整性級別。我在個人
會議演示文稿和
TechNet 雜誌
UAC 內部信息一文中詳細討論了這些內容。
Windows 7 沿用了 UAC 的目標,基礎技術相對未作改變。可是,它引入了 UAC 的 PA 賬戶能夠運行的兩種新模式,以及某些內置 Windows 組件的自動提高機制。在此文章中,我將論述推進 UAC 技術發展的因素、
從新探討 UAC 和安全性之間的關係、描述這兩種新模式,並介紹自動提高的具體工做方式。請注意,此文章中的信息反映了 Windows 7 預發佈版本的行爲,該行爲在許多方面與 beta 版有所不一樣。
UAC 技術
UAC 技術的最基本元素和直接效益在於它能使標準用戶更方便地使用 Windows。演示示例展現了 Windows XP 和 Windows Vista 上有關設置時區的權限要求的不一樣之處。在 Windows XP 上,更改時區須要管理權限,實際上,即便是使用時間/日期控制面板小程序查看時區也須要管理權限。
這是由於 Windows XP 未將更改時間(安全敏感的系統操做)與更改時區(只是影響時間的顯示方式)區分開來。在 Windows Vista(和 Windows 7)中,更改時區不是一項管理操做,而且時間/日期控制面板小程序也將管理操做與標準用戶操做進行了分隔。僅僅這一項更改就讓許多企業可以爲出差的用戶配置標準用戶賬戶,由於用戶將可以調整時區來反映他們的當前位置。Windows 7 進一步作出了改進,好比刷新系統的 IP 地址、使用 Windows Update 來安裝可選的更新和驅動程序、更改顯示 DPI,以及查看標準用戶可訪問的當前防火牆設置。
文件系統和註冊表虛擬化在後臺工做,能夠幫助許多無心間使用管理權限的應用程序在沒有管理權限的狀況下也能正常運行。對於沒必要要地使用管理權限而言,最多見的狀況是將應用程序設置或用戶數據存儲在註冊表或文件系統中系統所使用的區域內。舉例來講,某些舊版應用程序將其設置存儲在註冊表的系統範圍部分 (HKEY_LOCAL_MACHINE\Software),而不是每用戶部分 (HKEY_CURRENT_USER\Software),而註冊表虛擬化會將嘗試寫入系統位置的操做轉到 HKEY_CURRENT_USER (HKCU) 中的位置,同時保持應用程序兼容性。
設計 PA 賬戶的目的是爲了鼓勵開發人員將應用程序編寫爲只須要標準用戶權限,同時使盡量多的在管理組件和標準用戶組件之間共享狀態的應用程序可以繼續工做。默認狀況下,Windows Vista 或 Windows 7 系統上的第一個賬戶(在 Windows 的早期版本上爲徹底權限管理員賬戶)是 PA 賬戶。PA 用戶執行的任何程序都使用標準用戶權限運行,除非用戶明確提高了應用程序,即授予應用程序管理權限。諸如安裝應用程序和更改系統設置等用戶活動會觸發提高權限提示。這些提高權限提示是最顯著的 UAC 技術,表現形式爲切換到一個包含容許/取消對話框的屏幕,背景爲灰色的桌面快照。
在安裝以後建立的賬戶是標準用戶賬戶,默認狀況下,這些賬戶經過一個「即時權限提高」提示提供提高功能,該提示要求提供將用於授予管理權限的管理賬戶的憑據。利用這一便捷功能,只要共享家庭計算機的家庭成員或更注重安全的使用標準用戶賬戶的用戶知道管理賬戶的密碼,他們就可以用管理權限來運行應用程序,而沒必要手動切換到其餘用戶登陸會話。此類應用程序的常見示例包括安裝程序以及家長控制配置。
在啓用了 UAC 後,全部用戶賬戶(包括管理賬戶)都將使用標準用戶權限運行。這意味着,應用程序開發人員必須考慮他們的軟件默認狀況下將沒有管理權限這一事實。這應會提醒他們將其應用程序設計爲使用標準用戶權限工做。若是應用程序或其功能的某些部分須要管理權限,它能夠利用提高機制來容許用戶解鎖該功能。一般,應用程序開發人員只需進行少量更改就可以讓其應用程序使用標準用戶權限正常工做。如
有關 UAC 的 E7 博客文章所述,UAC 成功地改變了開發人員編寫軟件的方式。
提高權限提示的另外一個優勢是:它們可以在軟件想要對系統進行更改時「通知」用戶,並使用戶有機會來阻止這種狀況。例如,若是用戶不信任或不想容許修改系統的軟件包要求管理權限,則它們能夠拒絕提示。
提高和惡意軟件安全性
UAC 的主要目標是讓更多用戶可以使用標準用戶權限運行。可是,其中一項 UAC 技術看起來像是安全功能:許可提示。許多人認爲,由於軟件必需要求用戶授予其管理權限,所以他們可以防止惡意軟件得到管理權限。提示是一種視覺暗示,它僅爲其所述操做獲取管理權限,除此以外,用戶還能夠切換到不一樣桌面來顯示提高對話框,以及使用 Windows 完整性機制,包括用戶界面特權隔離 (UIPI),這些都令人們更加堅信這一理念。
正如在 Windows Vista 推出以前
咱們所談到的,提高的主要目的不是安全性,而是其方便性:若是用戶必須經過登陸到管理賬戶或經過「快速用戶切換」切換到管理賬戶,從而切換賬戶以執行管理操做,則大多數用戶都只會切換一次,而不會切換回來。更改應用程序開發人員進行設計所針對的環境將不會有進展。那麼,安全桌面和 Windows 完整性機制的目的是什麼?
爲提示切換到不一樣桌面的主要緣由是:標準用戶軟件沒法「欺騙」提高權限提示,例如,它們沒法經過在對話框上的發佈者名稱上繪圖來欺騙用戶,讓用戶認爲是 Microsoft 或另外一個軟件供應商(而不是這些軟件)生成了提示,從而欺騙提高權限提示。這種替代桌面稱爲「安全桌面」,由於它是系統(而不是用戶)所擁有的,就像系統顯示 Windows 登陸對話框的桌面同樣。
使用其餘桌面還有一個重要目的,就是爲了實現應用程序兼容性:在正在運行其餘用戶擁有的應用程序的桌面上,若是內置輔助功能軟件(好比屏幕鍵盤)可以正常工做,那麼此時就有一個第三方軟件不能正常工做。當本地系統賬戶擁有的提高對話框顯示在用戶擁有的桌面上時,該軟件將沒法正常工做。
Windows 完整性機制和 UIPI 的設計目的是在提高的應用程序周圍創建一道保護性屏障。它最初的目標其中之一是防止軟件開發人員投機取巧,利用已經提高的應用程序來完成管理任務。使用標準用戶權限運行的應用程序沒法將合成鼠標或鍵盤輸入發送到提高的應用程序中,以使應用程序執行其指令,也沒法將代碼注入提高的應用程序以執行管理操做。
Windows 完整性機制和 UIPI 在 Windows Vista 中用於保護模式 Internet Explorer,使得感染 IE 的運行實例的惡意軟件更難於修改用戶賬戶設置,例如,將自己配置爲在每次用戶登陸時啓動。儘管 Windows Vista 的一個早期設計目標是使用帶有安全桌面的提高、Windows 完整性機制和 UIPI,在使用標準用戶權限和管理權限運行的軟件之間創建一個堅如盤石的屏障(稱爲安全邊界),但因爲如下兩個緣由,而致使該目標未能實現,並隨之被放棄:可用性和應用程序兼容性。
圖 1
顯示可執行文件的名稱。
首先,考慮提高對話框自己。它顯示將被授予管理權限的主要可執行文件的名稱和發佈者。遺憾的是,儘管愈來愈多的軟件發佈者爲其代碼添加了數字簽名,但仍然有一些軟件發佈者沒有這樣作,而且還有許多未添加簽名的舊版應用程序。對於未簽名的軟件而言,提高對話框只會顯示可執行文件的文件名,所以,對於某些惡意軟件(例如,已採用用戶賬戶運行而且正在監視未簽名 Setup.exe 應用程序安裝程序的提高)而言,將可以將可執行文件替換爲惡意的 Setup.exe,而用戶卻一無所知(請參閱
圖 1)。
其次,該對話框不會告知用戶可執行文件在啓動時將會加載哪些 DLL。若是可執行文件位於用戶能夠控制的目錄中,則使用用戶標準權限運行的惡意軟件將可以替換該位置中軟件將使用的任何關聯 DLL。此外,惡意軟件可使用並行功能,使可執行文件加載應用程序或系統 DLL 的惡意版本。而且,除非用戶警戒地單擊詳細信息按鈕,並仔細查看爲提高可執行文件列出的文件路徑,不然惡意軟件能夠將可執行文件複製到名稱相似的位置,例如,\ProgramFiles\Vendor\Application.exe(注意應爲「Program Files」的內容中缺乏的空格),在該位置中,惡意軟件將可控制應用程序加載哪些 DLL。在
圖 2 中,我已將 Microsoft 網絡監視器的一個組件複製到用戶建立的 C:\ProgramFiles 目錄(用戶可控制該目錄),並啓動了該組件。
圖 2
已啓動的 Microsoft 網絡監視器組件的副本。
最後,爲了實現應用程序兼容性,提高的應用程序與標準用戶環境共享實質性狀態,惡意應用程序可使用該狀態來影響提高的應用程序的行爲。就這一點而言,最直觀的示例就是用戶的註冊表配置文件 HKEY_CURRENT_USER (HKCU)。該配置文件是共享的,由於用戶但願他們做爲標準用戶註冊的設置和擴展可以在提高的應用程序中工做。惡意軟件可使用 HKCU 中註冊的外殼擴展來加載到使用任何外殼瀏覽對話框(好比「打開文件」和「保存文件」)的已提高應用程序中。其餘各類狀態也是共享的,特別是基本命名對象命名空間,應用程序將在其中建立同步和共享內存對象。舉例來講,惡意軟件能夠利用該共享來劫持提高的應用程序使用的共享內存對象,從而對應用程序和系統形成危害。
至於 Windows 完整性機制,因爲我前面提到的提高問題,所以它做爲屏障的有效性是有限的,而它還存在因爲應用程序兼容性而致使的限制。舉例來講,UIPI 不會阻止標準用戶應用程序在桌面上繪圖,這一點可能會被用來欺騙用戶,採用爲惡意軟件授予管理權限的方式來與提高的應用程序交互。同時,Windows 完整性機制也不能跨網絡應用。採用 PA 賬戶運行的標準用戶應用程序將能訪問 PA 賬戶具備管理權限的遠程系統上的系統資源。若是解決這些限制,將會對應用程序兼容性形成很大影響。儘管如此,咱們一直在探尋提升系統安全性(例如,改善保護模式 IE),同時解決應用程序兼容性問題並與軟件開發人員密切配合的方法。
那麼,當您在啓用了 UAC 的狀況下采用 Windows Vista PA 賬戶運行時,您將獲得什麼程度的惡意軟件防禦?首先,請記住,要使任何這種狀況發生,惡意軟件首先必須進入系統而且開始執行。Windows 具備許多深層防護功能,其中包括數據執行保護 (DEP)、地址空間加載隨機化 (ASLR)、保護模式 IE、IE 8
SmartScreen 篩選器,以及能夠幫助防止惡意軟件進入系統並運行的 Windows Defender。
至於惡意軟件經過某種方式成功進入系統的狀況,因爲惡意軟件做者(好比合法的開發人員)假設用戶使用管理權限運行,所以大多數惡意軟件將沒法正常工做。僅這一點能夠被視爲一種安全優點。可是,已進入系統而且設計爲可利用這些機會的惡意軟件將可以在用戶第一次提高時得到管理權限 — 但惡意軟件甚至不須要等待「實際」提高,由於它能夠促成提高,而這種提高甚至能夠欺騙最注重安全的用戶。我已經在個人
UAC 內部信息和
Windows 安全邊界演示文稿中公開演示過惡意軟件如何可以劫持提高過程(演示位於安全邊界討論的 1 分 03 秒處)。可是,請記住,若是惡意軟件已經開始運行,它只需使用標準用戶權限就可達到惡意軟件想要達到的大部分目的,其中包括將自己配置爲在每次用戶登陸時運行、竊取或刪除全部用戶的數據,或者甚至成爲僵屍網絡的一部分。
Windows 7 中的不一樣之處
我在前面提過,Windows 7 中的某些操做如今可由標準用戶執行,但正若有關 UAC 的 E7 博客文章所述,咱們還認識到,咱們能夠在不影響 UAC 的目標的狀況下使 Windows 體驗更加流暢。許多用戶抱怨說,當他們執行常見的系統管理操做時,Windows Vista 自己會頻繁地請求管理權限。使 Windows 可以針對標準用戶環境正常工做對咱們最有利,由於這樣將爲咱們的客戶帶來利益。可是,提高權限提示並無告誡或鼓勵咱們這樣作,而是會強制用戶在絕大多數用戶都不理解的對話框中再次單擊。所以,Windows 7 開始從默認 Windows 體驗中最大程度地減小這些提示,並使以管理員身份運行的用戶可以控制其提示體驗。
爲此,咱們進一步重構了系統,這樣,擁有標準用戶權限的用戶將能執行更多任務,而且,咱們減小了若干多提示方案(例如,在 IE 中安裝 ActiveX 控件)中的提示數量。Windows 7 還引入了兩種新的 UAC 操做模式,能夠在新的 UAC 配置對話框(請參閱
圖 3)中選擇這些模式。經過轉到控制面板,單擊「用戶賬戶」,單擊「用戶賬戶」,而後單擊「更改用戶賬戶控制設置」,您能夠打開該對話框。(您也能夠經過單擊提高權限提示上的「顯示這些通知時進行更改」連接或經過訪問「操做中心」來進入該對話框。)
圖 3
可在新的 UAC 配置對話框中選擇的兩種新 UAC 操做模式。
圖 3 中顯示的默認設置就是其中一個新級別。與位於滑塊頂部並至關於 Windows Vista 中的默認模式的「始終通知」不一樣,只有當非 Windows 可執行文件請求提高時,Windows 7 纔會默認提示用戶;針對非 Windows 提高的行爲與 Windows Vista 相同。
下面接下來的滑塊位置是第二個新設置,它的標籤相同,只是後面附加了「(不下降桌面亮度)」。該模式和默認模式的惟一不一樣之處在於:提示將出如今用戶的桌面(而不是安全桌面)上。這樣的好處是:用戶能夠在提示處於活動狀態的同時與桌面交互,但正如我以前提到的,將會出現第三方輔助功能軟件可能沒法在該提示對話框上正常工做的風險。
最後,若是選擇最底部的滑塊位置,將會徹底禁用 UAC 技術,這樣,全部採用 PA 賬戶運行的軟件都將使用徹底管理權限運行、文件系統和註冊表虛擬化將被禁用,而且保護模式 IE 將被禁用。儘管採用此設置時將沒有提示,但保護模式 IE 的損失是此模式的一個很大的弊端。
自動提高
在採用中間兩種設置時,之因此(大多數)Windows 可執行文件的提高不會產生提示,其緣由在於系統「自動提高」了 Windows 可執行文件。首先,在此上下文中,Windows 對 Windows 可執行文件的定義是什麼?答案取決於若干因素,但有兩個條件必須獲得知足:該可執行文件必須通過 Windows Publisher 的數字簽名,Windows Publisher 是用於對 Windows 附帶的全部代碼進行簽名的證書(僅由 Microsoft 進行簽名是不夠的,所以 Windows 未附帶的 Microsoft 軟件不包括在內);而且該可執行文件必須位於其中一個爲數很少的「安全」目錄中。安全目錄是指標準用戶沒法修改的目錄,而且它們包括 %SystemRoot%\System32(例如,\Windows\System32)及其大多數子目錄、%SystemRoot%\Ehome,以及 %ProgramFiles% 下的少量目錄(其中包括 Windows Defender 和 Windows 日記本)。
同時,視可執行文件是普通 .exe、Mmc.exe 仍是 COM 對象而定,自動提高還有一些附加規則。若是 .exe 種類的 Windows 可執行文件(如前面所定義)在其清單中指定了 autoElevate 屬性,這些可執行文件將會自動提高。應用程序也將在該清單中向 UAC 指明它們須要管理權限。此處的 Sysinternals
Sigcheck 實用工具經過命令「sigcheck –m %systemroot%\system32\taskmgr.exe」來轉儲任務管理器 (Taskmgr.exe) 的清單,該清單顯示任務管理器已加入自動提高,如
圖 4 所示。
圖 4
autoElevate 屬性
在目錄樹中查找自動提高可執行文件的一種簡便方法是,經過以下所示的命令使用 Sysinternals Strings 實用工具: