陳莉君 田 野 鄭華利(西安郵電大學(xué)計(jì)算機(jī)學(xué)院 陜西 西安 710121)
隨著計(jì)算機(jī)的普及和互聯(lián)網(wǎng)的發(fā)展,人們?cè)诠ぷ魃钪袑?duì)于計(jì)算機(jī)越來越依賴。隨之而來的計(jì)算機(jī)數(shù)據(jù)的使用、操作、存儲(chǔ)等安全問題日漸突出,在操作系統(tǒng)上直接使用系統(tǒng)命令對(duì)文件進(jìn)行刪除已經(jīng)變得不再可靠[1]。由于數(shù)據(jù)沒有及時(shí)銷毀,造成的泄密事件接連發(fā)生。比如,2007年9月,英國EDS公司丟失一塊硬盤,硬盤上包含有“英格蘭和威爾士全國罪犯管理署”雇員的資料,造成數(shù)百萬英鎊的損失;2008年11月,某政府部門在更新辦公設(shè)備時(shí),將一批舊計(jì)算機(jī)賣給舊貨市場(chǎng),導(dǎo)致計(jì)算機(jī)磁盤內(nèi)的大量未安全刪除的信息泄露等。
為此,政府機(jī)關(guān)、國防、軍隊(duì)等許多有高度安全保密需求的單位要求,計(jì)算機(jī)上的機(jī)密文件刪除時(shí)必須要徹底的銷毀,不能夠被恢復(fù)。硬盤作為數(shù)據(jù)文件交換和存儲(chǔ)的介質(zhì),在日常工作中會(huì)被頻繁使用。對(duì)于這些介質(zhì)的不合理使用,會(huì)使得不法分子有機(jī)會(huì)通過一些惡意手段獲取到用戶的重要數(shù)據(jù)。通過對(duì)存儲(chǔ)介質(zhì)上的剩余信息進(jìn)行恢復(fù)處理來竊取曾經(jīng)存儲(chǔ)的機(jī)密信息,導(dǎo)致信息泄露,已經(jīng)成為威脅信息安全的重要隱患。
所謂剩余信息保護(hù)主要是指對(duì)用戶使用過的信息,當(dāng)該用戶不再使用或者不再存在時(shí),應(yīng)當(dāng)采取一定的措施進(jìn)行保護(hù)。針對(duì)這一需求,已經(jīng)有政府及信息安全組織將剩余信息保護(hù)劃分安全等級(jí)并加入相關(guān)標(biāo)準(zhǔn)中,如美國國防部的《可信計(jì)算機(jī)評(píng)估準(zhǔn)則》(TCSEC,1985)、《信息技術(shù)安全性評(píng)估準(zhǔn)則》(CC準(zhǔn)則)中都對(duì)剩余信息保護(hù)進(jìn)行了一定的描述[2]。我國2008年頒布的GB/T22239-2008《信息技術(shù)信息系統(tǒng)安全等級(jí)保護(hù)基本要求》[3]以及JR/T 0060-2010《證券期貨業(yè)信息系統(tǒng)安全等級(jí)保護(hù)測(cè)評(píng)要求》[4]行業(yè)標(biāo)準(zhǔn)中,將剩余信息保護(hù)加入三級(jí)以上的要求。
隨之而來也提出了多種符合標(biāo)準(zhǔn)的剩余信息保護(hù)實(shí)現(xiàn)方式,但由于這些方式都是單一的采取覆寫[5]的方法實(shí)現(xiàn),對(duì)于大文件來說,這些方法的性能受到了限制。因此,本文提出了一種基于LKM的加解密的剩余信息保護(hù)方法。
剩余信息保護(hù)有覆寫、消磁、銷毀三種方式。對(duì)連續(xù)運(yùn)行的操作系統(tǒng),消磁、銷毀的方法雖然對(duì)數(shù)據(jù)的銷毀比較徹底,但由于在消磁、銷毀過程中存在費(fèi)用和環(huán)保等因素,因而基本是不可行的。為此政府安全部門提出的剩余信息保護(hù)都通過多次覆寫的安全刪除來實(shí)現(xiàn),如:
1) Guttmann Method[6]:重寫數(shù)據(jù)區(qū)35次,只考慮數(shù)據(jù)銷毀的徹底性。
2) US DoD 5220-22.M[7]:美國國防部《清理和消毒標(biāo)準(zhǔn)》中的一部分,對(duì)所要清除的數(shù)據(jù)區(qū)進(jìn)行三次覆蓋。
3) US National Security Agency(NSA) guidelines:利用隨機(jī)數(shù)覆寫7次。
以上的三種方式都是采用0、1或隨機(jī)序列直接進(jìn)行多次覆寫[8]。針對(duì)這些方法相關(guān)人員開發(fā)了一些對(duì)應(yīng)的安全刪除工具,如secure delete安全刪除套件(支持磁盤和內(nèi)存中數(shù)據(jù)的安全刪除)、wipe(支持磁盤上的安全刪除)等。這些方式核心實(shí)現(xiàn)均是直接采用多次覆寫方式,無論是磁盤數(shù)據(jù)還是內(nèi)存數(shù)據(jù)。當(dāng)用戶需要安全刪除一個(gè)文件或者目錄時(shí),直接調(diào)用相關(guān)的命令進(jìn)行刪除操作即可。
針對(duì)這幾種工具,經(jīng)過調(diào)研測(cè)試,發(fā)現(xiàn)其都是用戶態(tài)實(shí)現(xiàn),有多次上下文切換和數(shù)據(jù)拷貝的消耗,并且隨著覆寫次數(shù)增多及文件的增大,均會(huì)產(chǎn)生了嚴(yán)重的耗時(shí)問題。本文選取工具secure delete套件進(jìn)行磁盤文件安全刪除性能測(cè)試比對(duì),如圖1所示。
由圖1可以發(fā)現(xiàn)同一個(gè)文件隨著覆寫次數(shù)的增多,所耗費(fèi)的時(shí)間呈線性增加;同樣的覆寫次數(shù),文件越大覆寫耗費(fèi)的時(shí)間越大。
圖1 secure delete磁盤覆寫耗時(shí)對(duì)比
Linux系統(tǒng)調(diào)用[9]發(fā)生時(shí),CPU從用戶態(tài)切換到內(nèi)核態(tài)并執(zhí)行int 0x80匯編指令產(chǎn)生一個(gè)軟中斷,也就是執(zhí)行中斷向量表IDT中的第0x80號(hào)中斷處理函數(shù),從而跳轉(zhuǎn)到system_call()的入口。該函數(shù)檢查EAX寄存器中的系統(tǒng)調(diào)用號(hào),然后在系統(tǒng)調(diào)用表sys_call_table中找到與系統(tǒng)調(diào)用號(hào)對(duì)應(yīng)的內(nèi)核函數(shù)的入口地址,從而執(zhí)行相應(yīng)的內(nèi)核函數(shù)。系統(tǒng)調(diào)用劫持[10]就是通過修改系統(tǒng)調(diào)用表sys_call_table中對(duì)應(yīng)內(nèi)核函數(shù)的地址,以達(dá)到劫持的作用。
出于安全的考慮Linux 2.4版本以后的內(nèi)核,不再導(dǎo)出sys_call_table,也就是無法在內(nèi)核模塊中直接使用,并且sys_call_table所在的內(nèi)存頁是只讀的。對(duì)于這兩個(gè)問題,內(nèi)核中均可以通過一定的方法予以解決。問題一可以通過從/proc/kallsyms內(nèi)核符號(hào)表中獲取到sys_call_table的地址。問題二可以通過lookup_address()找到對(duì)應(yīng)的虛擬地址所在的頁表地址,然后根據(jù)需要重新設(shè)置地址對(duì)應(yīng)的頁表項(xiàng)的讀寫屬性。
系統(tǒng)調(diào)用劫持的整個(gè)過程都是通過LKM[11](Loadable Kernel Modules)實(shí)現(xiàn)的,它是一種可加載的內(nèi)核模塊程序,可以動(dòng)態(tài)的擴(kuò)充內(nèi)核的功能,即在Linux操作系統(tǒng)運(yùn)行過程中就可以添加新的功能,不需要重新編譯內(nèi)核。
eCryptfs是在Linux內(nèi)核2.6.19中引入的一種堆棧式加解密文件系統(tǒng),插在VFS(虛擬文件系統(tǒng)層)和下層真實(shí)物理文件系統(tǒng)之間,支持內(nèi)核版本2.6.19后的所有Linux文件系統(tǒng),為應(yīng)用程序提供動(dòng)態(tài)、高效、透明和安全的加密功能。它已經(jīng)合并到內(nèi)核主分支中,對(duì)于目前主流的Linux操作系統(tǒng)都是通用的。其數(shù)據(jù)的加解密都是通過調(diào)用內(nèi)核加密API來實(shí)現(xiàn),其過程對(duì)用戶完全透明,并且每個(gè)文件都對(duì)應(yīng)一個(gè)獨(dú)有的加密密鑰[12]。
使用eCryptfs透明加解密文件系統(tǒng),會(huì)將文件的加密元數(shù)據(jù)和文件的內(nèi)容存儲(chǔ)在一起[13],每個(gè)文件在底層分為文件頭和數(shù)據(jù)本身兩部分。文件頭中記錄該文件的加密元數(shù)據(jù)信息,數(shù)據(jù)本身即已被加密數(shù)據(jù)的密文內(nèi)容,底層文件存儲(chǔ)格式如圖2所示。
圖2 eCryptfs底層文件格式
本文根據(jù)剩余信息安全標(biāo)準(zhǔn)和現(xiàn)有的實(shí)現(xiàn)方法,設(shè)計(jì)了一種可以提高安全刪除速度并且符合安全標(biāo)準(zhǔn)的剩余信息保護(hù)方法。主要由系統(tǒng)調(diào)用劫持和覆寫兩個(gè)部分組成,均以LKM的方式實(shí)現(xiàn),使得所有的操作完全工作在內(nèi)核態(tài),對(duì)于用戶而言是完全透明(用戶無感知)的,不改變用戶的使用習(xí)慣,內(nèi)核模塊實(shí)現(xiàn)可以動(dòng)態(tài)地加載與卸載,對(duì)于目前主流的Linux操作系統(tǒng)都是可通用的。在指定策略(指定目錄、掛載點(diǎn)或全部的刪除操作)下的所有文件數(shù)據(jù)都生效,其框架模型如圖3所示。
圖3 結(jié)構(gòu)框架
用戶態(tài)下使用rm命令發(fā)起刪除文件的請(qǐng)求,陷入內(nèi)核,調(diào)用對(duì)應(yīng)的內(nèi)核系統(tǒng)調(diào)用進(jìn)行刪除操作??梢允褂胹trace命令跟蹤查找內(nèi)核系統(tǒng)調(diào)用對(duì)應(yīng)為unlinkat,也就是刪除文件最終會(huì)調(diào)用內(nèi)核函數(shù)unlinkat實(shí)現(xiàn)。因而可以對(duì)unlinkat系統(tǒng)調(diào)用進(jìn)行劫持修改,添加安全刪除邏輯。
系統(tǒng)調(diào)用劫持部分:在請(qǐng)求陷入內(nèi)核后不是直接調(diào)用unlinkat進(jìn)行刪除操作,而是定義自己的安全刪除函數(shù),判斷發(fā)起的請(qǐng)求是否是指定策略目錄中的文件,可能只是一個(gè)普通的刪除操作,并不需要安全刪除。若請(qǐng)求的是要安全刪除的文件,然后通過Linux內(nèi)核中存放系統(tǒng)調(diào)用與相應(yīng)的服務(wù)例程的系統(tǒng)調(diào)用表sys_call_table,就可以獲取到原始的unlinakt系統(tǒng)調(diào)用的地址,再將其替換為自定義的my_unlinkat函數(shù),無論用戶態(tài)應(yīng)用是通過系統(tǒng)命令還是函數(shù)接口的方式來請(qǐng)求刪除文件,最終都會(huì)調(diào)用自定義的my_unlinkat來實(shí)現(xiàn)文件的安全刪除操作。
覆寫部分:針對(duì)較少IO操作的大文件場(chǎng)景,添加eCryptfs加解密模塊。首先使用eCryptfs對(duì)指定掛載點(diǎn)或者目錄中的文件進(jìn)行透明加密,然后在刪除時(shí)就可以根據(jù)底層文件存儲(chǔ)格式的不同,對(duì)文件頭和文件密文分別進(jìn)行不同次數(shù)的覆寫操作,以達(dá)到高效的安全刪除效果。具體的文件覆寫操作,由于涉及到加密后文件頭和密文位置的定位問題,可以直接使用eCryptfs中的寫操作函數(shù)eCryptfs_write對(duì)文件頭和文件體進(jìn)行不同粒度的同步覆寫操作,從而完成安全刪除中最重要的覆寫部分。對(duì)于常規(guī)場(chǎng)景來說,文件的覆寫操作直接調(diào)用通用的內(nèi)核write函數(shù)全文覆寫即可。
為了驗(yàn)證本文提出的磁盤剩余信息保護(hù)方法的正確性,根據(jù)給出的框架模型進(jìn)行實(shí)現(xiàn)?;镜牧鞒倘鐖D4所示。
圖4 刪除處理流程
整體安全刪除處理流程描述如下:
1) 應(yīng)用程序發(fā)起刪除文件的請(qǐng)求,通過rm命令陷入內(nèi)核,調(diào)用unlinkat系統(tǒng)調(diào)用。
2) 攔截系統(tǒng)調(diào)用unlinkat,判斷是否滿足自定義的策略(指定后綴、目錄或者進(jìn)程),滿足則需要安全刪除,進(jìn)入自定義的安全刪除邏輯,否則調(diào)用原始的unlinkat進(jìn)行文件刪除操作。
3) 文件名可能會(huì)暴露信息,對(duì)其進(jìn)行隨機(jī)命名操作。
4) open打開文件,獲取文件描述符號(hào),使得文件的引用計(jì)數(shù)i_count不為0,從而可以在后續(xù)成功刪除文件后根據(jù)文件描述符對(duì)文件進(jìn)行覆寫操作。
5) 獲取到文件描述符后,調(diào)用原始的unlinkat對(duì)文件進(jìn)行刪除操作,刪除成功則進(jìn)行覆寫,否則rename文件為原始文件名,然后退出。
6) 成功刪除文件,若是通用文件場(chǎng)景,調(diào)用常規(guī)內(nèi)核write()函數(shù)進(jìn)行全文覆寫操作;若是較少IO操作的大文件場(chǎng)景,則調(diào)用ecryptfs中的函數(shù)ecryptfs_write()對(duì)第5步獲取到的文件描述符進(jìn)行寫操作,實(shí)現(xiàn)對(duì)文件頭和文件體不同粒度的覆寫。文件頭存儲(chǔ)有加密相關(guān)的元數(shù)據(jù)信息,并且占用空間少,可以進(jìn)行較多次數(shù)的覆寫,以提高密鑰的安全性;而文件體存儲(chǔ)的就是文件本身的密文數(shù)據(jù),占用空間較多,因而進(jìn)行較少次數(shù)的覆寫操作。從而整體上提高安全刪除的性能。
為了驗(yàn)證本文所提出的磁盤剩余信息安全刪除方法,設(shè)置實(shí)驗(yàn)環(huán)境如表1所示。
表1 實(shí)驗(yàn)環(huán)境和工具
為了測(cè)試該方法的正確性和可用性,先進(jìn)行正常文件刪除的恢復(fù)以驗(yàn)證本文提出的方式的正確性,然后使用傳統(tǒng)的安全刪除工具和本文提到的方式進(jìn)行數(shù)據(jù)的安全刪除性能的比較。
正常的文件刪除,由于沒有使用隨機(jī)字符進(jìn)行覆寫,因而使用表1中提到的數(shù)據(jù)恢復(fù)工具extundelete(有多種數(shù)據(jù)恢復(fù)工具,本文采用extundelete進(jìn)行實(shí)驗(yàn),其他方式等同),對(duì)其進(jìn)行恢復(fù),可以正確恢復(fù)出已刪除文件中的數(shù)據(jù),并可以查看到文件的內(nèi)容也是正確的,如圖5所示。
圖5 正常文件刪除恢復(fù)
接下來掛載本文的LKM程序,對(duì)其正確性進(jìn)行測(cè)試,由于在刪除文件前對(duì)文件數(shù)據(jù)使用隨機(jī)字符進(jìn)行了多次的覆寫操作,因而使用extundelete數(shù)據(jù)恢復(fù)工具是不能正確恢復(fù)出原本的文件數(shù)據(jù)的,如圖6所示。
圖6 本文方式的刪除恢復(fù)
由圖6可知,恢復(fù)出的文件內(nèi)容為隨機(jī)字符,并且文件名也被隨機(jī)字符覆寫了。由此可見,本文提出的方式是正確的。
傳統(tǒng)用戶態(tài)實(shí)現(xiàn)方式需要頻繁地在用戶態(tài)和內(nèi)核態(tài)進(jìn)行上下文切換,并且還需要進(jìn)行緩沖區(qū)覆寫數(shù)據(jù)的多次拷貝,這兩個(gè)過程都是非常耗時(shí)的。而本文的方式是基于LKM實(shí)現(xiàn)的,不僅可以減少讀寫函數(shù)的上下文切換,而且還可以減少覆寫數(shù)據(jù)的拷貝次數(shù),整體來說性能有所提升。接下來通過多場(chǎng)景實(shí)驗(yàn)來比較兩者的性能差異。
針對(duì)通用的文件刪除場(chǎng)景,選取10 MB大小的文件,分別使用本文提出的方式和現(xiàn)有同類型應(yīng)用(secure delete、shred)進(jìn)行相同次數(shù)的覆寫操作,其性能對(duì)比如圖7所示。
圖7 通用場(chǎng)景性能對(duì)比
針對(duì)較少IO操作的大文件場(chǎng)景,選取250 MB大小的文件,分別使用本文提出的方式和現(xiàn)有同類型應(yīng)用(secure delete、shred)進(jìn)行性能對(duì)比。為了最大化地確保兩種方式具有相同的安全性,對(duì)本文提出的方式中數(shù)據(jù)量較小的文件頭部分采用和同類型應(yīng)用同等次數(shù)的覆寫操作;文件體以加密后的密文數(shù)據(jù)形式存在,為提高剩余信息安全刪除整體的性能,使得數(shù)據(jù)量大的文件體部分的覆寫次數(shù)比現(xiàn)有同類型應(yīng)用secure delete、shred的覆寫次數(shù)少一次,保證了本文實(shí)驗(yàn)的安全性至少不低于同等次數(shù)的傳統(tǒng)方式。其性能對(duì)比結(jié)果如圖8所示。
圖8 大文件場(chǎng)景性能對(duì)比
由上邊兩個(gè)性能對(duì)比圖可知,不管是本文提出方式的通用場(chǎng)景還是大文件場(chǎng)景明顯都比現(xiàn)有同類型應(yīng)用secure delete、shred耗費(fèi)的時(shí)間更短,因此本文提出的方式是可用的,其性能是有所提升的。
接下來對(duì)于加解密本身與文件的一次覆寫的性能消耗進(jìn)行測(cè)試,如圖9所示,當(dāng)文件小于200 MB時(shí)加密操作比覆寫一次稍微耗時(shí)一點(diǎn),但是隨著文件的增大(>200 MB),覆寫一次的時(shí)間消耗逐漸的高于加解密操作。因而,對(duì)于本文中的大文件且IO少的場(chǎng)景來說,加密操作本身的性能消耗是可以忽略的。
圖9 覆寫與加解密性能對(duì)比
最后,利用LTP(Linux Test Project)系統(tǒng)測(cè)試套件對(duì)正常Linux操作系統(tǒng)和掛載了本文中實(shí)現(xiàn)的內(nèi)核模塊的Linux操作系統(tǒng)分別進(jìn)行系統(tǒng)穩(wěn)定性測(cè)試,如圖10所示,兩者之間穩(wěn)定性基本持平,因而本文提出的方案的在系統(tǒng)中是穩(wěn)定的。
圖10 系統(tǒng)穩(wěn)定性對(duì)比
本文提出了一種基于LKM的加密剩余信息保護(hù)方法,并且可以只對(duì)指定策略(目錄、掛載點(diǎn)、以.doc為后綴等)的文件進(jìn)行安全刪除。不僅對(duì)用戶透明,而且還可以減少上下文的切換和數(shù)據(jù)的頻繁拷貝次數(shù)。通過該方法可以有效提升文件數(shù)據(jù)的安全刪除性能,滿足了剩余信息保護(hù)標(biāo)準(zhǔn)。剩余信息不僅存在于磁盤中,而且也存在于內(nèi)存中,本文中實(shí)現(xiàn)了磁盤中的剩余信息保護(hù),對(duì)于內(nèi)存中的剩余信息還無法做到,因此內(nèi)存中的剩余信息保護(hù)是下一步的研究重點(diǎn)。
[1] 李杰.面向安全刪除的Flash數(shù)據(jù)加密存儲(chǔ)機(jī)制研究[D].解放軍信息工程大學(xué),2015.
[2] 中國國家信息安全測(cè)評(píng)認(rèn)證中心 GB/T 18336-2001,信息技術(shù)安全性評(píng)估準(zhǔn)則[S].中國:國家質(zhì)檢總局,2001.
[3] 公安部信息安全等級(jí)保護(hù)評(píng)估中心 GB/T 22239-2008,信息安全技術(shù).信息系統(tǒng)安全等級(jí)保護(hù)基本要求[S].中國:國家質(zhì)檢總局,2008.
[4] 中國證券監(jiān)督管理委員會(huì) JR/T 0060-2010,證券期貨業(yè)信息系統(tǒng)安全等級(jí)保護(hù)測(cè)評(píng)要求[S].中國:中國證券監(jiān)督管理委員會(huì),2011.
[5] 盧興華,劉增良.數(shù)據(jù)殘留與安全刪除方法研究[J].微計(jì)算機(jī)信息,2005,21(33):11- 13.
[6] Gutmann Perter.Secure Deletion of Data from Magnetic and Solid-State Memory[C]//San Jose,California:The Sixth USENIX Security Symposium Proceedings,1996:77- 90.
[7] US.NISPOM-DoD 5220.22-M,National Industry Security Program Operating Manual Chapter 8[S].US,January 1995.
[8] Bauer S, Priyantha N B. Secure Data Deletion for Linux File Systems.[C]// Usenix Security Symposium, August 13- 17, 2001, Washington, D.C. Usa. DBLP, 2001.
[9] 牛晗暉.Linux系統(tǒng)調(diào)用及其安全測(cè)試自動(dòng)化的研究[D].北京交通大學(xué),2009.
[10] 耿顯虎.Linux下LKM安全的分析與改進(jìn)研究[D].電子科技大學(xué),2008.
[11] 徐偉, 賈春福. 擴(kuò)充Linux系統(tǒng)功能的LKM技術(shù)[J]. 計(jì)算機(jī)應(yīng)用研究, 2003, 20(4):100- 102.
[12] 唐曉東, 付松齡, 何連躍. 基于eCryptfs的多用戶加密文件系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)[J]. 計(jì)算機(jī)應(yīng)用, 2010, 30(5):1236- 1238,1242.
[13] 易爭(zhēng)鳴.基于ecryptfs的GPU加密文件系統(tǒng)的研究與實(shí)現(xiàn)[D].蘭州大學(xué),2014.