国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Windows文件系統(tǒng)過濾驅(qū)動文件透明加密的研究*

2013-06-10 04:28:56
關(guān)鍵詞:加解密管理器驅(qū)動程序

易 丹

(武漢交通職業(yè)學(xué)院,湖北 武漢 430065)

1 文件加密發(fā)展現(xiàn)狀

隨著計算機與網(wǎng)絡(luò)應(yīng)用的普及,人們之間的信息交互越來越方便,但由此產(chǎn)生的信息安全問題也日益突出。為了保證信息的安全,我們需要對存儲在計算機系統(tǒng)上的文件信息進行加密。目前常見的文件加密方式有四種:用戶層文件加密、系統(tǒng)調(diào)用層加密(APIHOOK)、文件系統(tǒng)過濾驅(qū)動加密和硬件加密。本文綜合比較四種加密方式的原理及效率(見表1),發(fā)現(xiàn)文件系統(tǒng)過濾驅(qū)動加密達到了在性能、成本和安全性上的平衡。接下來,本文重點闡述基于Windows文件系統(tǒng)過濾驅(qū)動的文件透明加密技術(shù)。

表1 四種文件加密方式比較

2 文件系統(tǒng)過濾驅(qū)動加密的工作系統(tǒng)——Windows操作系統(tǒng)

文件系統(tǒng)過濾驅(qū)動工作在Windows內(nèi)核模式下。因此,我們需要對Windows操作系統(tǒng)進行比較深入的學(xué)習(xí)和了解。

2.1 Windows體系結(jié)構(gòu)組成

如圖1所示,在Windows系統(tǒng)中,應(yīng)用軟件是“看不見”操作系統(tǒng)內(nèi)核的。應(yīng)用軟件需要通過API函數(shù)調(diào)用獲取操作系統(tǒng)的支持,才能訪問內(nèi)核級的代碼。

Windows內(nèi)核模塊由以下幾部分組成[1]:(1)硬件抽象層(HAL)。HAL為Windows其它組件提供硬件平臺低層接口。它隱藏了與硬件相關(guān)的細節(jié),比如,中斷控制器,I/O接口等與機器相關(guān)的功能。Windows內(nèi)部組件可以調(diào)用HAL的例程來實現(xiàn)可移植性。(2)設(shè)備驅(qū)動層。設(shè)備驅(qū)動程序是可以動態(tài)加載卸載的內(nèi)核模塊,它和I/O管理協(xié)同工作,在用戶和真實的物理設(shè)備之間建立連接,保證用戶請求能夠由相應(yīng)的硬件設(shè)備順利完成。(3)Windows kernel。Windows內(nèi)核為執(zhí)行體提供了操作系統(tǒng)的工作機制和底層原語。提供了執(zhí)行體組件需要使用的(Ntoskrnl.exe中的)一組函數(shù),例如,中斷和異常分發(fā),線程調(diào)度和同步等。使得執(zhí)行體可以實現(xiàn)更高層次的功能。(4)Windows執(zhí)行體。Windows執(zhí)行體包含了操作系統(tǒng)可以提供的服務(wù)操作,包括系統(tǒng)服務(wù)函數(shù)(system service),調(diào)用設(shè)備驅(qū)動器的函數(shù),以及內(nèi)存管理、對象管理等系統(tǒng)組件的管理。

圖1 windows系統(tǒng)結(jié)構(gòu)

2.2 I/O管理和內(nèi)存管理

Windows的文件操作主要涉及到I/O管理和內(nèi)存管理,這兩個內(nèi)核組件提供了由過濾驅(qū)動實現(xiàn)文件加解密的理論基礎(chǔ)。[2]

2.2.1 I/O管理

WindowsI/O系統(tǒng)的作用是為上層用戶程序提供一個有關(guān)設(shè)備的抽象,用特定的數(shù)據(jù)結(jié)構(gòu)實現(xiàn)與底層物理或者虛擬設(shè)備的數(shù)據(jù)傳遞,將用戶的請求分發(fā)給相應(yīng)的設(shè)備驅(qū)動程序處理。此設(shè)備抽象具有以下特性:①統(tǒng)一的,跨設(shè)備的安全性和命名機制;②高性能的,異步的,基于數(shù)據(jù)包的I/O;③提供支持用高級語言編寫驅(qū)動的服務(wù);④動態(tài)的加載和卸載驅(qū)動程序,允許加入新的驅(qū)動程序;⑤支持即插即用和電源管理;⑥支持多個安裝的文件系統(tǒng),包括FAT、CD-ROM、UDF、NTFS等。

I/O管理器作為I/O系統(tǒng)的核心,監(jiān)視著windowsI/O子系統(tǒng),它能夠把來至用戶的請求構(gòu)建成一個IRP(即I/O請求包),把該IRP傳遞給目標驅(qū)動程序;驅(qū)動程序根據(jù)IRP中的相應(yīng)參數(shù)將這些請求轉(zhuǎn)變成與硬件相關(guān)的操作。文件系統(tǒng)過濾驅(qū)動就位于I/O管理器和文件系統(tǒng)驅(qū)動之間。

