透明加密系統設計及實現-透明加密的關鍵技術 頂 原

在第一章已經詳細地介紹了透明解密系統的主要發展狀況,目前市面上的透明加密系統,大多存在兼容性差和移植麻煩的情況。最爲主要的是目前的透明加密系統,缺乏有效的身份認證機制,導致透明加密系統的安全性受到了極大的影響。本章結合Minifilter和LayerBSD設計思想,詳細地分析了透明加密系統的基本結構和原理,給出了有效的關鍵信息標識的方法。研究了內核模式與用戶模式便捷的通信模型,詳細給出了多種透明加密系統核心部分的結構並分析它們之間的優缺點,最後綜合透明加密系統的整個架構,給出了一套高度可信的身份驗證機制。

1 文件透明加密系統的基本原理

文件透明加密是指用戶在操作的時候,雖然後臺在自動的進行加解密,但是用戶根本不知道加密及解密的存在,就像中間的隔了一層屏幕輻射過濾膜一樣,用戶感覺到不到它的存在。如圖1,在佈置了透明加密的系統中,在進行文件I/O操作時,文件透明加密系統進行透明加解密,上層的已經授權的進程能夠獲取到文件的明文,非授權的進程仍然無法獲取到文件的明文,故而防止了通過其它的進程獲取文件明文並將其通過網絡將文件傳遞到系統之外。在文件I/O過程中,文件透明加密及解密驅動會進行文件I/O進行過濾,攔截滿足策略的I/O 進行文件的加密及解密等相關的操作。

               圖1 透明加密系統的工作原理圖

透明加密不會影響到用戶的使用習慣,也不需要改變已有的應用程序,就能夠達到透明加密的效果。透明加密是一種被動的加密方式,文件的是否加密不以用戶的意願控制,而是自動根據透明加密系統的配置策略進行文件進行加密和解密。故而文件透明加密在企業,特別是機密機構和核心部門,已經成爲了文件保護的最後的最堅固的防護盾。

2 透明加密系統的結構的研究

文件透明加密系統的核心部件工作在內核模式下,第二章我們詳細地給出了文件過濾驅動程序及文件小過濾驅動的在操作系統的位置結構,文件透明加密系統中透明加密模塊其實是文件過濾驅動或者是文件小過濾驅動程序,在驅動設備棧中位於文件系統驅動程序之上,主要負責文件訪問的控制、進程及文件關係的控制、用戶識別和控制以及核心的透明加密。但僅僅有透明加密驅動程序是無法滿足需求的,因爲透明加密大量的策略信息具有很大的靈活性,不同的用戶對透明加密的需求存在存在着差異,因此,必須要一個靈活多變且功能強大的透明加密的策略配置端,保證用戶的身份的可靠性並進行透明加密的策略配置。

在透明加密系統的總體結構設計時,出於性能、安全、靈活性及實用等多方面的考慮,將透明加密系統分爲兩個重要部分,分別位於操作系統的的內核模式和用戶模式。具體的結構如圖 2 所示。

圖 2 透明加密系統的總體結構 

透明加密系統被分爲兩個組成部分,一個是位於內核模式的透明加密驅動,由於其承當着透明加密等核心的功能,由於其除了完成透明加解密的功能外,還負責其它的許多文件控制的功能,將其命名爲文件控制器。另一個是位於用戶模式的客戶配置端,客戶端以應用程序的形式存在於系統中,承擔着用戶身份認證及文件保護策略配置的任務,作爲文件控制器的輔助,提高了整個系統的靈活性和實用性。由於在系統設計中的兩個主要組成部分分別位於不同的操作系統模式下,各個模塊都必須提供相應的通信模塊以提供信息的交換的橋樑。

