Share via


安全性監控重新認識安全性的十大不變法則,第 1 篇

Jesper M. Johansson

Scott Culp 在 2000 年發表了一篇標題為<安全性的十大不變法則>(英文) 的文章,這是我看過最棒的安全性文章。他所提出的論點,如今仍舊是所有資訊安全性成果的基石,如果您尚未讀過這篇文章,我建議您不妨看一下 (甚至把它印出來),網址是 microsoft.com/technet/archive/community/columns/security/essays/10imlaws.mspx

這篇文章獲得來自各方不同的迴響。有人挖苦它不過是 Microsoft 逃避解決許多被認定為嚴重問題的途徑。有人認為它是安全性方面最重要的基本文獻之一,甚至因此任意剽竊。不過也有人受到它的啟發,而自己另外研擬出一份列表,例如 edgeblog.net/2006/10-new-immutable-laws-of-it-security,這也是我最認同的迴響。

該文發表後的這八年來,安全性領域有了不少變化。所有重要蠕蟲一一亮相;資訊戰國時代正式開張 (包括集團犯罪、政治實體等);各種新名詞相繼出現,並且成為常見的用詞,包括網路釣魚 (phishing)、網址嫁接 (pharming)、殭屍網路 (botnet)、間諜軟體 (spyware) 以及跨站冒名請求 (cross-site request forgery) 等;一些前所未見的複雜 Rootkit 開始在 Windows 上橫行;新的作業系統版本都大規模針對安全性以及其他仍然放任安全性問題不管的作業系統而設計。

社交工程逐漸成為重要威脅;大型零售業者洩露 9400 萬個信用卡號碼這種資料外洩行為,成為家常便飯的新聞 (而這種商店仍然不乏客戶上門);美英政府同時錯放大量西方世界居民的私人資訊 (而大家還是繼續把私人資訊交給他們);大量安全性劇場已經走入我們的生活 — 以及我們的機場。

我想該是重新認識十大法則的時候了。看看本世紀初所經歷的這些變化,我們還能宣稱這十大法則牢不可破嗎?如果能 — 如果 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 針對毀壞攻擊 (Shatter attack) 發表白皮書《入侵 Win32 API》(英文) 之後,這個概念才成為主流知識 (seclists.org/bugtraq/2002/Aug/0102.html)。

難道 Microsoft 在第 1 條法則草創時,早已預見毀壞攻擊了嗎?其實不然。Microsoft 只是認清一個簡單的事實:很少有真正的安全性界限,可以防止電腦上執行的應用程式控制那部電腦。

Windows Vista 和 Windows Server 2008 是廢棄 Windows NT 4.0 的兩代產品。它們已經攻破第 1 條法則了嗎?有沒有哪些作業系統做得到這一點呢?其實全得視情況而定。新作業系統的安全性界限當然更加堅固,而且在 2000 年時,已有部分實驗性質的作業系統具有適當的安全性界限了。不過,那些界限仍屬少數。舉個例說,Microsoft .NET Framework 中的程式碼存取安全性就是一種安全性界限。它是專門為了防止在沙箱中執行的程式碼影響基礎作業系統而設計的。

Internet Explorer 中的 Iframes,是另一種安全性界限。但是 Iframes 並不會影響作業系統本身的存取,只會影響部分網頁內容之間的存取。Internet Explorer 中的受保護模式 (見 [圖 1]),則是一種作業系統層級的安全性界限,目的是防止瀏覽器中執行的程式碼直接影響基礎作業系統 (使用者不必採取任何動作)。其他還有少數安全性界限 (例如,標準使用者帳戶) 可以防止使用者帳戶影響基礎作業系統或其他任何使用者。

fig01.gif

[圖 1]Internet Explorer 7 所用的是一種稱為「受保護模式」的安全性界限(按一下以放大影像)

在此您必須瞭解「安全性界限」的意義。它的意義並不在於構築一道不可侵犯的牆,提供無限且無法滲透的隔離,而是軟體廠商 (例如 Microsoft) 必須負責利用安全性修補程式,修補所有對該界限的觸犯事件。軟體都有錯誤,所以我們必須不斷找出更多觸犯事件,持續讓軟體廠商修補。久而久之,就會改善他們的軟體,防止弱點立即遭到入侵。也許我們可以把這一點視為第 1 條法則仍然適用的確認吧。

