加密檔案系統

加密檔案系統(英語:Encrypting File System,縮寫EFS)是微軟WindowsNTFS[1]3.0中引入的一個功能,它提供檔案系統級加密英語Filesystem-level encryption。此技術使檔案支援透明英語Transparency (human–computer interaction)加密以保護機密數據免受具有物理訪問權限的攻擊者侵害。

EFS從Windows 2000起在所有為商業環境開發的Windows版本中可用(見下方的「支援的作業系統」一節)。[2]預設情況下,不會有檔案被加密,但用戶可以選擇加密各檔案、各資料夾和各驅動器。有些EFS設置可通過Windows域英語Windows domain環境中的組策略強制執行。[3]

其他作業系統也有提供的加密的檔案系統,但微軟EFS與它們不相容。[4]另見加密檔案系統列表英語List of cryptographic file systems

基本想法

編輯

很長一段時間以來,作業系統執行在一個沒有檔案加密的系統上,訪問檔案不得不只通過作業系統控制的用戶身份驗證訪問控制列表。如果攻擊者取得了電腦的物理訪問權,那麼這些障礙都可以被輕易繞過。方法之一就是移除磁碟並將其放在另一個電腦中,用它的作業系統讀取讀取檔案系統,或者從一個可引導光碟重新啟動電腦來讀取檔案系統。

最廣泛的可接受方案是將檔案加密儲存在物理媒介上(磁碟、USB驅動器、磁帶、光碟等)。

在微軟Windows作業系統家族中,EFS可完成這項舉措,儘管只能在NTFS驅動器上。它使用公鑰加密演算法對稱金鑰加密的組合保證沒有正確的金鑰將極難解密檔案。

但是,EFS的加密金鑰在實踐中使用用戶帳戶的密碼保護,並因此容易受到大多數密碼攻擊。

操作

編輯
 
EFS(加密檔案系統)的操作

EFS使用對稱金鑰加密檔案,這被稱為檔案加密金鑰(File Encryption Key),簡稱FEK。使用對稱加密演算法是因為加密和解密大量數據時這比使用非對稱金鑰密碼本消耗更少的時間。在不同的作業系統版本和組態上將使用不同的對稱加密演算法,見下面的Algorithms used by Windows version。FEK(用來加密檔案的對稱金鑰)然後會使用一個與加密檔案的用戶相關聯的公鑰加密,加密的FEK將被儲存在加密檔案的$EFS可選數據流。[5]要解密該檔案,EFS組件驅動程式使用匹配EFS數碼證書(用於加密檔案)的私鑰解密儲存在$EFS流中的對稱金鑰。EFS組件驅動程式然後使用對稱金鑰來解密該檔案。因為加密和解密操作在NTFS底層執行,因此它對用戶及所有應用程式是透明的。

內容要被加密的資料夾會被檔案系統標記為「加密」屬性。EFS組件驅動程式會檢查此「加密」屬性,這類似NTFS中檔案權限的繼承:如果一個資料夾標記為加密,在裏面建立檔案和子資料夾就預設會被加密。在加密檔案移動到一個NTFS卷時,檔案會繼續保持加密。但是,在許多情況下,Windows可能不需詢問用戶就解密檔案。

被複製到另一種檔案系統(如FAT32)的檔案和資料夾會被解密。最後,加密的檔案使用SMB/CIFS協定通過網絡複製時,檔案在傳送到網絡前會被解密。

避免「複製時解密」的最有效方法是使用支援「原始數據」API的備份軟件。使用Raw API頁面存檔備份,存於互聯網檔案館)的備份軟件會直接複製已加密檔案的流和$EFS備用數據流為單個檔案。換句話說,這些檔案以加密形式被「複製」,備份過程中不牽扯解密。

Windows Vista開始,用戶的私鑰可以儲存在智能卡上;數據恢復代理(DRA)金鑰也可以儲存在智能卡上。[6]

安全性

編輯

漏洞

編輯

在Windows 2000的EFS中存在兩個重大安全漏洞。在那之後有遭遇不同程度的各種攻擊。

使用本地的Administrator帳戶解密檔案

編輯

在Windows 2000中,本地的administrator是預設的「數據恢復代理」,它可以解密任何本地用戶用EFS加密的所有檔案。在Windows 2000中的EFS在沒有「恢復代理」時不能正常運作,所以始終有一個人可以解密用戶已加密的檔案。任何未加入域的Windows 2000電腦將容易受到未授權的EFS解密,任何能取得本地Administrator帳戶權限的人都可以做到,而互聯網上有許多工具可以做到這點。[7]