採用用戶模式及內核模式雙模塊組成的設計模式,減輕了內核模式模塊的開發難度,提高了系統的穩定性,將配置策略端放置在客戶端,提高系統的靈活性,但是對用戶身份的認證以及系統的完整保護提出了新的要求,簡單的基於用戶模式的驗證是無法達到系統的要求的,需要設計更加嚴格的身份驗證機制,保證系統的完整性和用戶身份驗證的可靠性。

3 關鍵對象的有效標識的研究

在進行相關的文件I/O的控制時,進行關鍵信息的有效標識是透明加密系統可靠性的保障。在內核模式獲取相關的信息要比用戶模式下要複雜得多,因爲工作在內核模式下的驅動進程無法直接訪問當前用戶會話空間的有效的信息。而且工作於內核模式下的驅動程序,特別是文件系統驅動程序,將會處理成百上千的進程發起的I/O請求,怎樣對這些I/O進行有效的標示以完成I/O的控制是一個值得思考的問題。在透明加密及文件訪問的控制中,相關的主要的信息包括進程的有效標識,發起I/O的用戶的有效標識,加密文件的有效標識以及磁盤卷的有效標識,下面分別討論以上信息在文件透明加密系統的標識方法。

3.1 進程的有效標識

在透明加密系統中,爲了進行授權進程及非授權進程的區分,進程的標識是十分必要的。在操作系統中通常區分進程的方法採用的是通過進程ID號的方法,但是這在透明加密系統中是不可行的,因爲一個進程的ID是變動的,不能作爲有效的標識。本文給出了三種有效的進程標識方法,具體如下:

1.可執行文件名稱標識

在進程的創建是,需要指定其具體只想文件的路徑及名稱,通過進程的ID號可以驅動進程的進程描述符地址,取得該文件名,該方法能有效地識別進程,但是不能防止進程欺騙,如果運行程序採用更換名稱的方式欺騙系統,系統將無法處理。

2.可執行文件內容摘要標識

直接採用可執行文件名稱標識進程存在進程欺騙的問題,爲了解決進程欺騙的問題,在配置策略時,先根據可執行文件的內容採用有效的摘要算法生成摘要。在進行進程識別時,不單單採取文件名識別的方式,還根據根據可執行文件的內容生成相關的摘要與原本的摘要進行對比用於區分進程,這樣便可以有效地解決進程欺騙的問題。採用動態及靜態相結合的方法(進程開始執行時通過提取摘要進行區分,保留進程ID及名稱作爲後續標識使用,只需要進程開始執行時校驗一次即可),該方案可以實現可靠且高效的進程區分,是比較理想的解決方案。

3.進程運行時環境摘要標識

解決進程欺騙是一個比較麻煩的問題,不是無法實現,而是相關的方法是否具有實用性。考慮到操作系統性能的要求,採集進程的系統運行時環境信息,根據運行時環境信息(進程加載的動態鏈接庫及進程的代碼段的信息)生成摘要,然後進行比較識別進程。採用運行時環境摘要標識,實現難度較大。

3.2 加密文件的有效標識

在透明加密系統中,進行加密文件與非加密文件的準確區分決定着透明加密系統的工作是否有效,簡單的字節碼標識雖然能夠區分加密與非加密文件,但是由於其包含的信息量少,遠遠無法滿足透明加密系統的需要。在進行文件標識時常用的文件標識方法有後綴名標識、配置文件標識(通過配置文件指定機密文件)、文件內容標識。三種方法中,後綴名標識和配置文件標識在靈活性和使用性上都存在很大的缺陷。後綴名標識其提供的信息有限,遠遠不同滿足需要,同時後綴存在很大的變動性,改變後綴名稱,標識就會失效,穩定性極差。採用配置文件進行標識由於文件的識別依靠具體的配置文件,當文件在系統間遷移時或者配置文件丟失後就會導致標識失效。採用文件內容內容進行文件的標識是最可靠也是最安全的方法,不存在上述的問題,是目前廣泛採用的方式。

