陳莉君 田 野 鄭華利(西安郵電大學(xué)計算機學(xué)院 陜西 西安 710121)
隨著計算機的普及和互聯(lián)網(wǎng)的發(fā)展,人們在工作生活中對于計算機越來越依賴。隨之而來的計算機數(shù)據(jù)的使用、操作、存儲等安全問題日漸突出,在操作系統(tǒng)上直接使用系統(tǒng)命令對文件進行刪除已經(jīng)變得不再可靠[1]。由于數(shù)據(jù)沒有及時銷毀,造成的泄密事件接連發(fā)生。比如,2007年9月,英國EDS公司丟失一塊硬盤,硬盤上包含有“英格蘭和威爾士全國罪犯管理署”雇員的資料,造成數(shù)百萬英鎊的損失;2008年11月,某政府部門在更新辦公設(shè)備時,將一批舊計算機賣給舊貨市場,導(dǎo)致計算機磁盤內(nèi)的大量未安全刪除的信息泄露等。
為此,政府機關(guān)、國防、軍隊等許多有高度安全保密需求的單位要求,計算機上的機密文件刪除時必須要徹底的銷毀,不能夠被恢復(fù)。硬盤作為數(shù)據(jù)文件交換和存儲的介質(zhì),在日常工作中會被頻繁使用。對于這些介質(zhì)的不合理使用,會使得不法分子有機會通過一些惡意手段獲取到用戶的重要數(shù)據(jù)。通過對存儲介質(zhì)上的剩余信息進行恢復(fù)處理來竊取曾經(jīng)存儲的機密信息,導(dǎo)致信息泄露,已經(jīng)成為威脅信息安全的重要隱患。
所謂剩余信息保護主要是指對用戶使用過的信息,當(dāng)該用戶不再使用或者不再存在時,應(yīng)當(dāng)采取一定的措施進行保護。針對這一需求,已經(jīng)有政府及信息安全組織將剩余信息保護劃分安全等級并加入相關(guān)標(biāo)準(zhǔn)中,如美國國防部的《可信計算機評估準(zhǔn)則》(TCSEC,1985)、《信息技術(shù)安全性評估準(zhǔn)則》(CC準(zhǔn)則)中都對剩余信息保護進行了一定的描述[2]。我國2008年頒布的GB/T22239-2008《信息技術(shù)信息系統(tǒng)安全等級保護基本要求》[3]以及JR/T 0060-2010《證券期貨業(yè)信息系統(tǒng)安全等級保護測評要求》[4]行業(yè)標(biāo)準(zhǔn)中,將剩余信息保護加入三級以上的要求。
隨之而來也提出了多種符合標(biāo)準(zhǔn)的剩余信息保護實現(xiàn)方式,但由于這些方式都是單一的采取覆寫[5]的方法實現(xiàn),對于大文件來說,這些方法的性能受到了限制。因此,本文提出了一種基于LKM的加解密的剩余信息保護方法。
剩余信息保護有覆寫、消磁、銷毀三種方式。對連續(xù)運行的操作系統(tǒng),消磁、銷毀的方法雖然對數(shù)據(jù)的銷毀比較徹底,但由于在消磁、銷毀過程中存在費用和環(huán)保等因素,因而基本是不可行的。為此政府安全部門提出的剩余信息保護都通過多次覆寫的安全刪除來實現(xiàn),如:
1) Guttmann Method[6]:重寫數(shù)據(jù)區(qū)35次,只考慮數(shù)據(jù)銷毀的徹底性。
2) US DoD 5220-22.M[7]:美國國防部《清理和消毒標(biāo)準(zhǔn)》中的一部分,對所要清除的數(shù)據(jù)區(qū)進行三次覆蓋。
3) US National Security Agency(NSA) guidelines:利用隨機數(shù)覆寫7次。
以上的三種方式都是采用0、1或隨機序列直接進行多次覆寫[8]。針對這些方法相關(guān)人員開發(fā)了一些對應(yīng)的安全刪除工具,如secure delete安全刪除套件(支持磁盤和內(nèi)存中數(shù)據(jù)的安全刪除)、wipe(支持磁盤上的安全刪除)等。這些方式核心實現(xiàn)均是直接采用多次覆寫方式,無論是磁盤數(shù)據(jù)還是內(nèi)存數(shù)據(jù)。當(dāng)用戶需要安全刪除一個文件或者目錄時,直接調(diào)用相關(guān)的命令進行刪除操作即可。
針對這幾種工具,經(jīng)過調(diào)研測試,發(fā)現(xiàn)其都是用戶態(tài)實現(xiàn),有多次上下文切換和數(shù)據(jù)拷貝的消耗,并且隨著覆寫次數(shù)增多及文件的增大,均會產(chǎn)生了嚴重的耗時問題。本文選取工具secure delete套件進行磁盤文件安全刪除性能測試比對,如圖1所示。
由圖1可以發(fā)現(xiàn)同一個文件隨著覆寫次數(shù)的增多,所耗費的時間呈線性增加;同樣的覆寫次數(shù),文件越大覆寫耗費的時間越大。