在Windows XP及之後的版本中已經沒有預設的「數據恢復代理」並且不再強制需要它。設置SYSKEY英語SYSKEY為模式2或3(在啟動時鍵入syskey或插入相應軟碟)將緩解未經授權的通過本地Administrator帳戶解密的風險。這是因為本地用戶密碼進行了雜湊處理,儲存在SAM檔案中,並使用Syskey加密,而且Syskey的值對於無法接觸Syskey口令/軟碟的離線攻擊者不可用。

通過密碼重設訪問私鑰

編輯

在Windows 2000中,用戶的RSA私鑰只儲存在「真正」的加密形式中,但用戶的RSA私鑰備份存在更脆弱的保護。如果攻擊者能物理訪問Windows 2000電腦並重設本地帳戶的密碼[7],攻擊者可以登入為該用戶(或恢復代理)並獲得可解密所有檔案的RSA私鑰的權限。這是因為RSA私鑰使用一個LSA私鑰加密,而可提升登入到LocalSystem的攻擊者可以訪問它,取得相關工具並不困難。

在Windows XP及之後版本,用戶的RSA私鑰使用一個離線公鑰來備份,與該公鑰對應的私鑰儲存在下列位置之一:密碼重設磁碟(如果該Windows XP不是一個域成員),活動目錄(如果該Windows XP是一個域的成員)。這意味着可以通過Windows XP本地系統身份驗證的攻擊者仍無法訪問儲存在PC硬碟上的解密金鑰。

在Windows 2000、XP或更新版本中,用戶的RSA私鑰使用用戶的NTLM密碼雜湊加用戶名雜湊來加密——加鹽的雜湊使得在未獲知用戶密碼的情況下,很難逆轉此過程並得出用戶的私鑰。同樣,將系統模式設置為模式2或模式3(在啟動時鍵入或通過軟碟提供系統金鑰)將緩解此攻擊,因為本地用戶的密碼雜湊儲存在SAM檔案中。

其他問題

編輯

一旦用戶已成功登入,訪問他的EFS加密檔案的請求都不會要求身份驗證,解密會靜默、透明完成。因此,任何被攻破的用戶密碼都將自動允許訪問數據。Windows可以使用可逆加密儲存用戶帳戶密碼,不過這已不是預設情況;它還可以組態為儲存本地用戶帳戶密碼的Lan管理器雜湊,並且這在Windows XP和更早版本的原版中是預設行為,這可以被攻擊和更容易攻破。它還儲存本地用戶帳戶密碼的NTLM英語NTLM雜湊,如果密碼較弱,這可能使用「彩虹表」輕易攻破(Windows Vista和之後版本預設不允許弱密碼)。為了避免本地密碼遭受暴力破解,舊版本的Windows應該組態為永不儲存LM雜湊(在組策略的安全設置部分),當然,更不能啟用自動登入(那會在登錄檔中儲存明文密碼)。此外,使用超過14個字元的本地用戶帳戶密碼可避免Windows在SAM中儲存LM雜湊——以及加強對NTLM雜湊的暴力攻擊的抵抗性。

當使用EFS加密檔案時,即將明文檔案轉換為加密檔案時,明文檔案並不會被擦除,而只是被標記為已刪除(即在檔案系統中標記為「未使用」數據)。這意味着,除非它恰好儲存在一個支援TRIMSSD上,從而(或者因其他設定)被儘快覆蓋,否則會容易找回它們。為充分減少對EFS這個已知的、非技術性的問題,你應該在資料夾級別組態加密(以便使在這些資料夾中建立檔案時即被加密,而不是被移動和留下一份明文檔案的殘留)。當想要加密單個檔案時,加其複製到一個加密的資料夾或者加密的檔案中,然後有效地擦除原儲存卷。用戶可以使用Windows Cipher實用工具(配以/W選項)或其他工具來有效擦除磁碟上的可用空間。

任何可以取得管理員權限的人都可以覆蓋、更改Data Recovery Agent的組態。這是一個非常嚴重的問題,因為攻擊者可能侵入管理員帳戶並將精心設計的任何DRA證書設置為數據恢復代理,並等待。這有時被稱為雙階段攻擊(two-stage attack),其與PC遺失或被盜的風險顯著不同,更突出內部的惡意人士所產生的風險。

