基于分層文件系統(tǒng)的Windows內(nèi)核文件透明過濾的方法
【專利摘要】一種基于分層文件系統(tǒng)的Windows內(nèi)核文件透明過濾的方法,通過在Windows文件系統(tǒng)過濾驅(qū)動中創(chuàng)建一個分層文件系統(tǒng)實現(xiàn)文件透明過濾,進(jìn)而實現(xiàn)文件透明加密,來保護(hù)云環(huán)境下的隱私數(shù)據(jù)。本發(fā)明較好地解決了上述Windows平臺下文件透明過濾的問題,能夠不必針對同一文件不同的明文、密文內(nèi)容反復(fù)清除緩存,提高了效率,同時還能夠靈活定制I/O操作的語義,有更為廣泛的應(yīng)用空間。
【專利說明】基于分層文件系統(tǒng)的Windows內(nèi)核文件透明過濾的方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及云環(huán)境下隱私數(shù)據(jù)的保護(hù)方法,具體是一種基于分層文件系統(tǒng) (Layerfsd)的Windows內(nèi)核文件透明過濾的方法,保護(hù)云環(huán)境下隱私數(shù)據(jù)。
【背景技術(shù)】
[0002] 云環(huán)境下隱私數(shù)據(jù)的保護(hù)具有廣泛的應(yīng)用價值。通過實現(xiàn)文件透明加密,可以保 護(hù)云環(huán)境下的隱私數(shù)據(jù)。通過文件透明過濾的方法,在寫入文件時對文件內(nèi)容進(jìn)行加密,在 讀取文件時對文件內(nèi)容進(jìn)行解密,就實現(xiàn)了文件透明加密,如圖1所示。
[0003] 然而,在Windows操作系統(tǒng)中進(jìn)行文件透明過濾具有實現(xiàn)上的困難。這是因為在 Windows內(nèi)核中,文件系統(tǒng)、虛擬內(nèi)存管理器和緩存管理器緊密耦合,如圖2所示。當(dāng)用戶通 過ReadFileOAPI來讀取文件時,首先會經(jīng)過文件系統(tǒng)。如果文件系統(tǒng)發(fā)現(xiàn)虛擬內(nèi)存中存 在緩存的內(nèi)容,就會使用緩存中的內(nèi)容。在這種情況下,可以在文件系統(tǒng)之上安裝一個過濾 驅(qū)動,截獲用戶的訪問并對返回的內(nèi)容進(jìn)行修改。當(dāng)用戶通過內(nèi)存映射來訪問文件時,情況 則有所不同。如果文件的內(nèi)容不在緩存中,就會產(chǎn)生缺頁中斷,并調(diào)用文件系統(tǒng)來獲取文件 的內(nèi)容;如果文件的內(nèi)容在緩存中,就不會產(chǎn)生缺頁中斷,即使在文件系統(tǒng)之上安裝過濾驅(qū) 動,也無法截獲任何訪問。
[0004] 這就產(chǎn)生了一個問題,假設(shè)要實現(xiàn)一種文件透明加密,包含一個進(jìn)程列表,在此列 表中的進(jìn)程才能訪問文件的真實內(nèi)容,通過在讀取和寫入時進(jìn)行解密和加密;而其他進(jìn)程 只能訪問原始的文件內(nèi)容,即加密后的數(shù)據(jù)。使用普通的文件系統(tǒng)過濾方法無法實現(xiàn)上述 需求,因為緩存中只能保存一種文件的內(nèi)容,即明文或密文二者取其一。而用戶總可以通過 內(nèi)存映射的方法,使得文件系統(tǒng)過濾驅(qū)動無法截獲到任何請求。
[0005] 這類問題對文件透明過濾在Windows平臺上的應(yīng)用產(chǎn)生了限制。例如,如果不解 決這類問題,就無法實現(xiàn)同時支持明文、密文訪問的文件透明加密系統(tǒng)。
[0006] 在與Windows下文件透明加密的相關(guān)已公開專利CN102129540A和CN102567670A 中,都使用了普通的文件系統(tǒng)過濾驅(qū)動,直接截獲對文件的讀取和寫入操作,并加入加密和 解密的動作,并未考慮緩存的影響,因此存在上述問題,無法做到根據(jù)進(jìn)程的狀態(tài)返回明文 或者密文。
[0007] 工業(yè)界廣泛使用一種刷新緩存的方法,即當(dāng)同一個文件在被機(jī)密進(jìn)程和非機(jī)密進(jìn) 程訪問之間,強(qiáng)制將有關(guān)的緩存清空。這樣,當(dāng)緩存中的內(nèi)容非法時,緩存一定不會被命中, 從而一定會請求文件系統(tǒng)提供內(nèi)容,并經(jīng)過安裝在其上的過濾驅(qū)動。然而,這大大降低了整 個系統(tǒng)的工作效率,尤其在不同狀態(tài)的進(jìn)程頻繁切換時。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明針對上述現(xiàn)有技術(shù)的不足,提出了一種基于分層文件系統(tǒng)(Layerfsd)的 Windows內(nèi)核文件透明過濾的方法,解決了上述Windows平臺下文件透明過濾的問題。所述 的分層文件系統(tǒng)驅(qū)動是指在原本的文件系統(tǒng)之上實現(xiàn)了一層新的抽象的文件系統(tǒng)。
[0009] 本發(fā)明原理如下:
[0010] 如圖3所示,普通的文件系統(tǒng)過濾驅(qū)動僅僅截獲、改變I/O請求的內(nèi)容,處理后的 請求仍然被請求發(fā)送到原來的文件系統(tǒng),應(yīng)用程序中看到的文件屬于原來的文件系統(tǒng)。而 本發(fā)明實現(xiàn)了一個分層的文件系統(tǒng),通過在原文件系統(tǒng)上安裝一個特殊的過濾驅(qū)動,該過 濾驅(qū)動中包含一個分層的文件系統(tǒng)。部分符合條件I/O請求被轉(zhuǎn)發(fā)到分層文件系統(tǒng),應(yīng)用 程序中看到的文件屬于該分層文件系統(tǒng),原本的文件系統(tǒng)僅提供底層的功能支持;而另一 部分不符合條件的I/O請求被轉(zhuǎn)發(fā)到原文件系統(tǒng)。
[0011] 本發(fā)明的具體技術(shù)解決方案如下:
[0012] 一種基于分層文件系統(tǒng)的Windows內(nèi)核文件透明過濾的方法,其特點在于,該方 法包括如下步驟:
[0013] 首先,將文件系統(tǒng)過濾驅(qū)動直接或間接地綁定在原有的文件系統(tǒng)驅(qū)動上,使之能 夠截獲I/O管理器下發(fā)的IRP(I/〇 Request Packet)。這既可以通過傳統(tǒng)的方法,即綁定 文件系統(tǒng)的控制設(shè)備與卷設(shè)備;也可以實現(xiàn)為一個Mini-filter。當(dāng)實現(xiàn)為一個Mini-filter 時,我們需要注冊綁定所有的IRP,不能遺漏。
[0014] 然后,當(dāng)用戶請求操作系統(tǒng)創(chuàng)建或打開一個文件時,I/O管理器會請求創(chuàng)建一個文 件對象,并下發(fā)功能號為IRP_MJ_CREATE的IRP,文件系統(tǒng)過濾驅(qū)動將截獲該IRP,獲取文件 名和打開方式信息,并根據(jù)用戶的選擇,決定是否接管這個文件的I/O操作:
[0015] 如果選擇不接管這個文件的I/O操作,則直接下發(fā)原來的IRP到原文件系統(tǒng);
[0016] 如果選擇接管這個文件的I/O操作,則創(chuàng)建一個FCB (File Control Block),該 FCB屬于分層文件系統(tǒng),且滿足三個要求:能和I/O管理器正常交互、能被過濾驅(qū)動識別、包 含下層文件系統(tǒng)的文件句柄;
[0017] 當(dāng)用戶請求操作系統(tǒng)對一個文件進(jìn)行打開或創(chuàng)建以外的操作時,1/0管理器會對 下層文件系統(tǒng)下發(fā)一個包含該1/0操作功能號的IRP ;此時,包含分層文件系統(tǒng)的文件系統(tǒng) 過濾驅(qū)動將截獲所有1/0操作功能號的IRP(由于文件系統(tǒng)過濾驅(qū)動被綁定在原有的文件 系統(tǒng)驅(qū)動上,1/0管理器在下發(fā)IRP時會經(jīng)過文件系統(tǒng)過濾驅(qū)動,從而得到該驅(qū)動),并判斷 1/0操作所針對的文件對象中的FCB是否屬于該分層文件系統(tǒng):
[0018] 如果屬于該分層文件系統(tǒng),則在文件系統(tǒng)過濾驅(qū)動中完成該IRP的處理,具體是: [0019] 對于不需要修改語義的1/0操作,直接生成內(nèi)容完全相同、目標(biāo)為下層文件對象 的IRP,并調(diào)用下層文件系統(tǒng),待下層文件系統(tǒng)完成請求后,將1/0結(jié)果按原樣返回給用戶;
[0020] 對于需要修改語義的1/0操作,利用分層文件系統(tǒng)定制1/0操作的語義,一個上層 的1/0操作,對應(yīng)于零個、一個或多個下層的1/0操作。
[0021] 如果不屬于該分層文件系統(tǒng),則下發(fā)該IRP到下層文件系統(tǒng);
[0022] 最后,文件系統(tǒng)過濾驅(qū)動處理文件的關(guān)閉。
[0023] 與現(xiàn)有技術(shù)相比,本發(fā)明具有如下有益效果:
[0024] (1)能夠不必針對同一文件不同的明文、密文內(nèi)容反復(fù)清除緩存,提高了效率。
[0025] (2)能夠靈活定制1/0操作的語義,有更為廣泛的應(yīng)用空間。
【專利附圖】
【附圖說明】
[0026] 圖1描述了通過文件透明過濾實現(xiàn)文件透明加密的方法
[0027] 圖2描述了文件系統(tǒng)、虛擬內(nèi)存和緩存管理器的緊密耦合關(guān)系
[0028] 圖3比較了普通文件系統(tǒng)過濾驅(qū)動和使用分層文件系統(tǒng)的文件系統(tǒng)過濾驅(qū)動的 異同
[0029] 圖4包含了本發(fā)明實施例的系統(tǒng)架構(gòu)
[0030] 圖5描述了本發(fā)明實施例中對IRP進(jìn)行分發(fā)的流程
[0031] 圖6描述了本發(fā)明實施例中打開文件操作的處理序列。
【具體實施方式】
[0032] 下文將結(jié)合附圖對本發(fā)明的實施例作詳細(xì)說明。本實施例在以本發(fā)明技術(shù)方案為 前提下進(jìn)行實施,給出了詳細(xì)的實施方式和具體的操作過程。本發(fā)明的保護(hù)范圍包括但不 限于下述實施例。
[0033] 本實施例為基于分層文件系統(tǒng)的Windows內(nèi)核透明加密系統(tǒng),采用了上述發(fā)明的 基于分層文件系統(tǒng)的文件透明過濾方法,旨在為云環(huán)境下的用戶隱私建模和隱私節(jié)點保 護(hù)。本實施例包括一個文件系統(tǒng)過濾驅(qū)動,一個服務(wù)進(jìn)程和一個服務(wù)器,如圖4所示。
[0034] 文件系統(tǒng)過濾驅(qū)動為本系統(tǒng)的核心,應(yīng)用了基于分層文件系統(tǒng)的文件透明過濾方 法,當(dāng)被訪問的文件為機(jī)密文件,并且訪問文件的進(jìn)程為機(jī)密進(jìn)程時,應(yīng)用透明加密:在所 有讀取操作時透明地解密,在所有寫入操作時透明地加密。
[0035] 該過濾驅(qū)動基于微軟提供的Mini-filter框架實現(xiàn),該框架用于簡化文件系統(tǒng)過 濾驅(qū)動開發(fā)以及增強(qiáng)其兼容性。在驅(qū)動中需要指定待過濾的I/O操作功能號列表并在入口 點處進(jìn)行注冊。普通的文件系統(tǒng)過濾驅(qū)動中,一般只注冊必要的I/O操作功能號,以達(dá)到最 優(yōu)性能;然而如同
【發(fā)明內(nèi)容】
章節(jié)所述,我們需要實現(xiàn)一層文件系統(tǒng),需要接管屬于這層文件 系統(tǒng)的文件的所有I/O操作,所以我們需要注冊所有的I/O操作功能號。
[0036] 當(dāng)IRP被I/O管理器下發(fā)到目標(biāo)文件系統(tǒng)之前,會經(jīng)過所有掛載在文件系統(tǒng)設(shè)備 之上的過濾驅(qū)動。此時,Mini-filter框架會調(diào)用指定的回調(diào)函數(shù)。該函數(shù)對IRP的I/O功 能號進(jìn)行判斷并分別處理,如圖5所示。
[0037] 如果I/O功能號為IRP_MJ_CREATE,即創(chuàng)建或打開一個文件:若當(dāng)前進(jìn)程為機(jī)密 進(jìn)程,且被訪問的文件為機(jī)密文件時,創(chuàng)建一個屬于我們分層文件系統(tǒng)的FCB,并返回FLT_ PRE0P_C0MPLETE 以完成 I/O 操作;否則返回 FLT_PREOP_SUCCESS_NO_CALLBACK 以將該 IRP 下發(fā)到原文件系統(tǒng)。
[0038] 如果I/O功能號為其他:若被訪問文件的FCB屬于分層文件系統(tǒng),則根據(jù)I/O功能 號對I/O操作進(jìn)行分別處理,并返回FLT_PRE0P_C0MPLETE以完成I/O操作;否則返回FLT_ PREOP_SUCCESS_NO_CALLBACK以將該IRP下發(fā)到原文件系統(tǒng)。
[0039] 創(chuàng)建FCB的過程富有技巧性。如前文所述,F(xiàn)CB必須滿足三個要求,因此設(shè)計FCB 結(jié)構(gòu)如下列代碼清單:
[0040]
【權(quán)利要求】
1. 一種基于分層文件系統(tǒng)的Windows內(nèi)核文件透明過濾的方法,其特征在于,該方法 包括如下步驟: 首先,將文件系統(tǒng)過濾驅(qū)動直接或間接地綁定在原有的文件系統(tǒng)驅(qū)動上,使之能夠截 獲I/O管理器下發(fā)的IRP; 然后,當(dāng)用戶請求操作系統(tǒng)創(chuàng)建或打開一個文件時,I/O管理器會請求創(chuàng)建一個文件對 象,并下發(fā)功能號為IRP_MJ_CREATE的IRP,包含分層文件系統(tǒng)的文件系統(tǒng)過濾驅(qū)動將截獲 該IRP,獲取文件名和打開方式信息,并根據(jù)用戶的選擇,決定是否接管這個文件的I/O操 作: 如果選擇不接管這個文件的I/O操作,則直接下發(fā)原來的IRP到原文件系統(tǒng); 如果選擇接管這個文件的I/O操作,則創(chuàng)建一個FCB,該FCB屬于分層文件系統(tǒng),且滿足 三個要求:能和I/O管理器正常交互、能被過濾驅(qū)動識別、包含下層文件系統(tǒng)的文件句柄; 當(dāng)用戶請求操作系統(tǒng)對一個文件進(jìn)行打開或創(chuàng)建以外的操作時,I/O管理器會對下層 文件系統(tǒng)下發(fā)一個包含該I/O操作功能號的IRP ;此時,包含分層文件系統(tǒng)的文件系統(tǒng)過濾 驅(qū)動將截獲所有I/O操作功能號的IRP,并判斷I/O操作所針對的文件對象中的FCB是否屬 于該分層文件系統(tǒng): 如果屬于該分層文件系統(tǒng),則在文件系統(tǒng)過濾驅(qū)動中完成該IRP的處理; 如果不屬于該分層文件系統(tǒng),則下發(fā)該IRP到下層文件系統(tǒng); 最后,文件系統(tǒng)過濾驅(qū)動處理文件的關(guān)閉。
2. 根據(jù)權(quán)利要求1所述的基于分層文件系統(tǒng)的Windows內(nèi)核文件透明過濾的方法,其 特征在于,在文件系統(tǒng)過濾驅(qū)動中完成該IRP的處理,具體實現(xiàn)方法是: 對于不需要修改語義的I/O操作,直接生成內(nèi)容完全相同、目標(biāo)為下層文件對象的 IRP,并調(diào)用下層文件系統(tǒng),待下層文件系統(tǒng)完成請求后,將I/O結(jié)果按原樣返回給用戶; 對于需要修改語義的I/O操作,利用分層文件系統(tǒng)定制I/O操作的語義,一個上層的1/ 〇操作,對應(yīng)于零個、一個或多個下層的I/O操作。
【文檔編號】G06F21/60GK104123371SQ201410360078
【公開日】2014年10月29日 申請日期:2014年7月25日 優(yōu)先權(quán)日:2014年7月25日
【發(fā)明者】管海兵, 龔路, 戚正偉 申請人:上海交通大學(xué)