陳金山
(廣州軍事體育進修學院,廣東 廣州 510502)
計算機的普及和信息化的推廣應用,單位內部的各種文檔:標書、報表、設計圖紙等機密信息大量的以電子文檔的形式存放在計算機中,為確保這些文檔不被非法泄露,各類防止電子文檔泄密的方法應運而生:如通過企業環境下的Web service安全技術來保障企業信息系統整體安全性、可靠性的思路[1],采用無盤工作站+信息中心設計模式實現涉密單位辦公自動化的方案[2]等,但從內網安全角度及信息泄密案件來看,只要是明文文件在硬盤上保存,無論是訪問控制、設備監控、安全審計等手段都無法從根源上徹底解決信息安全問題。一種有效的方法就是直接對信息的載體和源頭終端的文檔進行訪問控制和加密[3]。隨著文件系統過濾驅動技術的成熟,使用文件系統過濾驅動技術對重要文件進行透明加密已成為解決文件安全保護的重要技術手段[4-5],但是使用文件系統過濾驅動實現對文檔動態透明加解密時,首先要解決動態透明加解密中區分加密文件與非加密文件的問題。一種方法是,在文件以外的地方保存這個信息。比如另建一個隱藏文件,保存當前目錄下其他文件的加密標識。這種方法的缺點是文件移動、打包壓縮或者通過網絡發送后文件標識很容易丟失。最后可以得出一條結論:加密標識應該保存在文件本身。即是采用文檔標識技術,把文檔加密標識嵌入文檔本身,避免由于文件的移動而造成加密標識丟失的可能性[6]。這樣,問題就變成了:加密標識應該保存在文件內容的哪個部位?一種方法是將加密標識放在文件末尾[7-8],這種方法比較容易實現,但存在重大安全隱患。因為所謂的文件尾不是一個固定的位置,這個位置是隨著文件的修改而不斷改變的,一旦在改變中有什么變故(比如斷電),則容易丟失這個尾部。目前沒有什么好的辦法可以確保這個尾部的安全。林海元等提出了基于LZW(Lempel-Ziv-Walch)壓縮算法將加密標識嵌入文件頭的方法[9]。加密標識嵌入文件頭的好處是位置固定,后面文件的內容如何操作都不會影響它;壞處是實現困難。文獻[9]的方法比一般的文件透明加解密過程多了個LZW壓縮/解壓縮處理,增加了系統資源的消耗。因為文件過濾驅動工作在系統核心態,所以這種方法所帶來的問題是系統效率的明顯下降。
本文提出一種基于微過濾驅動的加密標識嵌入文件頭方法。即給文件增加一個4kB“隱藏”的文件頭,然后對機密進程所有的文件操作都增加一個偏移設置,這樣做的好處是文件加解密過程中幾乎不增加系統資源消耗。
文件透明加解密是通過開發過濾驅動程序實現的。基于NT內核的Windows操作系統的驅動程序是采用分層的結構模型,在這種分層的結構下,I/O管理器所發出的每個I/O請求包(IRP)的處理分別經過各層驅動程序,直到某層驅動程序完成這個請求。因此,可以在I/O管理器與文件系統驅動之間插入過濾驅動,攔截和處理往返于上下層之間的I RP,從而實現文檔的透明加解密。微過濾驅動主要通過攔截用戶的文件創建/打開、讀、寫和關閉操作來實現數據的透明加解密,其中涉及到的攔截函數是:①注冊主功能碼IRP_MJ_CREATE的攔截函數PreCreate ( )和PostCreate ( );②注冊主功能碼IRP_MJ_WRITE的攔截函數PreWrite ( )和PostWrite ( );③注冊主功能碼 IRP_MJ_READ的攔截函數 PreRead( )和PostRead( );④注冊主功能碼IRP_MJ_CLEANUP的攔截函數PreCleanUp ( )和PostCleanUp ( )。
微過濾驅動的工作原理如圖1所示。

