安全性監控部署 EFS:第二篇

John Morello

任何加密檔案系統 (EFS) 部署基本上有兩個部分:著重於憑證管理和修復代理的後端設計部分,及使用者面對的 EFS 部署部分。上個月我寫了後端部分,並討論了資料和金鑰修復的選項

以及提供用戶端憑證的選項。這裡,我的重點會放在一般使用者所看得見的部署層面,例如 Windows® 檔案總管的增強功能、選擇要加密的檔案系統位置,以及如何利用群組原則來管理加密選項。

判斷 EFS 是否為已使用

決定要部署 EFS 之後,第一步就是判斷組織內之 EFS 使用方法的目前狀態。回顧一下,EFS 可以用於獨立模式,一般使用者只負責其加密金鑰的建立和備份。組織中可能會有進階使用者已依此方式使用 EFS,因此,為確保能夠順利轉換為受管理的部署,就必須判斷這些使用者是誰。

電腦上第一次有任何給定的使用者運用 EFS 時,Windows 會在 HKEY_CURRENT_USER 中建立下列登錄項目:

HKCU\Software\Microsoft\Windows NT\CurrentVersion\EFS\CurrentKeys\CertificateHash 

Microsoft® Systems Management Server (SMS)、Active Directory 登入指令碼或其他工具,都可用來檢查此項目在您企業的電腦上是否存在。如果使用者有此登錄值,表示他已使用過 EFS。不過,此值未必表示目前有人使用 EFS 或是否有加密其任何資料。因此,當電腦上有此登錄機碼時,應該更詳細檢查以判斷目前是否有任何檔案加密。

使用 cipher.exe 及傳遞 /U 和 /N 參數,可指示 Cipher 報告電腦上之檔案和目錄的加密狀態。例如,如果您要判斷系統上的資料是否加密,就可以執行下列命令:

cipher /U /N

登錄檢查和 Cipher 報告可以合併成單一指令碼來檢查登錄值存在與否,如果存在,會產生電腦上目前加密檔案的報告。產生這些報告之後,就會知道哪些使用者有加密檔案,且準備將它們移轉到集中管理的設計。

若要在部署期間控制群組原則的應用程式,則在網域中建立兩個安全性群組就很有用,因為這樣可將使用 EFS 的那些電腦與沒有 EFS 的電腦分隔開來。例如,"SG-ComputersUsingEFS" 包含那些已使用 EFS 之電腦的電腦帳戶,而 "SG-ComputersNotUsingEFS" 包含目前未使用 EFS 的所有其他電腦。

使用群組原則控制 EFS 使用方法

一旦知道誰使用及誰未使用 EFS 之後,用戶端部署的下一步就是要針對目前未使用它的使用者停用獨立 EFS 使用方法。這是部署程序的一個重要步驟,因為第一次啟用並正確設定 EFS,比移轉使用自我簽署憑證的使用者更容易。只有在判斷哪些使用者已使用 EFS 之後,您才應該執行此步驟,因為透過群組原則停用 EFS 之後,使用者便無法存取任何目前加密的檔案。您可以在群組原則物件編輯器的 Compu-ter Configuration\Windows Settings\Security Settings\Public Key Policies\Encrypting File System 之下找到此原則。

如前所述,此值只應該在目前未使用 EFS 的電腦上啟用,才不會中斷已使用 EFS 之使用者的工作。因此,在我的範例中,停用 EFS 之群組原則物件 (GPO) 上的存取控制清單 (ACL) 只允許 "SG-ComputersNotUsingEFS" 群組套用群組原則。

加密或不加密

在判斷哪些系統目前正在使用 EFS,以及在尚未受管理部署的所有其他系統上停用 EFS 之後,下一步就是要決定哪些項目需要在受管理的部署中加密。視用戶端系統的管理方式而定,此程序可以很簡單,也可以很複雜。

在思考要加密哪些檔案時,首先要考慮的就是使用者是否為其系統上的系統管理員。如果使用者是本機系統管理員,您只能教導及鼓勵他們將機密資料加密,但無法真正控管。原因很簡單:本機系統管理員可以在檔案系統上的任何位置建立檔案和目錄。因此,雖然您可以加密一般位置,例如 [我的文件],但如果使用者在另一個位置建立新目錄,並在該處儲存機密資訊,則很難確定此資料是否也受到保護。當一般使用者並非本機系統管理員時,除了有安全性的優點之外,這也可以讓 EFS 更好管理,且更安全。