將文件的標識放入文件中是一種可靠且可行的解決方案,而將文件標識存放在文件中,也有多種不同的選擇方案,一種是將文件的標識放在文件的頭部,一種是將文件的標識放在文件的尾部,還有一種是將文件標識放在數據流中。

將文件標識放在文件頭部,文件的整體內容就會向後偏移,在實現的過程中需要對上層的應用程序隱藏文件頭,這是一件十分麻煩的事情,實現難度特別大。但是將文件標識放在頭部有許多優點,首先文件位於文件頭部,不會輕易遭到損壞,將文件放在文件頭部時,當文件的內容改變時,不需要修改文件頭的內容,從使用角度來講,是最好的標識方案。

將文件放在文件的尾部,將文件放在文件的尾部,沒有將其放在頭部的難度大,不用爲上層應用程序隱去文件頭,只需要將文件的大小修改即可,但是將文件標識放在尾部,有一個十分麻煩且不穩定的問題,當文件的大小改變時,文件的尾部必須進行移動,耗費資源且不如放在頭部穩定。但是實現起來較爲簡單,也是常用的方案之一。

將文件的標識信息放在輸入流中,是最近幾年纔出現的設計方法,主要針對NTFS文件系統,在FAT文件系統無法實現該方式,故而採用該方式的使用範圍有限,僅僅支持NTFS文件系統。但是在文件內容放在文件流中,不需要做任何的文件處理,簡單方便穩定度高,在未來應該會成爲最主流的設計方案。

3.3 用戶及卷的有效標識

在目前的透明加密系統中,進行身份認證都是針對整個操作系統的,只要用戶認證成功,整個透明加密系統就沒有其它的身份認證措施,靈活性及控制的程度還有提高的空間。爲了實現更加嚴格身份控制,本文將認證的粒度細化到用戶級別。經過研究分析,爲了實現用戶級別的控制,必須對每一個文件I/O請求,明確地知道發起該請求的用戶到底是系統中的那個成員,在內核中,由於Windows操作系統本身是不開放源代碼的,且在內核驅動開發文檔中,未提供根據相應I/O請求獲取到用戶的標識的接口。通過仔細的分析,發現了在操作系統中有一個和用戶是一一對應的概念,被稱爲會話,在操作系統中,每一個用戶登陸時都對用了一個唯一的會話,在會話的環境下運行着屬於當前用戶的一系列進程,操作系統通過會話管理器來進行用戶登陸的管理。在內核部分,我們可以獲取到當前發起I/O請求的進程ID,進一步通過進程號便可以得到用戶登陸所在的會話ID。使用會話ID就可以作爲用戶的有效標識,從而完成用戶級別的控制。

爲了防止非法用戶隨意將文件通過移動設備將操作系統中的內容拷貝帶走,必須實現針對磁盤設備的控制。如何完成對磁盤等存儲設備的控制,關鍵在於如何對磁盤等設備進行有效的標識,採用簡單的盤符標識是遠遠達不到要求的,進過研究分析,有兩種可行的方案,一種是直接採用磁盤的序列號作爲作爲標識,另一種是採用GUID編號作爲有效的標識。採用磁盤序列號雖然能夠準確的達到標識磁盤的要求,但當存儲設備不是磁盤時,就不能滿足要求了。而採用GUID編號這完全沒有這個問題,GUID編號是微軟管理設備的一套管理規範,他爲每一個設備生成了一個唯一的GUID號,採用GUID號不僅唯一標識存儲設備,也能唯一地標識系統中的其它設備。

4 用戶模式與內核模式數據通信的研究

在進程間通信時,一般採用的方式爲管道通信和內存共享以及消息機制等等,這些方法在進行用戶模式下是是完全沒有問題的,但是在內核模式和用戶模式之間進行信息的交互方式就不實用。

1.普通的通信方式的分析