圖1 secure delete磁盤覆寫耗時對比
Linux系統(tǒng)調(diào)用[9]發(fā)生時,CPU從用戶態(tài)切換到內(nèi)核態(tài)并執(zhí)行int 0x80匯編指令產(chǎn)生一個軟中斷,也就是執(zhí)行中斷向量表IDT中的第0x80號中斷處理函數(shù),從而跳轉(zhuǎn)到system_call()的入口。該函數(shù)檢查EAX寄存器中的系統(tǒng)調(diào)用號,然后在系統(tǒng)調(diào)用表sys_call_table中找到與系統(tǒng)調(diào)用號對應(yīng)的內(nèi)核函數(shù)的入口地址,從而執(zhí)行相應(yīng)的內(nèi)核函數(shù)。系統(tǒng)調(diào)用劫持[10]就是通過修改系統(tǒng)調(diào)用表sys_call_table中對應(yīng)內(nèi)核函數(shù)的地址,以達到劫持的作用。
出于安全的考慮Linux 2.4版本以后的內(nèi)核,不再導(dǎo)出sys_call_table,也就是無法在內(nèi)核模塊中直接使用,并且sys_call_table所在的內(nèi)存頁是只讀的。對于這兩個問題,內(nèi)核中均可以通過一定的方法予以解決。問題一可以通過從/proc/kallsyms內(nèi)核符號表中獲取到sys_call_table的地址。問題二可以通過lookup_address()找到對應(yīng)的虛擬地址所在的頁表地址,然后根據(jù)需要重新設(shè)置地址對應(yīng)的頁表項的讀寫屬性。
系統(tǒng)調(diào)用劫持的整個過程都是通過LKM[11](Loadable Kernel Modules)實現(xiàn)的,它是一種可加載的內(nèi)核模塊程序,可以動態(tài)的擴充內(nèi)核的功能,即在Linux操作系統(tǒng)運行過程中就可以添加新的功能,不需要重新編譯內(nèi)核。
eCryptfs是在Linux內(nèi)核2.6.19中引入的一種堆棧式加解密文件系統(tǒng),插在VFS(虛擬文件系統(tǒng)層)和下層真實物理文件系統(tǒng)之間,支持內(nèi)核版本2.6.19后的所有Linux文件系統(tǒng),為應(yīng)用程序提供動態(tài)、高效、透明和安全的加密功能。它已經(jīng)合并到內(nèi)核主分支中,對于目前主流的Linux操作系統(tǒng)都是通用的。其數(shù)據(jù)的加解密都是通過調(diào)用內(nèi)核加密API來實現(xiàn),其過程對用戶完全透明,并且每個文件都對應(yīng)一個獨有的加密密鑰[12]。
使用eCryptfs透明加解密文件系統(tǒng),會將文件的加密元數(shù)據(jù)和文件的內(nèi)容存儲在一起[13],每個文件在底層分為文件頭和數(shù)據(jù)本身兩部分。文件頭中記錄該文件的加密元數(shù)據(jù)信息,數(shù)據(jù)本身即已被加密數(shù)據(jù)的密文內(nèi)容,底層文件存儲格式如圖2所示。