2.2.2 內(nèi)存管理

支持多進程的現(xiàn)代操作系統(tǒng)一般都會采用基于頁面映射的“虛擬內(nèi)存機制”,內(nèi)存管理器提供了一組系統(tǒng)服務(wù)來完成并發(fā)進程下的各種任務(wù),如下所示:分配和釋放虛擬內(nèi)存;在進程之間共享內(nèi)存;將文件映射到內(nèi)存;將虛擬頁面刷新到磁盤上;獲得一定范圍內(nèi)虛擬頁面的信息;改變虛擬頁面的保護屬性;將虛擬頁面鎖在內(nèi)存中。

內(nèi)存管理服務(wù)允許其調(diào)用者提供一個進程句柄,來指明哪個特定進程的虛擬內(nèi)存需要進行操作。這些服務(wù)中的大多數(shù)是通過Windows API暴露給用戶的,Windows API有三組函數(shù)可用來管理應(yīng)用程序中的內(nèi)存:頁面粒度的虛擬內(nèi)存函數(shù)、內(nèi)存映射文件函數(shù)、堆函數(shù)。

另外,為了緩解文件讀寫過程中反復(fù)讀寫磁盤造成的高負荷,引入了緩存管理,緩存管理能夠?qū)崿F(xiàn)“預(yù)讀”和“延遲寫”的功能。文件系統(tǒng)在接到讀寫文件的請求時,會通過緩存管理器將文件讀寫到緩存緩沖區(qū)中,當(dāng)一段時間內(nèi)出現(xiàn)多次對該文件的讀寫操作時,就避免了多次讀寫磁盤的麻煩。

由以上可以看出,來自于用戶的文件請求,經(jīng)過I/O系統(tǒng)處理后,最終由文件系統(tǒng)在內(nèi)存管理器的配合下直接完成或者下發(fā)給底層驅(qū)動完成。

3 文件系統(tǒng)過濾驅(qū)動透明加密實現(xiàn)

3.1 Windows文件系統(tǒng)過濾驅(qū)動透明加解密原理

文件系統(tǒng)驅(qū)動是一個虛擬設(shè)備驅(qū)動,它與內(nèi)存管理協(xié)同工作實現(xiàn)用戶在計算機系統(tǒng)中的信息管理與操作。

利用文件系統(tǒng)過濾驅(qū)動實現(xiàn)文件透明加解密就是在I/O管理器和文件系統(tǒng)驅(qū)動之間加一層過濾驅(qū)動。本來發(fā)給文件系統(tǒng)的來至于用戶的所有請求,都會先被過濾驅(qū)動截取,只要在過濾驅(qū)動中替換或者擴展原始請求的功能,就能夠?qū)崿F(xiàn)文件的加解密,并且這一過程是在內(nèi)核中自動完成的,不會影響用戶的任何體驗,所以稱作透明加密。圖2展示了過濾驅(qū)動在設(shè)備棧中的位置。

圖2 過濾驅(qū)動在設(shè)備堆棧中的位置

3.2 文件透明加解密實現(xiàn)

Windows驅(qū)動程序工作在內(nèi)核模式下,屬于直接和硬件打交道的模塊,主要由驅(qū)動程序入口函數(shù)、派遣例程、驅(qū)動程序卸載函數(shù)三部分組成。[3]

驅(qū)動程序入口函數(shù)DriverEntry(IN DriverObject,IN RegistryPath),驅(qū)動程序派遣函數(shù)DispatchRutine(IN DeviceObject,IN irp),驅(qū)動卸載函數(shù)XXXUnload(IN DriverObject)。

其中,參數(shù)DriverObject是每一個驅(qū)動程序的唯一驅(qū)動對象,它是在驅(qū)動加載的時候,被內(nèi)核中的對象管理程序所創(chuàng)建的;參數(shù)RegistryPath是一個Unicode(寬字節(jié))字符串,指向此驅(qū)動負責(zé)的注冊表;參數(shù)DeviceObject是設(shè)備對象,每個驅(qū)動程序會有一個或多個設(shè)備對象,設(shè)備對象是由程序員自己創(chuàng)建的,其中保存真實物理設(shè)備的特征和設(shè)備的狀態(tài)信息;參數(shù)irp就是I/O管理器送過來的請求包,驅(qū)動程序會根據(jù)包的內(nèi)容確定調(diào)用哪一個派遣例程,常見的有讀(read),寫(write),打開(open),關(guān)閉(close)等。

當(dāng)驅(qū)動程序被卸載的時候,由I/O管理器負責(zé)調(diào)用驅(qū)動卸載函數(shù),遍歷系統(tǒng)中所有的此類設(shè)備對象,然后刪除這些設(shè)備對象。

(1)配置過濾驅(qū)動