要牢記的下一個 EFS 要點是,它屬於個別使用者式的加密。換句話說,某位使用者加密的項目只能由同一位使用者解密,包括 SYSTEM 帳戶在內 (當然,資料修復代理或 DRA 例外)。這表示,如果可執行檔或 DLL 是以使用者的金鑰加密,而系統上的另一個主體嘗試存取它,則另一個主體將收到存取遭拒的錯誤。因此,一般而言,如果檔案或目錄包含可能需要由系統上之多個主體存取的可執行程式碼,您就不應該將檔案或目錄加密。Windows 會防止 %SystemRoot% 中的檔案或含有 SYSTEM 屬性的檔案被加密,但軟體廠商有時也會將 SYSTEM 帳戶可能執行之服務的二進位檔案安裝到 %ProgramFiles% 中。例如,膝上型電腦廠商在安裝要以服務執行的電源及裝置管理軟體時,就會使用這般方案。

基於這兩個事實,什麼才是 EFS 加密目標的最佳作法?答案在於使用者系統的設定方式。在具有標準化作業系統影像的妥善管理環境中,您可以根據影像中預定的資料儲存位置,讓使用者的加密程序自動化。例如,如果使用者只能將資料儲存在 %userprofile%\My Documents 中,則您只需要加密該目錄 (注意:如果您使用資料夾重新導向,加密 [我的文件] 時就要小心謹慎。如果 [我的文件] 重新導向至伺服器,則伺服器必須為 [受信任委派],且對該使用者的設定檔具有存取權。在這類情況下,通常只加密 [離線檔案] 快取會較容易,這點我們將在本專欄後面加以討論)。

在管理較為鬆懈的環境中 (使用者可寫入至檔案系統上的許多位置),建議您自動化少數共用儲存位置的加密,然後教育使用者如何自行加密其他位置。不論環境如何,都應該在目錄層級而非檔案層級進行加密。這麼做可確保在該目錄中建立的所有檔案 (包括暫存檔案) 一定會加密。

建議的加密位置

一般而言,您應該加密的位置為:%userprofile%\My Documents、%userprofile%\Application Data\Microsoft\Outlook (假設您使用 Microsoft Office Outlook® 做為傳訊用戶端) 和 %userprofile%\Desktop。加密 [我的文件] 可保護 Windows XP 中儲存檔案的預設位置。保護 Outlook 目錄可確保在本機快取的機密電子郵件也受到加密;這對於在 Outlook 2003 預設 [快取模式] 下執行的使用者特別重要。最後,桌面通常是做為一種暫存目錄,使用者可以在該處放置目前處理的文件或經常傳送的簡報。當然,您可能已在組織中修改其中一些目錄的預設位置,因此,EFS 加密選項應該反映您組織通常使用的位置。

除了這些一般最佳作法之外,您也應該判斷是否擁有可在替代位置儲存機密資訊的應用程式。例如,有些應用程式是在 %ProgramFiles%\AppName 中,而非使用者設定檔中儲存使用者資訊。判斷您的用戶端系統上是否擁有這類應用程式,以適當保護其利用的資料,這點很重要。在最好的狀況下,可設定應用程式將變更儲存在另一個使用者設定檔特定路徑 (例如 My Documents),如此便不需要其他 EFS 變更。在最壞的狀況下,亦即如果應用程式需要將資料儲存在其 Program Files 目錄中,則 EFS 可用來只加密 Program Files 中的特定子目錄。

最後,如果您打算將暫存目錄加密 (%TMP% 和 %TEMP%),請小心謹慎。許多應用程式安裝程式會使用此目錄來展開安裝套用內容,然後對展開的檔案執行檔案移動作業,將它們放在 %ProgramFiles% 的適當路徑上。因為相同磁碟區上的一個已移動檔案保留其原始屬性,所以該檔案在放到 %ProgramFiles% 之後會繼續加密。如果非執行安裝程式的使用者嘗試使用此檔案,他的存取會遭到拒絕。通常,這類問題無法在應用程式錯誤訊息中看出根本的導因。因此,我通常會建議只在管理完善 (亦即一般使用者不會自行安裝應用程式) 的環境中針對 %TMP% 進行加密。

保護離線檔案

離線檔案是 Windows 2000 及更新版本的一項功能,可讓使用者為儲存在檔案伺服器上的資料建立本機副本。然後,當伺服器中斷連線時,離線檔案可讓使用者處理此資料,並在下次連線時,將所做的變更與伺服器再度同步處理。不過,離線檔案不是包含伺服器檔案副本的簡單目錄。相反地,它是全系統共用的資料庫,且會以 SYSTEM 帳戶的內容執行。在 Windows XP 中,此資料庫可能會由 EFS 保護。根據先前的討論,EFS 應該是針對個別使用者。那麼使用者專屬的 EFS 又如何能夠將多個安全性主體所使用的資料庫加密?