圖2 eCryptfs底層文件格式
本文根據(jù)剩余信息安全標(biāo)準(zhǔn)和現(xiàn)有的實現(xiàn)方法,設(shè)計了一種可以提高安全刪除速度并且符合安全標(biāo)準(zhǔn)的剩余信息保護方法。主要由系統(tǒng)調(diào)用劫持和覆寫兩個部分組成,均以LKM的方式實現(xiàn),使得所有的操作完全工作在內(nèi)核態(tài),對于用戶而言是完全透明(用戶無感知)的,不改變用戶的使用習(xí)慣,內(nèi)核模塊實現(xiàn)可以動態(tài)地加載與卸載,對于目前主流的Linux操作系統(tǒng)都是可通用的。在指定策略(指定目錄、掛載點或全部的刪除操作)下的所有文件數(shù)據(jù)都生效,其框架模型如圖3所示。

圖3 結(jié)構(gòu)框架
用戶態(tài)下使用rm命令發(fā)起刪除文件的請求,陷入內(nèi)核,調(diào)用對應(yīng)的內(nèi)核系統(tǒng)調(diào)用進行刪除操作。可以使用strace命令跟蹤查找內(nèi)核系統(tǒng)調(diào)用對應(yīng)為unlinkat,也就是刪除文件最終會調(diào)用內(nèi)核函數(shù)unlinkat實現(xiàn)。因而可以對unlinkat系統(tǒng)調(diào)用進行劫持修改,添加安全刪除邏輯。
系統(tǒng)調(diào)用劫持部分:在請求陷入內(nèi)核后不是直接調(diào)用unlinkat進行刪除操作,而是定義自己的安全刪除函數(shù),判斷發(fā)起的請求是否是指定策略目錄中的文件,可能只是一個普通的刪除操作,并不需要安全刪除。若請求的是要安全刪除的文件,然后通過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ù)接口的方式來請求刪除文件,最終都會調(diào)用自定義的my_unlinkat來實現(xiàn)文件的安全刪除操作。
覆寫部分:針對較少IO操作的大文件場景,添加eCryptfs加解密模塊。首先使用eCryptfs對指定掛載點或者目錄中的文件進行透明加密,然后在刪除時就可以根據(jù)底層文件存儲格式的不同,對文件頭和文件密文分別進行不同次數(shù)的覆寫操作,以達到高效的安全刪除效果。具體的文件覆寫操作,由于涉及到加密后文件頭和密文位置的定位問題,可以直接使用eCryptfs中的寫操作函數(shù)eCryptfs_write對文件頭和文件體進行不同粒度的同步覆寫操作,從而完成安全刪除中最重要的覆寫部分。對于常規(guī)場景來說,文件的覆寫操作直接調(diào)用通用的內(nèi)核write函數(shù)全文覆寫即可。
為了驗證本文提出的磁盤剩余信息保護方法的正確性,根據(jù)給出的框架模型進行實現(xiàn)。基本的流程如圖4所示。