將創(chuàng)建的過濾驅(qū)動的設(shè)備對象掛接到文件系統(tǒng)驅(qū)動所在的驅(qū)動設(shè)備棧。通過函數(shù)IoAttach-DeviceToDeviceStack(IN SourceDevice,IN Target-Device)來實現(xiàn)。接下來對過濾驅(qū)動進行配置,攔截相應(yīng)的文件操作請求,代碼如下:

以上代碼設(shè)置了需要過濾的IRP,如果是與加解密無關(guān)的操作,則直接跳過過濾驅(qū)動,正常下發(fā)到底層驅(qū)動。

預(yù)處理:

后處理:

其中,寫時加密是在寫到磁盤前進行的,即在預(yù)處理中實現(xiàn);讀時解密是在從磁盤讀到內(nèi)存后進行的,即在后處理中實現(xiàn)。

(2)加解密實現(xiàn)過程

加解密時需要知道將要被處理的數(shù)據(jù)在內(nèi)存中的具體位置,我們可以通過了解IO的讀寫方式來獲取這一信息。I/O操作一般有三種方式:緩沖方式、直接方式及其他方式。文件讀寫一般采用后兩種方式[4]。

直接方式使用IRP->MdlAddress來傳遞緩沖區(qū)。因為來自于用戶的請求,其指針指向的緩沖區(qū)都在用戶空間中,工作于內(nèi)核模式下的驅(qū)動程序雖然可以正常使用該指針,但是,如果在完成的時侯,需要其他進程的線程協(xié)同處理,那么就形成了進程切換,這些緩沖區(qū)的指針就失效了。引入MDL的作用是把由用戶空間映射的一段物理地址再用內(nèi)核(系統(tǒng))空間映射一次,即同一段物理地址既屬于用戶空間又屬于內(nèi)核空間,因為所有的進程共享內(nèi)核空間,所以進程切換時,指向內(nèi)核的同一指針的內(nèi)容是相同的。

其他方式使用IRP->UserBuffer來傳遞緩沖區(qū)。直接把用戶空間的指針傳遞到內(nèi)核,不做任何其他處理。前提是整個請求只在當(dāng)前線程的上下文中處理,沒有進行切換。

在WindowsNT及XP系統(tǒng)中,應(yīng)用程序的讀寫文件請求一般遵循如圖3的流程,應(yīng)該根據(jù)此流程編寫加解密代碼。

圖3 應(yīng)用程序的文件讀寫請求過程

加密過程:即函數(shù)EncryptWritePre(irp,Irpsp,context)的處理:

4 總結(jié)

基于文件系統(tǒng)過濾驅(qū)動開發(fā)的文件透明加密系統(tǒng)與windows內(nèi)核緊密關(guān)聯(lián),開發(fā)難度大,容易出錯。但是正因為它是在Windows內(nèi)核實現(xiàn)的,所以,安全機制完善,不容易被攻擊和破解,并且得益于驅(qū)動程序的動態(tài)加載卸載,開發(fā)靈活性高,利用過濾驅(qū)動進行加解密在安全領(lǐng)域具有很高的實用價值。

[1]毛德操.Windows內(nèi)核情景分析[M].北京:電子工業(yè)出版社,2009:1099-1175.

[2]Mark E.Russinovich.Microsoft Windows Internals[M].潘愛明,譯.北京:電子工業(yè)出版社,2010:537-555.

[3]張帆,史彩成.Windows驅(qū)動開發(fā)技術(shù)詳解[M].北京:電子工業(yè)出版社,2008:87-117.

[4]譚文,楊瀟.Windows內(nèi)核安全編程[M].北京:電子工業(yè)出版社,2009:236-262.

猜你喜歡
加解密管理器驅(qū)動程序
應(yīng)急狀態(tài)啟動磁盤管理器
Windows文件緩沖處理技術(shù)概述
電子取證中常見數(shù)據(jù)加解密理論與方法研究
基于FPGA的LFSR異步加解密系統(tǒng)
高集成度2.5A備份電源管理器簡化鋰離子電池備份系統(tǒng)
網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)募咏饷芟到y(tǒng)研究
軟件工程(2014年11期)2014-11-15 20:02:46
快速導(dǎo)出QQ群消息
電腦迷(2014年2期)2014-04-29 19:21:13
基于ANDROID的SMS加密設(shè)計與實現(xiàn)
驅(qū)動程序更新與推薦
驅(qū)動程序更新與推薦
陵水| 东台市| 昔阳县| 呼伦贝尔市| 潜江市| 双鸭山市| 格尔木市| 东兰县| 额尔古纳市| 通江县| 成安县| 天祝| 兰考县| 东阿县| 顺平县| 武乡县| 衢州市| 金乡县| 陇西县| 安多县| 长沙市| 泗水县| 呼图壁县| 玉环县| 沙河市| 达日县| 稻城县| 三穗县| 九江市| 乌鲁木齐县| 会宁县| 新邵县| 新乐市| 蓬莱市| 中宁县| 来安县| 开远市| 同江市| 沅江市| 卢氏县| 新昌县|