(转)Windows系统白名单以及UAC机制
用戶帳戶控制
深入了解 Windows 7 用戶帳戶控制
Mark Russinovich
概覽:
標準用戶帳戶
用戶帳戶控制
內(nèi)容
UAC 技術(shù)
提升與惡意軟件安全性
Windows 7 中的不同之處
自動提升
自動提升與 UAC 的目標
在家庭和公司環(huán)境中,使用標準用戶帳戶可以提高安全性并降低總體擁有成本。當用戶使用標準用戶權(quán)限(而不是管理權(quán)限)運行時,系統(tǒng)的安全配置(包括防病毒和防火墻配置)將得到保護。這樣,用戶將能擁有一個安全的區(qū)域,可以保護他們的帳戶及系統(tǒng)的其余部分。對于企業(yè)部署,桌面 IT 經(jīng)理設置的策略將無法被覆蓋,而在共享家庭計算機上,不同的用戶帳戶將受到保護,避免其他帳戶對其進行更改。
但是,很久以來,Windows 的用戶一直都在使用管理權(quán)限運行。因此,軟件通常都開發(fā)為使用管理帳戶運行,并且(通常無意間)依賴于管理權(quán)限。為了讓更多軟件能夠使用標準用戶權(quán)限運行,并且?guī)椭_發(fā)人員編寫能夠使用標準用戶權(quán)限正常運行的應用程序,Windows Vista 引入了用戶帳戶控制 (UAC)。UAC 集成了一系列技術(shù),其中包括文件系統(tǒng)和注冊表虛擬化、受保護的系統(tǒng)管理員 (PA) 帳戶、UAC 提升權(quán)限提示,以及支持這些目標的 Windows 完整性級別。我在我的會議演示文稿和 TechNet 雜志UAC 內(nèi)部信息一文中詳細討論了這些內(nèi)容。
Windows 7 沿用了 UAC 的目標,基礎技術(shù)相對未做改變。但是,它引入了 UAC 的 PA 帳戶可以運行的兩種新模式,以及某些內(nèi)置 Windows 組件的自動提升機制。在此文章中,我將論述推動 UAC 技術(shù)發(fā)展的因素、重新探討 UAC 和安全性之間的關(guān)系、描述這兩種新模式,并介紹自動提升的具體工作方式。請注意,此文章中的信息反映了 Windows 7 預發(fā)布版本的行為,該行為在許多方面與 beta 版有所不同。
UAC 技術(shù)
UAC 技術(shù)的最基本元素和直接效益在于它能使標準用戶更方便地使用 Windows。演示示例展示了 Windows XP 和 Windows Vista 上有關(guān)設置時區(qū)的權(quán)限要求的不同之處。在 Windows XP 上,更改時區(qū)需要管理權(quán)限,實際上,即使是使用時間/日期控制面板小程序查看時區(qū)也需要管理權(quán)限。
這是因為 Windows XP 未將更改時間(安全敏感的系統(tǒng)操作)與更改時區(qū)(只是影響時間的顯示方式)區(qū)分開來。在 Windows Vista(和 Windows 7)中,更改時區(qū)不是一項管理操作,并且時間/日期控制面板小程序也將管理操作與標準用戶操作進行了分隔。僅僅這一項更改就讓許多企業(yè)能夠為出差的用戶配置標準用戶帳戶,因為用戶將能夠調(diào)整時區(qū)來反映他們的當前位置。Windows 7 進一步做出了改進,比如刷新系統(tǒng)的 IP 地址、使用 Windows Update 來安裝可選的更新和驅(qū)動程序、更改顯示 DPI,以及查看標準用戶可訪問的當前防火墻設置。
文件系統(tǒng)和注冊表虛擬化在后臺工作,可以幫助許多無意間使用管理權(quán)限的應用程序在沒有管理權(quán)限的情況下也能正常運行。對于不必要地使用管理權(quán)限而言,最常見的情況是將應用程序設置或用戶數(shù)據(jù)存儲在注冊表或文件系統(tǒng)中系統(tǒng)所使用的區(qū)域內(nèi)。舉例來說,某些舊版應用程序?qū)⑵湓O置存儲在注冊表的系統(tǒng)范圍部分 (HKEY_LOCAL_MACHINESoftware),而不是每用戶部分 (HKEY_CURRENT_USERSoftware),而注冊表虛擬化會將嘗試寫入系統(tǒng)位置的操作轉(zhuǎn)到 HKEY_CURRENT_USER (HKCU) 中的位置,同時保持應用程序兼容性。
設計 PA 帳戶的目的是為了鼓勵開發(fā)人員將應用程序編寫為只需要標準用戶權(quán)限,同時使盡可能多的在管理組件和標準用戶組件之間共享狀態(tài)的應用程序能夠繼續(xù)工作。默認情況下,Windows Vista 或 Windows 7 系統(tǒng)上的第一個帳戶(在 Windows 的早期版本上為完全權(quán)限管理員帳戶)是 PA 帳戶。PA 用戶執(zhí)行的任何程序都使用標準用戶權(quán)限運行,除非用戶明確提升了應用程序,即授予應用程序管理權(quán)限。諸如安裝應用程序和更改系統(tǒng)設置等用戶活動會觸發(fā)提升權(quán)限提示。這些提升權(quán)限提示是最顯著的 UAC 技術(shù),表現(xiàn)形式為切換到一個包含允許/取消對話框的屏幕,背景為灰色的桌面快照。
在安裝之后創(chuàng)建的帳戶是標準用戶帳戶,默認情況下,這些帳戶通過一個“即時權(quán)限提升”提示提供提升功能,該提示要求提供將用于授予管理權(quán)限的管理帳戶的憑據(jù)。利用這一便捷功能,只要共享家庭計算機的家庭成員或更注重安全的使用標準用戶帳戶的用戶知道管理帳戶的密碼,他們就能夠用管理權(quán)限來運行應用程序,而不必手動切換到其他用戶登錄會話。此類應用程序的常見示例包括安裝程序以及家長控制配置。
在啟用了 UAC 后,所有用戶帳戶(包括管理帳戶)都將使用標準用戶權(quán)限運行。這意味著,應用程序開發(fā)人員必須考慮他們的軟件默認情況下將沒有管理權(quán)限這一事實。這應會提醒他們將其應用程序設計為使用標準用戶權(quán)限工作。如果應用程序或其功能的某些部分需要管理權(quán)限,它可以利用提升機制來允許用戶解鎖該功能。通常,應用程序開發(fā)人員只需進行少許更改就可讓其應用程序使用標準用戶權(quán)限正常工作。如有關(guān) UAC 的 E7 博客文章所述,UAC 成功地改變了開發(fā)人員編寫軟件的方式。
提升權(quán)限提示的另一個優(yōu)點是:它們能夠在軟件想要對系統(tǒng)進行更改時“通知”用戶,并使用戶有機會來阻止這種情況。例如,如果用戶不信任或不想允許修改系統(tǒng)的軟件包要求管理權(quán)限,則它們可以拒絕提示。
提升和惡意軟件安全性
UAC 的主要目標是讓更多用戶能夠使用標準用戶權(quán)限運行。但是,其中一項 UAC 技術(shù)看起來像是安全功能:許可提示。許多人認為,因為軟件必須要求用戶授予其管理權(quán)限,因此他們能夠防止惡意軟件獲得管理權(quán)限。提示是一種視覺暗示,它僅為其所述操作獲取管理權(quán)限,除此之外,用戶還可以切換到不同桌面來顯示提升對話框,以及使用 Windows 完整性機制,包括用戶界面特權(quán)隔離 (UIPI),這些都使人們更加堅信這一理念。
正如在 Windows Vista 推出之前我們所談到的,提升的主要目的不是安全性,而是其方便性:如果用戶必須通過登錄到管理帳戶或通過“快速用戶切換”切換到管理帳戶,從而切換帳戶以執(zhí)行管理操作,則大多數(shù)用戶都只會切換一次,而不會切換回來。更改應用程序開發(fā)人員進行設計所針對的環(huán)境將不會有進展。那么,安全桌面和 Windows 完整性機制的目的是什么?
為提示切換到不同桌面的主要原因是:標準用戶軟件無法“欺騙”提升權(quán)限提示,例如,它們無法通過在對話框上的發(fā)布者名稱上繪圖來欺騙用戶,讓用戶認為是 Microsoft 或另一個軟件供應商(而不是這些軟件)生成了提示,從而欺騙提升權(quán)限提示。這種替代桌面稱為“安全桌面”,因為它是系統(tǒng)(而不是用戶)所擁有的,就像系統(tǒng)顯示 Windows 登錄對話框的桌面一樣。
使用其他桌面還有一個重要目的,就是為了實現(xiàn)應用程序兼容性:在正在運行其他用戶擁有的應用程序的桌面上,如果內(nèi)置輔助功能軟件(比如屏幕鍵盤)能夠正常工作,那么此時就有一個第三方軟件不能正常工作。當本地系統(tǒng)帳戶擁有的提升對話框顯示在用戶擁有的桌面上時,該軟件將無法正常工作。
Windows 完整性機制和 UIPI 的設計目的是在提升的應用程序周圍建立一道保護性屏障。它最初的目標其中之一是防止軟件開發(fā)人員投機取巧,利用已經(jīng)提升的應用程序來完成管理任務。使用標準用戶權(quán)限運行的應用程序無法將合成鼠標或鍵盤輸入發(fā)送到提升的應用程序中,以使應用程序執(zhí)行其指令,也無法將代碼注入提升的應用程序以執(zhí)行管理操作。
Windows 完整性機制和 UIPI 在 Windows Vista 中用于保護模式 Internet Explorer,使得感染 IE 的運行實例的惡意軟件更難于修改用戶帳戶設置,例如,將本身配置為在每次用戶登錄時啟動。盡管 Windows Vista 的一個早期設計目標是使用帶有安全桌面的提升、Windows 完整性機制和 UIPI,在使用標準用戶權(quán)限和管理權(quán)限運行的軟件之間建立一個堅不可摧的屏障(稱為安全邊界),但由于以下兩個原因,而導致該目標未能實現(xiàn),并隨之被放棄:可用性和應用程序兼容性。
圖 1 顯示可執(zhí)行文件的名稱。
首先,考慮提升對話框本身。它顯示將被授予管理權(quán)限的主要可執(zhí)行文件的名稱和發(fā)布者。遺憾的是,盡管越來越多的軟件發(fā)布者為其代碼添加了數(shù)字簽名,但仍然有一些軟件發(fā)布者沒有這樣做,并且還有許多未添加簽名的舊版應用程序。對于未簽名的軟件而言,提升對話框只會顯示可執(zhí)行文件的文件名,因此,對于某些惡意軟件(例如,已采用用戶帳戶運行并且正在監(jiān)視未簽名 Setup.exe 應用程序安裝程序的提升)而言,將能夠?qū)⒖蓤?zhí)行文件替換為惡意的 Setup.exe,而用戶卻一無所知(請參閱圖 1)。
其次,該對話框不會告知用戶可執(zhí)行文件在啟動時將會加載哪些 DLL。如果可執(zhí)行文件位于用戶可以控制的目錄中,則使用用戶標準權(quán)限運行的惡意軟件將能夠替換該位置中軟件將使用的任何關(guān)聯(lián) DLL。此外,惡意軟件可以使用并行功能,使可執(zhí)行文件加載應用程序或系統(tǒng) DLL 的惡意版本。并且,除非用戶警惕地單擊詳細信息按鈕,并仔細查看為提升可執(zhí)行文件列出的文件路徑,否則惡意軟件可以將可執(zhí)行文件復制到名稱類似的位置,例如,ProgramFilesVendorApplication.exe(注意應為“Program Files”的內(nèi)容中缺少的空格),在該位置中,惡意軟件將可控制應用程序加載哪些 DLL。在圖 2 中,我已將 Microsoft 網(wǎng)絡監(jiān)視器的一個組件復制到用戶創(chuàng)建的 C:ProgramFiles 目錄(用戶可控制該目錄),并啟動了該組件。
圖 2 已啟動的 Microsoft 網(wǎng)絡監(jiān)視器組件的副本。
最后,為了實現(xiàn)應用程序兼容性,提升的應用程序與標準用戶環(huán)境共享實質(zhì)性狀態(tài),惡意應用程序可以使用該狀態(tài)來影響提升的應用程序的行為。就這一點而言,最直觀的示例就是用戶的注冊表配置文件 HKEY_CURRENT_USER (HKCU)。該配置文件是共享的,因為用戶希望他們作為標準用戶注冊的設置和擴展能夠在提升的應用程序中工作。惡意軟件可以使用 HKCU 中注冊的外殼擴展來加載到使用任何外殼瀏覽對話框(比如“打開文件”和“保存文件”)的已提升應用程序中。其他各種狀態(tài)也是共享的,特別是基本命名對象命名空間,應用程序?qū)⒃谄渲袆?chuàng)建同步和共享內(nèi)存對象。舉例來說,惡意軟件可以利用該共享來劫持提升的應用程序使用的共享內(nèi)存對象,從而對應用程序和系統(tǒng)造成危害。
至于 Windows 完整性機制,由于我前面提到的提升問題,因此它作為屏障的有效性是有限的,而它還存在由于應用程序兼容性而導致的限制。舉例來說,UIPI 不會阻止標準用戶應用程序在桌面上繪圖,這一點可能會被用來欺騙用戶,采用為惡意軟件授予管理權(quán)限的方式來與提升的應用程序交互。同時,Windows 完整性機制也不能跨網(wǎng)絡應用。采用 PA 帳戶運行的標準用戶應用程序?qū)⒛茉L問 PA 帳戶具有管理權(quán)限的遠程系統(tǒng)上的系統(tǒng)資源。如果解決這些限制,將會對應用程序兼容性造成很大影響。盡管如此,我們一直在探尋提高系統(tǒng)安全性(例如,改善保護模式 IE),同時解決應用程序兼容性問題并與軟件開發(fā)人員密切配合的方法。
那么,當您在啟用了 UAC 的情況下采用 Windows Vista PA 帳戶運行時,您將得到什么程度的惡意軟件防護?首先,請記住,要使任何這種情況發(fā)生,惡意軟件首先必須進入系統(tǒng)并且開始執(zhí)行。Windows 具有許多深層防御功能,其中包括數(shù)據(jù)執(zhí)行保護 (DEP)、地址空間加載隨機化 (ASLR)、保護模式 IE、IE 8 SmartScreen 篩選器,以及可以幫助防止惡意軟件進入系統(tǒng)并運行的 Windows Defender。
至于惡意軟件通過某種方式成功進入系統(tǒng)的情況,由于惡意軟件作者(比如合法的開發(fā)人員)假設用戶使用管理權(quán)限運行,因此大多數(shù)惡意軟件將無法正常工作。僅這一點可以被視為一種安全優(yōu)勢。但是,已進入系統(tǒng)并且設計為可利用這些機會的惡意軟件將能夠在用戶第一次提升時獲得管理權(quán)限 — 但惡意軟件甚至不需要等待“實際”提升,因為它可以促成提升,而這種提升甚至可以欺騙最注重安全的用戶。我已經(jīng)在我的 UAC 內(nèi)部信息和 Windows 安全邊界演示文稿中公開演示過惡意軟件如何能夠劫持提升過程(演示位于安全邊界討論的 1 分 03 秒處)。但是,請記住,如果惡意軟件已經(jīng)開始運行,它只需使用標準用戶權(quán)限就可達到惡意軟件想要達到的大部分目的,其中包括將本身配置為在每次用戶登錄時運行、竊取或刪除所有用戶的數(shù)據(jù),或者甚至成為僵尸網(wǎng)絡的一部分。
Windows 7 中的不同之處
我在前面提過,Windows 7 中的某些操作現(xiàn)在可由標準用戶執(zhí)行,但正如有關(guān) UAC 的 E7 博客文章所述,我們還認識到,我們可以在不影響 UAC 的目標的情況下使 Windows 體驗更加流暢。許多用戶抱怨說,當他們執(zhí)行常見的系統(tǒng)管理操作時,Windows Vista 本身會頻繁地請求管理權(quán)限。使 Windows 能夠針對標準用戶環(huán)境正常工作對我們最有利,因為這樣將為我們的客戶帶來利益。但是,提升權(quán)限提示并沒有告誡或鼓勵我們這樣做,而是會強制用戶在絕大多數(shù)用戶都不理解的對話框中再次單擊。因此,Windows 7 開始從默認 Windows 體驗中最大程度地減少這些提示,并使以管理員身份運行的用戶能夠控制其提示體驗。
為此,我們進一步重構(gòu)了系統(tǒng),這樣,擁有標準用戶權(quán)限的用戶將能執(zhí)行更多任務,并且,我們減少了若干多提示方案(例如,在 IE 中安裝 ActiveX 控件)中的提示數(shù)量。Windows 7 還引入了兩種新的 UAC 操作模式,可以在新的 UAC 配置對話框(請參閱圖 3)中選擇這些模式。通過轉(zhuǎn)到控制面板,單擊“用戶帳戶”,單擊“用戶帳戶”,然后單擊“更改用戶帳戶控制設置”,您可以打開該對話框。(您也可以通過單擊提升權(quán)限提示上的“顯示這些通知時進行更改”鏈接或通過訪問“操作中心”來進入該對話框。)
圖 3 可在新的 UAC 配置對話框中選擇的兩種新 UAC 操作模式。
圖 3 中顯示的默認設置就是其中一個新級別。與位于滑塊頂部并相當于 Windows Vista 中的默認模式的“始終通知”不同,只有當非 Windows 可執(zhí)行文件請求提升時,Windows 7 才會默認提示用戶;針對非 Windows 提升的行為與 Windows Vista 相同。
下面接下來的滑塊位置是第二個新設置,它的標簽相同,只是后面附加了“(不降低桌面亮度)”。該模式和默認模式的唯一不同之處在于:提示將出現(xiàn)在用戶的桌面(而不是安全桌面)上。這樣的好處是:用戶可以在提示處于活動狀態(tài)的同時與桌面交互,但正如我之前提到的,將會出現(xiàn)第三方輔助功能軟件可能無法在該提示對話框上正常工作的風險。
最后,如果選擇最底部的滑塊位置,將會完全禁用 UAC 技術(shù),這樣,所有采用 PA 帳戶運行的軟件都將使用完全管理權(quán)限運行、文件系統(tǒng)和注冊表虛擬化將被禁用,并且保護模式 IE 將被禁用。盡管采用此設置時將沒有提示,但保護模式 IE 的損失是此模式的一個很大的弊端。
自動提升
在采用中間兩種設置時,之所以(大多數(shù))Windows 可執(zhí)行文件的提升不會產(chǎn)生提示,其原因在于系統(tǒng)“自動提升”了 Windows 可執(zhí)行文件。首先,在此上下文中,Windows 對 Windows 可執(zhí)行文件的定義是什么?答案取決于若干因素,但有兩個條件必須得到滿足:該可執(zhí)行文件必須經(jīng)過 Windows Publisher 的數(shù)字簽名,Windows Publisher 是用于對 Windows 附帶的所有代碼進行簽名的證書(僅由 Microsoft 進行簽名是不夠的,因此 Windows 未附帶的 Microsoft 軟件不包括在內(nèi));并且該可執(zhí)行文件必須位于其中一個為數(shù)不多的“安全”目錄中。安全目錄是指標準用戶無法修改的目錄,并且它們包括 %SystemRoot%System32(例如,WindowsSystem32)及其大多數(shù)子目錄、%SystemRoot%Ehome,以及 %ProgramFiles% 下的少許目錄(其中包括 Windows Defender 和 Windows 日記本)。
同時,視可執(zhí)行文件是普通 .exe、Mmc.exe 還是 COM 對象而定,自動提升還有一些附加規(guī)則。如果 .exe 種類的 Windows 可執(zhí)行文件(如前面所定義)在其清單中指定了 autoElevate 屬性,這些可執(zhí)行文件將會自動提升。應用程序也將在該清單中向 UAC 指明它們需要管理權(quán)限。此處的 Sysinternals Sigcheck 實用工具通過命令“sigcheck –m %systemroot%system32 askmgr.exe”來轉(zhuǎn)儲任務管理器 (Taskmgr.exe) 的清單,該清單顯示任務管理器已加入自動提升,如圖 4 所示。
圖 4 autoElevate 屬性
在目錄樹中查找自動提升可執(zhí)行文件的一種簡便方法是,通過如下所示的命令使用 Sysinternals Strings 實用工具:
總結(jié)
以上是生活随笔為你收集整理的(转)Windows系统白名单以及UAC机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 亚洲首个专业货运机场!鄂州花湖机场今日投
- 下一篇: 诺奖得主出任天价白酒首席科学家:背后公司