部署 EFS:第 2 部分 John Morello
可以認為任何加密文件系統 (EFS) 部署實(shí)質(zhì)上都可以分為兩個(gè)部分:側重于證書(shū)管理和恢復代理的后端設計部分,以及面向用戶(hù)的 EFS 部署部分。上個(gè)月,我談完了后端部分,并且論述了數據和密鑰恢復選項
以及用于為客戶(hù)端置備證書(shū)的選項。在此,我將著(zhù)重談?wù)勛罱K用戶(hù)將會(huì )看到的那些部署方面,例如對 Windows? 資源管理器的增強、選擇哪些文件系統位置進(jìn)行加密以及如何使用組策略管理加密選項。
確定 EFS 是否已在使用
一旦您已決定部署 EFS,第一步就要確定 EFS 當前在貴組織內的使用狀態(tài)?;叵胍幌?,EFS 可在獨立模式下使用,在該模式下,最終用戶(hù)獨自負責創(chuàng )建和備份其加密密鑰。在貴組織中可能已有高級用戶(hù)以這種方式使用過(guò) EFS,所以,為了確保平穩過(guò)渡到管理更好的部署,確定這些用戶(hù)具體是哪些人非常重要。
任何給定用戶(hù)在計算機上首次運用 EFS 時(shí),Windows 均會(huì )在 HKEY_CURRENT_USER 中創(chuàng )建以下注冊表條目:
HKCU\Software\Microsoft\Windows NT\CurrentVersion\EFS\CurrentKeys\CertificateHash
可使用 Microsoft? Systems Management Server (SMS)、Active Directory 登錄腳本或其他工具檢查整個(gè)企業(yè)范圍的計算機上是否存在此條目。如果對于某位用戶(hù)存在此注冊表值,則表明該用戶(hù)曾在某時(shí)使用過(guò) EFS。然而,此值不一定表示某人當前正在使用 EFS 或是已對該人的任何數據進(jìn)行了加密。因此,在發(fā)現某計算機存在此注冊表項時(shí),應更仔細地對其進(jìn)行檢查以確定是否有任何文件當前已加密。
使用 cipher.exe 并傳遞 /U 和 /N 開(kāi)關(guān)將指示密碼器報告計算機上文件和目錄的加密狀態(tài)。例如,如果要確定系統上是否有任何數據已加密,可運行以下命令:
可將注冊表檢查和密碼器報告合并到一個(gè)腳本中,以檢查是否存在此注冊表值,如果存在,便在計算機上生成當前加密文件的報告。一旦生成這些報告,您就會(huì )知道哪些用戶(hù)有哪些文件進(jìn)行了加密,并且隨時(shí)可以將其遷移到集中管理的設計。
為了在部署期間控制組策略的應用程序,可在域中創(chuàng )建兩個(gè)安全組,將正在使用 EFS 的計算機與未在使用 EFS 的計算機分開(kāi),這樣做很有用。例如,“SG-ComputersUsingEFS”組將包含已在使用 EFS 的那些計算機的計算機帳戶(hù),而“SG-ComputersNotUsingEFS”組將包含其他所有當前未在使用 EFS 的計算機。
通過(guò)組策略控制 EFS 的使用
知道了何人正在使用 EFS、何人未在使用 EFS 后,客戶(hù)端部署的下一步就是禁止當前未在使用 EFS 的任何人獨立使用 EFS。這一步在部署過(guò)程中很重要,因為與遷移正在使用自簽名證書(shū)的用戶(hù)相比,首次正確地啟用和配置 EFS 要更加容易。只有在確定了哪些用戶(hù)已在使用 EFS 之后,才能執行這一步,因為通過(guò)組策略禁用 EFS 后,用戶(hù)將不能再訪(fǎng)問(wèn)任何當前加密的文件??稍诮M策略對象編輯器中的“計算機配置\Windows 設置\安全設置\公鑰策略\加密文件系統”下找到此策略。
如前所述,只應在當前未在使用 EFS 的計算機上啟用此值,以免干擾已在使用 EFS 的任何用戶(hù)的工作。因此,在我給出的示例中,禁用了 EFS 的組策略對象 (GPO) 上的訪(fǎng)問(wèn)控制列表 (ACL) 只允許“SG-ComputersNotUsingEFS”組應用組策略。
加密還是不加密
確定了哪些系統當前正在使用 EFS 并在您管理的部署之前在其他所有計算機都禁用了 EFS 后,下一步就要確定將要在該被管部署中對哪些項進(jìn)行加密。根據客戶(hù)端系統的管理方式,此過(guò)程可能很簡(jiǎn)單,也可能相當復雜。
在考慮要對哪些文件進(jìn)行加密時(shí),首先要考慮用戶(hù)在他們的系統上是否為管理員。如果用戶(hù)是本地管理員,您其實(shí)只能指導并鼓勵他們加密敏感數據,但不能以管理的方式真正對其進(jìn)行控制。其原因很簡(jiǎn)單:本地管理員可在文件系統的任意位置創(chuàng )建文件和目錄。因此,盡管您可以對諸如 My Documents 之類(lèi)的公共位置進(jìn)行加密,但如果用戶(hù)在另一位置創(chuàng )建新的目錄并將敏感信息保存在該處,便很難確保此數據也受到保護。當最終用戶(hù)不是本地管理員時(shí),除了其他所有的安全受益之外,還會(huì )使得 EFS 更加易于管理和安全。
關(guān)于 EFS 需要記住的下一條關(guān)鍵信息是,它是按用戶(hù)加密的。換句話(huà)說(shuō),由給定用戶(hù)加密的任何項只能由同一用戶(hù)進(jìn)行解密,而其他用戶(hù)都做不到,包括 SYSTEM 帳戶(hù)(當然也有例外,那就是數據恢復代理,亦稱(chēng) DRA)。這意味著(zhù),如果使用某位用戶(hù)的密鑰對某個(gè)可執行文件或 DLL 進(jìn)行了加密,而系統上的另一位主體嘗試對其訪(fǎng)問(wèn),則該主體會(huì )收到拒絕訪(fǎng)問(wèn)錯誤。因此,如果文件或目錄包含系統上多個(gè)主體可能需要訪(fǎng)問(wèn)的可執行代碼,一般不應對其進(jìn)行加密。Windows 將阻止對 %SystemRoot% 中的文件或具有 SYSTEM 屬性的文件進(jìn)行加密,但軟件供應商為 SYSTEM 帳戶(hù)可能運行的服務(wù)將二進(jìn)制文件安裝到 %ProgramFiles% 中的情況也并不罕見(jiàn)。例如,便攜機供應商在安裝作為服務(wù)運行的電源和設備管理軟件時(shí),就常常會(huì )這樣做。
考慮到這兩個(gè)事實(shí),那么實(shí)現 EFS 加密目標的最佳實(shí)踐是什么呢?答案要回到正常情況下是如何對用戶(hù)的系統進(jìn)行配置的。在具有標準化操作系統映像的管理完善的環(huán)境中,您很可能會(huì )基于映像中預定的數據存儲位置自動(dòng)為用戶(hù)執行加密過(guò)程。例如,如果用戶(hù)只能在 %userprofile%\My Documents 中保存數據,您可能僅需加密該目錄。(注意:如果使用文件夾重定向,則在加密 My Documents 時(shí)要小心。如果將 My Documents 重定向到某個(gè)服務(wù)器,該服務(wù)器需為“已為委派信任”并且具有訪(fǎng)問(wèn)用戶(hù)配置文件的權限。在這種情況下,只對“脫機文件”緩存加密通常更加容易,我們以后將在本專(zhuān)欄對此進(jìn)行討論。)
在管理較差的環(huán)境中(用戶(hù)可能在文件系統上寫(xiě)入許多位置),不妨采取這樣的做法,先對少數幾個(gè)公共存儲位置自動(dòng)進(jìn)行加密,然后教會(huì )用戶(hù)如何自行加密其他位置。無(wú)論環(huán)境如何,都務(wù)必要在目錄級而不是文件級進(jìn)行加密。這樣做可確保該目錄中創(chuàng )建的所有文件(包括臨時(shí)文件)始終都會(huì )被加密。
推薦的加密位置
一般而言,通常應對這些位置進(jìn)行加密:%userprofile%\My Documents、%userprofile%\Application Data\Microsoft\Outlook(假定您使用 Microsoft Office Outlook? 作為消息傳送客戶(hù)端)和 %userprofile%\Desktop。對 My Documents 加密會(huì )保護 Windows XP 中保存文件的默認位置。保護 Outlook 目錄可確保本地緩存的敏感電子郵件也會(huì )被加密;這對于在 Outlook 2003 默認的“緩存模式”下運行的用戶(hù)尤為重要。最后,桌面常被用作某種臨時(shí)目錄,用戶(hù)可能會(huì )在此放置他們當前處理的文檔或頻繁講述的演示文稿。當然,在貴組織中,您可能已修改了其中某些目錄的默認位置,因此,無(wú)論在貴組織中通常都使用什么位置,在您做出 EFS 加密選擇時(shí)都應將其反映出來(lái)。
除了這些一般性的最佳實(shí)踐外,還應確定是否有應用程序可能在備選位置保存敏感信息。例如,一些應用程序會(huì )在 %ProgramFiles%\AppName 中而不是在用戶(hù)的配置文件中保存用戶(hù)信息。確定您的客戶(hù)端系統上是否存在這樣的應用程序很重要,這樣才能正確地保護它們所利用的一切數據。在最好的情況下,可將應用程序配置成在另一個(gè)用戶(hù)配置文件特定的路徑中保存更改(例如 My Documents),此時(shí),無(wú)需再進(jìn)一步做任何 EFS 更改。在最壞的情況下,如果應用程序要求將數據存儲在它的 Program Files 目錄中,可使用 EFS 僅對 Program Files 的那個(gè)特定子目錄進(jìn)行加密。
最后,如果您打算加密臨時(shí)目錄(%TMP% 和 %TEMP%),請小心從事。許多應用程序安裝程序都使用此目錄來(lái)展開(kāi)安裝軟件包的內容,然后對展開(kāi)的文件執行文件移動(dòng)操作,以便將它們放置到 %ProgramFiles% 中的適當路徑中。由于在同一個(gè)卷上移動(dòng)的文件會(huì )保留其原始屬性,所以在將該文件放置到 %ProgramFiles% 中之后,它將繼續被加密。如果嘗試使用此文件的用戶(hù)不是運行安裝程序的那位用戶(hù),則會(huì )拒絕該用戶(hù)對其進(jìn)行訪(fǎng)問(wèn)。通常,此類(lèi)問(wèn)題不會(huì )以明確的應用程序錯誤消息表明自身的根本原因。因此,我一般建議僅在管理完善的環(huán)境下(最終用戶(hù)不自行安裝應用程序)才對 %TMP% 加密。
保護脫機文件
“脫機文件”是 Windows 2000 及更高版本中的一個(gè)功能,借此用戶(hù)可以為文件服務(wù)器上存儲的數據建立本地副本。然后,利用“脫機文件”,用戶(hù)可在與服務(wù)器斷開(kāi)連接的情況下處理此數據,并在下次連接后通過(guò)同步操作將更改返回給服務(wù)器。然而,“脫機文件”并不只是一個(gè)包含服務(wù)器中文件副本的簡(jiǎn)單目錄。相反,它是一個(gè)在系統范圍內共享并在 SYSTEM 帳戶(hù)的環(huán)境中運行的數據庫。在 Windows XP 中,可使用 EFS 保護此數據庫。根據前面對 EFS 按用戶(hù)加密的討論,想一想這意味著(zhù)什么。特定于用戶(hù)的 EFS 怎么能對多個(gè)安全主體使用的數據庫進(jìn)行加密呢?
當運行 Windows XP 的用戶(hù)在 Windows 資源管理器中選擇加密脫機文件的選項時(shí),所利用的加密例程與該用戶(hù)可能啟動(dòng)的其他加密操作所使用的例程是不同的。不是利用用戶(hù)個(gè)人的 EFS 密鑰對來(lái)執行該過(guò)程(這會(huì )阻止 SYSTEM 訪(fǎng)問(wèn)這些文件),而是由 SYSTEM 帳戶(hù)自己生成用于 EFS 的密鑰對,并使用該密鑰對加密客戶(hù)端緩存。這就產(chǎn)生了一個(gè)非常嚴重的安全隱患,如果有人隨后得到代碼以 SYSTEM 身份執行,他便可以解密緩存中的數據。如果某臺便攜機被盜,攻擊者輕而易舉就可以重置管理員密碼并以管理員身份登錄。一旦以管理員身份運行,強制代碼以 SYSTEM 身份運行然后訪(fǎng)問(wèn)緩存,也同樣簡(jiǎn)單。(請注意,這種行為在 Windows Vista? 中有所改變。Windows Vista 現在使用單個(gè)用戶(hù)的密鑰來(lái)加密用戶(hù)特定的脫機文件。)
為防止此類(lèi)攻擊,可將便攜機配置成脫機存儲安全帳戶(hù)管理 (SAM) 數據庫的加密密鑰,既可在引導時(shí)將其作為密碼輸入(模式 2),亦可在引導過(guò)程中使用軟盤(pán)(模式 3)。兩種方法可能都不令人滿(mǎn)意,因為它們需要在引導過(guò)程中與計算機進(jìn)行不可自動(dòng)化的交互,從而造成系統自動(dòng)化管理方面的潛在問(wèn)題。然而,如果要在具有脫機文件的計算機上使用 EFS,使用這些選項之一保護緩存中的數據至關(guān)重要。通常,我建議使用引導時(shí)密碼(請參見(jiàn)圖 1)。原因是,如果某位用戶(hù)的便攜機包被盜,那么極有可能軟盤(pán)已插在便攜機中,即便不是如此,軟盤(pán)也幾乎肯定會(huì )和便攜機一起放在包中。
Figure 1 Automate EFS operations
啟用 EFS
確定了要在您的客戶(hù)端上對什么進(jìn)行加密后,下一步就要執行實(shí)際的加密操作了??赏ㄟ^(guò)登錄腳本或其他進(jìn)程完成此過(guò)程,它們將在客戶(hù)端上執行某個(gè)腳本以調用 cipher.exe 來(lái)執行加密操作。如在前面的示例中所討論的,如果在您的環(huán)境中存在獨立的 EFS 用戶(hù),建議首先遷移這些用戶(hù)。
如在本專(zhuān)欄 2007 年 2 月的分期連載中所討論的 (microsoft.com/technet/technetmag/issues/2007/02/SecurityWatch),要遷移這些獨立用戶(hù),第一步就要為客戶(hù)端系統置備被管證書(shū)。在所有系統都為這些被管證書(shū)登記注冊后,就應使用 /U 開(kāi)關(guān)運行密碼器,以新的加密和恢復代理密鑰更新所有現有文件。此時(shí),SG-ComputersUsingEFS 組中的所有系統都會(huì )以管理的方式利用 EFS,包括集中頒發(fā)(并且可能已存檔)的密鑰以及集中管理的恢復代理。
要為當前沒(méi)有使用 EFS 的用戶(hù)部署 EFS,必須首先刪除阻止使用 EFS 的組策略。在完成該操作并且用戶(hù)為被管證書(shū)登記注冊后,便可運行登錄腳本來(lái)加密先前討論的密鑰路徑。以下是一個(gè)簡(jiǎn)化的腳本示例:
cipher /e /s /a "%userprofile%\My Documents"cipher /e /s /a "%userprofile%\Application Data\Microsoft\Outlook"cipher /e /s /a "%userprofile%\Desktop"
在所需目錄上啟用 EFS 后,應考慮設置另外兩個(gè)選項來(lái)提高 EFS 部署的安全性,這兩個(gè)選項都與從內存中頁(yè)式調度到磁盤(pán)的數據有關(guān)。請注意,對于其中每一種方案,惡意方可能恢復的數據量都僅限于在合法使用期間加載到內存中或頁(yè)式調度到磁盤(pán)上的數據量。換句話(huà)說(shuō),如果用戶(hù)的機器上有受 EFS 保護的敏感數據且用戶(hù)未曾查看過(guò)這些數據(因而未加載到內存中),則此數據便不會(huì )受到這些攻擊病媒的威脅。
頁(yè)面文件被 Windows 用作虛擬內存(在其他操作系統中常稱(chēng)作交換空間),其中包含內存中以明文寫(xiě)入硬盤(pán)的原始數據片段。這會(huì )將受 EFS 保護的系統上的敏感數據置于危險境地,因為如果攻擊者能夠恢復頁(yè)面文件,他們就有可能利用辨析工具從此文件中提取合用的數據。由于在 Windows XP 中無(wú)法對頁(yè)面文件本身進(jìn)行加密(請注意,在 Windows Vista 中可以對其加密),所以最佳選擇就是強制 Windows 在關(guān)閉時(shí)將其清除。這可以通過(guò)組策略來(lái)實(shí)現,如圖 2 所示。
Figure 2 Setting group policy (單擊該圖像獲得較大視圖)
此設置的缺點(diǎn)是大大增加了關(guān)機所需的時(shí)間,尤其是對于具有大量?jì)却娴臋C器。(默認情況下,頁(yè)面文件的大小與計算機中的物理內存量直接相關(guān)。)這是因為 Windows 必須在關(guān)閉前在磁盤(pán)上物理寫(xiě)入每一頁(yè),方可清除頁(yè)面文件。
當電源管理模式設置為啟用休眠時(shí),Windows 中的休眠文件包含機器物理內存的轉儲。休眠發(fā)生時(shí),Windows 會(huì )將物理內存的完整內容寫(xiě)入磁盤(pán)中的休眠文件,從而當用戶(hù)準備要繼續工作時(shí),可將計算機還原到與休眠前完全相同的狀態(tài)。與頁(yè)面文件一樣,在 Windows XP 中也無(wú)法對休眠文件進(jìn)行加密。然而,與頁(yè)面文件不同的是,不能直接通過(guò) GPO 禁用休眠。而是應該使用腳本調用帶有 /HIBERNATE 開(kāi)關(guān)的 powercfg.exe 來(lái)禁用(或重新啟用)休眠。
完成初始加密和配置任務(wù)后,在部署中應考慮擦除磁盤(pán)上的閑散空間。此過(guò)程可能非常耗時(shí)且具有破壞性,但在高安全性環(huán)境中具有安全上的好處。閑散空間是一個(gè)磁盤(pán)區域,其中雖未存放系統上當前活動(dòng)的數據,但由于硬盤(pán)的操作方式,其中可能包含先前使用過(guò)的文件中的敏感信息片段。換句話(huà)說(shuō),由于文件刪除操作實(shí)際上并不覆寫(xiě)文件在磁盤(pán)上占據的所有扇區(僅會(huì )從文件表中刪除相應的指針),所以被刪除的數據可能繼續存在于磁盤(pán)上。在這種情況下,便可能通過(guò)可以讀取此閑散空間并從中重新組裝文件的辨析工具來(lái)恢復該數據。要安全地擦除這些殘留數據,請運行帶有 /W 開(kāi)關(guān)的密碼器。這樣可以強制密碼器反復覆寫(xiě)磁盤(pán)上標記為可用的所有扇區。只要將來(lái)針對敏感數據的所有文件操作都在受 EFS 保護的目錄中進(jìn)行,便無(wú)需定期運行此命令。
為 EFS 增強 Windows 資源管理器
默認情況下,文件和目錄的加密和解密選項興許埋藏在 Windows 資源管理器的高級屬性菜單中??梢赃x擇通過(guò)將“加密”和“解密”置于 Windows 資源管理器的上下文菜單(右鍵單擊時(shí)出現)來(lái)增強對 EFS 的最終用戶(hù)體驗。此外,還可對 Windows 資源管理器進(jìn)行配置,使其以與其他文件不同的顏色(綠色)顯示受 EFS 保護的文件和目錄。這可能對用戶(hù)很有幫助,他們不必深入到高級屬性菜單中即可知道某個(gè)文件或目錄是否已加密。最后,您可能想要添加一個(gè)選項來(lái)定義哪些用戶(hù)有權訪(fǎng)問(wèn)該文件或目錄。要啟用這些選項,請通過(guò)調用 reg.exe 的腳本在注冊表中進(jìn)行以下更改:
[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
在 Windows Vista 中對 EFS 進(jìn)行了許多重要的增強,這使其變得更加易于部署和管理,同時(shí)也增加了安全性。這些增強中最主要的就是完全支持在智能卡上存儲 EFS 密鑰。對于已在利用智能卡登錄的組織來(lái)說(shuō),此功能尤其有價(jià)值,因為也能使用同一個(gè)卡來(lái)存儲用戶(hù)的 EFS 密鑰。對智能卡的這一支持也擴展到了恢復代理證書(shū),這樣就可以將敏感的 DRA 證書(shū)也存儲在卡上。
Windows Vista 還支持對以前在 Windows XP 中不可能或不易做到的項進(jìn)行加密。Windows Vista 可以加密頁(yè)面文件,無(wú)需再設置“清理虛擬內存頁(yè)面文件”選項。在 Windows Vista 中,對脫機文件的整個(gè)設計進(jìn)行了重新整改。除大大提高了性能和穩定性(以及界面通常對用戶(hù)更加友好)以外,客戶(hù)端緩存現在是按用戶(hù)進(jìn)行的,也就是說(shuō)可在不使用 SYSKEY 模式 2 或 3 的情況下安全地加密緩存。這兩項改進(jìn)消除了現今基于 Windows XP 的環(huán)境所存在的主要部署障礙。
最后,在 Windows Vista 中,管理員不必利用單獨的腳本即可通過(guò)組策略直接配置 Documents 文件夾的加密。圖 3 說(shuō)明了 Windows Vista 中通過(guò) GPO 提供的新 EFS 屬性。
Figure 3 EFS properties in Windows Vista (單擊該圖像獲得較大視圖)
總結
EFS 為 Windows 管理員提供了一個(gè)用于保護移動(dòng)數據的高度安全的選項。EFS 可伸縮且易于管理,并且提供了靈活的數據恢復機制。在 Windows Vista 中進(jìn)一步對 EFS 進(jìn)行了改進(jìn),使其功能得到了增強,不僅更加易于管理和部署,而且支持基于智能卡的密鑰存儲。對于要保護數據的組織來(lái)說(shuō),即使對于計算機真正丟失的情況,EFS 也提供了一個(gè)強大的解決方案,它已成為您現有 Windows 平臺的一個(gè)組成部分。