當用戶在這種攻擊的第一階段後對檔案加密時,將自動使用指定的DRA公鑰加密FEK。攻擊者只需要以管理員身份訪問此電腦,就能對隨後使用EFS加密的檔案進行完全訪問。即使已使用Syskey模式2或模式3,也並不能防止這種攻擊,因為攻擊者可以將加密檔案離線備份並還原到其他地方,然後使用DRA的私鑰解密檔案。當然,如果有惡意人員可以物理訪問電腦,那麼您也可以考慮所有的安全功能都將失效,因為他們也可以在電腦上安裝Rootkit、特殊軟件,或者硬件鍵盤記錄器等。在惡意攻擊中,這可能比覆蓋DRA策略更為有效和全面。

恢復

編輯

使用EFS加密的檔案只能使用匹配之前所用公鑰的RSA私鑰解密。用戶的私鑰副本本質上是使用用戶的登入密碼保護。從Windows外的其他作業系統(比如Linux)訪問加密的檔案是不可能的——不只是因為目前沒有第三方的EFS組件驅動程式。此外,使用特殊工具重設用戶的登入密碼以解密用戶的私鑰和訪問用戶的加密檔案也是不可能的。這也意味着用戶有可能導致數據遺失,如果用戶忘記了自己的密碼並且沒有備份加密金鑰。這成就了一個術語——「延遲的資源回收筒」,它表示沒有經驗的用戶使用此功能加密檔案似乎會不可避免的在未來遇到數據遺失。

如果EFS組態為使用一個公鑰基礎設施簽發的金鑰,並且PKI組態為啟用「金鑰存檔和恢復」,可以先恢復私鑰檔案,然後恢復加密檔案。

金鑰

編輯
  • 用戶密碼(或智能卡私鑰):用於生成解密金鑰以解密用戶的DPAPI主金鑰
  • DPAPI主金鑰:用於解密用戶的RSA私鑰
  • RSA私鑰:用於解密每個檔案的FEK
  • 檔案加密金鑰(FEK):用於解密/加密每個檔案的數據(NTFS主要流)
  • SYSKEY:用於加密快取的域驗證和儲存在SAM中的密碼雜湊值
  • 搜尋加密檔案位置(C:表示硬碟代號,變更代號可搜尋其他硬碟)

 請在Windows PowerShell 下執行指令

  get-childitem C:\ -Recurse -Force -ErrorAction SilentlyContinue | where-object {$_.Attributes -ge "Encrypted"} | format-list fullname, attributes

支援的作業系統

編輯

Windows

編輯

其他作業系統

編輯

沒有其他作業系統或檔案系統原生支援EFS。

各Windows版本可用的新功能

編輯
Windows XP
  • 客戶端側快取(離線檔案英語Offline Files資料庫)加密
  • 使用廣域公鑰保護DPAPI主金鑰備份
  • 自動註冊用戶證書(包括EFS證書)
  • 多用戶(共用)訪問加密檔案(在檔案的基礎上),在共用加密檔案時檢查證書吊銷
  • 加密檔案可以用另一種顏色顯示(預設綠色)
  • 不再需要強制性的「恢復代理」
  • 檔案移動到不支援的檔案系統而可能靜默解密時警告
  • 密碼重設盤
  • EFS通過WebDAV,遠端加密Active Directory委派的伺服器
Windows XP SP1
  • 支援並預設對所有EFS加密的檔案使用AES-256對稱加密演算法
Windows XP SP2 + KB 912761頁面存檔備份,存於互聯網檔案館
  • 防止註冊自簽章的EFS證書
Windows Server 2003
  • 數碼身份管理服務
  • 強制執行RSA金鑰最小長度設置,對於註冊自簽章EFS證書
Windows Vista[9]和Windows Server 2008[10][11]
  • 客戶端側快取(離線檔案)分用戶加密
  • 支援在一個PC/SC智能卡上儲存用戶或DRA(數據恢復)RSA私鑰
  • EFS金鑰更新精靈
  • EFS金鑰備份提示
  • 支援從PC/SC智能卡衍生DPAPI主金鑰
  • 支援加密pagefile.sys
  • 使用BitLocker(Windows Vista企業版或旗艦版提供)保護EFS相關的私密資訊[12][13]
  • 組策略控制強制執行:
    • 「文件」資料夾的加密
    • 離線檔案加密
    • 加密檔案的索引
    • 使用EFS需要智能卡
    • 從智能卡建立一個可快取的用戶金鑰
    • 用戶金鑰建立時顯示金鑰備份通知
    • 指定自動註冊EFS證書時使用的證書模板