普通的進程採用管道及內存共享進行數據的交換是最爲常用的方法,主要表現在操作簡單,且效率高。但是在內核模式下與用戶模式下的進程通過這些方式進行數據的交換,達不到要求,因爲二者在不同的系統模式下,採用普通的管道技術無法滿足安全性的保障,而採用內存共享的方式,必須引入信號量及互斥體才能勉強滿足通信的安全及的要求,但僅僅能支持簡單的數據通信,對於交互頻繁的環境遠遠達不到要求。

2.採用Minifilter的端口通信機制

爲了滿足用戶模式和內核模式的通信要求,微軟在Minifilter的框架中引入了與網絡通信機制中的TCP通信類似的端口通信機制。採用Minifilter的端口通信機制完全不存在普通的進程間通信的問題,而且採用端口通信機制後,由於不同的用戶向系統發起的連接請求可以進行有效的標識,給用戶的身份認證提供了有效的依據,使更加可靠的基於用戶粒度的身份的驗證成爲了可能,本章將在此基礎上進行高可信度的身份認證的算法研究。

5 透明加密的關鍵技術的研究

透明加密系統的核心部分是以文件系統過濾驅動的方式進行設計的,文件過濾驅動在文件系統設備棧中位於文件系統驅動程序之上,處於文件系統過濾驅動和I/O管理器之間。必須對文件I/O的流程進行詳細的分析才能夠了解文件I/O操作的具體流程及相關的細節。要想設計出高效率的文件系統過濾驅動程序。必須充分考慮操作系統中文件緩存的作用,同時文件緩存也給文件的透明加密及解密帶來很多困擾。在設計透明加密驅動程序時,不僅僅要考慮如何攔截I/O,攔截那些I/O,還要考慮該怎樣處理這些I/O,以及緩存帶來的各種困擾問題。

5.1 文件I/O的詳細分析

在當一個文件以非緩存的形式打開的時候,對文件的讀寫都是非緩存的形式進行的,在操作系統中,將這種文件I/O的方式稱爲NonCached IO,採用非緩存的形式進行文件的讀寫是不會涉及到文件緩存問題,處理相對簡單,文件I/O的請求會直接通過文件系統驅動下發到相關的設備。當文件以緩存的方式進行文件的I/O操作是,情況就要複雜得多,不僅要考慮到緩存的問題,還要充分考慮到操作系統中內存管理的頁錯誤,爲了更好地分析帶緩存文件I/O的具體情況,下面將針對讀、寫文件兩種操作進行詳細的分析。

圖3詳細地分析了帶緩存的文件I/O的具體流程,當對帶緩存的文件進行讀操作時,當請求達到文件系統驅動時,如果是首次進行讀操作,文件系統驅動將會調用緩存管理器的接口爲文件進行緩存環境的創建,如果緩存已經創建完成則向緩存管理器發起讀請求,如果文件讀寫的位置對應的段視圖不存在,緩存管理器爲創建相關的段視圖。當段視圖存在後,文件緩存管理器將會從段視圖中複製數據到用戶緩衝區。這時如果視圖對應的文件內容並未讀入,緩存管理器將向內存管理器發起頁錯誤,內存管理器向文件系統驅動發起分頁I/O讀請求,文件系統驅動在接到分頁I/O的請求時,將會直接下發請求給下層驅動設備並等待請求返回,文件系統驅動將分頁I/O的結果返回給內存管理器,內存管理器完成頁面錯誤的處理,將文件內容加載到段視圖中。緩存管理器從段視圖中得到文件內容,複製到用戶緩衝區中,將請求結果返回給文件系統驅動,文件系統驅動返回給I/O管理器,I/O管理器將結果返回給應用程序便完成了整個讀請求。

圖3帶緩存的文件讀的詳細流程

當進行帶緩存的文件寫操作時,其它的流程基本相識,只有部分區別。如圖4,在文件寫操作時,對段視圖的操作與讀請求時相反,是將用戶緩衝區中的內容複製到段視圖中。在處理頁面錯誤時,內存管理器並不發起寫請求,而是釋放部分的物理頁面,爲指定的段視圖對應的虛擬地址分配物理頁面,緩衝管理器完成數據的複製後直接返回。整個寫操作中並未直接將數據寫到磁盤外存中,而是操作系統閒暇或者需要時,在段視圖中的內容寫入外設存儲中。

