黎計仲, 凌 捷, 黃萬民, 袁肅蓉, 劉 新
(1.廣東工業(yè)大學計算機學院,廣東廣州510006;2.廣州鈞衡軟件測評技術有限公司,廣東廣州510663)
為了解決終端重要信息的安全問題,一種有效的方法就是直接對信息的載體和源頭—終端的文檔進行訪問控制和加密。但當前很多加密系統(tǒng)都是應用層加密系統(tǒng),沒有與操作系統(tǒng)的文件系統(tǒng)集成在一起,在實際應用中都要求用戶在訪問文件前要進行手動的加解密處理,使用起來很不方便。隨著文件系統(tǒng)過濾驅動技術的成熟,使用文件系統(tǒng)過濾驅動技術對重要文件進行透明加密已成為解決文件安全保護的重要技術手段,但是使用文件系統(tǒng)過濾驅動實現對文檔動態(tài)透明加解密時,首先要解決動態(tài)透明加解密中區(qū)分加密文件與非加密文件的問題。方法一是將特定類型的文件放在一個固定的目錄下或者將文件的全路徑存放在另外一個文件里。這些做法的缺點是文件的移動、打包壓縮或者通過網絡發(fā)送就變得極其麻煩,文件標識很容易丟失,不利于實際應用。方法二是采用文檔標識技術[1],把文檔標識嵌入文檔本身,文檔與標識保存在一起,避免由于文件的移動而造成標識丟失的可能性,實現了在細粒度級別上對文件進行透明標識。
但原有的文檔標識技術只有識別文檔的功能,本文先對原有的文檔標識技術進行改進,把對文檔的加密密鑰和文檔的策略控制信息保存在文檔標識中,使文檔標識不僅有識別文檔的功能,而且具有密鑰管理以及策略管理功能,然后基于新型文件系統(tǒng)過濾驅動Minifilter過濾驅動以及改進的文檔標識技術,設計并實現了一個終端文檔安全保護系統(tǒng),實現對文檔的透明加密和透明標識以及嚴格的訪問控制,使文檔在終端如常使用,通過移動存儲設備拷貝出去或者通過網絡發(fā)送出去,在外不可用,可以有效地保護終端重要信息的安全。
Windows 2K/XP/2003等基于NT內核的Windows操作系統(tǒng)的驅動程序是采用分層的結構模型,文件系統(tǒng)驅動程序只是I/O子系統(tǒng)的一個組件。在這種分層的結構下,I/O管理器所發(fā)出的每個IRP(I/O請求包)的處理分別經過各層驅動程序,直到某層驅動程序完成這個請求[2]。因此,可以在I/O管理器與文件系統(tǒng)驅動之間插入過濾驅動,截獲和處理來自上層的IRP以及下層返回上層的IRP,從而實現對文檔的透明加解密。過濾驅動的工作原理如圖1所示。
圖1 過濾驅動的工作原理
文檔標識技術把文檔標識嵌入文檔本身是為了解決以前把識別文檔需要動態(tài)加解密的標識放在文檔本身之外,使文件標識很容易丟失,不利于實際應用的問題。文檔標識技術把文檔標識與文檔保存在一起,避免由于文件的移動而造成文件標識丟失的可能性,實現在細粒度級別上對文件進行透明標識,但它只有識別文檔的功能。
本文對原有的文檔標識的構成進行擴展,把文檔的加密密鑰,文檔的策略控制信息也保存在文檔標識中,使文檔標識不僅有識別文檔的功能,而且有密鑰管理的功能。對密鑰的管理,方法一是所有文檔使用相同的密鑰[1-3],不用對密鑰進行管理,但該方法存在破解一個文檔就破解所有文檔的風險。方法二把密鑰集中存在密鑰服務器[4],一文檔一密鑰,安全性高。但該方法每次訪問文檔都要通過內核向應用層詢問密鑰,透明加密時延大,一旦密鑰服務器遭破壞,所有文檔都失效。本文綜合前兩種方法的優(yōu)點,先是文檔密鑰隨機產生,不同文檔不同密鑰,密鑰存放在對文檔標識中,利用文檔標識管理密鑰,然后使用統(tǒng)一的密鑰對文檔標識加密,最后把加密后的文檔標識嵌入文檔頭部,內核訪問文檔時直接從解密后的文檔標識中得到密鑰,減少時延,提高效率。文檔標識結構如圖2所示。
圖2 文檔標識結構
本系統(tǒng)旨在對終端的文件進行安全保護,采用Minifilter過濾驅動透明加密技術,使終端上的文檔始終以密文的形式存放在磁盤上,從源頭上解決終端文檔的安全問題。文件的加密密鑰隨機產生,并且加密的密鑰嵌入文件的內部,系統(tǒng)用戶也不知道文件的密鑰,這樣更能防止合法人員有意無意的操作而造成的信息泄漏問題,同時對文件進行分級保護,用戶也分等級,不同等級的用戶對不同等級的文件的操作權限也各不相同,系統(tǒng)的總體模塊設計如圖3所示。
圖3 系統(tǒng)總體模塊
提供用戶的操作界面,負責用戶信息管理,日志管理等功能。日志用于記錄什么用戶什么時候進行什么操作,這有利于對安全事故進行追蹤,界面模塊還負責用戶與內核進行信息交換。
由于文檔分等級,用戶也分等級,不同的用戶對不同的文檔的權限不同,這樣就要進行權限訪問控制,禁止越權讀,寫,修改文檔等操作。
這個模塊只要采用Minifilter過濾驅動技術實現對文檔的透明加密。在I/O管理器和文件系統(tǒng)驅動之間插入Minifilter過濾驅動程序攔截上層發(fā)來的I/O請求包,并對該IRP進行處理后再繼續(xù)向下傳遞或直接向上返回結果通常被送到設備堆棧的最上層驅動程序,實現實時加密寫入文件系統(tǒng)的文件,實時解密從文件系統(tǒng)讀出的文件,讀多少解密多少,寫多少加密多少[5],保證受保護的文檔始終是以密文的狀態(tài)存放在磁盤上。
本系統(tǒng)為了文檔安全保護性能而設計了密鑰發(fā)配模塊,該模塊為每個新建的文檔發(fā)配一個不重復的密鑰,使每個文檔的加密密鑰各不相同,密鑰隨機產生,密鑰和相應的控制策略信息以文檔標識的方式嵌入文件的本身,有利于對密鑰進行管理以及在細粒度級別上對文檔進行安全保護。不同的文檔不同的密鑰,這樣就使密鑰與文檔是一對一的關系,有效地防止破解一個文檔就可以破解所有文檔的風險。
輔助功能模塊提供一個簡單的類似漏洞掃描功能的模塊,負責檢測終端是否裝殺毒軟件、防火墻等輔助性軟件,以及提示重要系統(tǒng)補丁的缺漏,提高終端整體的安全性能。
文檔打開預處理是指當進行文檔透明加密的過濾驅動檢測到機密進程試圖打開一個文檔 (新建的文檔或者已存在的文檔)時所需要進行的處理,在這個過程中涉及到文檔信息的提取,密鑰的發(fā)配,文檔標識的相關操作以及決定該文檔打開之后是否要加入文檔加密表中。
無論用戶請求打開新建的文檔或者已存在的文檔,I/O管理器首先向文件系統(tǒng)驅動發(fā)出的都是 IRP_MJ_CREATE IRP請求包,因此可以利用Minifilter過濾驅動技術在內核中截獲IRP_MJ_CREATE操作,判斷當前打開的是否是新建的文檔,是就申請一個新的密鑰,把密鑰和文件的等級信息,權限信息等寫入新的文檔標識中,并把文檔標識加入加密表中,然后對文檔標識加密,最后把加密的文檔標識寫入新的文檔中,如果不是新建的文檔,就提取文檔的文檔標識,提取成功,就把文檔標識加入加密表,提取失敗就放過這個請求,流程如圖4所示。
圖4 文檔打開預處理過程
任何加密方法都可以抽象成鉤子技術,即在數據從用戶態(tài)請求到磁盤存儲這條通路的某個地方,安裝自己的處理過程,當寫請求到來時進行數據加密,當讀請求到來時進行數據解密[6]。因此可在I/O管理器和文件系統(tǒng)驅動之間插入Minifilter過濾驅動程序,截獲I/0管理器發(fā)往文件系統(tǒng)驅動的讀寫IRP,獲得當前的文件對TargetFileObject,根據文件對象從加密表中取得相應的文件信息以及對應的控制策略信息,還有文檔密鑰等,然后把控制策略信息送到規(guī)則策略模塊,判斷當前用戶對當前文檔是否夠權限進行相應的請求操作,如果允許進行操作,對傳輸的數據進行相應的動態(tài)加解密處理:數據讀請求時對讀入的數據進行解密;數據寫請求時對寫出的數據進行加密[3],否則就禁止用戶的操作。
實現的流程圖如圖5所示。
動態(tài)寫加密實現的關鍵代碼如下:
圖5 透明加密的實現流程
在內核層與用戶層的通信,傳統(tǒng)的做法是使用用戶態(tài)的API函數DeviceIoControl結合內核模塊中的處理控制請求來實現雙方通信的,而采用Minifilter過濾驅動技術則不同,Minifilter有內建的API提供給開發(fā)者使用,引入了新的對象微過濾器通信端口[7],通過FilterConnectionPort這個回調函數注冊一個通信端口,利用FilterSendMessage以及FilterGetMessage實現兩層的通信,為了實現他們之間的實時通信,本系統(tǒng)先在用戶模式應用程序創(chuàng)建一個事件,并將該事件旬柄傳給文件系統(tǒng)驅動程序,然后創(chuàng)建一個輔助線程。文件系統(tǒng)驅動程序收到該事件的句柄后,將其轉換成能夠使用的事件指針,并存儲起來以便使用。在文件系統(tǒng)驅動程序向應用程序傳遞信息時,就將此事件設置為有信號狀態(tài),然后應用程序的輔助線程便會知道這個消息并進行相應的處理。
圖6 沒有文件標識的文件
圖7 有文件標識的文件
對兩個相同大小的有文件標識和沒有文件標識的文件,有文件標識的文件在開啟終端文檔安全保護系統(tǒng)情況下進行讀寫操作與沒有文件標識的文件在沒有開啟終端文檔安全保護系統(tǒng)情況下進行讀寫操作。讀寫速度幾乎一樣,時延非常小如圖8所示,并且系統(tǒng)具有以下性能:
圖8 文件讀寫時間測試
(1)可操作性:本文的終端文檔安全保護系統(tǒng)是基于Minifilter過濾驅動開發(fā)的,它與Windows文件系統(tǒng)高度集成在一起,對文檔的加/解密過程是在內核中自動完成的,對應用層來說完全是透明的,因此不會對應用程序訪問方式和用戶操作習慣產生任何影響。文件內容加解密采用流加密算法,效率可以接受。同時系統(tǒng)不僅支持NTFS格式文件系統(tǒng),也支持FAT格式文件系統(tǒng),具有很強的實用性。
(2)安全性:被保護的重要文件以密文的形式存儲在磁盤上,入侵者不能得到被保護的重要文件的明文。由于每個文件的密鑰是隨機產生并且都各不相同,即使攻破一個文件,其他文件仍是安全的。
(3)共享性:由于對文件的所有訪問控制策略以及加密的密鑰都以文件標識的方式嵌入文件的頭部,所以文件在系統(tǒng)下自由移動,并不對文件的共享性產生任何影響,只要訪問者具有相應的權限,對文件的操作無需作任何改變。
本文先對原有的文檔標識技術進行改進,使文檔標識不僅有識別文檔的功能,而且具有密鑰管理以及策略管理功能,然后結合Minifilter過濾驅動設計并實現了一個終端文檔安全保護系統(tǒng)。實現對終端重要文檔的透明加密以及透明標識,在細粒度級別上對受保護文檔進行標識,使受保護文檔始終是以密文的狀態(tài)存放在終端上,且加密時不同的文檔采用不同的密鑰,實驗結果證明系統(tǒng)能有效地保護終端重要信息的安全,達到設計的預期效果。改進的文檔標識技術不僅應用在文件透明加密系統(tǒng)中,還可應用在目錄安全控制系統(tǒng)或者其他文件安全防護系統(tǒng)中,具有良好的應用前景。
[1]龍飛宇,劉嘉勇.基于文件系統(tǒng)過濾驅動的文件標識研究[J].通信技術,2008,41(10):76-79.
[2]胡宏銀,姚峰,何成萬.一種基于文件過濾驅動的Windows文件安全保護方案[J].計算機應用,2009,29(1):168-171.
[3]李民,方勇,劉林超,等.文件過濾驅動及應用[J].信息與電子工程,2005,3(4):290-292.
[4]于飛,胡平.基于文件過濾驅動的局域網安全系統(tǒng)設計[J].計算機工程與設計,2008,29(20):5174-5176.
[5]沈瑋,王雷,陳佳捷.基于文件系統(tǒng)過濾驅動的加密系統(tǒng)設計與實現[J].計算機工程,2009,35(20):157-159.
[6]顧正義,黃皓.新加密文件系統(tǒng)的研究與實現[J].計算機工程與設計,2009,30(14):3272-3277.
[7]譚文,楊瀟,釗堅磊,等.Windows內核安全編程[M].北京:電子工業(yè)出版社,2009.