當執行 Windows XP 的使用者在 Windows 檔案總管中選擇要將離線檔案加密的選項時,所利用的加密常式與用於使用者可起始的其他加密作業的常式不同。SYSTEM 帳戶不會利用使用者個人的 EFS 金鑰組 (這會防止 SYSTEM 存取檔案),而是自行產生金鑰組來搭配 EFS 使用,並使用該金鑰組來加密用戶端的快取。這有很大的安全隱憂,因為如果有人取得以 SYSTEM 執行程式碼的管道,他就可以在快取中將此資料解密。如果筆記型電腦遭竊,則攻擊者可輕而易舉重設系統管理員密碼,並以系統管理員身分登入。以系統管理員身分執行之後,同樣不費吹灰之力,即可強迫程式碼以 SYSTEM 執行,然後存取快取 (請注意,此行為在 Windows Vista™ 中已變更。Windows Vista 會使用個別使用者的金鑰,來加密使用者專屬的離線檔案)。

若要防止遭到此種類型的攻擊,筆記型電腦可設定為以這兩種方式之一離線儲存 Security Accounts Management (SAM) 資料庫的加密金鑰:在開機時儲存為密碼輸入 (模式 2),或是在開機過程中儲存到磁片上 (模式 3)。這兩種方式都很麻煩,因為在開機過程中,它們需要與電腦進行非自動互動,因而產生潛在的自動化系統管理問題。不過,如果電腦上要同時使用離線檔案與 EFS,則必須使用其中一個選項以保護快取中的資料。通常我會建議您使用開機密碼 (請參閱 [圖 1])。這是因為筆記型電腦提袋遭竊的使用者,很可能會將磁碟放在裡面,如果連同筆記型電腦一併被偷走,則磁碟更肯定也是放在一起。

Figure 1 Automate EFS operations

Figure 1** Automate EFS operations **

啟用 EFS

決定要在用戶端加密的項目之後,下一步是執行實際加密作業。此程序可透過登入指令碼或其他處理序達成,其中需要在用戶端執行指令碼來呼叫 cipher.exe,以執行加密作業。如果您的環境中已有獨立 EFS 使用者,如先前範例中所討論,我建議先進行移轉。

若要移轉這些獨立使用者,第一步是為用戶端系統提供受管理的憑證,如本專欄 2007 年 2 月份期刊中所討論 (microsoft.com/technet/technetmag/issues/2007/02/SecurityWatch)。當所有系統已註冊這些受管理的憑證之後,應該以 /U 參數執行 Cipher,用新的加密和修復代理金鑰來更新所有現有的檔案。此時,SG-ComputersUsingEFS 群組中的所有系統都應該以受管理方式利用 EFS,包括集中發行 (且可能已備份) 金鑰和集中管理修復代理。

若要為目前未使用 EFS 的使用者部署 EFS,您必須先移除群組原則,以防止 EFS 的使用。完成此動作且使用者已註冊受管理憑證之後,即可執行登錄指令碼來加密上述的金鑰路徑。以下是簡單的指令碼範例:

cipher /e /s /a "%userprofile%\My Documents"

cipher /e /s /a "%userprofile%\Application Data\Microsoft\Outlook"

cipher /e /s /a "%userprofile%\Desktop"

在所要的目錄上啟用 EFS 之後,建議您考慮設定其他兩個選項,以增加 EFS 部署的安全性,兩者都涉及從記憶體分頁到磁碟的資料。請注意,在每一個案例中,惡意的一方可能修復的資料量,僅限於合法使用期間有載入至記憶體中或已分頁至磁碟的資料。換句話說,如果使用者電腦上有由 EFS 保護的機密資料,但是尚未檢視 (因而尚未載入記憶體中),則上述攻擊方法對尚未檢視的資料不會造成危害。

Windows 會使用分頁檔案做為虛擬記憶體 (在其他作業系統中通常稱為交換空間),此分頁檔案包含記憶體內部資料的原始片段,且是以純文字寫入硬碟中。這會使 EFS 保護系統上的機密資料有危險,因為如果攻擊者可以修復分頁檔案,他們就有可能利用鑑識工具從這個檔案中擷取可用的資料。由於分頁檔案本身無法在 Windows XP 中加密 (請注意,在 Windows Vista 中可以加密),所以最佳選項是強迫 Windows 在關機時清除它。這可透過群組原則完成,如 [圖 2] 所示。

Figure 2 Setting group policy

Figure 2** Setting group policy **(按影像可放大)

此設定的缺點是會大幅增加關機時間,尤其是對於擁有大量記憶體的電腦 (根據預設,分頁檔案的大小與電腦上的實體記憶體數量有關)。這是因為若要清除分頁檔案,Windows 就必須在關機之前實際寫入磁碟上的每一頁。

當電腦管理模式設為啟用休眠時,Windows 的休眠檔案會包含電腦實體記憶體的傾出。休眠時,Windows 會將實體記憶體的完整內容寫入至磁碟的休眠檔案中,讓電腦能夠還原至使用者可繼續工作的狀態。和分頁檔案一樣,休眠檔案無法在 Windows XP 中加密。不過,和分頁檔案不同的是,休眠不能從 GPO 直接停用。相反地,您應該使用指令碼來呼叫具有 /HIBERNATE 參數的 powercfg.exe,以停用 (或重新啟用) 休眠。

