安全觀察: 再探安全性的十個永恒定律 第1部分
早在 2000 年,Scott Culp 曾發表了一篇題為“安全性的十個永恒定律”的文章。它是我讀過的有關安全性問題的最佳文章之一。他所介紹的信息到現在仍然是所有信息安全工作的基礎,如果尚未讀過這篇文章,建議您閱讀一下(甚至將其打印出來)。在 microsoft.com/technet/archive/community/columns/security/essays/10imlaws.mspx 可找到它。
人們對該文褒貶不一。有人指摘說,它是 Microsoft 為避免修復那些被視為嚴重問題的一些漏洞所采取的花招。但也有人認為它是有關安全問題的一篇最基本的文章,并且由于其公認的重要性而被大肆抄襲。但是我卻比較推崇那些能夠提出自己觀點的評價,例如在以下網址發表的見解:edgeblog.net/2006/10-new-immutable-laws-of-it-security。
在這篇文章發表后的八年時間里,安全領域發生了巨大的變化。實際上,在每種主要的蠕蟲病毒爆發前用戶都會被提請注意。我們已經已經在打一場信息戰(對手是有組織的犯罪、政治實體等)。常見語匯表中新增了各種新名詞和術語,例如網頁仿冒、網址嫁接、僵尸網絡、間諜軟件和跨站點請求偽造等。我們有運行于 Windows 中的有史以來最為復雜的 rootkit。我們擁有在很大程度上專為解決安全問題而開發的新操作系統,也有對安全問題仍未引起足夠重視的其他一些操作系統。
社會工程學已發展成為一個主要威脅。數據侵犯(例如,一家大型零售商泄露了 9400 萬個信用卡號碼)已成為常見的新聞故事(但人們仍繼續在此類商店購物)。美國和英國政府合伙濫用絕大多數西方世界居民的私人信息(可人們仍將私人信息在此類政府中存檔)。并且,大量的安全劇場(security theater,意指在沒有明顯改善安全措施的情況下讓用戶感到安全的方法)已進入我們的生活,機場的安檢就是一例。
我認為現在是需要再來探究一下這些定律的時候了。如果我們看到的所有這些變化都發生在本世紀的最早階段,我們是否還會宣稱這些定律是永恒不變的呢?如果的確是這樣 — 如果它們經受住了過去 8 年的考驗 — 那么很可能它們也能經受住接下來 10 年的考驗。
在這一由三部分內容組成的系列文章中,我將以批判的眼光來審視每條定律。本月我將介紹定律 1 到 3。在下個月的內容中,我將剖析定律 4 到 7。最后一期我將研究定律 8 到 10,并根據自從 2000 年這些定律最初面世以來我們周圍所發生的變化,針對看上去合理的想法和觀點提供一些佐證。
定律 1:如果攻擊者能夠設法使您在自己計算機上運行他的程序,那么這臺計算機就不再屬于您了。
此定律有力地說明了,在計算機上執行的任何軟件都可能會控制該計算機。在這條永恒定律第一次出現時,Microsoft 提供的操作系統包括 Windows 98、Windows Me 和 Windows NT 4.0。現在我們有了 Windows Vista 和 Windows Server 2008。
在 Windows 98 和 Windows Me 中,您所執行的任何軟件都可以完全控制計算機。Windows NT 4.0 有一個非常可靠的底層安全模型,但如果以“管理員”身份運行它,則在效果上會將其隔離模型降級為 Windows 98 和 Windows Me 的模型。當然您也可以使用非管理員身份運行 Windows NT 4.0,但這樣做會非常痛苦,極少有組織會這樣做(即使有也是屈指可數的幾個)。
假設您就是以非管理員身份運行 Windows NT 4.0 的。那么,在撰寫定律 1 時它是否適用?回答是肯定的。首先,Windows NT 4.0 有大量不容忽視的漏洞。例如,存在著一些不夠嚴密的權限,尤其是針對內核對象以及在注冊表中。還有許多尚未被發現但專家預期可能會發生的攻擊類型。例如,在 1999 年,人們尚未意識到以提升權限的用戶身份在交互式桌面上運行進程可能會危及計算機的安全。直到 2002 年,Chris Paget 發表了有關粉碎攻擊的白皮書 "Exploiting the Win32 API",這時大家才意識到這一點 (seclists.org/bugtraq/2002/Aug/0102.html)。
難道在擬定定律 1 時 Microsoft 就預見到了粉碎攻擊?不,實際上并非如此。Microsoft 只是意識到一個簡單的事實:極少有真正的安全邊界可以阻止在計算機上執行的應用程序接管該計算機。
Windows Vista 和 Windows Server 2008 是從 Windows NT 4.0 遷移而來的兩代操作系統。它們是否可使定律 1 無效?是否存在具有同樣問題的其他操作系統?這要視情況而定。在新操作系統中的確存在更為可靠的安全邊界,實際上早在 2000 年出現的一些試驗性操作系統中就已經具有了適當的安全邊界。然而,此類邊界仍為數不多。例如,Microsoft .NET Framework 中的“代碼訪問安全”就是一個安全邊界。它專門設計用于使在沙盒中執行的代碼不會影響底層操作系統。#p#
Internet Explorer 中的 Iframes 提供了另一個安全邊界。但 Iframes 不會影響對操作系統本身的訪問,它只影響網頁上不同部分的內容之間的訪問。Internet Explorer 中的“保護模式”(如圖 1 所示)是操作系統級別的安全邊界。它的目的是防止在瀏覽器中執行的代碼影響底層操作系統 — 在沒有用戶操作的情況下。還有一些其他安全邊界(如標準用戶帳戶),用于防止用戶帳戶影響底層操作系統或任何其他用戶。
圖 1 Internet Explorer 7 使用名為“保護模式”的安全邊界(單擊圖像可查看大圖)
了解術語“安全邊界”的含義極為重要。它并不意味著存在著一個不可侵犯的隔離墻,可以保證提供堅不可摧的、全面的隔離。此術語實際是指軟件供應商(例如 Microsoft)要負責提供安全補丁以修復任何違背該邊界的行為。軟件始終會存在錯誤,毫無疑問,我們會繼續發現更多的違背行為,而軟件供應商則需要繼續提供補丁。隨著時間的推移,他們應改進其軟件以在第一時間修復這些漏洞。這可能會被視為定律 1 仍然成立的佐證。
但是,還有另外一個需要考慮的至關重要的內容。您之前可能已經注意到了短語“沒有用戶操作”。定律 1 實際并非真的與軟件的缺陷或漏洞有關。它實際是與人為因素中的漏洞有關!關鍵短語是“設法使您”。如果攻擊者能夠設法使您運行他的程序,則他很可能也能設法通過一些伎倆使您在賦予程序提升權限的上下文中這樣做。
即使您不具有管理權限也沒有關系。作為標準用戶,您仍有權訪問大量有趣的信息:銀行文件、情書、圖片、視頻以及公司機密數據。所有此類數據都有可能令攻擊者感興趣,并且他們均無需任何提升權限即可讀取。對于您所管理的計算機中的信息而言,執行某個惡意程序就相當于將您所有操作權限都移交給了攻擊者。因此,如果將“您的計算機”定義為“您所管理的計算機中的數據”,則大可忽略有關權限的任何討論而直接得出“定律 1 成立”的結論。
即使不對計算機的定義做過細的劃分,定律 1 似乎仍然可以經受住時間的考驗。定律 1 的目的是為了指出以下事實:作為計算機的操作員,您必須對您在該計算機中運行的軟件負責。如果您安裝了惡意驅動程序或惡意視頻編解碼器,則相當于將該計算機的完全控制權轉交給了罪犯!
盡管軟件供應商可以采取各種措施來避免發生意外的危害(這實際是安全邊界的真正意義所在),但有意執行的惡意軟件通常會摧毀所有此類保護性措施。這就是除了確保用戶無權執行管理任務外,對其進行相關培訓也至關重要的原因。因此,可以肯定地說,定律 1 在今天仍然成立,只是計算機的定義可能需要稍做修改。#p#
定律 2:如果攻擊者能夠更改計算機上的操作系統,那么這臺計算機就不再屬于您了。
此條定律看似極其簡單。很顯然,如果攻擊者能夠更改計算機上的操作系統,那么您將無法再信任這臺計算機。但是,隨著計算需求的發展演變,操作系統的含義也已發生了變化。許多年前,我為 The Blackwell Encyclopedia of Management 撰寫了關于術語“操作系統”的定義 (managementencyclopedia.com)。在定義中描述了操作系統對輸入輸出設備、硬件及類似設備訪問的管理。現在,我手頭并沒有百科全書,而且原始記載也已不知所終,但我可以肯定的是,我并未提到過操作系統包括紙牌游戲、筆觸輸入法以及視頻代碼轉換器等內容。
隨著計算變得日益復雜,操作系統也需要支持更多的功能。更重要的是,OEM 廠商常常會在其中加入他們自己的附加軟件 — 這種附加軟件有的還稍微有點作用,但通常都是有百害而無一利。而且,其中有些附加軟件會重復已內置到核心操作系統中的功能。
例如,Windows Server 2008 Enterprise Edition 在默認安裝時所占磁盤空間超過 5 GB。Windows Vista Ultimate Edition 包括 58,000 多個文件,占用空間超過 10 GB。而且組成操作系統的不僅僅是文件。還有數千個配置設置以及后臺程序或服務。
它們都只是操作系統的一部分。它是一個整體術語,包括所有文件、所有配置設置、所有服務,也包括由文件和配置設置創建的所有運行時對象 — 信號、命名管道、RPC 端點等。甚至高度抽象的構造(如系統時間)和特定類型的數據(如事件日志內容)也應被視為操作系統的一部分。
鑒于操作系統的發展演變方式,修改任何此類文件結構是否真的會使計算機不再值得信賴?直接的回答是否定的。例如,Windows Vista 隨附了來自 MS-DOS 的舊式行編輯器 edlin.exe。我無法肯定但我愿意以一杯三倍量的摩卡咖啡作為賭注:自 Windows Vista 發布之日起,在所有安裝的副本中,edlin.exe 只被調用過兩次。這兩次都發生在大約三分鐘之前我嘗試記住其語法的時候。如果有人修改了 edlin.exe 或其他從來沒有人使用過的文件,是否真的意味著它不再是您的計算機了?
Edlin.exe 毫無疑問是操作系統的一部分,但如果沒人曾經執行過此文件,那么對它的修改會導致計算機受到破壞嗎?答案當然是不會。修改并未使用過的操作系統部分并不會使計算機受到破壞。而從未使用過的操作系統部分還有很多。
但是,間接的答案是肯定的。我們不能只通過查看是否有人執行某個文件來判斷對它的修改是否可能會導致計算機受到破壞。問題要比這復雜得多。看一下 edlin.exe 的訪問控制列表 (ACL),如圖 2 所示。
圖 2 edlin.exe 的 ACL 限制非常嚴格(單擊圖像可查看大圖)
edlin.exe 的 ACL 限制非常嚴格。只有 TrustedInstaller 服務有權修改這一可執行文件。這一點非常重要:它意味著當攻擊者修改計算機上的該文件時,會導致出現間接的影響。修改 edlin.exe 這一行為的確意味著此計算機不再屬于您了。惡意用戶可以修改 edlin.exe 這一事實是此處的關鍵所在。如果攻擊者可以修改該文件,則他就可以修改任意文件,這意味著您將無法再信任計算機上的任何內容了。#p#
操作系統會保護自己。服務會受到保護以避免遭到未經授權的修改。配置設置會受到保護以避免遭到未經授權的修改。磁盤上的文件會受到保護以避免遭到未經授權的修改。甚至操作系統所使用的信號和 RPC 端點也會受到保護以避免遭到未經授權的修改。如果攻擊者可以修改任何此類受保護的對象,則他也就可以修改所有此類對象,并且極有可能他已經這樣做了。
這一點至關重要。通過幾條永恒定律可知,并非執行某種操作這一行為意味著計算機遭到了破壞。真正重要的只是有人有能力執行某種操作。這是一個需要注意的地方。在涉及計算機安全的每個方面,您都必須始終牢記:真正重要的并不是實際執行了什么操作,而是他能夠執行什么操作。
如果計算機向 Internet 敞開大門且數月未打補丁,它是否仍值得信賴?答案是否定的。必須將該計算機視為已遭到破壞。您無法再信任可能已遭到破壞的系統上的任何內容。(五年前,我在文章 "Help!I Got Hacked.Now What Do I Do?" 中說過同樣的話,文章的地址為 technet.microsoft.com/library/cc512587)。如果遇到老練的攻擊者,受到破壞的系統甚至可能不會顯示出任何遭到破壞的跡象。系統可能看起來非常正常。
毫無疑問,定律 2 仍然成立。如果攻擊者可以修改計算機上任意受保護的對象,則該計算機將不再屬于您了。只需記住,重要的是修改此類對象的能力,而并不是受到實際的攻擊。
定律 3:如果攻擊者對您的計算機具有無限制物理訪問權限,那么這臺計算機就不再屬于您了。
在 2000 年,此條定律極為重要。許多人并未完全了解對系統具有物理訪問權限時都可以做些什么。實際上,即使是應該對此有深刻了解的一些政府機構也并未認識到這一基本要點。當時,在安全指南中建議將“Allow shut down without logon option”(允許在不登錄的情況下關機)設為“disabled”(禁用)。這將導致登錄屏幕上的“Shut down…”(關機…)按鈕變灰。其理論依據是:要關閉計算機,用戶必須首先登錄以便留下系統關閉人員的審核記錄。
其實此觀點存在瑕疵。要對登錄屏幕上的“Shut down…”(關機…)按鈕具有訪問權限,您必須實際就坐在控制臺旁邊。在您坐在控制臺旁邊的情況下,如果您真的想要關閉計算機,通常可以使用計算機前面的圓形大按鈕 — 甚至電源線。系統肯定會關閉。而且沒有審核記錄。
Windows 2000 包括一個名為“Allow undock without logon”(允許在不登錄的情況下移除)的安全設置,此選項在 Windows Vista 中仍可用,如圖 3 所示。其原理是相同的。要從基座移除便捷式計算機,必須先登錄系統。
圖 3 為什么不把計算機和基座一起盜走?(單擊圖像可查看大圖)
此設置的實際安全價值很值得懷疑。我的想法是如果有人可以走近該便捷式計算機并移除它,那么肯定也有人可以輕松地盜走它。現在,雖然我并非曾經盜取過便捷式計算機,但如果我想這樣做的話,這一預防措施根本無法阻止我。我可能會將便捷式計算機和基座作為一個整體一起拿走。哎呦,我還盜走了網線和電源線。真是一個毫無意義的安全調整工具!#p#
直到 Petter Nordahl-Hagen 創建了他的 Offline NT Password & Registry Editor,才真正觸及有關物理訪問的要害。他的作品只是一張 Linux 引導盤,其中包括一個試驗性的 NTFS 文件系統驅動程序,可實現對 NTFS 卷的讀取和寫入訪問權限。引導盤上的軟件會將注冊表安裝到本地計算機中,并將管理員帳戶的新密碼寫入 SAM(軟件資產管理)配置單元。您需要的只是能夠物理訪問系統以及一、兩分鐘的時間。
類似它的這種工具就是最初撰寫定律 3 的原因所在。實際上,在許多演示中都使用了 Nordahl-Hagen 的工具。不幸的是,它并未在絕大多數受眾中間傳播開來。我曾在一些演示中親自使用過此工具,但由于厭倦了被不斷問及“我們如何確保沒有用戶知道類似工具?”以及“Microsoft 采取了哪些措施來修復這個問題?”,后來就再也沒有使用過它。IT 業界的絕大部分人只是不想接受或不想了解物理訪問的危險程度要壓過所有其他途徑這一事實。
在這種環境中,定律 3 非常重要。但是它卻遭到批評家們的無情攻擊。它被認為是 Microsoft 的伎倆,企圖避免修復可能(即使只有一點點)與物理訪問相關的所有問題。定律 3 在很多情況下被用來駁回漏洞報告,包括 Offline NT Password & Registry Editor。但是,要阻止對系統具有物理訪問權限的攻擊者,實際只有一種可能的方法:確保他們無法接觸到任何數據。
這是破解定律 3 的可能途徑。從定律成文之初,完全磁盤加密技術就已成為一種可行的解決方案。通過使用完全磁盤加密(更準確的說法是“整卷加密”),整個卷(在其他操作系統中被稱為分區)均可被加密。因此,如果整個引導卷(換句話說,其中安裝有操作系統的卷)被加密,我們想知道的是定律 3 是否仍然成立?
回答是非常有可能。首先,解密密鑰必須存儲在某個位置。放置密鑰(BitLocker 中的默認選項)的最簡單位置是計算機中的“受信任的平臺模塊”芯片。這樣做的話,計算機將可以通過無人參與的方式引導。計算機引導完成后,對計算機擁有永久物理控制權限的一些老謀深算且心懷叵測的攻擊者可通過多種方式對其實施攻擊。由于計算機現在可以連接到任意網絡,因此可能會使用與網絡相關的方式來攻擊系統。
例如,攻擊者可能會通過直接內存訪問 (DMA) 設備(如 USB 閃存驅動器)來讀取或寫入內存。計算機開始運行后,如果攻擊者對該計算機具有物理訪問權限,則后果將不堪設想。
如果密鑰未存儲在該計算機中,則攻擊將取決于攻擊者能否獲取或猜出密鑰。如果使用 PIN 碼來引導計算機,則攻擊者可能會比較輕松地猜出此代碼。如果密鑰存儲在單獨的硬件設備中(如 USB 閃存驅動器或一次性密碼鏈)或由其派生而成,則攻擊者必須對該獨立設備具有訪問權限。肯定有方法可以獲取這些密鑰,或使那些對密鑰具有訪問權限的人感到非常不便,盡管可能要頗費一番周折。
您也可以通過一種略微不同的方式來解釋定律 3:“如果攻擊者對您的計算機具有物理訪問權限,可能此計算機已經被盜,因此不太可能再將其拿回來。”從這個角度看,這臺計算機實際上已不再屬于您了。而且,從這個角度來看,對于攻擊者而言,能否訪問計算機上的數據也無關緊要。但是這實際并非定律 3 的實質所在。它意味著攻擊者可以訪問計算機中的數據,而非得到計算機本身。
綜上所述,定律 3 的確仍然成立。毋庸諱言,當今的一些技術在阻止具有物理訪問權限的攻擊者方面已經取得了明顯的成效,并因而最大程度降低了能夠訪問采用了安全措施的計算機上的數據的攻擊者數量。也就是說,攻擊者所具有的能力始終決定著攻擊者實際可以攻擊的程度,最新的技術解決了 10 個永恒定律中的多個定律所提出的問題(在一定程度上)。但是,物理訪問仍提供了進入系統的方法(盡管較為復雜)。
就目前而言,安全性永恒定律被證明非常具有適應性,無論是對于技術進步還是對于時間考驗而言。在前 3 個定律中,定律 3 最不穩定,不過即使這樣它在許多情況下也仍然成立。但是,它是具有最易獲取且最可靠的緩解方案的定律。在接下來的兩期《TechNet 雜志》中,我將繼續本次討論,看一看定律 4 到 10 是否仍然成立。
本文來源:微軟TechNet中文站
【編輯推薦】