不過,我還需要考慮另一個重點。您或許已經注意到前面的「使用者不必採取任何動作」這句話。其實第 1 條法則點出的不是軟體的弱點,而是人性的弱點!關鍵就在「說服您」這一詞。倘若不肖份子能夠說服您執行這個程式,大概就能故意提高程式權限,說服您執行這個程式。

即使您沒有系統管理員權限也無妨,只要您是標準使用者,還是有權存取許多誘人的資訊,比方說,情書、照片、視訊、銀行檔案以及公司機密資料。這些資料都有可能吸引某一個攻擊者,而且不需提高權限就能夠一一讀取。就拿您在電腦上管理的資訊來說吧,光是執行一個惡意程式,就足以把您所做的一切動作全部交由攻擊者接辦。因此,如果您把「您的電腦」定義為「您在電腦上管理的資料」,就可以略過所有關於權限的討論內容不管,直接下「第 1 條法則適用」的結論。

即使沒有針對電腦定義吹毛求疵,第 1 條法則似乎還是禁得起時間考驗。第 1 條法則的重點是,身為電腦操作員的您,必須為您在該部電腦上執行的軟體負責。如果您安裝了惡意驅動程式或惡意視訊轉碼器,就等於把這部電腦的控制權拱手交給歹徒!

雖然現在軟體廠商已有許多防止意外入侵的對策 (這也是安全性界限的目的),但是遊走全球的惡意軟體,通常都能破解這些保護措施。因此除了確保使用者沒有執行系統管理員工作的權限之外,使用者教育也是非常重要的一環。所以,雖然說目前第 1 條法則仍然適用,不過可能得稍微修改一下您電腦的定義。

第 2 條法則:倘若不肖份子能夠在您的電腦上改變作業系統,您的電腦就淪陷了。

從表面上看來,這條法則似乎很簡單。倘若不肖份子能夠在您的電腦上改變作業系統,這部電腦當然就不能信任了。但是,作業系統已經隨著運算需求的發展而改變,這又代表什麼意思呢?多年前我曾經為 The Blackwell Encyclopedia of Management (managementencyclopedia.com) 寫過作業系統這個詞彙的定義。我把它定義為輸入和輸出裝置的作業系統管理存取權,以及硬體存取權等。雖然我未將百科全書留底,原文也遺失了,但我很確定我所謂的作業系統並沒有包含接龍、Tablet 輸入系統以及視訊轉錄器。

隨著運算愈趨複雜,作業系統也開始支援其他許多功能。更複雜的是,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 發表以來,所有安裝的 Windows Vista 只叫用過 edlin.exe 兩次,而且這兩次都是三分鐘前,我在回想語法的時候發生。如果有人更改 edlin.exe 或從未被用過的某個檔案,真的就表示這部電腦已經淪陷了嗎?

Edlin.exe 是作業系統的一部分,這一點無庸置擬,但是如果從未有人執行過這個檔案,那麼更改它又怎能導致它被入侵呢?答案自然是否定了。更改作業系統中從未用過的一部分,並不會入侵您的電腦,而且作業系統中從未用過的部分可多著呢。

因此,間接答案卻是肯定的。您不能只看是否有人執行過一個檔案,來判斷它的更改是否會使您的電腦遭到入侵。問題沒這麼單純。讓我們看看 edlin.exe 的存取控制清單 (ACL),如 [圖 2] 所示。

fig02.gif

[圖 2] edlin.exe 的 ACL 相當有限 (按一下以放大影像)

edlin.exe 的 ACL 相當有限,只有 TrustedInstaller 服務有權更改這個執行檔。這一點非常重要:這表示在您電腦上更改該檔的不肖份子具有間接的影響力。更改 edlin.exe 這個動作,就表示您的電腦已經淪陷了。關鍵在於惡意使用者有能力更改 edlin.exe。如果不肖份子能夠更改這個檔案,他就能夠更改任何檔案,換句話說,這表示電腦上的所有東西都不能信任了。