Windows Server 2008[11]
  • 在Windows Server 2008伺服器上註冊的EFS自簽章證書將預設使用2048位元RSA金鑰長度
  • 所有EFS模板(用戶和恢復代理證書)預設使用2048位元RSA金鑰長度
Windows 7和Windows Server 2008 R2[14]
  • 橢圓曲線密碼學(ECC)。Windows 7支援ECC和RSA演算法的混合操作模式保證向下相容
  • EFS自簽章證書在使用ECC時將預設使用256位金鑰。
  • EFS在使用自簽章RSA證書時可以組態為使用1K/2k/4k/8k/16k位金鑰,使用ECC證書時可以使用256/384/512位元金鑰。

各Windows版本使用的演算法

編輯

Windows EFS支援一系列對稱加密演算法,加密檔案時使用的演算法取決於Windows版本:

作業系統 預設演算法 其他演算法
Windows 2000 DESX英語DESX (無)
Windows XP RTM DESX 三重DES
Windows XP SP1 AES Triple DES、DESX
Windows Server 2003 AES Triple DES、DESX[15]
Windows Vista AES Triple DES、DESX
Windows Server 2008 AES Triple DES、DESX (?)
Windows 7

Windows Server 2008 R2

混合(AES、SHA和ECC) Triple DES、DESX

參見

編輯

參考資料

編輯
  1. ^ File Encryption (Windows). Microsoft. [2010-01-11]. (原始內容存檔於2009-12-27). 
  2. ^ EFS is available on Windows 2000 Server and Workstation, on Windows XP Professional, on Windows Server 2003 and 2008, and on Windows Vista and Windows 7 Business, Enterprise and Ultimate.
  3. ^ Encrypting File System. Microsoft. 2008-05-01 [2011-08-24]. (原始內容存檔於2016-08-15). 
  4. ^ Cryptographic Filesystems, Part One: Design and Implementation. Security Focus. [2010-01-11]. (原始內容存檔於2008-07-25). 
  5. ^ Encrypting File System. [2017-04-01]. (原始內容存檔於2017-09-07). 
  6. ^ Chris Corio. First Look: New Security Features in Windows Vista. TechNet Magazine. Microsoft. 2006-05 [2006-11-06]. (原始內容存檔於2006-11-10). 
  7. ^ 7.0 7.1 ntpasswd, available since 1997. [2017-04-01]. (原始內容存檔於2016-02-12).  參照錯誤:帶有name屬性「ntpasswd」的<ref>標籤用不同內容定義了多次
  8. ^ Microsoft website.. [2017-04-01]. (原始內容存檔於2007-02-03). 
  9. ^ Kim Mikkelsen. Windows Vista Session 31: Rights Management Services and Encrypting File System (PDF). presentation. Microsoft. 2006-09-05 [2007-10-02]. [永久失效連結]
  10. ^ Encrypting File System. documentation. Microsoft. 2007-04-30 [2007-11-06]. (原始內容存檔於2014-01-20). 
  11. ^ 11.0 11.1 Changes in Functionality from Windows Server 2003 with SP1 to Windows Server 2008: Encrypting File System. documentation. Microsoft. 2007-09-01 [2007-11-06]. (原始內容存檔於2008-03-25). 
  12. ^ Scott Field. Microsoft Windows Vista Security Enhancements (DOC). whitepaper. Microsoft. 2006-06 [2007-06-14]. (原始內容存檔於2011-06-04). 
  13. ^ Microsoft Corporation. Data Communication Protocol. patent. Microsoft. 2006-11-30 [2007-06-14]. (原始內容存檔於2007-09-29). 
  14. ^ Changes in EFS. Microsoft TechNet. [2009-05-02]. (原始內容存檔於2009-04-24). 
  15. ^ Muller, Randy. How IT Works: Encrypting File System. TechNet Magazine. Microsoft. 2006-05 [2009-05-22]. (原始內容存檔於2008-12-20). 

延伸閱讀

編輯