黃益彬,鄭衛(wèi)波,宋子鋒
(南瑞集團(tuán)公司(國網(wǎng)電力科學(xué)研究院),江蘇 南京 210003)
操作系統(tǒng)客體重用安全的研究
黃益彬,鄭衛(wèi)波,宋子鋒
(南瑞集團(tuán)公司(國網(wǎng)電力科學(xué)研究院),江蘇 南京 210003)
內(nèi)存、磁盤等客體資源在系統(tǒng)運行過程中會被不同主體反復(fù)使用,在客體資源被前一個主體釋放,并分配給下一個主體時,前一個主體殘留在客體中的信息就可能被下一個主體獲取,從而造成信息泄露。針對安全操作系統(tǒng)面臨的客體重用與剩余信息保護(hù)的要求,在分析研究操作系統(tǒng)中存在的客體重用安全風(fēng)險的基礎(chǔ)上,提出了在Linux操作系統(tǒng)中實現(xiàn)客體安全重用的方法。該方法在Linux內(nèi)核層監(jiān)視內(nèi)存、磁盤操作,捕獲內(nèi)存頁分配、磁盤空間釋放等事件,并根據(jù)用戶配置,對即將分配的內(nèi)存頁進(jìn)行清零,對即將釋放的磁盤空間進(jìn)行安全擦除,從而保證客體在被重用前,客體中殘留的信息得到有效清除。實驗結(jié)果表明,該方法不僅透明地實現(xiàn)了客體安全重用,而且在性能上損失較小,不會影響系統(tǒng)的正常使用。
安全操作系統(tǒng);客體重用;信息泄露;剩余信息保護(hù);安全擦除
現(xiàn)代操作系統(tǒng)采用的都是多用戶多任務(wù)的模式,操作系統(tǒng)統(tǒng)一管理所有的內(nèi)存、磁盤文件等客體資源。當(dāng)操作系統(tǒng)將上一個主體使用的客體資源釋放后,分配給下一個主體使用時,如果不做任何處理,則上一個主體對客體資源操作殘留的信息就可能被下一個主體獲取,存在信息泄露的風(fēng)險。
美國國防部1985年制定發(fā)布的TCSEC標(biāo)準(zhǔn)(Trusted Computer System Evaluation Criteria,可信計算機(jī)系統(tǒng)評價準(zhǔn)則)[1]對客體安全重用的要求為:在重新分配包含一個或多個客體的介質(zhì)(如頁面、磁盤扇區(qū)、磁帶)給主體時,為了達(dá)到安全分配的目的,這些介質(zhì)中不能包含剩余信息。TCSEC將計算機(jī)安全從低到高分為四等七級:最低保護(hù)等級(D)、自主保護(hù)等級(C1、C2)、強(qiáng)制保護(hù)等級(B1、B2、B3)和驗證保護(hù)等級(A1)??腕w重用機(jī)制一直貫穿于TCSEC的C2級到A1級。1991年由歐洲四國(英、法、荷、德)制定的ITSEC標(biāo)準(zhǔn)(Information Technology Security Evaluation Criteria,信息技術(shù)安全評價準(zhǔn)則)[2]以及后來歐美等國聯(lián)合制定的CC標(biāo)準(zhǔn)(Common Criteria for IT Security Evaluation,信息技術(shù)安全評價通用準(zhǔn)則)[3]都對客體安全重用提出了類似要求。
中國的國家標(biāo)準(zhǔn)GB 17859-1999《計算機(jī)信息系統(tǒng)安全保護(hù)等級劃分準(zhǔn)則》[4]對客體重用的要求為:在計算機(jī)信息系統(tǒng)可信計算基(Trusted Computing Base,TCB)的空閑存儲客體空間中,對客體初始指定、分配或在分配一個主體之前,撤消該客體所含信息的所有授權(quán)。當(dāng)主體獲得對一個已被釋放的客體的訪問權(quán)時,當(dāng)前主體不能獲得原主體活動所產(chǎn)生的任何信息。
GB 17859-1999規(guī)定了計算機(jī)系統(tǒng)安全保護(hù)能力的五個等級,即:用戶自主保護(hù)級(第一級),系統(tǒng)審計保護(hù)級(第二級),安全標(biāo)記保護(hù)級(第三級),結(jié)構(gòu)化保護(hù)級(第四級),訪問驗證保護(hù)級(第五級)??腕w重用機(jī)制一直貫穿于GB 17859-1999的第二級到第五級。國標(biāo)GB/T 20271-2006[5]和國標(biāo)GB/T 20272-2006[6]對此也做出了類似要求。
可見,客體安全重用是高安全等級的計算機(jī)系統(tǒng)的基本要求。為此,在分析研究不同客體資源在重用過程中可能存在安全問題的基礎(chǔ)上,針對Linux系統(tǒng),提出了在系統(tǒng)底層實現(xiàn)客體安全重用的方法。通過實驗,驗證了該方法能夠?qū)崿F(xiàn)內(nèi)存、磁盤等客體資源的安全重用,同時,該方法引入的性能損失很小,不影響系統(tǒng)的正常使用。
計算機(jī)系統(tǒng)中存在客體重用安全問題的資源主要包括寄存器、易失性存儲器(如cache、內(nèi)存)和非易失存儲器(如磁盤、磁帶等)。在系統(tǒng)中,這些客體資源一般都是多用戶多進(jìn)程共同使用的,因此,在資源重用的過程中,存在安全問題。
1.1 寄存器
當(dāng)前的計算機(jī)體系結(jié)構(gòu)中,寄存器是CPU的重要組成部分,CPU指令的獲取、運算結(jié)果的存儲、狀態(tài)標(biāo)識等,都離不開寄存器。寄存器記錄著CPU當(dāng)前運行任務(wù)的各種信息,在多用戶多任務(wù)系統(tǒng)里,當(dāng)進(jìn)行任務(wù)切換時,CPU的部分或全部寄存器都需要為下一個任務(wù)所用,這就存在上一個任務(wù)在CPU寄存器中殘留的信息被泄露給下一個任務(wù)的風(fēng)險。
1.2 Cache
由于CPU的運行速度遠(yuǎn)遠(yuǎn)大于讀寫內(nèi)存的速度,因此,現(xiàn)代的CPU都引入了cache,以期調(diào)和這種速度上的差異,提高系統(tǒng)效率。一般來說,cache都是集成在CPU內(nèi)部的,cache在存取速度上比內(nèi)存要快很多,但與CPU相比還是要慢一些,而且cache速度越快,價格就越高。為了在速度和價格上得到一個很好的平衡,現(xiàn)代CPU大多引入了多級cache,如L1 cache,L2 cache,甚至L3 cache。對于多核CPU而言,還存在著獨立L2/L3 cache,共享L2/L3 cache等差異[7]。cache中存儲的信息是從內(nèi)存中讀取的片段信息或者是修改后即將寫入內(nèi)存的信息。由于cache是系統(tǒng)共享的,因此,在多用戶多任務(wù)系統(tǒng)中,CPU進(jìn)行任務(wù)切換時也存在cache信息泄露的風(fēng)險。
1.3 內(nèi) 存
內(nèi)存是計算機(jī)系統(tǒng)必不可少的組成部分,程序在運行前需要被裝載到內(nèi)存中,程序在運行過程中,需要使用內(nèi)存。內(nèi)存管理是操作系統(tǒng)的幾大關(guān)鍵功能之一,系統(tǒng)頻繁進(jìn)行內(nèi)存的分配/釋放操作。內(nèi)存的最大特點是掉電后信息丟失,但在系統(tǒng)運行過程中,內(nèi)存顯然是整個系統(tǒng)共享的,因此,當(dāng)系統(tǒng)把上一個主體使用的內(nèi)存分配給下一個主體使用時,上一個主體殘留在內(nèi)存中的信息存在被泄露給下一個主體的風(fēng)險。
由于內(nèi)存中保存著系統(tǒng)運行時的一些關(guān)鍵信息,如解密密鑰、口令、進(jìn)程信息、網(wǎng)絡(luò)連接、系統(tǒng)狀態(tài)信息等。因此,內(nèi)存信息一直是計算機(jī)黑客覬覦的對象,與此同時,內(nèi)存取證作為計算機(jī)取證科學(xué)的重要分支,得到了長足發(fā)展[8]。當(dāng)然,實現(xiàn)內(nèi)存客體的安全重用,以及近年來反取證技術(shù)的發(fā)展[9],對計算機(jī)黑客,也對內(nèi)存取證提出了新的挑戰(zhàn)。
1.4 磁 盤
現(xiàn)代計算機(jī)系統(tǒng)大多采用磁盤作為永久存儲介質(zhì),由于掉電后存儲在磁盤中的信息不會丟失,因此磁盤被用來存儲那些需要永久保存的信息,如系統(tǒng)的鏡像信息、各種配置信息、用戶文件信息等。不論是傳統(tǒng)的機(jī)械硬盤、可移除的USB移動硬盤,還是最新的SSD(Solid State Disk,固態(tài)硬盤),當(dāng)系統(tǒng)回收上一個用戶的文件存儲空間,分配給下一個用戶使用時,上一個用戶遺留在文件中的信息都存在被泄露給下一個用戶的風(fēng)險。
由于目前各種主流的操作系統(tǒng)進(jìn)行文件刪除等操作時,僅僅刪除文件的節(jié)點信息,使得操作系統(tǒng)對該文件不再可見。而實際上文件的內(nèi)容信息仍然存在于磁盤上,直到內(nèi)容區(qū)域所占用的磁盤空間被覆蓋。因此出現(xiàn)了各種恢復(fù)已刪除文件的方法[10-12]及工具軟件。
為了應(yīng)對文件恢復(fù)問題,出現(xiàn)了眾多文件安全刪除工具,如Windows系統(tǒng)中常見的文件粉碎機(jī),Linux系統(tǒng)中常見的shred、srm等工具程序。國內(nèi)的安勝安全操作系統(tǒng)V4.0采用的也是應(yīng)用層安全刪除程序的方式,同時增加了對敏感文件的過濾識別支持[13]。
對于磁帶、磁盤等磁性存儲介質(zhì),還可以通過消磁的方式對整個介質(zhì)進(jìn)行內(nèi)容擦除。隨著近年來flash等存儲介質(zhì)的使用,傳統(tǒng)的消磁方法無法對flash介質(zhì)進(jìn)行消磁處理,文獻(xiàn)[14]對不同介質(zhì)提出了不同的處理參考方法。
作為當(dāng)前最著名的開源操作系統(tǒng),Linux在發(fā)展的過程中十分注重客體重用安全問題,試圖在功能、性能和安全性之間找到一種平衡。下面主要介紹Linux在寄存器、cache、內(nèi)存、磁盤等方面客體重用安全的實現(xiàn)情況。
2.1 Linux系統(tǒng)的寄存器、cache
Linux系統(tǒng)將整個地址空間分為內(nèi)核地址空間和用戶地址空間,操作系統(tǒng)內(nèi)核運行在內(nèi)核空間,用戶程序運行在用戶空間。用戶空間的程序不能直接訪問內(nèi)核地址空間,只能通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核地址空間。Linux通過劃分不同地址空間的方式,保證了運行在內(nèi)核地址空間的操作系統(tǒng)內(nèi)核不會被用戶空間的程序所破壞,從而保護(hù)系統(tǒng)的正常運行。
對于CPU寄存器和cache,都是由操作系統(tǒng)內(nèi)核直接進(jìn)行管理,用戶空間的程序是無權(quán)進(jìn)行管理的。Linux系統(tǒng)是以進(jìn)程為單位進(jìn)行任務(wù)調(diào)度的,在進(jìn)行進(jìn)程切換時,Linux系統(tǒng)會將CPU寄存器的值保存到當(dāng)前進(jìn)程的PCB(Process Control Block,進(jìn)程控制塊),然后選取一個新的待運行的進(jìn)程,將其進(jìn)程PCB中用來保存的CPU寄存器的值恢復(fù)到當(dāng)前CPU寄存器中去,由于整個過程都是由操作系統(tǒng)內(nèi)核在內(nèi)核空間中完成的,因此就不存在CPU寄存器信息泄露的問題。而對于cache,則是由CPU硬件直接進(jìn)行管理,用戶空間的程序根本訪問不到cache,因此也不存在cache信息泄露的問題。
2.2 Linux系統(tǒng)的內(nèi)存
Linux通過內(nèi)核空間、用戶空間的劃分,保證了操作系統(tǒng)內(nèi)核和用戶程序之間的內(nèi)存地址空間隔離,同時,借助MMU(Memory Management Unit,內(nèi)存管理單元),保證用戶空間不同進(jìn)程之間的隔離,防止用戶空間進(jìn)程非授權(quán)的內(nèi)存地址訪問。
Linux系統(tǒng)的內(nèi)存是由操作系統(tǒng)內(nèi)核進(jìn)行統(tǒng)一管理的,在系統(tǒng)運行過程中,不斷進(jìn)行內(nèi)存的分配與釋放。分配給內(nèi)核空間的內(nèi)存釋放后,可能被再分配給用戶空間的進(jìn)程使用,分配給用戶空間進(jìn)程A的內(nèi)存被釋放后,可能被再分配給用戶空間的進(jìn)程B使用。為了防止內(nèi)存再分配過程中可能產(chǎn)生的剩余信息泄露問題,Linux系統(tǒng)采用了一些機(jī)制和方法。為了弄清楚Linux系統(tǒng)如何解決內(nèi)存的客體重用安全問題,首先來了解一下Linux系統(tǒng)的內(nèi)存管理機(jī)制。
2.2.1 Linux內(nèi)存管理
圖1為Linux 3.10內(nèi)核的內(nèi)存分配釋放情況。
圖1 Linux內(nèi)存管理
Linux系統(tǒng)以頁為單位,通過伙伴管理系統(tǒng)(采用伙伴算法)進(jìn)行物理內(nèi)存的管理。之所以選用伙伴管理系統(tǒng)進(jìn)行物理內(nèi)存頁的管理,是為了既能夠快速分配到所需的內(nèi)存大小,又可以高效利用每一個物理頁,減少內(nèi)存碎片。
Linux內(nèi)存頁的分配釋放,最終都會定位到__alloc_pages和__free_pages兩個內(nèi)核底層函數(shù)。Linux在分配物理內(nèi)存時,采用的是延時分配策略,即分配內(nèi)存時,并不分配實際的物理頁,而是只劃分相關(guān)大小的虛擬地址空間,等待需要使用內(nèi)存時,才開始進(jìn)行實際物理頁的分配,而且會根據(jù)需要使用的內(nèi)存大小逐步分配實際物理頁。Linux的這種內(nèi)存延時分配策略,雖然存在內(nèi)存分配時成功,但使用時卻可能發(fā)生內(nèi)存不足的問題,但這種方式能夠最大限度地提高實際物理內(nèi)存的利用率,因此被Linux系統(tǒng)廣泛采用。
通過SLAB系統(tǒng),可以創(chuàng)建并使用個性化的內(nèi)存對象,如內(nèi)核中的ext4、xfs等文件系統(tǒng),TCP、UDP等網(wǎng)絡(luò)協(xié)議,進(jìn)程描述符task_struct等都在SLAB系統(tǒng)上創(chuàng)建了個性化的內(nèi)存對象。除了在SLAB系統(tǒng)上創(chuàng)建個性化的內(nèi)存對象外,SLAB系統(tǒng)本身為內(nèi)核空間創(chuàng)建了多個不同大小的公共內(nèi)存對象,內(nèi)核程序或內(nèi)核模塊可以通過kmalloc等相關(guān)函數(shù)直接調(diào)用。
2.2.2 用戶空間內(nèi)存客體重用
為了兼顧安全與效率,針對用戶層程序,Linux在內(nèi)存分配上引入了零頁面(zero page)的概念。具體步驟如下:
(1)用戶進(jìn)程申請內(nèi)存,通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核。
(2)內(nèi)核為用戶進(jìn)程劃分相應(yīng)大小的虛擬地址空間,建立好相關(guān)頁表,同時將相關(guān)頁表指向系統(tǒng)全局的只讀零頁面,并返回成功。
(3)如果用戶進(jìn)程只是需要讀取新申請的內(nèi)存信息,則返回零頁面內(nèi)存的信息,即全零信息。
(4)如果用戶進(jìn)程需要寫新申請的內(nèi)存信息,則觸發(fā)缺頁中斷,此時系統(tǒng)會真正地分配部分或全部物理內(nèi)存頁,并對分配的物理內(nèi)存頁執(zhí)行清零操作,同時更新頁表信息,再從缺頁中斷中返回。之后才開始進(jìn)行寫內(nèi)存操作。
由上面的步驟可知,Linux系統(tǒng)在分配實際的物理內(nèi)存頁給用戶進(jìn)程使用前,進(jìn)行了內(nèi)存清零操作,從而防止了內(nèi)存剩余信息的泄露,同時也保持了與零頁面內(nèi)容的一致。
2.2.3 內(nèi)核空間內(nèi)存客體重用
對于內(nèi)核層,Linux系統(tǒng)并沒有強(qiáng)制保證內(nèi)存客體的安全重用。由于Linux支持內(nèi)核模塊程序,內(nèi)核模塊共享整個內(nèi)核空間,因此,對于安全操作系統(tǒng),需要實現(xiàn)內(nèi)核空間下的內(nèi)存客體安全重用。
在內(nèi)核層,對于小內(nèi)存的使用,一般通過kmalloc及其相關(guān)函數(shù)向SLAB系統(tǒng)申請,申請到的內(nèi)存既保證虛擬地址連續(xù),又保證物理地址連續(xù)。對于大內(nèi)存的使用,一般通過vmalloc及其相關(guān)函數(shù)直接向伙伴管理系統(tǒng)申請,申請到的內(nèi)存能夠保證虛擬地址連續(xù),但不保證物理地址連續(xù)。
要保證內(nèi)核空間的內(nèi)存客體安全重用,防止內(nèi)存剩余信息泄露,既可以在內(nèi)存申請時強(qiáng)制進(jìn)行清零,也可以在內(nèi)存釋放時強(qiáng)制進(jìn)行清零。實際上,Linux系統(tǒng)提供了諸如kzalloc、vzalloc等內(nèi)存申請函數(shù),在申請到內(nèi)存后進(jìn)行了內(nèi)存清零操作。為了強(qiáng)制保證Linux內(nèi)核空間內(nèi)存客體的安全重用,只需要參照kzalloc、vzalloc等函數(shù),將kmalloc、vmalloc等相關(guān)函數(shù)進(jìn)行安全改造,保證內(nèi)核空間內(nèi)存申請的幾個相關(guān)函數(shù)在申請到內(nèi)存后進(jìn)行內(nèi)存清零操作即可。
2.2.4 實 驗
進(jìn)行額外的內(nèi)存清零操作后,會對內(nèi)存申請帶來一定的性能損失,但由于內(nèi)存操作的速度很快,因此,性能損失很小。實驗測試機(jī)器配置如下:CPU為Intel Core i5-2500,主頻3.30 GHz,內(nèi)存DDR3 1333,4 GB,操作系統(tǒng)內(nèi)核版本為Linux 3.10。
為了精確地計算時間,采用獲取CPU時間戳計數(shù)器的方法,再換算成時間。經(jīng)過多次測試并取平均,計算結(jié)果如表1所示。
由表1可知,在申請不超過8 KB的內(nèi)存時,其引入的延時是很小的,不超過5%,即使申請1 MB的內(nèi)存,其引入的延時也不超過60 μs,對系統(tǒng)的運行不會產(chǎn)生影響。實際上,在申請128 KB以內(nèi)的小內(nèi)存時,所耗費的時間很少,以至于受系統(tǒng)隨機(jī)波動等因素的影響,其申請時間并非隨申請的內(nèi)存大小而線性增長。
由表2可知,在通過vmalloc相關(guān)函數(shù)申請不超過64 KB的內(nèi)存時,其引入的延時不超過10%。當(dāng)然,vmalloc主要用于申請大內(nèi)存,而安全改造后的vmalloc即使申請1 GB的內(nèi)存,也只增加了三分之一左右的延時時間,不超過60 ms,這對系統(tǒng)的運行不會產(chǎn)生影響。
表1 kmalloc安全改造前后消耗時間對比
表2 vmalloc安全改造前后消耗時間對比
2.3 Linux系統(tǒng)的磁盤
現(xiàn)代操作系統(tǒng)都是通過文件系統(tǒng),將磁盤抽象成文件進(jìn)行讀寫的。Linux系統(tǒng)支持ext2/3/4、xfs、nfs、fat、ntfs等多種類型的文件系統(tǒng),通過VFS(Virtual File System,虛擬文件系統(tǒng))將具體的文件系統(tǒng)進(jìn)行抽象,對上層應(yīng)用提供統(tǒng)一的系統(tǒng)調(diào)用接口,如圖2所示。
圖2 Linux文件系統(tǒng)模型
虛擬文件系統(tǒng)將實際的文件系統(tǒng)抽象成兩個重要的信息:目錄信息與節(jié)點信息。目錄信息存儲該目錄下的文件及子目錄的名稱、節(jié)點號等,通過目錄信息實現(xiàn)文件的搜索遍歷;節(jié)點信息存儲文件的屬性、文件內(nèi)容所占用的block號等,通過節(jié)點信息實現(xiàn)文件內(nèi)容的讀寫。
出于性能的考慮,Linux系統(tǒng)在刪除文件時,僅僅刪除與文件相關(guān)的節(jié)點信息,回收文件內(nèi)容所占用的block號,而真正的文件內(nèi)容并沒有被刪除,很容易通過各種文件恢復(fù)軟件進(jìn)行恢復(fù)。這對于安全等級要求高的應(yīng)用場合是不可接受的。因此,高安全等級的操作系統(tǒng)必須實現(xiàn)文件客體的安全重用。
2.3.1 實現(xiàn)思路
高安全等級的操作系統(tǒng)在對文件進(jìn)行刪除時,必須進(jìn)行安全擦除。文件的安全擦除主要有兩種方式:
(1)手動擦除文件:一般提供安全刪除文件的工具程序。這種方式需要用戶深度參與,安全性嚴(yán)重依賴于用戶行為,用戶工作量大,漏刪可能性高,不能滿足高安全等級的應(yīng)用場景。
(2)自動擦除文件:一般通過監(jiān)視文件刪除的過程,在刪除時自動進(jìn)行文件內(nèi)容的擦除。
這里考慮采用自動擦除文件的方法。
2.3.2 文件擦除方式
要徹底刪除文件數(shù)據(jù),需要把待刪除文件所在的數(shù)據(jù)區(qū)完全覆蓋,一般來說,進(jìn)行一次完全覆蓋后,數(shù)據(jù)恢復(fù)軟件無法再恢復(fù)數(shù)據(jù)。覆蓋方式可以采用全0覆蓋、全1覆蓋和隨機(jī)數(shù)覆蓋。
對于硬盤這種采用磁介質(zhì)來記錄數(shù)據(jù)的介質(zhì),由于有剩磁存在,通過特殊的數(shù)據(jù)恢復(fù)設(shè)備,仍然存在恢復(fù)被覆蓋數(shù)據(jù)的可能。而對于安全等級要求特別高的場合,一般需要組合使用各種覆蓋方式進(jìn)行多次覆蓋。美國國防部的DoD 5220.22-M操作手冊中建議使用全寫“0”,全寫“1”,加一次隨機(jī)數(shù),共3次覆寫。Gutmann標(biāo)準(zhǔn)使用35次覆寫,前4次采用隨機(jī)數(shù)覆寫,中間27次使用不同的指定內(nèi)容進(jìn)行覆寫,最后4次再采用隨機(jī)數(shù)覆寫。
為了滿足不同安全級別場景下對文件覆寫的不同要求,增加文件覆寫的靈活性,此處設(shè)計了一種可配置的文件安全擦除規(guī)則,包括:
(1)待擦除文件的最小長度,默認(rèn)為1。
(2)待擦除文件的最大長度,默認(rèn)為-1,即不限制。
(3)待擦除文件的最小敏感等級,范圍為s0~s15,默認(rèn)為s0,即所有。
(4)文件覆寫方式,支持全0覆寫、全1覆寫和隨機(jī)覆寫這三種方式的組合,每一個覆寫項以覆寫模式+覆寫次數(shù)形式表示,多個覆寫項之間以空格進(jìn)行間隔,覆寫模式定義為:0表示全0覆寫,1表示全1覆寫,r表示隨機(jī)覆寫。文件覆寫方式的默認(rèn)值為“01”,即全0覆寫1次。
整個文件覆寫方式示例如下:
例如“01 11 r2 01”表示全0覆寫1次,全1覆寫1次,隨機(jī)覆寫2次,再全0覆寫1次,一共進(jìn)行了5次覆寫。
文件安全擦除規(guī)則通過sysfs接口導(dǎo)出,管理員用戶可以通過此接口對整個系統(tǒng)的文件安全擦除規(guī)則進(jìn)行動態(tài)配置。
2.3.3 Linux文件擦除方法
Linux用戶層程序?qū)ξ募M(jìn)行操作時,都需要通過系統(tǒng)調(diào)用進(jìn)行,因此,通過檢測并改造相關(guān)的系統(tǒng)調(diào)用函數(shù),可以實現(xiàn)文件客體安全重用。
1)文件客體重用情況。
Linux系統(tǒng)的文件客體重用分為以下幾種情況:
(1)文件刪除。
文件刪除包括文件即時刪除和文件延時刪除。當(dāng)刪除文件時,如果該文件沒有被其他進(jìn)程打開,則該文件可以即時刪除,而如果該文件正在被其他進(jìn)程打開使用,則該文件的刪除將被延時到最后一個使用該文件的進(jìn)程關(guān)閉該文件或者異常退出時。
(2)文件截斷。
文件截斷包括文件直接截斷和文件打開截斷。文件直接截斷發(fā)生在進(jìn)程主動調(diào)用文件截斷及其相關(guān)變形的系統(tǒng)調(diào)用時,文件打開截斷發(fā)生在以截斷方式打開一個已經(jīng)存在的文件時。
2)實現(xiàn)方式。
Linux通過VFS對外提供統(tǒng)一的接口,由于各個文件系統(tǒng)的差異,最終對文件的操作是由VFS調(diào)用實際的文件系統(tǒng)方法實現(xiàn)的。因此,文件的安全刪除,既可以在VFS層實現(xiàn),也可以在具體的文件系統(tǒng)里實現(xiàn)。顯然,在VFS層實現(xiàn)比在各個文件系統(tǒng)里單獨實現(xiàn)要簡單、通用性好。因此,這里采用在VFS層實現(xiàn)對文件的安全刪除。
2.3.4 具體實現(xiàn)
Linux系統(tǒng)里一切皆文件,除了普通文件外,還有設(shè)備文件、管道文件、socket文件等,這里主要研究普通文件。
1)文件刪除分析。
Linux用戶層程序刪除文件時,最終會調(diào)用unlink系統(tǒng)進(jìn)入內(nèi)核,內(nèi)核進(jìn)行一定的邏輯判斷,確定是否需要刪除該文件。如果確認(rèn)需要刪除文件,則進(jìn)行刪除操作。在進(jìn)行文件刪除時,存在以下兩種情況:
(1)文件即時刪除:該文件沒有被打開使用,則進(jìn)行即時刪除操作。
(2)文件延時刪除:該文件正在被打開使用,則將文件的硬連接數(shù)從1變成0。文件的刪除將發(fā)生在最后一個打開使用該文件的進(jìn)程關(guān)閉該文件或者異常退出時。
Linux內(nèi)核層也可以進(jìn)行文件刪除操作,其最終的調(diào)用方法與用戶層程序通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核后的方法相同。
由以上分析可知,對于文件刪除操作,只需要監(jiān)控文件即時刪除和文件延時刪除兩種情況發(fā)生的點,在文件刪除操作發(fā)生前對文件內(nèi)容區(qū)域進(jìn)行覆寫即可。
2)文件截斷分析。
Linux系統(tǒng)中的文件截斷分為兩種情況:
(1)文件直接截斷:此情況發(fā)生在用戶層程序通過truncate系統(tǒng)調(diào)用將文件變短時。
(2)文件打開截斷:此情況發(fā)生在用戶層程序通過O_TRUNC方式打開或創(chuàng)建一個已經(jīng)存在的文件時。
Linux內(nèi)核層也可以進(jìn)行文件截斷操作,其最終的調(diào)用方法與用戶層程序通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核后的方法相同。
由以上分析可知,對于文件截斷操作,只需要監(jiān)控文件直接截斷和文件打開截斷兩種情況發(fā)生的點,在文件截斷發(fā)生前對文件截斷的內(nèi)容區(qū)域進(jìn)行覆寫即可。
3)文件描述符獲取。
在Linux的VFS層進(jìn)行文件內(nèi)容覆寫操作,通過文件描述符對文件進(jìn)行寫操作最簡單,而文件寫操作需要文件描述符。
對于文件延時刪除和文件打開截斷,可以利用上層調(diào)用者傳遞下來的文件描述符進(jìn)行文件寫操作。而對于文件即時刪除和文件直接截斷,上層調(diào)用者并沒有也不需要傳遞文件描述符,因此需要主動打開該文件,獲取到文件描述符,再進(jìn)行文件寫操作。
4)具體實現(xiàn)流程。
通過在Linux內(nèi)核VFS中與文件客體安全重用相關(guān)的三類函數(shù)中調(diào)用判定邏輯,判斷是否需要進(jìn)行文件安全擦除。以Linux 3.10內(nèi)核為例,這三類函數(shù)分別為:do_unlinkat函數(shù)(對應(yīng)文件即時刪除)、__fput函數(shù)(對應(yīng)文件延時刪除)、vfs_truncate函數(shù)/do_sys_ftruncate函數(shù)(對應(yīng)文件直接截斷和文件打開截斷)。
圖3為修改后的Linux文件客體安全重用流程圖,具體步驟為:
圖3 Linux文件客體安全重用流程圖
(1)監(jiān)控Linux內(nèi)核中的do_unlinkat、__fput、vfs_truncate及do_sys_ftruncate函數(shù)。
(2)根據(jù)文件節(jié)點信息及上下文判斷是否需要刪除文件或截斷文件。如果不需要,則結(jié)束。
(3)根據(jù)文件安全擦除規(guī)則,判斷是否需要進(jìn)行文件安全擦除。如果不需要,則結(jié)束。
(4)判斷是否有該文件的文件操作句柄,如果沒有,則根據(jù)文件節(jié)點信息,臨時打開該文件來獲得文件操作句柄。
(5)調(diào)用文件安全擦除方法,安全擦除該文件。
(6)如果臨時打開該文件,則關(guān)閉文件操作句柄。
(7)該過程結(jié)束。
2.3.5 實驗測試
在實驗測試時,采用全零覆寫一遍的方式進(jìn)行測試。
為了檢測安全擦除文件是否生效,可以在安全擦除文件之前,通過系統(tǒng)提供的一些命令查看并記錄下文件內(nèi)容區(qū)域?qū)?yīng)的磁盤block區(qū)域,在文件擦除之后,通過dd等命令直接讀取記錄的磁盤block區(qū)域,看看其內(nèi)容是否全為零。經(jīng)實驗驗證,在各種情況下,均能夠安全擦除文件的內(nèi)容。
傳統(tǒng)的文件刪除、文件截斷操作由于只是操作文件節(jié)點信息,因此速度很快。引入安全擦除文件的方法后,在文件刪除、文件截斷時,需要對文件內(nèi)容區(qū)域進(jìn)行覆寫,會帶來一定的性能損失。表3為分別采用SSD硬盤和普通機(jī)械硬盤對不同大小的文件進(jìn)行安全擦除所消耗時間的測試結(jié)果。
表3 文件安全擦除消耗時間
由表3可知,對于小文件,引入的時間消耗在一秒以下,由于操作系統(tǒng)本身操作的都是一些小文件,因此不影響系統(tǒng)運行。而對于較大文件,則會帶來秒級以上的延時,同時可以看出,相對于機(jī)械硬盤,SSD硬盤的速度要快得多,因此對于需要頻繁操作大文件的應(yīng)用場景,建議使用SSD硬盤。
為滿足安全操作系統(tǒng)針對客體安全重用的基本要求,在分析研究Linux操作系統(tǒng)在客體重用時存在的安全問題基礎(chǔ)上,提出了在Linux內(nèi)核層實現(xiàn)客體安全重用的方法。該方法對用戶透明,能夠在操作系統(tǒng)底層自動實現(xiàn)客體資源的安全重用。同時,在文件擦除方式上實現(xiàn)了可配置化,滿足了不同應(yīng)用場景的差異化安全需求。通過實驗分析,驗證了該方法能夠?qū)崿F(xiàn)Linux系統(tǒng)下內(nèi)存、磁盤等客體資源的安全重用,且不會影響系統(tǒng)的正常使用。
[1] National Computer Security Center. Department of defense trusted computer system evaluation criteria[S].[s.l.]:National Computer Security Center,1985.
[2] Office for Official Publications of the European Communities.Information Technology Security Evaluation Criteria(ITSEC)V1.2[EB/OL].[2015-12-12].http://iwar.org.uk/comsec/resources/standards/itsec.htm.
[3] Common Criteria Project Sponsoring Organizations.Common criteria for information security evaluation part 2:security functional requirements,version 2.1[S].[s.l.]:[s.n.],1999.
[4] 國家質(zhì)量技術(shù)監(jiān)督局.計算機(jī)信息系統(tǒng)安全保護(hù)等級劃分準(zhǔn)則[S].北京:中國標(biāo)準(zhǔn)出版社,1999.
[5] 中華人民共和國國家質(zhì)量監(jiān)督檢驗檢疫總局/中國國家標(biāo)準(zhǔn)化管理委員會.信息安全技術(shù)信息系統(tǒng)通用安全技術(shù)要求[S].北京:中國標(biāo)準(zhǔn)出版社,2006.
[6] 中華人民共和國國家質(zhì)量監(jiān)督檢驗檢疫總局/中國國家標(biāo)準(zhǔn)化管理委員會.信息安全技術(shù)操作系統(tǒng)安全技術(shù)要求[S].北京:中國標(biāo)準(zhǔn)出版社,2006.
[7] 賈小敏,張民選,齊樹波,等.片上多核Cache資源管理機(jī)制研究[J].計算機(jī)科學(xué),2011,38(1):295-301.
[8] 張 瑜,劉慶中,李 濤,等.內(nèi)存取證研究與進(jìn)展[J].軟件學(xué)報,2015,26(5):1151-1172.
[9] Stuttgen J,Cohen M.Anti-forensic resilient memory acquisition[J].Digital Investigation,2013,10:105-115.
[10] 趙雙峰,費金龍,劉 楠,等.Windows NTFS下數(shù)據(jù)恢復(fù)的研究與實現(xiàn)[J].計算機(jī)工程與設(shè)計,2008,29(2):306-308.
[11] 沈長達(dá),吳少華,錢鏡潔,等.ReiserFS刪除文件的恢復(fù)技術(shù)研究[J].信息網(wǎng)絡(luò)安全,2015(9):262-265.
[12] 李 巖.計算機(jī)取證中關(guān)鍵技術(shù)研究[D].上海:上海交通大學(xué),2010.
[13] 沈晴霓,卿斯?jié)h.操作系統(tǒng)安全設(shè)計[M].北京:機(jī)械工業(yè)出版社,2013:227-229.
[14] National Institute of Standards and Technology.NIST SP800-88 revision 1:guidelines for media sanitization[S].[s.l.]:NIST,2014.
Investigation on Object Reuse Security in Operating System
HUANG Yi-bin,ZHENG Wei-bo,SONG Zi-feng
(NARI Group Corporation(State Grid Electric Power Research Institute),Nanjing 210003,China)
Object resources,such as memory and disk,could be repeatedly used by different subject when system running.When object resources are released by previous subject and allocated for next subject,the residual information in the object by previous subject will be possibly acquired by next subject,which can cause information leakage.For the requirement of object reuse and residual information protection in secure Operating System (OS),analysis on the potential security risks while object reusing in OS have been conducted and a secure object reuse method with Linux OS has been presented.By monitoring memory page and disk space operation in Linux kernel,the events of memory page allocation and disk space release would be captured,and then allocated memory page would be zeroed and released disk space would be securely erased based on user configuration,which can ensure that residual information in object has certainly been cleared before object reuse.Test results verify that this method not only transparently implements secure object reuse,but also has little performance loss.So it does not affect normal system usage when using this method.
secure OS;object reuse;information leakage;residual information protection;secure erase
2016-06-27
2016-10-13 網(wǎng)絡(luò)出版時間:2017-03-07
江蘇省工業(yè)和信息產(chǎn)業(yè)轉(zhuǎn)型升級專項項目(2015SJXKJ5038);國網(wǎng)電力科學(xué)研究計劃(5246DR150002)
黃益彬(1982-),男,高級工程師,碩士,研究方向為系統(tǒng)安全、網(wǎng)絡(luò)安全、工控安全。
http://kns.cnki.net/kcms/detail/61.1450.TP.20170307.0922.090.html
TP309.2
A
1673-629X(2017)05-0113-07
10.3969/j.issn.1673-629X.2017.05.024