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