圖4 刪除處理流程
整體安全刪除處理流程描述如下:
1) 應(yīng)用程序發(fā)起刪除文件的請求,通過rm命令陷入內(nèi)核,調(diào)用unlinkat系統(tǒng)調(diào)用。
2) 攔截系統(tǒng)調(diào)用unlinkat,判斷是否滿足自定義的策略(指定后綴、目錄或者進程),滿足則需要安全刪除,進入自定義的安全刪除邏輯,否則調(diào)用原始的unlinkat進行文件刪除操作。
3) 文件名可能會暴露信息,對其進行隨機命名操作。
4) open打開文件,獲取文件描述符號,使得文件的引用計數(shù)i_count不為0,從而可以在后續(xù)成功刪除文件后根據(jù)文件描述符對文件進行覆寫操作。
5) 獲取到文件描述符后,調(diào)用原始的unlinkat對文件進行刪除操作,刪除成功則進行覆寫,否則rename文件為原始文件名,然后退出。
6) 成功刪除文件,若是通用文件場景,調(diào)用常規(guī)內(nèi)核write()函數(shù)進行全文覆寫操作;若是較少IO操作的大文件場景,則調(diào)用ecryptfs中的函數(shù)ecryptfs_write()對第5步獲取到的文件描述符進行寫操作,實現(xiàn)對文件頭和文件體不同粒度的覆寫。文件頭存儲有加密相關(guān)的元數(shù)據(jù)信息,并且占用空間少,可以進行較多次數(shù)的覆寫,以提高密鑰的安全性;而文件體存儲的就是文件本身的密文數(shù)據(jù),占用空間較多,因而進行較少次數(shù)的覆寫操作。從而整體上提高安全刪除的性能。
為了驗證本文所提出的磁盤剩余信息安全刪除方法,設(shè)置實驗環(huán)境如表1所示。

表1 實驗環(huán)境和工具
為了測試該方法的正確性和可用性,先進行正常文件刪除的恢復(fù)以驗證本文提出的方式的正確性,然后使用傳統(tǒng)的安全刪除工具和本文提到的方式進行數(shù)據(jù)的安全刪除性能的比較。
正常的文件刪除,由于沒有使用隨機字符進行覆寫,因而使用表1中提到的數(shù)據(jù)恢復(fù)工具extundelete(有多種數(shù)據(jù)恢復(fù)工具,本文采用extundelete進行實驗,其他方式等同),對其進行恢復(fù),可以正確恢復(fù)出已刪除文件中的數(shù)據(jù),并可以查看到文件的內(nèi)容也是正確的,如圖5所示。

圖5 正常文件刪除恢復(fù)
接下來掛載本文的LKM程序,對其正確性進行測試,由于在刪除文件前對文件數(shù)據(jù)使用隨機字符進行了多次的覆寫操作,因而使用extundelete數(shù)據(jù)恢復(fù)工具是不能正確恢復(fù)出原本的文件數(shù)據(jù)的,如圖6所示。

圖6 本文方式的刪除恢復(fù)
由圖6可知,恢復(fù)出的文件內(nèi)容為隨機字符,并且文件名也被隨機字符覆寫了。由此可見,本文提出的方式是正確的。
傳統(tǒng)用戶態(tài)實現(xiàn)方式需要頻繁地在用戶態(tài)和內(nèi)核態(tài)進行上下文切換,并且還需要進行緩沖區(qū)覆寫數(shù)據(jù)的多次拷貝,這兩個過程都是非常耗時的。而本文的方式是基于LKM實現(xiàn)的,不僅可以減少讀寫函數(shù)的上下文切換,而且還可以減少覆寫數(shù)據(jù)的拷貝次數(shù),整體來說性能有所提升。接下來通過多場景實驗來比較兩者的性能差異。
針對通用的文件刪除場景,選取10 MB大小的文件,分別使用本文提出的方式和現(xiàn)有同類型應(yīng)用(secure delete、shred)進行相同次數(shù)的覆寫操作,其性能對比如圖7所示。

圖7 通用場景性能對比
針對較少IO操作的大文件場景,選取250 MB大小的文件,分別使用本文提出的方式和現(xiàn)有同類型應(yīng)用(secure delete、shred)進行性能對比。為了最大化地確保兩種方式具有相同的安全性,對本文提出的方式中數(shù)據(jù)量較小的文件頭部分采用和同類型應(yīng)用同等次數(shù)的覆寫操作;文件體以加密后的密文數(shù)據(jù)形式存在,為提高剩余信息安全刪除整體的性能,使得數(shù)據(jù)量大的文件體部分的覆寫次數(shù)比現(xiàn)有同類型應(yīng)用secure delete、shred的覆寫次數(shù)少一次,保證了本文實驗的安全性至少不低于同等次數(shù)的傳統(tǒng)方式。其性能對比結(jié)果如圖8所示。