圖4 帶緩存的文件寫操作的詳細流程

5.2 文件緩存的處理

在文件的讀寫操作中,文件的緩存有着巨大的作用,大幅度地提高了操作系統的效率。涉及文件緩存的I/O處理極其複雜,任何的弊漏都可能會導致整個操作系統崩潰,造成不可估量的後果,在進行相關處理時,必須小心謹慎。在透明加密的過程中,如果關閉文件的緩存,雖然能夠解決緩存帶來的各種困擾問題,但是會對操作系統的性能造成巨大的負面影響。在設計中這種設計思路已被淘汰。

在以往透明加密系統的設計時,有三種主流的設計思路。分別是緩存存放密文,緩存存放明文,雙緩存的設計模式。下面本章將結合Miniflter文件小過濾驅動的特點,充分考慮文件的緩存作用,針對三種設計思路給出相應的透明加密的設計模型,並分析其優缺點。

1、文件緩存密文設計方式

前文已經講到,Minifilter文件過濾驅動程序可以完成文件I/O的攔截,可以攔截FAST_IO,NONCACHED_IO,PAGEING_IO等I/O請求。這些I/O中有帶緩存的文件I/O,也有不帶緩存的文件I/O。其中FAST_IO是帶緩存的I/O,其它的都是不帶緩存的I/O,在設計時必須區分處理。圖5簡要地闡述了基於密文的緩存的設計思想,當授權進程直接讀取磁盤文件時,採用NOCACHE_IO進行文件的讀寫時,直接進行加解密。當授權進程以緩存的方式讀取文件時,文件讀到緩存中不進行處理,緩存中便存放密文,在進程通過FAST_IO讀寫緩存中的內容時,進行解密或加密,這樣授權進程便可得到明文。而非授權進程讀取文件時不進行任何的處理,因此無法得到文件的明文。但是,採用該種設計方式存在一個很大的問題,當授權的進程以文件內存映射的方式打開文件時,其操作流程和緩存類似,採用PAGEING_IO從文件中讀取內容到內存中,由於透明加密驅動未對PAGEING_IO做任何的處理,因此內存中的內容是密文,當授權進程文件以內存映射的方式打開時也無法得到明文。

圖5 密文緩存的設計方式

2、文件緩存明文的設計方式

如圖6 ,文件緩存爲明文的方式與文件緩存爲密文的情況十分相似,不同的是,在進行PAGEING_IO時進行加密或解密,緩存中存放明文,進行FAST_IO時,對授權的進程不進行處理,而對非授權的進程進行讀加密,禁止寫的限制防止數據的泄漏。該種設計方式與方式1也存在相同的問題,當未授權的進程以內存文件映射的方式打開文件時,由於採用PAGEING_IO進行了加密和解密,故而其能夠得到文件的具體明文,造成了數據的泄密。爲了防止泄密,可以在PAGEING_IO時進行區分進程的處理,這樣便造成了文件緩存中可能是密文也可能是明文,當多個進程同時打開文件時,容易造成數據的混亂,需要進行互斥處理並刷新緩存內容,對操作系統的性能有一定影響。

圖 6 明文緩存的設計方式

3、雙緩存的設計方式

由於採用密文緩存存在文件映射導致授權進程以內存文件映射的方式打開文件無法取得明文,而明文緩存設計模式需要反覆的刷新緩存來保證數據的一致性。可以採用雙緩存的方式來解決緩存帶來的各種困擾。

圖 7 雙緩存的設計方式