當文檔過濾驅動檢測到機密進程試圖打開一個新建的或者已存在的文檔時,I/O管理器首先向文件系統驅動發出的都是IRP_MJ_CREATE IRP請求包,因此可以利用微過濾驅動技術在內核中截獲IRP_MJ_CREATE操作,判斷當前打開的是新建的文檔還是已存在的文檔,如果是新建的文檔就申請一個新的密鑰,把密鑰、加密算法和密級信息等寫入新的文檔標識中,然后對文檔標識加密,再把加密的文檔標識嵌入新的文檔中;如果是已存在的文檔,就提取文檔的文檔標識,然后把文檔標識加入加密表。
因為要對所有的機密進程隱藏文件的頭部,則所有的文件操作都要增加一個偏移。下面以記事本為例說明文件加密標識實現過程中的關鍵技術。
要對記事本隱藏文件頭,首先是隱藏文件的大小。為此需要處理一系列的查詢請求(IRP的主功能號為 IRP_MJ_QUERY_INFORMATION),這些查詢請求用記事本來查詢文件的大小。在查詢得到結果之后,在文件過濾驅動中修改這個結果,減去文件頭的大小。這樣在記事本看來,文件的大小就不包含文件頭了。如果記事本試圖重新設置加密文件的大小,也必須有針對性地做出特殊的改變。但是和查詢請求不同的是,查詢的修改是在請求完成之后,在完成結果中修改;而設置請求則是在請求完成之前,直接修改請求。比如記事本如果試圖把文件大小設置為1KB,由于增加了4KB的文件頭,實際上文件應該被設置為5KB。也就是說,應該加上隱藏文件頭的大小,對文件的讀/寫當前偏移的設置也是如此。
文件過濾驅動處理中有幾個請求會涉及文件的大小和文件讀/寫當前偏移,對記事本而言需要處理好下列函數:FileAllInformation、 FileAllocation Information、FileValidDataLengthInformation、File StandardInformation、FileEndOfFileInformation、File PositionInformation。
下面是FileEndOfFileInformation函數的處理,其他函數的處理可參考有關WDK開發文檔。
FileEndOfFileInformation函數處理的代碼如下:


由于在文件頭嵌入了4KB的加密標識,所以當記事本試圖讀取文件位置偏移0~512字節時,實際上應該讀取的是從0+4KB到512+4KB范圍的內容。也就是說,對所有的讀/寫操作,必須增加一個位置偏移。而且無論讀/寫,都是要在請求完成之前進行操作。讀操作代碼如下:

性能測試的環境是:Windows XP操作系統,酷睿E6300處理器,2G內存,7200轉SATA硬盤。采用硬盤速度測試軟件DiskBench在相同的環境下對一個相同大小的文件進行10次相同條件的測試對比,得出的平均速度結果如表1所示。

表1 文件讀寫時間測試
從測試結果可以看出,在文件透明加解密系統啟動后,文件的讀寫速度略有下降,但相比較其提供的安全性能,這點速度損失是可以接受的。
基于微過濾驅動模型的文件透明加解密系統為Windows文件系統的安全保護提供了一個有效的解決方案。給文件增加一個4KB“隱藏”的文件頭實現的加密標記自動嵌入文件頭的方法,克服了加密標記嵌入文件尾可能存在的重大安全隱患,同時又避免了嵌入文件頭時增加過多的資源消耗,達到了預期的效果。這種加密標記嵌入技術為文件透明加解密系統提供了一種更好的文件加密識別方案,不僅可以應用于微過濾驅動的文件透明加解密系統,還可以應用于其他文件安全保護系統中[10],具有廣闊的應用前景。
[1] 許玲.企業信息系統中的Web Service安全[J].電信技術,2011,44 (05):48-51.
[2] 彭展,李密.可信辦公自動化系統設計[J].信息安全與通信保密,2012(04):61-63.
[3] 沈瑋,王雷,陳佳捷. 基于文件系統過濾驅動的加密系統設計與實現[J].計算機工程,2009,35(20):157-159.
[4] 周峰,凌捷,黃萬民,等.基于文件系統過濾驅動的透明加解密技術實現[J].廣東工業大學學報,2010,27(03):68-71.
[5] 劉偉,胡平. 基于文件系統過濾驅動的文件加密系統設計[J].微電子學與計算機,2009,26(04):114-117.
[6] 黎計仲,凌捷,黃萬民,等.微過濾驅動在終端文檔安全保護中的應用[J].計算機工程與設計,2011,32(07):2245-2248.
[7] 毛銳. 透明加密文件系統模型的研究與實現[D].大連:大連理工大學,2008.
[8] 徐翔. 文件保護系統中透明加解密技術的設計與實現[D].北京:北京化工大學,2009.
[9] 林海元,呂麗民. 基于無損壓縮算法的文件加密標記的實現[J].浙江工業大學學報,2010,38(04):430-432.
[10] 孫瑩瑩,鄭扣根. 基于微過濾驅動的文件監控系統[J].計算機應用,2010,30(11):3115-3117.
[11] 夏輝,張堯弼. 移動存儲介質安全防護系統設計[J]. 通信技術,2008,41(09):153-155.
[12] 徐月美,芮蘇仙.移動代理服務器安全性研究[J].通信技術,2003(09):109-111.