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