作業系統會保護自己。它會防止未經授權的更改入侵服務,防止未經授權的更改入侵組態設定,防止未經授權的更改入侵磁碟檔案,甚至防止未經授權的更改,入侵作業系統所用的信號和 RPC 端點。如果攻擊者能夠更改上述任何一個受保護的物件,他就能夠更改所有受保護的物件,而且很有可能早就這麼做了。

這是非常關鍵的一點。十大法則當中有好幾條都在告訴您,並不是進行了某個動作就表示您的電腦已被入侵,重要的是,某個人有能力進行某個動作。這一點絕對不容忽視。您一定要記得,無論就電腦安全性的哪一方面來說,能力常常遠比實際上正在採取的動作更為重要。

如果電腦對網際網路大開門戶,而且長達數月沒有修補,那麼它還值得信任嗎?不,您必須將那部電腦視為已經受到入侵了。只要是可能已遭入侵的系統,它所含的內容就完全不能信任 (我在五年前所寫的一篇文章<救命啊!我被駭客入侵了,怎麼辦?>(英文) 當中,就說過同樣的話,該文位於 technet.microsoft.com/library/cc512587)。如果您遇到的是一位高手,即使系統已遭入侵,可能也不會出現任何已遭入侵的蛛絲馬跡,而是看起來完全正常。

所以了,第 2 條法則仍然適用。如果攻擊者有能力更改您電腦上任何受保護的物件,您的電腦就淪陷了。記住,重要的是有沒有能力更改那些物件,而非實際上是否已經遭到入侵。

第 3 條法則:倘若不肖份子能夠毫無限制地存取您的電腦,您的電腦就淪陷了。

這條法則在 2000 年相當重要。許多人對於實際存取系統能夠做什麼不甚了解。事實上,就連某些應該清楚瞭解的政府官員也未能做到。當時安全性指導建議將 [允許不登入就將系統關機] 選項設為停用。這個舉動會使登入畫面上的 [關機…] 按鈕變灰。他所持的理論是,只要強制使用者必須先登入才能關機,就會留下關機者的稽核記錄。

這正是錯誤思考的最佳個案。要存取登入畫面的 [關機…] 按鈕,必須實際坐在主控台前。就算坐在主控台前,如果真的想要關機,只要按按電腦前面的大圓鈕,甚至拔掉電源線,就直接關機了,什麼稽核記錄都不會留下。

Windows 2000 有一個稱為 [允許卸除而不須登入] 的安全性設定,在 Windows Vista 仍然保留,如 [圖 3] 所示。它也是秉持同樣的理論,要求使用者必須先登入系統,才能從銜接站卸除膝上型電腦。

fig03.gif

[圖 3] 難道使用者就不會把電腦和銜接站一起偷走嗎?(按一下以放大影像)

這個設定的實際安全性價值,其實相當不牢靠。我認為這個理論應該是,如果任何人都可以走近膝上型電腦把它卸除,那麼要竊取它不也是輕而易舉的事嗎?我是從沒動過這個念頭啦,不過如果我真的打算竊取膝上型電腦,這個預防措施擋得住我嗎?我只要把膝上型電腦和銜接站一起打包帶走就行了,嘿嘿嘿,連網路線和電源線我都不放過。這個冷笑話如何?

發明 Offline NT Password & Registry Editor 的 Petter Nordahl-Hagen,就有確實瞭解這個實際存取的要點。其實他的發明只是一個 Linux 開機磁碟,加上一個容許讀取和寫入 NTFS 磁碟區的實驗性 NTFS 檔案系統驅動程式。開機磁碟上的軟體,會在本機電腦上掛接登錄,並且將系統管理員帳戶的新密碼寫入 SAM (軟體資產管理) 登錄區中。您要做的只是實際存取該系統,並且等上一兩分鐘就行了。

第 3 條法則根本就是針對這樣的工具所寫的。事實上,許多產品示範都有採用 Nordahl-Hagen 的工具,只是大部分的觀眾從未確實認清這一點。我自己也在某些產品示範中用過這個工具,但是受不了老被人問:「我們要怎麼確定沒有人知道這種工具?」,「Microsoft 怎麼解決這個問題?」,於是就不用了。但是許多 IT 業界人士就是不願接受或瞭解實際存取勝過一切這個道理,而且為數還不少。