圖8 大文件場景性能對比
由上邊兩個性能對比圖可知,不管是本文提出方式的通用場景還是大文件場景明顯都比現(xiàn)有同類型應(yīng)用secure delete、shred耗費的時間更短,因此本文提出的方式是可用的,其性能是有所提升的。
接下來對于加解密本身與文件的一次覆寫的性能消耗進行測試,如圖9所示,當(dāng)文件小于200 MB時加密操作比覆寫一次稍微耗時一點,但是隨著文件的增大(>200 MB),覆寫一次的時間消耗逐漸的高于加解密操作。因而,對于本文中的大文件且IO少的場景來說,加密操作本身的性能消耗是可以忽略的。

圖9 覆寫與加解密性能對比
最后,利用LTP(Linux Test Project)系統(tǒng)測試套件對正常Linux操作系統(tǒng)和掛載了本文中實現(xiàn)的內(nèi)核模塊的Linux操作系統(tǒng)分別進行系統(tǒng)穩(wěn)定性測試,如圖10所示,兩者之間穩(wěn)定性基本持平,因而本文提出的方案的在系統(tǒng)中是穩(wěn)定的。

圖10 系統(tǒng)穩(wěn)定性對比
本文提出了一種基于LKM的加密剩余信息保護方法,并且可以只對指定策略(目錄、掛載點、以.doc為后綴等)的文件進行安全刪除。不僅對用戶透明,而且還可以減少上下文的切換和數(shù)據(jù)的頻繁拷貝次數(shù)。通過該方法可以有效提升文件數(shù)據(jù)的安全刪除性能,滿足了剩余信息保護標(biāo)準(zhǔn)。剩余信息不僅存在于磁盤中,而且也存在于內(nèi)存中,本文中實現(xiàn)了磁盤中的剩余信息保護,對于內(nèi)存中的剩余信息還無法做到,因此內(nèi)存中的剩余信息保護是下一步的研究重點。
[1] 李杰.面向安全刪除的Flash數(shù)據(jù)加密存儲機制研究[D].解放軍信息工程大學(xué),2015.
[2] 中國國家信息安全測評認證中心 GB/T 18336-2001,信息技術(shù)安全性評估準(zhǔn)則[S].中國:國家質(zhì)檢總局,2001.
[3] 公安部信息安全等級保護評估中心 GB/T 22239-2008,信息安全技術(shù).信息系統(tǒng)安全等級保護基本要求[S].中國:國家質(zhì)檢總局,2008.
[4] 中國證券監(jiān)督管理委員會 JR/T 0060-2010,證券期貨業(yè)信息系統(tǒng)安全等級保護測評要求[S].中國:中國證券監(jiān)督管理委員會,2011.
[5] 盧興華,劉增良.數(shù)據(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)用及其安全測試自動化的研究[D].北京交通大學(xué),2009.
[10] 耿顯虎.Linux下LKM安全的分析與改進研究[D].電子科技大學(xué),2008.
[11] 徐偉, 賈春福. 擴充Linux系統(tǒng)功能的LKM技術(shù)[J]. 計算機應(yīng)用研究, 2003, 20(4):100- 102.
[12] 唐曉東, 付松齡, 何連躍. 基于eCryptfs的多用戶加密文件系統(tǒng)設(shè)計和實現(xiàn)[J]. 計算機應(yīng)用, 2010, 30(5):1236- 1238,1242.
[13] 易爭鳴.基于ecryptfs的GPU加密文件系統(tǒng)的研究與實現(xiàn)[D].蘭州大學(xué),2014.