雖 然可以說 UAC 的目標,是要隔離以系統管理員身分執行的應用程式以及並非以系統管理員身分執行的應用程式,以提供某種程度的保護,但那絕對不是 UAC 的主要用途。其主要用途是要開始讓更多使用者以標準使用者身分執行,以強迫開發人員撰寫更多以標準使用者身分執行的程式,因而減少使用者需要提高權限的情 況。開發人員撰寫越多符合 UAC 的應用程式,使用者得到的提示數目就越少,使用者經驗也越佳。在此過程中,最理想的狀況是大部分使用者都不以系統管理員身分執行,並希望他們對於所看到的 一些提高權限提示開始抱持懷疑的態度。提示越少,使用者越能夠在接受它們之前審慎考慮。
至少理論上是如此。在引伸意義上,雖然惡意程式可能可以減少,但這要看使用者是否持續啟用 UAC,而這又取決於開發人員是否撰寫相容的軟體,以及使用者是否不再輕視這些提示 (僅快速點選帶過),而認真考慮提高權限的要求是否可信且必要。
為了增加在大部分時間都以非系統管理員身分執行的使用者數目的目標,UAC 的設計納入了下列子目標:
- 減少需要提高至管理帳戶的案例數。
- 使提高權限大為簡化,最好是自動化,比使用 runas.exe 或登出某帳戶後再登入另一帳戶這類舊把戲更簡單。換句話說,要消除差距,直到獨立軟體供應商 (ISV) 修正其應用程式為止。
- 為以系統管理員身分執行的應用程式提供某種隔離措施,來保護以非系統管理員身分執行的應用程式。
- 儘可能讓公開的應用程式可以用更低的權限去執行。
在上述目標當中,有兩個是要讓以非系統管理員身分執行的使用者經驗盡量美好。有兩個則是要保護公開的應用程式。
有 趣的是,其中只有兩個與一般對於 UAC 的認知有關,而且只有一個實際涉及提高權限的工作。然而,當應用程式要求更多權限時,最為人詬病的是提高權限,因為它是構成 UAC 的技術集合當中,唯一使用者看得到的部分。第一個大目標與提高權限一點關係也沒有。其構想只是希望在大部分時間讓更多人以非系統管理員身分執行。事實上, 您可以說,其用意是要減少提高權限事件的次數。
與提高權限工作本身有關的目標是 2 和 3。目標 2 是要使提高權限的工作比在 Windows XP 中更簡單,目標 3 是要為以提高的權限執行的應用程式提供某種程度的保護。其餘目標則與完全不同的議題有關。不過,這些目標都需要變更作業系統。若您有興趣知道仔細內容,先 前提及的 Mark Russinovich 文章中有詳述這些變更。
一如前述,有許多人建議停用 UAC。可能有許多人根本不會給此功能機會就將其停用,也有更多人會在向大型商家購得其電腦時,發現已安裝的 Windows Vista 版本已經停用 UAC。我認為零售商在預設部署映像中,為作業系統停用重要的安全功能,實在很不應該。
遺 憾的是,很多關閉 UAC 的建議都是憑藉初次經驗而已。在安裝電腦時,當您安裝軟體及做任何必要變更時,會看到很多提示。電腦進入穩定狀態下之後,就不會像在設定電腦時需要處理眾 多提示。前幾星期與後幾星期將大不相同。如果您在一個處於穩定狀態的電腦上試用 UAC,我想您會發現它一點也不麻煩。
什麼不是 UAC
UAC 並非刻意設計成 Windows 有史以來最麻煩的功能。相反地,這一套技術的設計是要讓使用者不再像過去幾年來,經常使其系統曝露在惡意程式碼的威脅之下。
以 目前的 UAC 形式而言,它並無法阻止真正厲害的攻擊者,或有人協助的攻擊者。如果壞人想不到可擊敗 UAC 的方法,他們的最後手段當然就會引誘使用者為他們代勞。假設可以選擇勁舞豬和安全性,從經驗判斷,每次獲勝的一定是勁舞豬。使用者已知道如何不理會對話方 塊,因此在我們能夠成功重新教育他們之前,使用者都會這麼做。造成此現象的原因有許多,包括軟體有太多警告對話方塊、其中的訊息毫無意義,以及使用者所購 買的裝置所附的手冊都會包含這樣的附註:請按一下 [是],關閉安全性警告對話方塊。
UAC 無法提供絕對的安全性。事實上,它再度使舊式本機權限提高攻擊變得有趣。這種攻擊以往很不受重視,因為在 Windows 上,幾乎每個人都是系統管理員,因此提高權限至其他系統管理員毫無意義。換句話說,UAC 的確改變了這類攻擊的本質,並將遊戲規則轉變成比較像已在 UNIX 上流行超過 20 年的規則。
UAC 無法阻止壞人竊取您的個人資料。不管使用者的執行權限為何,使用者的個人資料都可以讓該使用者存取。因此,包括惡意程式在內的應用程式,都可以存取此資 料。UAC 不會,也無法改變這一點。使用者還是需要警愓、存疑及擇善固執,這是我們有機會就應該對使用者灌輸的觀念。
UAC 不是設計來保護以提高權限執行的應用程式,使其不會遭受在相同登入工作階段中以正常權限執行的應用程式的所有攻擊。雖然 UAC 的確提供了一些薄弱的程序隔離功能,但是讓各個應用程式在個別的沙箱中執行作業,絕對不是 UAC 當初的設計目標。
謠言
關於 UAC 的謠言及其用途的誤解,Microsoft 本身難辭其咎。例如,在《Windows Vista 安全性指南》中,<防範惡意程式>一章將 UAC 列為防範惡意程的主要技術 (文章位於:microsoft.com /technet/windowsvista/security/guide.mspx)。它建議在大部分情況下執行時要開啟 UAC,並列出使用 UAC 對抗惡意程式時要考量的一些要點。不過,其中卻明顯漏掉這一點:UAC 並不會 (也不是用來) 阻止惡意程式。
目 前全球對 Windows 安全性最了解的一些專家 (例如 Joanna Rutkowska),才真正了解 UAC 的用途。正如她在 2007 年 2 月 4 日在一篇部落格文章中所陳述的,UAC「是 Vista 推出的一個新安全機制,其主要目標在於強迫使用者使用受限的帳戶工作,而不以系統管理員身分工作」(theinvisiblethings.blogspot.com/2007/02/running-vista-every-day.html)。她說的大部分都沒錯,不過我覺得應該使用「鼓勵」而非「強迫」一詞。
不過,這表示對 Windows 常見攻擊的本質會有重大改變。正如我在本專欄前面提到的,提高本機權限的安全性風險,是使用者可以從本機標準使用者提高至本機系統管理員,這在 Windows 平台上一向不受到重視。
在 Windows Vista 中,其構想是希望使用者以標準使用者身分執行,因此,提高本機權限的問題突然又變得非常值得探討。只可惜,我們仍然受到 UAC 的一些限制。記住,沒有有效的隔離;沒有任何安全界限能夠在同一部桌上型電腦上隔離程序。雖然作業系統確實有包含一些保護措施來阻擋一些明顯而非必要的通 訊管道,但要完全阻擋它們是不可能的,而且也不恰當。因此,Microsoft 不把不存在的安全界限視為安全性漏洞。Mark Russinovich 在 blogs.technet.com/markrussinovich/archive/2007/02/12/638372.aspx 的一篇部落格文章中,對此有討論類似的議題。
Mark 的看法完全正確。在同一部桌上型電腦上,低權限程序和提高權限的程序之間並沒有安全界限,Microsoft 非常了解這個事實。由於同一部桌上型電腦上的程序之間本來就沒有隔離,因此,當發現同一部桌上型電腦上的程序之間沒有隔離時,並不能稱之為安全性弱點。顯 然,這削弱了 UAC 對抗惡意程式之首席機制的價值,但原先的設計並非如此 (雖然您可能在許多文章中讀到這一點,其中也包括來自 Microsoft 的一些文章)。
此一事實是否削弱 UAC 在其主要目標上的價值,亦即希望更多人在更多時候以標準使用者身分執行?不會。惡意的低權限應用程式與提高權限的應用程式之間,不管有沒有無法滲透的安全 界限,都不會改變更多使用者能夠有效使用 UAC 並以標準使用者身分執行其 Windows Vista 電腦的優點。事實上,與業界所相信的一些說法剛好相反,我是以 Windows Vista 的標準使用者身分撰寫本文 (以及我所寫的關於 Windows Vista 安全性的整本書),而且在整個過程中,我都沒有看到任何 UAC 提示!
雖 然 UAC 並不能減輕所有的安全性問題,也未擁有許多人 (包括我自己在內) 非常想要的功能 (亦即可對抗惡意程式的首席保護機制),但這不表示它不是一項安全性技術。能夠透過個別使用者帳戶識別使用者的能力,不能獨力阻止惡意程式感染您的系統, 但沒有人會因而將此事實引伸為使用者帳戶不是一項安全技術。UAC 不能解決我們希望它解決的所有問題,不表示它解決的問題不重要。
UAC 會交由一些技術 (如大幅改進的 Windows Firewall、Windows Defender 和其他反惡意程式) 來防範惡意程式碼,以及在惡意程式碼 (不論是由於狡猾的程式設計或是以飛行豬的技巧) 不幸入侵時無法執行。這些安全性技術沒有一項能夠 100% 完成其任務,然而它們全都是重要的安全性技術,各佔有一席之地。但誠如我之前多次提到的,即使所有攻擊途徑都關閉了,最後它也會把腦筋動到使用者身上。如 果使用鍵盤的人選擇讓惡意程式碼執行,全世界沒有一項緩兵之計能幫得了忙。
最佳作法
您 應該如何使用 UAC?是否應該在管理員核准模式下,以系統管理員身分執行?我曾多次提到,UAC 不能防止從較低權限的應用程式,將程式碼插入到同一部桌上型電腦上更高權限的應用程式中。這表示,不論是在管理員核准模式下,或是以標準使用者身分執行然 後在工作階段中提高權限 (潛在提高權限) 都無法提供有效的隔離。不過,不論哪一種方式,都比在 Windows XP 之下以系統管理員身分執行或在 Windows Vista 中關閉 UAC 更好。畢竟,惡意程式仍有可能在互動式桌面上利用提高權限的應用程式使壞。
您 所決定的執行方式,將取決於風險管理方法。當您以標準使用者身分執行然後使用潛在提高權限來提升應用程式之後,提高權限的應用程式與一般應用程式會有不同 的使用者環境。這可減少污染攻擊的風險,避免惡意的未提高權限應用程式污染有提高權限的應用程式的使用者環境,但它不一定能夠移除未提高權限應用程式控制 已提高權限應用程式的能力。數個星期以前執行的惡意應用程式雖無法輕易污染您今天執行的已提高權限應用程式,但現在執行的惡意應用程式卻可控制已提高權限 的應用程式。因此,您必須從使用的簡便性和風險的平衡點來決定執行方式,無論是使用管理員核准模式或是潛在提高權限的方式。
這樣可造就 UAC 的一套最佳作法,如 [圖 2] 的總結。就我的看法,目前的最佳選項是最複雜的。不過,對於真正擇善固執或希望避開風險的使用者而言,最佳選項是以標準使用者身分執行,且絕不要提高權 限。在 Windows XP 之下以系統管理員身分執行的話,可以說一旦您執行了惡意程式碼,一切就完了。在 Windows Vista 之下,如果您執行惡意程式碼,然後在該工作階段內提高權限,也可能會完蛋。您可以自由挑選最適合您,且可讓您較為安心的執行方法。
此外,真正擇善固執的人不會信任廠商所說「應用程式必須以系統管理員身分執行」之類的話!做此不實陳述的其中一個最明顯範例就是 Visual Studio® 2005 Service Pack 1。當您啟動 Visual Studio 時,它會告訴您應該以系統管理員身分執行。然而,這樣的陳述只適合需要執行特定工作的開發人員。如需詳細資訊,請參閱 msdn2.microsoft.com/en-us/vstudio/aa972193.aspx。
資料來源:
http://www.microsoft.com/technet/technetmag/issues/2007/09/SecurityWatch/default.aspx?loc=zx/
福利味有限公司 | 台灣軟體代理商 正版軟體 開立電子發票 LINE客服:@azotaiwan