因此第 3 條法則就非常重要了。但是評論界卻毫不留情的群起撻伐。他們嘲諷這不過是 Microsoft 逃避解決任何可能 (甚至不太可能) 與實際存取有關之問題的一種作法。其實第 3 條法則常被用來駁回漏洞報告,包括 Offline NT Password & Registry Editor 入侵。但是封鎖具有系統實際存取權的攻擊者的作法,只有在這個前提下才有效:您必須確定他們無法染指任何東西。

這就是隱藏在第 3 條法則盔甲下的潛在漏洞。十大法則發表至今,磁碟全面加密技術已經成為可行的解決方案。硬碟全面加密 (嚴格說應該是「磁碟區全面加密」) 可以把整個磁碟區 (其他作業系統稱之為「磁碟分割」) 全部加密。因此,如果整個開機磁碟區 (亦即含有作業系統的磁碟區) 都被加密,我們的問題就變成:「第 3 條法則仍然適用嗎?」。

答案大概是肯定的。首先,您必須把解密金鑰儲存在某個地方。而放置金鑰和 BitLocker 預設選項最簡單的地方,就是電腦的可信賴平台模組 (Trusted Platforms Module) 晶片。要把金鑰放在這個地方,必須讓電腦自動開機。只要電腦一開機,資源和資金雄厚、並且具有電腦永久實際控制權的攻擊者,就有數不清的方法可以攻擊這部電腦。現在電腦已經可以連上任意網路,所有大概也有網路相關的方法可以攻擊系統了。

舉個例說,攻擊者可以藉由直接記憶體存取 (DMA) 裝置 (例如 USB 快閃磁碟機) 來讀取或寫入記憶體。電腦開始執行之後,一旦遇到擁有該電腦實際存取權的攻擊者,就毫無招架之力了。

如果金鑰不是儲存在電腦本身,那麼電腦的命運就取決於攻擊者是否能夠取得或猜出金鑰了。如果是使用 PIN 碼來開機,攻擊者也許不費吹灰之力就能猜出密碼。如果金鑰是儲存在另一個硬體裝置,或是從另一個硬體裝置衍生 (例如 USB 快閃磁碟機或單次密鑰),攻擊者就必須存取那個裝置。雖然需要多花一點功夫,但攻擊者還是有辦法取得那些金鑰,或者為難有金鑰存取權的人。

您也可以用不太一樣的方式來解讀第 3 條法則:「如果攻擊者可以實際存取您的電腦,那麼電腦很可能已經遭竊,也就是說,電腦可能要不回來了」。從這個角度來看,它的確已經淪陷為別人的電腦了。再就這個觀點來說,攻擊者是否能夠存取電腦上的資料也不是重點所在。但這就不是第 3 條法則的精神了。第 3 條法則的意思是,攻擊者有權存取您電腦上的資料,而不只是有權存取電腦本身。

綜觀上述所有情況,第 3 條法則還是適用的。現今有些技術的確可以幫助您遏阻許多能夠實際存取的攻擊者,把能夠存取採用安全措施之電腦資料的攻擊者數目降到最低。僅管如此,攻擊者的成功率,始終取決於攻擊者的能力,新技術多半只是用來應付多條十大不變法則罷了。但是實際存取權仍然有辦法進入系統,只是方法比較複雜。

到目前為止,安全性不變法則還是非常經得起先進技術和時間的考驗。在前三條法則當中,以第 3 條法則最為薄弱,但即使如此,它仍然適用於某些情況。不過,它所具備的緩和措施功效也最強大,並且最垂手可得。下兩期的《TechNet Magazine》我將繼續討論這個話題,並且判斷第 4 條到第 10 條法則是否仍然適用。

Jesper M. Johansson 是負責安全性軟體的軟體架構設計人員,也是《TechNet Magazine》的特約編輯之一。他擁有管理資訊系統 (MIS) 的博士學位,研究安全性長達 20 多年,是 Microsoft 在企業安全性領域的最有價值專家 (MVP)。其最新著述為《Windows Server 2008 Security Resource Kit》。