原文摘自ITECN Blog,,作者:盆盆<Microsoft MVP>
原文地址: 點(diǎn)擊查看 ITECN Blog是由近40位微軟MVP和MCT,、還有微軟員工組成,旨在宣傳微軟IT Pro技術(shù) 本文以Windows Vista Build 5231為例,,就“Date and Time”控制面板組件,,在consent前后的進(jìn)程訪(fǎng)問(wèn)令牌的變化,來(lái)試圖探秘UAC功能的精妙之處。文章不但描述standard user和Full Privilege User之間的訪(fǎng)問(wèn)令牌的差異,,同時(shí)揭示了這種差異應(yīng)用到本例的實(shí)質(zhì)(SeSystemTimePrivilege特權(quán)),。最后,文章還嘗試解釋W(xué)indows Vista最新引入的兩個(gè)SID(Medium Mandatory Level和High Mandatory Level)的作用,。 為了讓讀者諸公更好地享用后面的“正餐”,,這里先呈上“開(kāi)胃酒”─簡(jiǎn)單介紹一下UAC的功能。UAC(用戶(hù)帳戶(hù)控制)可以說(shuō)是采用逆向思維的典范: 傳統(tǒng)的安全規(guī)則告誡用戶(hù)必須工作在受限帳戶(hù)下,,大多數(shù)用戶(hù)會(huì)困惑于為什么無(wú)法安裝應(yīng)用程序,,為什么無(wú)法修改系統(tǒng)時(shí)間─并沒(méi)有必然的理由要求用戶(hù)花時(shí)間學(xué)習(xí)runas的用法,他們有權(quán)專(zhuān)注于本職工作,,而不是和這些令人生厭的命令打交道,。 而UAC則是鼓勵(lì)用戶(hù)工作在管理員帳戶(hù)下,只是這個(gè)管理員帳戶(hù)經(jīng)過(guò)特殊的“降級(jí)”處理─多數(shù)情況下,,用戶(hù)并不會(huì)有掣肘之感,。如果要運(yùn)行需要高特權(quán)的管理任務(wù),系統(tǒng)會(huì)自動(dòng)偵測(cè)到這種請(qǐng)求,,在得到用戶(hù)確認(rèn)后,,會(huì)自動(dòng)提升到高級(jí)特權(quán)環(huán)境,以便順利完成管理任務(wù),。 大家知道,,要用“日期和時(shí)間”組件修改系統(tǒng)日期或者時(shí)間,當(dāng)前帳戶(hù)必須具備“更改系統(tǒng)時(shí)間”特權(quán)(該特權(quán)的內(nèi)部名稱(chēng)為SeSystemTimePrivilege),。本文以“日期和時(shí)間”組件為例進(jìn)行實(shí)驗(yàn),,查看其進(jìn)程訪(fǎng)問(wèn)令牌的前后變化(主要是SeSystemTimePrivilege特權(quán)的變化),來(lái)簡(jiǎn)單剖析UAP功能的實(shí)質(zhì),。 實(shí)驗(yàn)約定 本實(shí)驗(yàn)在Windows Vista Build 5231上進(jìn)行,,測(cè)試帳戶(hù)為T(mén)estAdmin,是管理員組成員,。為了查看進(jìn)程的訪(fǎng)問(wèn)令牌,,需要借助聰明人Mark所提供的Process Explorer工具(這個(gè)工具實(shí)在太好了,我們經(jīng)常用它來(lái)查看IE瀏覽器所加載的dll文件,,以便進(jìn)行排錯(cuò)─且按下不表),,下載地址如下: http://www./Utilities/ProcessExplorer.html 實(shí)驗(yàn)記錄 1.準(zhǔn)備工作 鼠標(biāo)右鍵單擊Process Explorer程序圖標(biāo),然后執(zhí)行“Run Elevated”菜單命令,,以便在完全權(quán)限下運(yùn)行Process Explorer,,這樣我們就可以不受限制地查看任意進(jìn)程的訪(fǎng)問(wèn)令牌。啟動(dòng)以后,,單擊Options→Difference Highlight Duration,,設(shè)置變化時(shí)間為5秒,。 2.查看rundll32進(jìn)程的訪(fǎng)問(wèn)令牌 單擊任務(wù)欄通知區(qū)域的時(shí)鐘圖標(biāo),然后單擊“Date and Time Settings”,,即可打開(kāi)“時(shí)間和日期”窗口,。正如您所預(yù)料的,現(xiàn)在還不能對(duì)系統(tǒng)時(shí)間進(jìn)行任何修改,。同時(shí)可以在Process Explorer窗口中看到新增一個(gè)進(jìn)程rundll32(綠色顯示),,如下圖所示。 雙擊該rundll32進(jìn)程,,即可打開(kāi)其屬性對(duì)話(huà)框,。在“Image”標(biāo)簽頁(yè)的“Command Line”文本框里可以看到timedate.cpl(“時(shí)間和日期”的控制面板擴(kuò)展文件),如下圖所示,。這說(shuō)明該rundll32進(jìn)程就是“時(shí)間和日期”組件的宿主進(jìn)程,。 切換到“Security”標(biāo)簽頁(yè)里,就可以看到經(jīng)過(guò)特殊降級(jí)處理后的訪(fǎng)問(wèn)令牌,,可以看到在下方的特權(quán)列表里,,只有少得可憐的三個(gè)特權(quán),而并沒(méi)有SeSystemTimePrivilege特權(quán),!這就是為什么在缺省情況下,,無(wú)法在TestAdmin環(huán)境下修改系統(tǒng)時(shí)間的原因。而在老的系統(tǒng)例如Windows XP,,rundll32進(jìn)程具有SeSystemTimePrivilege特權(quán),,如下圖所示。 3.查看dllhost進(jìn)程的訪(fǎng)問(wèn)令牌 要能夠修改系統(tǒng)時(shí)間,,只需單擊“時(shí)間和日期”窗口右下側(cè)的“Unlock”按鈕,即可打開(kāi)如下圖所示的對(duì)話(huà)框,,同時(shí)可以看到系統(tǒng)啟動(dòng)了一個(gè)consent進(jìn)程,。單擊“I want to complete this action”選項(xiàng),現(xiàn)在應(yīng)該可以修改系統(tǒng)時(shí)間了,??磥?lái)這個(gè)consent進(jìn)程負(fù)責(zé)傳遞消息,以便系統(tǒng)確認(rèn)提升操作權(quán)限,。其本質(zhì)應(yīng)該是修改相關(guān)進(jìn)程的訪(fǎng)問(wèn)令牌,,對(duì)于本例來(lái)說(shuō),應(yīng)該是在相關(guān)進(jìn)程的安全令牌里添加SeSystemTimePrivilege特權(quán),。 按照這樣的推斷,,從理論上來(lái)說(shuō),現(xiàn)在rundll32進(jìn)程的訪(fǎng)問(wèn)令牌里應(yīng)該已經(jīng)添加SeSystemTimePrivilege特權(quán),,以便我們可以修改系統(tǒng)時(shí)間,,那么果真是這樣嗎,? 結(jié)果很讓人沮喪,重新打開(kāi)rundll32進(jìn)程的屬性對(duì)話(huà)框,,發(fā)現(xiàn)其訪(fǎng)問(wèn)令牌沒(méi)有任何改變(并沒(méi)有新增SeSystemTimePrivilege特權(quán)),!這是怎么回事? 反復(fù)重新做實(shí)驗(yàn)后,,終于發(fā)現(xiàn),,單擊“I want to complete this action”選項(xiàng)后,系統(tǒng)會(huì)新增一個(gè)dllhost進(jìn)程(在Process Explorer中綠色顯示),,在dllhost進(jìn)程屬性對(duì)話(huà)框的“Image”標(biāo)簽頁(yè)的“Command Line”文本框里可以看到“/Processid: {9DF523B0-A6C0-4EA9-B5F1-F4565C3AC8B8}”參數(shù),。搜索注冊(cè)表得知,{9DF523B0-A6C0-4EA9-B5F1-F4565C3AC8B8}就是timedate.cpl的AppID,,如下圖所示,。 接下來(lái)的步驟不說(shuō)也知道,切換到“Security”標(biāo)簽頁(yè),,不出所料,,dllhost進(jìn)程的訪(fǎng)問(wèn)令牌里果然有SeSystemTimePrivilege特權(quán),如下圖所示,。 現(xiàn)在真相大白了,,原來(lái)Windows Vista表面上讓rundll32進(jìn)程“明修棧道”,背地里卻讓dllhost進(jìn)程“暗渡陳倉(cāng)”,,真正讓我們可以修改系統(tǒng)時(shí)間的是dllhost進(jìn)程,! 4.比較前后訪(fǎng)問(wèn)令牌的SID列表 仔細(xì)觀察前后兩個(gè)進(jìn)程(rundll32進(jìn)程和dllhost進(jìn)程)訪(fǎng)問(wèn)令牌中的SID列表,會(huì)發(fā)現(xiàn)有以下兩個(gè)顯著的不同: (1) rundll32進(jìn)程:Administrators組SID被標(biāo)記為Deny only,,其含義類(lèi)似于Windows XP/2003中Restricted Token,。這表明Administrators組可以訪(fǎng)問(wèn)的資源,和我們無(wú)關(guān),,而Administrators拒絕訪(fǎng)問(wèn)的資源,,我們也不能訪(fǎng)問(wèn)。 訪(fǎng)問(wèn)令牌里包含一個(gè)名為“Medium Mandatory Level”的古怪帳戶(hù)(SID為S-1-16-8192),。 (2)dllhost進(jìn)程:包含一個(gè)名為“High Mandatory Level”的“古怪”帳戶(hù)(SID為S-1-16-12288),。 實(shí)驗(yàn)結(jié)論 1.UAP的實(shí)質(zhì) 非Administrator的管理員登錄時(shí),Explorer進(jìn)程會(huì)獲得一個(gè)“縮水”的訪(fǎng)問(wèn)令牌,,也叫標(biāo)準(zhǔn)用戶(hù)(Standard User)訪(fǎng)問(wèn)令牌,。由于其他進(jìn)程大多數(shù)都是由Explorer啟動(dòng),所以這些進(jìn)程會(huì)自動(dòng)拷貝這份“縮水”的訪(fǎng)問(wèn)令牌(如本例的rundll32進(jìn)程),。憑借這份“縮水”的訪(fǎng)問(wèn)令牌,,用戶(hù)可以完成絕大多數(shù)工作,如果需要執(zhí)行管理任務(wù),,系統(tǒng)會(huì)提醒用戶(hù)進(jìn)行確認(rèn),,一旦認(rèn)可,,將會(huì)獲得完全版本的訪(fǎng)問(wèn)令牌(如本例的dllhost進(jìn)程)。 進(jìn)一步驗(yàn)證發(fā)現(xiàn),,本例的rundll32進(jìn)程由explorer進(jìn)程啟動(dòng),,所以默認(rèn)會(huì)獲得一份“縮水”令牌;而dllhost進(jìn)程則由某個(gè)svchost進(jìn)程啟動(dòng),。 2.古怪帳戶(hù)的作用猜測(cè) 至于前后兩個(gè)進(jìn)程的訪(fǎng)問(wèn)令牌中新出現(xiàn)的“古怪”帳戶(hù)(一個(gè)是“Medium Mandatory Level”,,另一個(gè)是“High Mandatory Level”)。這兩個(gè)帳戶(hù),,既不能用來(lái)登錄,,似乎也不能用來(lái)對(duì)資源的ACL賦值,到底用來(lái)做什么,? 個(gè)人的猜測(cè)是用來(lái)標(biāo)記訪(fǎng)問(wèn)令牌,,這樣系統(tǒng)看到訪(fǎng)問(wèn)令牌中包含SID為S-1-16-8192的帳戶(hù)(Medium Mandatory Level),馬上就可以知道該令牌屬于標(biāo)準(zhǔn)用戶(hù)令牌,;同樣如果令牌中包含SID為S-1-16-12288的帳戶(hù)(High Mandatory Level),,馬上就知道其屬于完全權(quán)限的令牌。 那么為什么不在訪(fǎng)問(wèn)令牌中新增一個(gè)標(biāo)志位,,例如等于0時(shí)就是標(biāo)準(zhǔn)用戶(hù)令牌,,等于1時(shí)就是完全權(quán)限令牌?個(gè)人猜測(cè)是為了兼容性,,畢竟增加一個(gè)標(biāo)志位,,就等于要修改訪(fǎng)問(wèn)令牌的數(shù)據(jù)結(jié)構(gòu),這可不是一個(gè)好主意,,而添加幾個(gè)SID,,則相對(duì)簡(jiǎn)單得多。 3.有趣的任務(wù)管理器 在實(shí)驗(yàn)中,,還發(fā)現(xiàn),,如果右鍵單擊任務(wù)欄空白區(qū)域,打開(kāi)任務(wù)管理器(其父進(jìn)程是Explorer),,則任務(wù)管理器運(yùn)行在標(biāo)準(zhǔn)用戶(hù)的訪(fǎng)問(wèn)令牌下;而按下Ctrl+Shift+Esc組合鍵打開(kāi)的任務(wù)管理器(其父進(jìn)程是Winlogon),,則運(yùn)行在完全權(quán)限的訪(fǎng)問(wèn)令牌下,。 最后小結(jié) UAP好比給Windows Vista穿上一件鐵布衫,有了它的庇護(hù),,像IE這樣的進(jìn)程不再奉行“不抵抗”政策,,惡意網(wǎng)頁(yè)膽敢再來(lái)“騷擾”,將被毫不猶豫地阻止,。同時(shí)最終用戶(hù)不再需要接受額外的培訓(xùn),,一切都由系統(tǒng)自動(dòng)完成,,只需要做出選擇即可,你就沒(méi)事偷著樂(lè)吧,! 提示 1.有關(guān)UAC的官方資料,,請(qǐng)參考Windows Vista開(kāi)發(fā)組工程師Chen Yu先生的帖子: http://blogs./blogs/yuchen/archive/2005/10/19/994.aspx 2. 有關(guān)SeSystemTimePrivilege特權(quán)的相關(guān)內(nèi)容,參考了微軟知識(shí)庫(kù)文章編號(hào)KB 300022和《Windows Internals 4Edition》(Chapter 8 Security)中的相關(guān)內(nèi)容,。有興趣的朋友可以閱讀這些資料了解相關(guān)背景知識(shí),。 3. 有關(guān)帳戶(hù)特權(quán)的更詳細(xì)信息,可以參考以下微軟官方網(wǎng)頁(yè)(Windows XP Resource Kit): http://www.microsoft.com/resourc ... s/prnd_urs_mhnn.asp 【ITECN技術(shù)專(zhuān)欄】之 Windows Vista的UAC功能淺析(二)
原文摘自ITECN Blog,,作者:盆盆<Microsoft MVP>
原文地址: 點(diǎn)擊查看 ITECN Blog是由近40位微軟MVP和MCT,、還有微軟員工組成,旨在宣傳微軟IT Pro技術(shù) 命令行程序的權(quán)限提升 看過(guò)《關(guān)閉計(jì)算機(jī)中惱人的beep噪音》一文的朋友,,在對(duì)Windows Vista進(jìn)行操作的時(shí)候需要格外注意,! 由于Windows Vista默認(rèn)啟用UAC功能,CMD Shell以Standard User的身份啟動(dòng),,我們無(wú)法采用sc命令對(duì)beep服務(wù)進(jìn)行配置(會(huì)收到Access is Denied的錯(cuò)誤消息),。 這時(shí)候必須右鍵單擊開(kāi)始菜單上的“Command Prompt”,選擇“Run as administrator”,,以Highest Privilege運(yùn)行CMD Shell,,這樣SC命令才能拿到足夠特權(quán)完成相應(yīng)的管理工作。如下圖所示,,淡青底色的CMD Shell以Standard User身份運(yùn)行(結(jié)果SC命令運(yùn)行失敗),,而紅底色的CMD Shell則以Highest Privilege運(yùn)行(結(jié)果SC命令運(yùn)行成功)。 提示 有關(guān)Windows Vista中CMD Shell的UAC功能“失靈”的另一個(gè)實(shí)例,,可以參考MVP Smallfrog的帖子: http://blogs./blogs/sma ... 006/02/26/1832.aspx UAC的兩大要素 那么,,為什么說(shuō)在當(dāng)前CTP Build的Windows Vista中,CMD Shell的UAC功能是“失靈”的,? 竊以為,,真正意義上的UAC,必須至少同時(shí)滿(mǎn)足以下兩個(gè)條件: ? 用戶(hù)進(jìn)程運(yùn)行standard user安全環(huán)境下,,這點(diǎn)CMD Shell可以做到,。 ? 當(dāng)系統(tǒng)"識(shí)別"出目標(biāo)進(jìn)程需要高級(jí)特權(quán)才能完成,就會(huì)自動(dòng)彈出提升特權(quán)確認(rèn)對(duì)話(huà)框(consent進(jìn)程),,得到確認(rèn)后,,會(huì)以最高特權(quán)運(yùn)行目標(biāo)進(jìn)程。 只有自動(dòng)識(shí)別,、自動(dòng)提升特權(quán),,才能算是UAC的精髓! 否則在Windows XP一樣可以讓用戶(hù)進(jìn)程運(yùn)行在Standard User環(huán)境(可以參考筆者的《IE瀏覽器,,我想你安全,、再安全些》),,但是這充其量只能算是LUA(最小帳戶(hù)特權(quán)),而不夠格稱(chēng)為UAC(用戶(hù)帳戶(hù)控制),! 修改UAC兼容性設(shè)置 能不能修改SC命令的兼容性設(shè)置,,讓系統(tǒng)知道它需要管理員權(quán)限? 但是打開(kāi)SC命令的屬性對(duì)話(huà)框,,發(fā)現(xiàn)其兼容性設(shè)置被鎖死,,如下圖所示,原因是SC命令屬于系統(tǒng)內(nèi)置的組件,,這和Windows XP的情況一樣,。 這里嘗試修改注冊(cè)表,試圖繞過(guò)這個(gè)限制,,把SC命令添加到系統(tǒng)的兼容性數(shù)據(jù)庫(kù)中: (1) 打開(kāi)regedit注冊(cè)表編輯器,,定位到以下注冊(cè)表項(xiàng): HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers (2) 新增一個(gè)字符串鍵值: 名稱(chēng)必須設(shè)置為“C:\Windows\system32\sc.exe” 并將其數(shù)值數(shù)據(jù)設(shè)置為“RUNASADMIN” 提示 該注冊(cè)表修改完全等效于如圖2所示的兼容性設(shè)置,只是繞開(kāi)了UI的限制,。 現(xiàn)在打開(kāi)一個(gè)Standard User的CMD Shell,,再?lài)L試運(yùn)行SC命令,系統(tǒng)也會(huì)彈出consent確認(rèn)對(duì)話(huà)框,,如下圖所示,。 確認(rèn)后系統(tǒng)會(huì)自動(dòng)打開(kāi)一個(gè)新的CMD窗口運(yùn)行SC命令,只是該窗口會(huì)一閃而過(guò),,讓人來(lái)不及反應(yīng),,但是SC命令確實(shí)是在高特權(quán)下運(yùn)行的。 顯然上述的注冊(cè)表修改法并不是解決問(wèn)題的良藥,,實(shí)際上這只是強(qiáng)行把“皮球”踢給Explorer Shell(GUI)罷了,,執(zhí)行的結(jié)果也并不理想,更何況數(shù)百個(gè)命令行工具,,逐個(gè)修改的話(huà),,簡(jiǎn)直是一場(chǎng)噩夢(mèng)! Windows Vista區(qū)別對(duì)待不同的進(jìn)程 同樣是系統(tǒng)內(nèi)置的組件,,例如regedit,、mmc等GUI組件,其兼容性設(shè)置也被鎖死,,但是為什么系統(tǒng)會(huì)主動(dòng)詢(xún)問(wèn)是否提升權(quán)限,?難道命令行工具是后媽養(yǎng)的,Windows Vista有意給它穿小鞋,? 用記事本(或者其他編輯器)打開(kāi)分別打開(kāi)regedit.exe和sc.exe,進(jìn)行仔細(xì)對(duì)比查看,,發(fā)現(xiàn)了秘密所在: regedit.exe和SC.exe的內(nèi)容分別如下圖所示,。 從圖中可以看出: QUOTE:
在SC.exe中有如下xml格式的語(yǔ)句:
level="asInvoker" regedit.exe中有如下xml格式的語(yǔ)句: level="highestAvailable" 原來(lái)UAC有一種機(jī)制,,可以由應(yīng)用程序的manifest(程序清單)來(lái)指定該應(yīng)用程序的運(yùn)行級(jí)別,可以在manifest中指定以下三種級(jí)別: ? asInvoker:繼承父進(jìn)程的訪(fǎng)問(wèn)令牌,,這就是為什么SC.exe默認(rèn)運(yùn)行在standard User環(huán)境下,,因?yàn)槔^承了CMD Shell的訪(fǎng)問(wèn)令牌。 ? highestAvailable:進(jìn)程可以獲得它所能得到的最高級(jí)別的訪(fǎng)問(wèn)令牌,。 ? requireAdministrator:進(jìn)程必須由管理員組成員啟動(dòng),,并且必須獲得完全級(jí)別的訪(fǎng)問(wèn)令牌。 唯一遺憾的是,,只能由Microsoft自己對(duì)SC.exe的manifest信息進(jìn)行修改,,如果企圖借助Winhex等工具直接修改SC.exe中的Manifest信息(例如試圖將其RunLevel修改為"highestAvailable"),結(jié)果就會(huì)鬧和筆者一樣的笑話(huà),,收到“side by side”的出錯(cuò)消息──都是不懂開(kāi)發(fā)給整的~ 這里多說(shuō)一句:如果病毒等惡意程序,,也利用manifest信息在其代碼里添加特權(quán)標(biāo)記,會(huì)不會(huì)誤導(dǎo)最終用戶(hù),? 應(yīng)該不會(huì): 從Build 5308開(kāi)始,,Windows Vista會(huì)自動(dòng)檢查程序代碼中的數(shù)字簽名,并且在consent對(duì)話(huà)框里提供相應(yīng)的警告信息,。如果試圖運(yùn)行一個(gè)沒(méi)有合法簽名的程序,,Windows Vista會(huì)警告說(shuō)該程序沒(méi)有合法的“身份證”,若要運(yùn)行,,后果自負(fù),。 要了解更多的有關(guān)manifest的信息,可以參考以下的微軟官方文檔: http://msdn.microsoft.com/librar ... html/AccProtWindows Vista.asp 實(shí)驗(yàn)查驗(yàn)Mandatory Label SID的作用 當(dāng)系統(tǒng)嘗試啟動(dòng)標(biāo)記為高特權(quán)的進(jìn)程時(shí),,Windows Vista并非不分青紅皂白,,一味地彈出consent對(duì)話(huà)框要求確認(rèn)。 其實(shí)這個(gè)問(wèn)題在筆者的拙作《Windows Vista的UAC功能淺析(一)》中曾經(jīng)提到過(guò)Windows Vista新引入了幾個(gè)“古怪的SID(在本文,,這些SID統(tǒng)稱(chēng)為Mandatory Label SID): ? Medium Mandatory Level:其SID為S-1-16-8192,。 ? High Mandatory Level:其SID為S-1-16-12288 ? System Mandatory Level:其SID為S-1-16-16384 ? Low Mandatory Level:該標(biāo)志主要用于保護(hù)模式的IE瀏覽器等進(jìn)程 這三個(gè)“古怪”帳戶(hù)SID,實(shí)際上就是專(zhuān)門(mén)用來(lái)標(biāo)記訪(fǎng)問(wèn)令牌的,,這些帳戶(hù)既不能用于登錄,,也不能用于安全權(quán)限分配。 筆者在Windows Vista CTP 5308虛擬機(jī)上,,分別做以下三個(gè)實(shí)驗(yàn): (1) 直接運(yùn)行regedit,,會(huì)彈出consent對(duì)話(huà)框確認(rèn)提升權(quán)限,這時(shí)候的父進(jìn)程為explorer.exe,,其Mandatory Label SID為“Medium Mandatory Level”,。 (2) 以“Run as administrator”方式打開(kāi)一個(gè)CMD Shell,這時(shí)候CMD進(jìn)程的Mandatory Label SID為“High Mandatory Level”,在其下可以打開(kāi)regedit,,而無(wú)需確認(rèn),。 (3) 按下ctrl+alt+del組合鍵,在Winlogon Desktop上單擊“Start Task Manager”按鈕,,即可彈出如下圖所示的窗口,,實(shí)際上就是一個(gè)taskmgr.exe進(jìn)程,其Mandatory Label SID為“Medium Mandatory Level”,,這里在Process Explorer里記下其PID(假設(shè)為2272): 在該窗口上單擊“All programs on this computer”按鈕,,即可彈出一個(gè)consent對(duì)話(huà)框要求確認(rèn)權(quán)限的提升。確認(rèn)后即可彈出任務(wù)管理器,,這時(shí)候原來(lái)的taskmgr進(jìn)程(PID為2272)就會(huì)被自動(dòng)殺死,,現(xiàn)在我們?cè)赑rocess Explorer里打開(kāi)新啟動(dòng)的taskmgr進(jìn)程的屬性對(duì)話(huà)框,可以看到其父進(jìn)程就是那個(gè)已經(jīng)被殺死的PID為2272的進(jìn)程,!如下圖所示,。難怪需要確認(rèn)是否提升權(quán)限。 根據(jù)實(shí)驗(yàn)結(jié)果,,我們可以得出以下的結(jié)論: 當(dāng)我們嘗試啟動(dòng)某個(gè)標(biāo)記為需要高特權(quán)的進(jìn)程時(shí),,Windows Vista會(huì)檢查其“父進(jìn)程”的訪(fǎng)問(wèn)令牌,并根據(jù)訪(fǎng)問(wèn)令牌里的Mandatory Label SID進(jìn)行相應(yīng)的判斷: ? 如果是Medium Mandatory Level:則彈出consent對(duì)話(huà)框要求確認(rèn)權(quán)限的提升,。 ? 如果是High Mandatory Level:則直接以完全權(quán)限打開(kāi)目標(biāo)進(jìn)程,,而無(wú)需確認(rèn)。 ? 如果是System Mandatory Level:則直接以完全權(quán)限打開(kāi)目標(biāo)進(jìn)程,,而無(wú)需確認(rèn),。 這里需要注意的是,在Build 5231的Windows Vista版本里,,如果按下“ctrl+alt+del”組合鍵,,會(huì)直接彈出一個(gè)擁有完全權(quán)限的任務(wù)管理器,因?yàn)檫@時(shí)候任務(wù)管理器的父進(jìn)程是winlogon,,其Mandatory Label SID為“System Mandatory Level”,。 饅頭版的UAC 之所以沒(méi)有給命令行添加所謂的UAC功能,猜想Microsoft考慮到使用命令行的用戶(hù)大多是IT Pro,,在命令行中屏蔽UAC功能,,可以有效防止最終用戶(hù)無(wú)意之中運(yùn)行高危險(xiǎn)的命令,例如format,、BCDEDIT等,,從而避免對(duì)系統(tǒng)的毀滅性打擊。 盡管如此,,筆者還是期待能夠看到適用于預(yù)命令行的UAC,,這里筆者“效顰”胡戈同志的“饅頭”巨著,設(shè)計(jì)一個(gè)命令行版本的UAC工作界面,聊搏讀者諸公一笑耳,。 【ITECN技術(shù)專(zhuān)欄】Windows Vista UAC安全功能深入剖析系列之(三) 原文摘自ITECN Blog,,作者:盆盆<Microsoft MVP>
原文地址: 點(diǎn)擊查看 ITECN Blog是由近40位微軟MVP和MCT、還有微軟員工組成,,旨在宣傳微軟IT Pro技術(shù) 難度 Level300 簡(jiǎn)介 本文詳細(xì)介紹了UAC的應(yīng)用程序標(biāo)識(shí)、安全桌面和虛擬重定向等底層原理,,并給出不能禁用UAC的若干理由,。更重要的是,本文還將就用戶(hù)廣為關(guān)心的文件操作問(wèn)題提出比較巧妙的解決方案(既能解決文件操作的麻煩,,又能保留UAC的安全性),;同時(shí)本文還為討厭UAC功能的朋友提供了兩個(gè)妥協(xié)折衷的方法,可以臨時(shí)擺脫UAC功能的“嘮叨”,,而不需要因噎廢食,、禁用UAC功能。 我們現(xiàn)在已經(jīng)知道,,在Windows Vista中,,使用管理員帳戶(hù)登錄系統(tǒng),當(dāng)Winlogon進(jìn)程收集帳戶(hù)憑據(jù)并交由LSA驗(yàn)證后,。LSA會(huì)查看該帳戶(hù)的訪(fǎng)問(wèn)令牌,,如果發(fā)現(xiàn)里面包含某些高級(jí)特權(quán)(例如“修改系統(tǒng)時(shí)間”)或者高級(jí)SID(例如管理員組SID),就會(huì)自動(dòng)創(chuàng)建兩個(gè)訪(fǎng)問(wèn)令牌,,一個(gè)是管理員訪(fǎng)問(wèn)令牌(Full Token),,另一個(gè)是標(biāo)準(zhǔn)用戶(hù)訪(fǎng)問(wèn)令牌(UAC Token)。 由Winlogon啟動(dòng)的初始化進(jìn)程userinit鏈接到標(biāo)準(zhǔn)用戶(hù)訪(fǎng)問(wèn)令牌,,所以由userninit進(jìn)程啟動(dòng)的Explorer進(jìn)程也鏈接到標(biāo)準(zhǔn)用戶(hù)訪(fǎng)問(wèn)令牌,。同樣由Explorer啟動(dòng)的用戶(hù)進(jìn)程也會(huì)自動(dòng)鏈接到標(biāo)準(zhǔn)用戶(hù)訪(fǎng)問(wèn)令牌,由此大大減少受攻擊面,,極大地提升系統(tǒng)安全性,。 如果某個(gè)進(jìn)程需要以更高權(quán)限運(yùn)行,則系統(tǒng)會(huì)彈出一個(gè)權(quán)限提升對(duì)話(huà)框,,確認(rèn)后即可以更高權(quán)限運(yùn)行該進(jìn)程,,該進(jìn)程鏈接到管理員訪(fǎng)問(wèn)令牌。 提示 要了解有關(guān)UAC進(jìn)程創(chuàng)建的流程,,可以參考MVP Smallfrog的《Windows Vista UAC 模式下的進(jìn)程創(chuàng)建實(shí)戰(zhàn)的故事》,。 五種標(biāo)識(shí)權(quán)限提升的方法 Windows Vista并沒(méi)有一種與生俱來(lái)的魔力,可以未卜先知某個(gè)應(yīng)用程序是否應(yīng)該運(yùn)行在更高安全級(jí)別上,。應(yīng)用程序必須自己想辦法通知Windows Vista它需要更高權(quán)限,。有以下五種方法,讓W(xué)indows Vista明白該應(yīng)用程序需要提升權(quán)限: (1) Windows Vista可以智能識(shí)別安裝程序,例如根據(jù)安裝程序的文件名(包含install或者setup),,還可以智能識(shí)別msi發(fā)布的安裝包等等,。可以做一個(gè)實(shí)驗(yàn),,如果修改其他某個(gè)應(yīng)用程序的名字,,例如將QQ.exe重命名為QQInstall.exe,運(yùn)行它就會(huì)自動(dòng)觸發(fā)權(quán)限提升,,原來(lái)UAC以為這是一個(gè)安裝程序,。 (2) 在可執(zhí)行文件的屬性對(duì)話(huà)框、兼容性標(biāo)簽頁(yè)里勾選“以管理員身份啟動(dòng)該程序”復(fù)選框,。這等效于在HKCU \Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers注冊(cè)表分支下添加鍵值,,也相當(dāng)于修改C:\Windows\AppPatch下的sysmain.sdb兼容性數(shù)據(jù)庫(kù)。 (3) 在程序的manifest文件或者內(nèi)嵌的manifest信息里加入“l(fā)evel=highestAvaible”或者“l(fā)evel requireAdministrator”安全級(jí)別,。 (4) 鼠標(biāo)右鍵單擊應(yīng)用程序,,選擇“用管理員帳戶(hù)運(yùn)行”菜單項(xiàng)。 (5) 利用ACT(應(yīng)用程序兼容性工具)為特定應(yīng)用程序創(chuàng)建兼容性數(shù)據(jù)庫(kù),,以便IT部門(mén)可以方便地在企業(yè)里部署兼容性設(shè)置,。 提示 其中(2)和(3)可以參考筆者的《Windows Vista UAC安全功能深入剖析系列之二》。 毀譽(yù)參半的安全桌面 大概是從5365 Build起,,當(dāng)系統(tǒng)彈出“用戶(hù)帳戶(hù)控制”提升權(quán)限對(duì)話(huà)框時(shí)(實(shí)際上是consent進(jìn)程),,桌面背景會(huì)呈暗色顯示,這可能導(dǎo)致某些顯示器彈出“無(wú)信號(hào)”的錯(cuò)誤消息,,正好可能擋住consent對(duì)話(huà)框,,讓這些用戶(hù)感到非常不便。 1.原理簡(jiǎn)析 其實(shí)這個(gè)功能的本意是非常好的,,可以增加UAC功能的安全度,。原來(lái)這個(gè)暗色的背景實(shí)際上是安全桌面,也就是我們按“Ctrl+Alt+Del”組合鍵時(shí)所看到的藍(lán)色的特殊桌面(上面有類(lèi)似啟動(dòng)任務(wù)管理器等命令),。為什么看到的是暗色的當(dāng)前桌面呢,?原來(lái)這是微軟為了保持用戶(hù)體驗(yàn)的一致性,特地對(duì)當(dāng)前桌面做了一個(gè)“快照”,,將其作為安全桌面的“墻紙”,。 由于consent對(duì)話(huà)框?qū)嶋H運(yùn)行在安全桌面上(安全桌面運(yùn)行在session 0上,而用戶(hù)進(jìn)程都運(yùn)行在session 1或者更高的session上),,所以安全性非常好,。除了少數(shù)系統(tǒng)進(jìn)程外,任何用戶(hù)進(jìn)程都無(wú)法和consent對(duì)話(huà)框進(jìn)行通信,,所以惡意程序無(wú)法仿冒提升權(quán)限對(duì)話(huà)框以便誘使用戶(hù)點(diǎn)擊,。 由于安全桌面的安全性非常好,,所以連我們自己都無(wú)法直接監(jiān)控UAC背后發(fā)生了什么,同時(shí)甚至無(wú)法按PrintScreen鍵進(jìn)行截圖(剪貼板程序無(wú)法獲得鍵盤(pán)輸入),。 2.如何監(jiān)控UAC底層變化 用常規(guī)方法無(wú)法對(duì)UAC背后的變化進(jìn)行監(jiān)控,,因?yàn)檫@時(shí)候提升權(quán)限對(duì)話(huà)框運(yùn)行在安全桌面上,用戶(hù)進(jìn)程無(wú)法與之進(jìn)行通信,,所以我們必須另辟蹊徑,。 聯(lián)想到Longhorn Server也具有UAC功能(默認(rèn)禁用),所以我們可以利用Longhorn Server搭建一個(gè)實(shí)驗(yàn)環(huán)境,,用管理員帳戶(hù)登錄進(jìn)入Session 1,,然后借助遠(yuǎn)程桌面,以另外一個(gè)管理員身份登錄到這臺(tái)實(shí)驗(yàn)機(jī),,進(jìn)入Session 2。 我們?cè)赟ession 1里試圖運(yùn)行一個(gè)管理任務(wù),,這時(shí)候系統(tǒng)會(huì)提示權(quán)限提升,。由于安全桌面的原因,這時(shí)候無(wú)法在Session 1下用Process Explorer訪(fǎng)問(wèn)consent進(jìn)程的詳細(xì)信息,。 這時(shí)候我們可以在遠(yuǎn)程桌面窗口(Session 2)下打開(kāi)Process Explorer,,可以很方便地查看consent進(jìn)程的詳細(xì)信息,如附圖所示,,我們可以發(fā)現(xiàn)consent進(jìn)程的父進(jìn)程是svchost(本例的PID是1008),,查看這個(gè)PID 1008的svchost進(jìn)程,發(fā)現(xiàn)是“Application Information Service”服務(wù)的宿主進(jìn)程,。所以可以推測(cè)是“Application Information Service”服務(wù)啟動(dòng)了consent進(jìn)程,。同時(shí)還可以看到consent進(jìn)程本身運(yùn)行在Session 1,而不是Session 0,。 3.禁用安全桌面 可以用以下方法禁用安全桌面: (1) 運(yùn)行secpol.msc,,打開(kāi)“本地安全策略”管理單元窗口。 (2) 在左側(cè)的控制臺(tái)樹(shù)中依次展開(kāi)本地策略,、安全選項(xiàng),,在右側(cè)的詳細(xì)窗格里雙擊“用戶(hù)帳戶(hù)控制:提示提升時(shí)切換到安全桌面”策略項(xiàng)。 (3) 在打開(kāi)的對(duì)話(huà)框里選中“已禁用”選項(xiàng),,如附圖所示,。 讓UAC停薪留職 不少讀者朋友非常討厭UAC,有時(shí)候UAC就像是一位喋喋不休的MM,,時(shí)不時(shí)地打斷我們的正常工作,。為什么那么多朋友都無(wú)法容忍UAC?用戶(hù)對(duì)UAC功能的抱怨大概集中在以下兩個(gè)方面: (1) 我已經(jīng)是管理員了,,為什么不直接允許我執(zhí)行管理任務(wù),?如果是第三方應(yīng)用軟件倒也罷了,,為什么Windows自帶的工具軟件都要阻止我?為什么不能讓防火墻一樣設(shè)置規(guī)則,,讓UAC下次不要再提醒,? (2) 為什么轉(zhuǎn)移、刪除一個(gè)文件都要那么麻煩,? 有不少朋友安裝好Windows Vista后,,第一件事情就是禁用UAC!其實(shí)這是一種非常不值得的做法,,至少有如下五大理由: (1) UAC功能是Windows Vista中最大的賣(mài)點(diǎn)之一,,花費(fèi)不菲購(gòu)買(mǎi)了Windows Vista,卻把其中最值錢(qián)的功能特性給禁用了,,這很有點(diǎn)“買(mǎi)櫝還珠”的意思,。 (2) 如果禁用UAC,則會(huì)同時(shí)禁用IE保護(hù)模式等安全特性,,這將大大降低系統(tǒng)的安全性,。 (3) 在企業(yè)環(huán)境里,如果啟用UAC,,可以減少約40%的桌面相關(guān)成本,。 (4) 如果禁用了UAC,則當(dāng)以普通用戶(hù)登錄系統(tǒng)時(shí),,無(wú)法享受UAC帶來(lái)的便利(無(wú)法方便地安裝程序和執(zhí)行管理任務(wù),,也無(wú)法享受UAC為遺留應(yīng)用程序準(zhǔn)備的兼容性幫助)。 (5) 強(qiáng)烈推薦正在追MM的GGDD們啟用UAC,,這可以幫助您提前訓(xùn)練對(duì)MM嘮叨的抵抗力,。 其實(shí)從Build 5308、Beta 2,,一直到當(dāng)前最新的5472,,UAC功能的進(jìn)步是有目共睹的,現(xiàn)在UAC的惱人提示已經(jīng)減少了很多,,也增加了很多人性化的改進(jìn),,UAC功能已經(jīng)變得越來(lái)越平易近人,更多時(shí)候,,UAC就像一位站在不遠(yuǎn)處用慈祥目光注視著我們的母親,,而不再是一個(gè)在您耳邊不停斥責(zé)咆哮的上司。 如果您確實(shí)討厭UAC,,推薦不要徹底禁用它,,而是用以下兩種方法將其臨時(shí)禁用,需要時(shí)可以即時(shí)恢復(fù),。 1.臨時(shí)擺脫UAC的嘮叨—瘋狂的石頭 (1) 打開(kāi)任務(wù)管理器,,切換到“進(jìn)程”標(biāo)簽頁(yè),,然后結(jié)束“Explorer”進(jìn)程。 (2) 這時(shí)候再單擊“顯示所有用戶(hù)的進(jìn)程”按鈕,,即可讓任務(wù)管理器運(yùn)行在管理員的級(jí)別上,。 (3) 切換到“應(yīng)用程序”標(biāo)簽頁(yè),單擊“新任務(wù)”按鈕,,啟動(dòng)“Explorer”進(jìn)程,,現(xiàn)在新啟動(dòng)的“Explorer”進(jìn)程運(yùn)行在管理員級(jí)別下。 現(xiàn)在雖然在安全中心里顯示UAC啟用,,如附圖所示,。但是實(shí)際上由于Windows系統(tǒng)的Shell進(jìn)程Explorer此刻連接的訪(fǎng)問(wèn)令牌是管理員級(jí)別的,所以在Windows里啟動(dòng)的任何應(yīng)用程序都自動(dòng)繼承管理員級(jí)別的訪(fǎng)問(wèn)令牌,,不受UAC的限制,,包括執(zhí)行管理任務(wù)和文件操作。 這時(shí)候的UAC功能,,光憑“肉眼”很難辨別真?zhèn)?,說(shuō)它是假的,安全中心里明明顯示啟用,;說(shuō)它是真的,但是卻不會(huì)受到任何限制…… ——這不就是瘋狂的石頭嗎,? 那么如何才能重新回到UAC狀態(tài)呢,?聰明的您一定想到了,那就是用標(biāo)準(zhǔn)用戶(hù)權(quán)限重新啟動(dòng)Explorer進(jìn)程: (1) 首先在任務(wù)管理器里中止Explorer進(jìn)程[記?。哼@時(shí)候任務(wù)管理器具有管理員權(quán)限],,然后關(guān)閉任務(wù)管理器。 (2) 按“Ctrl+Alt+Del”組合鍵呼出安全桌面,,點(diǎn)擊其上的“啟動(dòng)任務(wù)管理器”,,即可以標(biāo)準(zhǔn)用戶(hù)權(quán)限啟動(dòng)任務(wù)管理器,并新建Explorer進(jìn)程,,好了,,現(xiàn)在UAC又回來(lái)了! 提示 只有在萬(wàn)不得已的情況才使用這種方法,,而且推薦僅在該環(huán)境里運(yùn)行管理任務(wù)或者進(jìn)行文件操作時(shí),,才用這種方法,至于IE等進(jìn)程,,最好在之前就啟動(dòng),。不過(guò)該方法總比徹底禁用UAC功能要好。 2.讓UAC閉嘴 如果既希望啟用UAC功能,,又希望讓UAC閉嘴,,那么可以通過(guò)以下方法修改本地安全策略: (1) 運(yùn)行secpol.msc,,打開(kāi)“本地安全策略”管理單元窗口。 (2) 在左側(cè)的控制臺(tái)樹(shù)中依次展開(kāi)本地策略,、安全選項(xiàng),,在右側(cè)的詳細(xì)窗格里雙擊“用戶(hù)帳戶(hù)控制:管理審批模式中管理員的提示提升行為”策略項(xiàng)。 (3) 在打開(kāi)的對(duì)話(huà)框里選中“無(wú)提示”選項(xiàng),,如附圖所示,。 這時(shí)候UAC的功能還是保持啟用狀態(tài)(可以在安全中心里進(jìn)行驗(yàn)證),但是當(dāng)執(zhí)行管理任務(wù)時(shí),,系統(tǒng)不再提示確認(rèn),,而是直接運(yùn)行。當(dāng)進(jìn)行文件操作時(shí),,如果遇到權(quán)限問(wèn)題,,還是會(huì)發(fā)出提示,如附圖所示,,但是單擊其上的“繼續(xù)”按鈕,,并不會(huì)彈出“用戶(hù)帳戶(hù)控制”的確認(rèn)對(duì)話(huà)框,而是直接完成文件操作,。 這種方法的安全性要強(qiáng)于禁用UAC,,因?yàn)橹辽龠@時(shí)候IE保護(hù)模式等功能還是可以使用的。但是如果一個(gè)惡意軟件被標(biāo)記為需要提升權(quán)限,,那么它同樣可以被直接執(zhí)行,。所以為了保證安全性,可以再啟用一條比較嚴(yán)厲的策略“用戶(hù)帳戶(hù)控制:只提升簽名并認(rèn)證的可執(zhí)行文件,?!边@樣沒(méi)有合法數(shù)字簽名的應(yīng)用程序?qū)⒕芙^執(zhí)行。 提示 僅推薦忍耐力比較差的朋友們使用,。 文件操作的噩夢(mèng)與福音 UAC最為人詬病的就是文件操作的不方便,,網(wǎng)上曾流傳著這樣一個(gè)笑話(huà):要徹底刪除一個(gè)文件,需要花費(fèi)七個(gè)步驟,。 其實(shí)平心而論,,這本不是UAC所造成的問(wèn)題,恰恰相反,,如果理解UAC的本質(zhì)原理,,還會(huì)發(fā)現(xiàn)UAC其實(shí)對(duì)文件操作是有幫助的。 何以見(jiàn)得,? 原來(lái)在Windows安全體系中,,用戶(hù)對(duì)文件能夠進(jìn)行什么操作,主要是看Explorer進(jìn)程的訪(fǎng)問(wèn)令牌和文件的訪(fǎng)問(wèn)控制列表,。如果該文件的訪(fǎng)問(wèn)控制列表里規(guī)定只有管理員才能執(zhí)行刪除操作,,那么處于UAC環(huán)境下的用戶(hù)當(dāng)然不能直接刪除該文件,,這是因?yàn)檫@時(shí)候Explorer進(jìn)程的訪(fǎng)問(wèn)令牌中,管理員組的SID被過(guò)濾掉了,。 這就好比,,一個(gè)普通用戶(hù)無(wú)法在分區(qū)根目錄下新建文件,道理是一樣的,。更何況UAC還給我們提供一個(gè)機(jī)會(huì)提升權(quán)限,,以便可以進(jìn)行適當(dāng)?shù)奈募僮鳌?br> 1.到底誰(shuí)幫助我們提升了權(quán)限? 這里面就帶來(lái)一個(gè)問(wèn)題(筆者最初也曾疑惑不解),,既然文件操作主要是看Explorer進(jìn)程,,但是提升權(quán)限后,并沒(méi)有發(fā)現(xiàn)Explorer進(jìn)程的訪(fǎng)問(wèn)令牌有什么變化,,這是為什么,?難道這個(gè)權(quán)限是從天上飛下來(lái)的? 經(jīng)過(guò)檢查發(fā)現(xiàn),,當(dāng)權(quán)限提升以后,,系統(tǒng)會(huì)啟動(dòng)一個(gè)Dllhost進(jìn)程,該進(jìn)程的訪(fǎng)問(wèn)令牌是管理員級(jí)別的,,如附圖所示,,由這個(gè)Dllhost進(jìn)程代替我們完成文件操作。 2.巧妙解決文件操作問(wèn)題 在5456,、5472這些Build里,,文件操作的UAC權(quán)限提升已經(jīng)得到很大程度上的改善,例如現(xiàn)在按Shift+Del組合鍵,,提升權(quán)限后,就可以直接徹底刪除文件,,而不會(huì)像以前版本那樣,,還需要花N多步驟清空回收站。 如果您還是對(duì)現(xiàn)在的UAC文件操作不滿(mǎn)意,,那么以下的解決方法可能堪稱(chēng)完美: (1) 首先打開(kāi)“文件夾選項(xiàng)”對(duì)話(huà)框,,切換到“查看”標(biāo)簽頁(yè),確保選中“在單獨(dú)的進(jìn)程中打開(kāi)文件夾窗口”,,如附圖所示,。 Windows默認(rèn)只能啟動(dòng)一個(gè)Explorer進(jìn)程。而這個(gè)設(shè)置確??梢源蜷_(kāi)兩個(gè)獨(dú)立的Explorer進(jìn)程,,以便我們給新的Explorer進(jìn)程鏈接管理員的訪(fǎng)問(wèn)令牌。 (2) 要想進(jìn)行文件操作,,只需右鍵單擊“Windows資源管理器”菜單項(xiàng),,選擇“用管理員帳戶(hù)運(yùn)行”,,現(xiàn)在就可以打開(kāi)一個(gè)以管理員權(quán)限運(yùn)行的資源管理器窗口,在這里我們可以任意進(jìn)行文件操作,,當(dāng)然前提條件是文件允許管理員組這樣做,,不會(huì)再出現(xiàn)UAC權(quán)限提升的提示。 為了方便起見(jiàn),,還可以為這個(gè)資源管理器添加一個(gè)開(kāi)始菜單項(xiàng): (1) 把Explorer.exe從%windir%中復(fù)制到“文檔”里,,然后在屬性對(duì)話(huà)框、“兼容性”標(biāo)簽頁(yè)里勾選“以管理員身份啟動(dòng)該程序”復(fù)選框,。 (4) 鼠標(biāo)右鍵單擊其Explorer.exe,,選擇“附到[開(kāi)始]菜單”命令,即可在開(kāi)始菜單里添加菜單項(xiàng),,可以將菜單項(xiàng)重命名為“管理員:Windows資源管理器”,。 如果打開(kāi)Process Explorer,就可以發(fā)現(xiàn),,現(xiàn)在系統(tǒng)里有了兩個(gè)Explorer進(jìn)程,,其中一個(gè)進(jìn)程被標(biāo)識(shí)為“中強(qiáng)制級(jí)別”(Mandatory Integrity Level為中級(jí)),這個(gè)就是系統(tǒng)的Shell進(jìn)程,。另一個(gè)進(jìn)程被標(biāo)識(shí)為“高強(qiáng)制級(jí)別”,,這就是以管理員身份運(yùn)行的“Windows資源管理器”,如附圖所示,。 這種方法既可以完美地解決文件操作的麻煩,,又可以保留UAC功能。當(dāng)我們?cè)陂_(kāi)始菜單或者快速啟動(dòng)欄里啟動(dòng)IE時(shí),,IE照樣受UAC和IE保護(hù)模式的控制,,而不會(huì)運(yùn)行在管理員級(jí)別下。這是因?yàn)?,這時(shí)候IE的父進(jìn)程是“中強(qiáng)制級(jí)別”的那個(gè)Explorer進(jìn)程,。 虛擬重定向 和IE保護(hù)模式一樣,UAC也利用兼容重定向?qū)崿F(xiàn)對(duì)遺留應(yīng)用程序的兼容性,,不過(guò)兩者采用的是彼此獨(dú)立,、互不干涉的兩套機(jī)制。其原理大致如下: 某個(gè)遺留應(yīng)用程序由于設(shè)計(jì)上的原因,,需要在管理員權(quán)限,,這些程序往往可能需要在一些“全局”的位置寫(xiě)文件或者注冊(cè)表位置,這些“全局”的位置包括C:\Windows,、C:\Program Files,,還有HKEY_LOCAL_MACHINE注冊(cè)表分支。 由于UAC的作用,這些遺留應(yīng)用程序運(yùn)行在標(biāo)準(zhǔn)用戶(hù)權(quán)限下,,所以沒(méi)有權(quán)限往這些“全局”的位置寫(xiě)入內(nèi)容,。這時(shí)候虛擬重定向功能就起作用了,它可以把這些“全局”位置重定向到per-user的路徑,,這樣就可以欺騙遺留應(yīng)用程序,,讓它可以順利運(yùn)行在標(biāo)準(zhǔn)用戶(hù)狀態(tài)。 1.實(shí)例介紹 本文簡(jiǎn)單介紹文件夾虛擬重定向的實(shí)現(xiàn)方法,,以記事本為例,,此處假設(shè)當(dāng)前登錄帳戶(hù)為Admin,Windows Vista安裝在D盤(pán),。 (1) 首先必須選擇Windows 2000/XP下的記事本,,而不是Windows Vista內(nèi)置的記事本工具。 (2) 打開(kāi)Windows XP版本的記事本程序,, 先確認(rèn)一下記事本進(jìn)程的訪(fǎng)問(wèn)令牌,,確實(shí)是工作在標(biāo)準(zhǔn)用戶(hù)權(quán)限下,如附圖所示,,也就是說(shuō)按照道理,,記事本不可能對(duì)D:\Windows目錄有寫(xiě)入權(quán)限。 (3) 輸入一段內(nèi)容,,然后單擊文件,、保存,把保存路徑設(shè)置為D:\Windows,,文件名為T(mén)estUAC.txt,。非常奇怪,保存操作居然沒(méi)有報(bào)錯(cuò)“拒絕訪(fǎng)問(wèn)”,。 (4) 打開(kāi)“我的電腦”,,進(jìn)入D:\Windows文件夾,里面并沒(méi)有發(fā)現(xiàn)TestUAC.txt文件,,不過(guò)我們?cè)诠ぞ邫诘淖钣覀?cè)看到了一個(gè)“兼容性”按鈕,。 (5) 單擊“兼容性”按鈕,即可進(jìn)入“D:\Users\Admin\AppData\Local\VirtualStore\Windows”目錄,,可以發(fā)現(xiàn)這個(gè)目錄下有一個(gè)TestUAC.txt文件,如附圖所示,。 在這個(gè)過(guò)程中,,如果用File Monitor進(jìn)行監(jiān)控,就會(huì)發(fā)現(xiàn),,當(dāng)記事本嘗試往D:\Windows目錄寫(xiě)入文件時(shí),,UAC應(yīng)該會(huì)捕獲拒絕訪(fǎng)問(wèn)的權(quán)限錯(cuò)誤,然后自動(dòng)啟用重定向機(jī)制,把這個(gè)文本文件重定向(保存)到D:\Users\Admin\AppData\Local\VirtualStore\Windows目錄中,,如附圖所示,。 也就是說(shuō),UAC會(huì)自動(dòng)把“全局”文件夾位置重定向到“%LocalAppData%\VirtualStore\”目錄,,這是一個(gè)per-user的目錄,,很顯然不同的用戶(hù),重定向的目錄也有所不同,。用戶(hù)A無(wú)法看到用戶(hù)B的重定向文件,。這種隔離對(duì)大多數(shù)應(yīng)用程序來(lái)說(shuō)沒(méi)有什么問(wèn)題,但是對(duì)某些應(yīng)用程序來(lái)說(shuō)可能存在一些問(wèn)題,,例如某些游戲軟件可能要求把游戲得分記錄保存在一個(gè)公共的位置,,以便比較各個(gè)玩家的成績(jī),但是UAC可能會(huì)讓每個(gè)玩家認(rèn)為只有自己才是最棒的,。 據(jù)微軟的調(diào)查結(jié)果,,UAC的這種兼容性大概能夠使得約92%的遺留應(yīng)用程序可以正常工作在Windows Vista環(huán)境下。 2.原理簡(jiǎn)析 從File Monitor截圖中我們還能看到一個(gè)熟悉的單詞“REPARSE”(重解析),,難道它和NTFS文件系統(tǒng)的重解析屬性有什么相關(guān)嗎,?其實(shí)UAC的兼容重定向是借助一個(gè)文件系統(tǒng)的篩選驅(qū)動(dòng)程序(Filter Driver)來(lái)實(shí)現(xiàn)的,這個(gè)驅(qū)動(dòng)的名字是luafv.sys,,作為SYSTEM進(jìn)程的線(xiàn)程在內(nèi)核模式中加載,,如附圖所示。 3.配置虛擬重定向 有讀者朋友肯定早就想問(wèn),,為什么這個(gè)實(shí)驗(yàn)必須借助Windows XP下的記事本,?為什么不能用Windows Vista自帶的記事本工具?原來(lái)Windows Vista自帶的記事本工具實(shí)際上專(zhuān)門(mén)為UAC設(shè)計(jì)的,,不能算是遺留應(yīng)用程序,,所以Windows Vista不會(huì)為它開(kāi)啟虛擬重定向功能,如果嘗試向“全局”位置寫(xiě)入文件,,會(huì)直接受到拒絕訪(fǎng)問(wèn)的錯(cuò)誤消息,。 那么標(biāo)準(zhǔn)到底是什么?Windows Vista憑什么不給自帶的記事本開(kāi)啟虛擬重定向兼容特性,? 原來(lái)秘密就在于程序的manifest信息,,Windows Vista自帶的記事本程序里嵌入了manifest信息,指定了其安全級(jí)別為“asInvoker”,,Windows Vista將這類(lèi)定義了安全級(jí)別manifest信息的應(yīng)用程序,,一律視作合格的應(yīng)用程序,不再對(duì)此應(yīng)用虛擬重定向,。 用Process Explorer可以查出,,Windows Vista自帶的記事本的虛擬重定向標(biāo)記為“No”,而Windows XP記事本的虛擬重定向標(biāo)記為“Yes”。再例如QQ原本是可以啟用虛擬重定向的,,但是在manifest文件(QQ.exe.manifest)里添加以下安全級(jí)別信息,,如附圖所: 再啟動(dòng)QQ后,發(fā)現(xiàn)其虛擬重定向標(biāo)記為“No”,,如附圖所示,。 可以在本地安全策略里指定Windows Vista是否啟用虛擬重定向功能,方法是禁用“用戶(hù)帳戶(hù)控制:將文件和注冊(cè)表寫(xiě)入錯(cuò)誤指定到每個(gè)用戶(hù)位置”策略項(xiàng),。 提示 可以訪(fǎng)問(wèn)以下鏈接,,以查閱《Windows Vista的UAC功能淺析(一)》: http://www./thread-36186-1-1.html |
|
來(lái)自: 小飛蝦 > 《vista專(zhuān)題》