如圖7,雙緩存的設計模式,引入雙緩存的概念,在系統中存在兩份緩存,一份是明文緩存,另一份是密文緩存,當向密文緩存中通過PAGEING_IO操作文件時不進行任何處理,其中存在的是密文,而嚮明文緩存中操作文件時進行加密和解密,緩存中存放的時明文,當授權進程採用FAST_IO進行文件的讀寫時,操作的是明文緩存,不需要任何的處理,同樣當非授權的進程讀寫文件時操作的是密文緩存,也不要任何的處理,採用雙緩存的方式完全不存在密文緩存和明文緩存設計方式的問題,但是採用雙緩存也存在問題,需要維護兩個緩存,需要保證二者內容的一致性,額外維護緩存增大了內存耗費,而且難度大,不易實現。

5.3 文件I/O請求緩衝區的替換

要進行文件加密及解密,驅動讀寫的數據是問題的關鍵,如何獲取讀取或寫入的內容,關鍵在與根據I/O的方式得到文件I/O操作的緩衝區。文件I/O的方式主要有三種方式,包括緩衝方式、直寫方式、及其它方式。

圖8 緩衝方式和直寫方式的使用

其它方式直接將用戶空間的指針傳遞到用戶空間,不做任何處理。下面主要分析緩衝方式和直接寫方式。如圖8,圖中顯示了兩種I/O在驅動中的使用方式。

(1)緩衝方式在文件的讀寫請求中基本不出現,從發起文件I/O請求的進程的用戶空間拷貝一份數據到內核空間,不同進程空間的內存各自獨立,互不干涉。但是需要進行拷貝,效率較低。

(2)直寫方式採用MDL來傳遞緩衝區,直接修改頁表屬性將用戶空間的緩衝區的地址範圍映射到內核空間,不需要拷貝數據,效率較高。

5.4  結合透明加密驅動後的I/O流程分析

在加入透明加密驅動程序後,FAST_IO和IRP_IO請求都會被文件過濾驅動攔截處理,進行相關的過濾工作。文件過濾驅動位於文件系統驅動之上,可以完成緩存及文件讀寫的內容的控制。

圖 9 結合透明加密過濾驅動的I/O流程

6 高度可信的身份驗證的研究

目前的透明加密系統其控制粒度較大,控制力度受到了很大的限制。爲了實現更爲精確的控制,進一步細化控制的粒度是有必要的。上文已經給出了基於用戶程度的控制思路,採用會話ID 作爲I/O請求的有效的標識來進行基於用戶的I/O控制。爲了保證系統的安全性,採用多重的驗證機制來進行用戶的身份認證是有必要的,在分析各種驗證機制的基礎上,本章給出了一套多重的身份驗證機制。

如圖10所示,爲了更好的進行驗證過程的說明,將用戶的狀態分成了7種,分別是客戶端啓動、用戶註冊情況、密碼驗證、USB Key插入狀態、內核模式驗證、驗證成功以及驗證註銷。具體的相互變換方式圖中給出了詳細的說明。

圖 10 高可信度的身份驗證的狀態轉換圖

可以看出,該方法有如下特點:

(1)採用了三重驗證機制,包括密碼驗證、USB_Key驗證及內核模式驗證,保障驗證的可靠性,增加了破解的難度。

(2)採用了軟件和硬件相結合的方式,避免了通過單一的軟驗證密碼泄漏的問題。

(3)採用了內核模式及用戶相互結合思想,身份的驗證將用戶模式及內核模式集合起來,保證了系統的完整性,任何模塊的破環都會導致驗證的失效。

(4)採用動態實時監測,系統時刻監測用戶USB Key的情況,只要用戶的USB 失效,用戶就會被強制下線,防止非法用戶通過非法手段入侵系統。

7本章小結

本章主要進行透明加密系統的主要技術的研究,從透明加密系統結構的研究到關鍵對象的標識,內核模式及用戶模式的通信、透明加解密的關鍵技術及高可信度的用戶身份驗證,本章在經過詳細的分析之後給出了相應的合理研究方案,爲透明加密系統的整體設計和實現奠定了堅實的基礎。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章