完成初始加密及組態工作之後,您應該考慮全面清除一次部署中各磁碟的殘存空間。此程序可能耗時又麻煩,但在高安全性環境中則有提升安全性的優點。殘存空間是指目前作用中資料未使用到的磁碟空間,但由於硬碟的操作方式,有可能包含先前所使用檔案的機密資訊片段。換句話說,由於檔案刪除作業並不會實際覆寫檔案在磁碟上佔用的所有磁區 (它只會移除檔案資料表中的指標),因此已刪除的資料可能還存在於磁碟上。在這些情況下,可由鑑識工具修復此資料,該工具可讀取殘存空間並從中重新組合檔案。若要安全地清除此常駐資料,可使用 /W 參數執行 Cipher。這會強迫 Cipher 重複覆寫磁碟上所有標示為可用的磁區。只要機密資料上的所有未來檔案作業是發生在 EFS 保護目錄中,就不需要定期執行此命令。

針對 EFS 加強 Windows 檔案總管

根據預設,檔案和目錄的加密和解密選項會嵌入 Windows 檔案總管的進階內容功能表中。您可以選擇在 Windows 檔案總管內容功能表上放置 [加密] 和 [解密] 選項 (以滑鼠右鍵按一下來顯露),以提供一般使用者共便捷的 EFS 使用方式。另外,Windows 檔案總管可設定為以不同於其他檔案的顏色 (綠色) 來顯示 EFS 保護的檔案和目錄。這樣可幫助使用者知道檔案或目錄是否已加密,而不必向下鑽研進階內容功能表。最後,您可以新增選項來定義哪些使用者對檔案或目錄有存取權。若要啟用這些選項,請透過呼叫 reg.exe 的指令碼執行下列變更:



[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced]

"EncryptionContextMenu"=dword:00000001

"ShowCompColor"=dword:00000001

[HKEY_CLASSES_ROOT\*\Shell\Encrypt To User...\Command]  
@="rundll32 efsadu.dll,AddUserToObject %1"

Windows Vista 中的 EFS

EFS 在 Windows Vista 中獲得一些重要增強功能,使得部署、管理及增加其安全性更為容易。在這些增強功能當中,其中的主要項目之一,是可以在智慧卡上儲存 EFS 金鑰的支援。對於已利用智慧卡登入的組織而言,這是一項特別重要的功能,因為相同的智慧卡也可以用來儲存使用者的 EFS 金鑰。智慧卡的支援也涵蓋修復代理的憑證,亦即機密 DRA 憑證也可以儲存在智慧卡上。

先前在 Windows XP 中不可能或不容易完成的項目加密作業,如今在 Windows Vista 中可以支援。Windows Vista 可將分頁檔案加密,因此不再需要設定 [清除虛擬記憶體分頁檔] 選項。離線檔案的設計已在 Windows Vista 中完全更新。除了更好的效能和穩定性 (以及更友善的介面) 之外,現在用戶端的快取已採取個別使用者式,表示可以安全地加密快取而不必使用 SYSKEY 模式 2 或 3。這兩個增強功能解決了目前 Windows XP 架構環境的主要部署障礙。

最後,Windows Vista 可讓系統管理員直接透過群組原則來設定 [文件] 資料夾的加密,而不必利用個別指令碼。[圖 3] 說明可透過 Windows Vista 中的 GPO 使用的新 EFS 屬性。

Figure 3 EFS properties in Windows Vista

Figure 3** EFS properties in Windows Vista **(按影像可放大)

總結

EFS 提供 Windows 系統管理員一個保護行動資料的高度安全選項。EFS 除了可擴充和易於管理以外,還提供極具彈性的資料修復機制。Windows Vista 中的 EFS 更進一步增強了多項功能,包括更容易管理及部署,還有可以在智慧卡上儲存金鑰。對於想要更有效保護資料的組織 (即使電腦失竊),EFS 是一項功能強大的解決方案,且早已成為現有 Windows 平台的一部分。

何處取得詳細資訊

如需有關本專欄所討論主題的詳細資訊,請參閱下列資源:

John Morello 以最優異的成績畢業於 LSU,且已在 Microsoft 工作六年,擔任過各種角色。身為資深的顧問,他曾為美國財星前 100 大 (Fortune 100) 企業及民間和國防部門設計安全解決方案。他目前擔任 Windows Server 小組的專案經理,負責開發安全性和遠端存取技術。

© 2008 Microsoft Corporation and CMP Media, LLC. 保留所有權利;未經允許,嚴禁部分或全部複製.