一種Linux系統(tǒng)內(nèi)存敏感數(shù)據(jù)的清除方法及裝置制造方法
【專利摘要】一種Linux系統(tǒng)內(nèi)存敏感數(shù)據(jù)的清除方法和裝置;方法包括:當(dāng)進程調(diào)用close系統(tǒng)調(diào)用關(guān)閉文件時,或當(dāng)因進程退出而調(diào)用exit_files關(guān)閉未關(guān)閉的文件時,通過struct?file定位到相應(yīng)的struct?address_space,如果判斷所要關(guān)閉的文件對應(yīng)的inode結(jié)構(gòu)有臟頁有則調(diào)用vfs_fsync函數(shù)只將該文件中的臟頁回寫到磁盤中;遍歷所定位到的地址空間結(jié)構(gòu)中的基數(shù)樹,將基數(shù)樹中的所有頁面全部刪除、清零后釋放到空閑區(qū);在每個進程中構(gòu)造讀寫鏈表,記錄對設(shè)備文件讀或?qū)憯?shù)據(jù)時在設(shè)備緩存中的起始地址address和數(shù)據(jù)長度length;在read或write系統(tǒng)調(diào)用退出時,通過遍歷所述讀寫鏈表,對每個節(jié)點將從address開始,到address加length為止的地址空間中的數(shù)據(jù)清零。
【專利說明】一種Linux系統(tǒng)內(nèi)存敏感數(shù)據(jù)的清除方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機操作系統(tǒng)內(nèi)存數(shù)據(jù)安全【技術(shù)領(lǐng)域】,具體涉及一種基于Linux系統(tǒng)的內(nèi)存敏感數(shù)據(jù)的清除方法及裝置。
【背景技術(shù)】
[0002]隨著科學(xué)技術(shù)的發(fā)展,內(nèi)存安全,尤其是被計算機操作系統(tǒng)安全領(lǐng)域會議和IT公司密切關(guān)注的用戶敏感數(shù)據(jù)的安全,成為計算機操作系統(tǒng)安全的重要組成部分,這對為了提高系統(tǒng)性能,內(nèi)存空間不斷增大,將越來越多的數(shù)據(jù)放置到內(nèi)存這一發(fā)展趨勢提出了新的挑戰(zhàn)。
[0003]由于在物理內(nèi)存中清除一個物理頁框中數(shù)據(jù)的操作的延遲相對較大,因而傳統(tǒng)Linux系統(tǒng)的內(nèi)存管理模塊的機制是,物理頁框的釋放只是解除進程頁表項和對應(yīng)的物理頁框的映射關(guān)系,只有當(dāng)物理頁框再次被分配時才將其中的數(shù)據(jù)進行清零或是用進程讀寫的數(shù)據(jù)進行覆蓋。正是由于這一特性使得傳統(tǒng)Linux系統(tǒng)在保護內(nèi)存中的敏感數(shù)據(jù)安全方面具有先天性缺陷,使得開機密碼、進程打開過的文件、用戶輸入的賬號密碼以及查看過的電子郵件和即時聊天信息等用戶數(shù)據(jù)仍存留在進程的地址空間中,這一現(xiàn)象使得用戶的個人隱私信息受到嚴重威脅。
[0004]目前針對Linux系統(tǒng)內(nèi)存中的敏感數(shù)據(jù)安全這一問題廣泛使用的工具是PAX補丁,它在內(nèi)存敏感數(shù)據(jù)安全這一問題包含兩方面:一、清除內(nèi)核棧,用于將內(nèi)核態(tài)的所有變量、狀態(tài)、參數(shù)等信息進行清除;二、清除所釋放的頁框中的數(shù)據(jù),隨著物理頁框的釋放,將物理頁框中的數(shù)據(jù)進行清除。主要表現(xiàn)在進程退出時清除進程的用戶空間的堆、棧和非共享映射區(qū)中的數(shù)據(jù),防止用戶數(shù)據(jù)被泄露。
[0005]但是,現(xiàn)有的PAX補丁仍存在效率低、無法全面清除敏感數(shù)據(jù)等不足。
【發(fā)明內(nèi)容】
[0006]本發(fā)明要解決的技術(shù)問題是更加全面地清除計算機操作系統(tǒng)內(nèi)存中的敏感數(shù)據(jù),保護用戶的隱私信息。
[0007]為了解決上述問題,本發(fā)明提供了一種Linux系統(tǒng)內(nèi)存敏感數(shù)據(jù)的清除方法,包括:
[0008]當(dāng)進程調(diào)用close系統(tǒng)調(diào)用關(guān)閉文件時,或當(dāng)因進程退出而調(diào)用eXit_files關(guān)閉未關(guān)閉的文件時,通過文件結(jié)構(gòu)struct file定位到相應(yīng)的地址空間結(jié)構(gòu)struct address_space,判斷所要關(guān)閉的文件對應(yīng)的inode結(jié)構(gòu)是否有臟頁,如果有則調(diào)用vfs_fsync函數(shù)只將該文件中的臟頁回寫到磁盤中;遍歷所定位到的地址空間結(jié)構(gòu)中的基數(shù)樹,將基數(shù)樹中的所有頁面全部刪除、清零后釋放到空閑區(qū);
[0009]在每個進程中構(gòu)造讀寫鏈表,記錄對設(shè)備文件讀或?qū)憯?shù)據(jù)時在設(shè)備緩存中的起始地址address和數(shù)據(jù)長度length ;在read系統(tǒng)調(diào)用或write系統(tǒng)調(diào)用退出時,通過遍歷所述讀寫鏈表,對每個節(jié)點將從address開始,到address加length為止的地址空間中的數(shù)據(jù)清零。
[0010]可選地,所述的方法還包括:
[0011]在進程調(diào)用exit系統(tǒng)調(diào)用進行退出而釋放頁表項對應(yīng)的物理頁框時,或是調(diào)用brk和unmmap系統(tǒng)調(diào)用時,在釋放物理頁框前將物理頁框中的數(shù)據(jù)清零。
[0012]可選地,所述的方法還包括:
[0013]定期進行下述操作:
[0014]將系統(tǒng)調(diào)用過程中遺留在當(dāng)前內(nèi)核棧中的數(shù)據(jù)用預(yù)定的四字節(jié)標(biāo)志覆蓋;標(biāo)記所述內(nèi)核棧中已覆蓋的空間。
[0015]可選地,所述將系統(tǒng)調(diào)用過程中遺留在當(dāng)前內(nèi)核棧中的數(shù)據(jù)用預(yù)定的四字節(jié)標(biāo)志覆蓋的步驟包括:
[0016]當(dāng)進程第一次系統(tǒng)調(diào)用離開內(nèi)核棧,則找到thread_inf0的地址;當(dāng)進程非第一次系統(tǒng)調(diào)用離開內(nèi)核棧,則找到第一個具有連續(xù)50個所述預(yù)定的四字節(jié)標(biāo)志的地址;如果不存在具有連續(xù)50個該所述預(yù)定的四字節(jié)標(biāo)志的地址,則找到最后一個具有連續(xù)所述預(yù)定的四字節(jié)標(biāo)志的地址;將從esp開始到所找到的地址之間的數(shù)據(jù)用所述預(yù)定的四字節(jié)標(biāo)
志覆蓋。
[0017]可選地,所述的方法還包括:
[0018]當(dāng)回收內(nèi)存時,加密寫入交換區(qū)的數(shù)據(jù);清除被換出到交換區(qū)的匿名頁中的數(shù)據(jù),以及被內(nèi)存回收機制回收的頁中的數(shù)據(jù)。
[0019]本發(fā)明還提供了一種Linux系統(tǒng)內(nèi)存敏感數(shù)據(jù)的清除裝置,包括:
[0020]文件數(shù)據(jù)清除模塊,用于當(dāng)進程調(diào)用close系統(tǒng)調(diào)用關(guān)閉文件時,或當(dāng)因進程退出而調(diào)用exit_files關(guān)閉未關(guān)閉的文件時,通過文件結(jié)構(gòu)struct file定位到相應(yīng)的地址空間結(jié)構(gòu)struct address_space,判斷所要關(guān)閉的文件對應(yīng)的inode結(jié)構(gòu)是否有臟頁,如果有則調(diào)用vfS_fSync函數(shù)只將該文件中的臟頁回寫到磁盤中;遍歷所定位到的地址空間結(jié)構(gòu)中的基數(shù)樹,將基數(shù)樹中的所有頁面全部刪除、清零后釋放到空閑區(qū);
[0021]設(shè)備數(shù)據(jù)清除模塊,用于在每個進程中構(gòu)造讀寫鏈表,記錄對設(shè)備文件讀或?qū)憯?shù)據(jù)時在設(shè)備緩存中的起始地址address和數(shù)據(jù)長度length ;在read系統(tǒng)調(diào)用或write系統(tǒng)調(diào)用退出時,通過遍歷所述讀寫鏈表,對每個節(jié)點將從address開始,到address加length為止的地址空間中的數(shù)據(jù)清零。
[0022]可選地,所述的裝置還包括:
[0023]用戶數(shù)據(jù)清除模塊,用于在進程調(diào)用exit系統(tǒng)調(diào)用進行退出而釋放頁表項對應(yīng)的物理頁框時,或是調(diào)用brk和unmmap系統(tǒng)調(diào)用時,在釋放物理頁框前將物理頁框中的數(shù)
據(jù)清零。
[0024]可選地,所述的裝置還包括:
[0025]內(nèi)核棧清除模塊,用于定期進行下述操作:將系統(tǒng)調(diào)用過程中遺留在當(dāng)前內(nèi)核棧中的數(shù)據(jù)用預(yù)定的四字節(jié)標(biāo)志覆蓋;標(biāo)記所述內(nèi)核棧中已覆蓋的空間。
[0026]可選地,所述內(nèi)核棧清除模塊將系統(tǒng)調(diào)用過程中遺留在當(dāng)前內(nèi)核棧中的數(shù)據(jù)用預(yù)定的四字節(jié)標(biāo)志覆蓋是指:
[0027]所述內(nèi)核棧清除模塊當(dāng)進程第一次系統(tǒng)調(diào)用離開內(nèi)核棧,則找到thread_inf0的地址;當(dāng)進程非第一次系統(tǒng)調(diào)用離開內(nèi)核棧,則找到第一個具有連續(xù)50個所述預(yù)定的四字節(jié)標(biāo)志的地址;如果不存在具有連續(xù)50個該所述預(yù)定的四字節(jié)標(biāo)志的地址,則找到最后一個具有連續(xù)所述預(yù)定的四字節(jié)標(biāo)志的地址;將從esp開始到所找到的地址之間的數(shù)據(jù)用所述預(yù)定的四字節(jié)標(biāo)志覆蓋。
[0028]可選地,所述的裝置還包括:
[0029]回收過程清除模塊,用于當(dāng)回收內(nèi)存時,加密寫入交換區(qū)的數(shù)據(jù);清除被換出到交換區(qū)的匿名頁中的數(shù)據(jù),以及被內(nèi)存回收機制回收的頁中的數(shù)據(jù)。
[0030]本發(fā)明的至少一個實施例覆蓋面廣,對進程遺留在內(nèi)存中的敏感數(shù)據(jù)進行全面定位,可以徹底清除敏感數(shù)據(jù)的備份;對Linux現(xiàn)存機制不做更改,不需要更改應(yīng)用程序,不需要硬件支持,兼容性強;本發(fā)明的又一個實施例能夠在進程運行過程中,對不再使用的敏感數(shù)據(jù)進行清除,所有工作都是在進程退出之前完成,不需要監(jiān)控程序,更加簡單有效;本發(fā)明的又一個實施例只對進程中存在敏感數(shù)據(jù)的地址空間進行清除操作,因此功耗低。
【專利附圖】
【附圖說明】
[0031]圖1是頁緩存機制框架示意圖;
[0032]圖2是進程讀寫塊設(shè)備數(shù)據(jù)過程示意圖;
[0033]圖3是進程和內(nèi)存地址空間相關(guān)的結(jié)構(gòu)聯(lián)系不意圖;
[0034]圖4是TTY設(shè)備讀寫過程示意圖;
[0035]圖5是Linux系統(tǒng)中進程執(zhí)行過程示意圖;
[0036]圖6是Linux系統(tǒng)中與進程相關(guān)的結(jié)構(gòu)聯(lián)系示意圖;
[0037]圖7是內(nèi)核棧結(jié)構(gòu)示意圖;
[0038]圖8是內(nèi)存回收過程示意圖;
[0039]圖9是實施例二的清除裝置的示意圖。
【具體實施方式】
[0040]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點表達得更加清楚明白,下面將結(jié)合本發(fā)明實施實例中的附圖,對本發(fā)明再作進一步詳細的說明。顯然,所描述的實施例只是本發(fā)明的一部分實例,而不是全部的實施例?;诒景l(fā)明的實施例,本領(lǐng)域普通技術(shù)人員凡是采用本發(fā)明的設(shè)計結(jié)構(gòu)和思想而在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0041]本文是基于Linux系統(tǒng)的方案,其中所涉及的現(xiàn)有的系統(tǒng)調(diào)用、結(jié)構(gòu)、函數(shù)的名稱在本領(lǐng)域均習(xí)慣使用英文,對于沒有公認中文釋義的名稱,使用中文反而有可能讓本領(lǐng)域技術(shù)人員迷惑;且這些名稱在Linux系統(tǒng)中均有特定含義,技術(shù)人員能夠明確各名稱所表示的內(nèi)容,而不會產(chǎn)生誤解。因此本文中所涉及的Linux系統(tǒng)中現(xiàn)有的、無公認中文翻譯的名稱均使用英文表示。
[0042]實施例一、一種Linux系統(tǒng)內(nèi)存敏感數(shù)據(jù)的清除方法,包括:
[0043]101、當(dāng)進程調(diào)用close系統(tǒng)調(diào)用關(guān)閉文件時,或當(dāng)因進程退出而調(diào)用exit_files關(guān)閉未關(guān)閉的文件時,通過文件結(jié)構(gòu)struct file定位到相應(yīng)的地址空間結(jié)構(gòu)structaddress_space,判斷所要關(guān)閉的文件對應(yīng)的inode結(jié)構(gòu)是否有臟頁,如果有則調(diào)用vfs_fsync函數(shù)只將該文件中的臟頁回寫到磁盤中;遍歷所定位到的地址空間結(jié)構(gòu)中的基數(shù)樹,將基數(shù)樹中的所有頁面全部刪除、清零后釋放到空閑區(qū);
[0044]102、在每個進程中構(gòu)造讀寫鏈表,記錄對設(shè)備文件讀或?qū)憯?shù)據(jù)時在設(shè)備緩存中的起始地址address和數(shù)據(jù)長度length ;在read系統(tǒng)調(diào)用或write系統(tǒng)調(diào)用退出時,通過遍歷所述讀寫鏈表,對每個節(jié)點將從address開始,到address加length為止的地址空間中的數(shù)據(jù)清零。
[0045]其中,步驟101主要是針對進程讀取磁盤等塊設(shè)備而遺留在頁緩存中的備份數(shù)據(jù),當(dāng)進程關(guān)閉打開的文件時進行清除操作。步驟102主要是將設(shè)備緩存中的數(shù)據(jù)的生命期盡量縮短,設(shè)備用完數(shù)據(jù)就將數(shù)據(jù)清除。
[0046]由于磁盤和內(nèi)存讀寫速度的量級不同,傳統(tǒng)Linux系統(tǒng)在磁盤和用戶空間之間引入了頁緩存機制,如圖1所示。頁緩存機制利用系統(tǒng)的部分物理內(nèi)存作為頁緩存(使用結(jié)構(gòu)address_space描述頁面page),用于存放磁盤disk中經(jīng)常被使用的塊設(shè)備數(shù)據(jù),進程P1、P2……Pn從頁緩存中讀取數(shù)據(jù),而不必每次使用時都從低速塊設(shè)備中讀取。然而,在文件關(guān)閉后,PAX補丁并沒有及時的將文件中的數(shù)據(jù)同步到磁盤,也沒有將文件在頁緩存中的相應(yīng)物理頁框釋放并清除數(shù)據(jù);而本實施例的步驟101則可以同步文件中的數(shù)據(jù),清除打開文件時在頁緩存中的備份數(shù)據(jù),并釋放物理頁框。
[0047]另外,在數(shù)據(jù)實際讀寫操作時,如圖2所示,進程P1、P2和P3是通過虛擬文件系統(tǒng)virtual file system對應(yīng)到不同的文件系統(tǒng)(比如EXT2、NTFS、EXT4等)中,然后直接或通過結(jié)構(gòu)address_space采用具體的設(shè)備驅(qū)動程序(比如圖2中的驅(qū)動1、驅(qū)動2、驅(qū)動3)來完成相應(yīng)設(shè)備(比如圖2中的設(shè)備1、設(shè)備2、設(shè)備3)的讀寫操作的,這一機理使得用戶讀寫的數(shù)據(jù)被遺留在設(shè)備緩存中,PAX補丁也沒有將設(shè)備緩存考慮在內(nèi);而本實施例的步驟102則可以對進程讀寫設(shè)備 存放到設(shè)備驅(qū)動緩存中的數(shù)據(jù)進行清除。
[0048]本實施例的一種實施方式中,所述方法還可以包括:
[0049]103、在進程調(diào)用exit系統(tǒng)調(diào)用進行退出而釋放頁表項對應(yīng)的物理頁框時,或是調(diào)用brk和unmmap系統(tǒng)調(diào)用時,在釋放物理頁框前將物理頁框中的數(shù)據(jù)清零。
[0050]步驟103是對存有用戶數(shù)據(jù)的堆、棧和映射區(qū)這些用戶空間的數(shù)據(jù)的清除;這一部分是主要清除對象,因為進程的大部分數(shù)據(jù)都存放在這一部分。相比其他步驟中清除的部分,這一部分所占比重最大。步驟101中數(shù)據(jù)的清除相比步驟103而言,生命期更短。
[0051]本實施例的一種實施方式中,所述方法還可以包括:
[0052]104、定期進行下述操作:
[0053]將系統(tǒng)調(diào)用過程中遺留在當(dāng)前內(nèi)核棧中的數(shù)據(jù)用預(yù)定的四字節(jié)標(biāo)志覆蓋;并標(biāo)記所述內(nèi)核棧中已覆蓋的空間。
[0054]和其它步驟相比,步驟104的清除操作最頻繁。PAX補丁是在每次系統(tǒng)調(diào)用退出時,清除本次系統(tǒng)調(diào)用寫入內(nèi)核棧中的數(shù)據(jù),這樣集中清除會影響系統(tǒng)的處理性能,而本實施方式則性能損耗較低。
[0055]本實施方式的一種備選方案中,所述將系統(tǒng)調(diào)用過程中遺留在當(dāng)前內(nèi)核棧中的數(shù)據(jù)用預(yù)定的四字節(jié)標(biāo)志覆蓋的步驟具體可以包括:
[0056]當(dāng)進程第一次系統(tǒng)調(diào)用離開內(nèi)核棧,則找到thread_inf0的地址;當(dāng)進程非第一次系統(tǒng)調(diào)用離開內(nèi)核棧,則找到第一個具有連續(xù)50個所述預(yù)定的四字節(jié)標(biāo)志的地址;如果不存在具有連續(xù)50個該所述預(yù)定的四字節(jié)標(biāo)志的地址,則找到最后一個具有連續(xù)所述預(yù)定的四字節(jié)標(biāo)志的地址;定期將esp將從esp開始到所找到的地址之間的數(shù)據(jù)用所述預(yù)定的四字節(jié)標(biāo)志覆蓋。
[0057]本實施例的一種實施方式中,所述方法還可以包括:
[0058]105、當(dāng)回收內(nèi)存時,加密寫入交換區(qū)的數(shù)據(jù);清除被換出到交換區(qū)(swap space)的匿名頁中的數(shù)據(jù),以及被內(nèi)存回收機制回收的頁中的數(shù)據(jù)。
[0059]本實施方式中,數(shù)據(jù)的清除是利用Linux系統(tǒng)原有的機制,在頁面回收時最后會調(diào)用Shrink_page_liSt()函數(shù),對寫入交換區(qū)中的數(shù)據(jù)進行加密,并在釋放物理頁框時進行數(shù)據(jù)清除。
[0060]上述步驟101?105在執(zhí)行上不分先后,分別針對頁緩存、設(shè)備緩存、用戶空間、內(nèi)核棧內(nèi)存進行清除和交換區(qū)加密;只要一個步驟的觸發(fā)條件滿足(比如進程調(diào)用exit系統(tǒng)調(diào)用),就執(zhí)行該步驟中相應(yīng)的操作(比如將物理頁框中的數(shù)據(jù)清除)。
[0061]下面將用幾個例子具體闡述每一個步驟的實現(xiàn),下述例子是基于Linux內(nèi)核版本linux-3.2.30 ;參考下述例子,本領(lǐng)域技術(shù)人員可以容易得到其它Linux版本上的實現(xiàn)方案,這里不再贅述。
[0062]Linux系統(tǒng)中文件讀寫有兩種方式:其一,通過read、write系統(tǒng)調(diào)用對文件進行讀寫;其二,通過_ap*_ap2系統(tǒng)調(diào)用對文件進行映射,進而通過讀寫內(nèi)存對文件進行讀寫,而通常程序編寫時都是使用第一種方式。在這種情況下,為了加快文件的讀寫速度引入了如圖1所示的頁緩存(page cache)機制,在將磁盤中的文件讀入用戶空間時,會首先在頁緩存中進行查找該文件頁。如果該頁不在頁緩存中,則從磁盤中讀取該頁到頁緩存,然后再復(fù)制到用戶空間。而頁緩存中的頁只有在內(nèi)存緊缺或者周期性內(nèi)存回收時才被釋放,導(dǎo)致的結(jié)果是即使進程已經(jīng)退出,進程讀寫過的文件數(shù)據(jù)仍遺留在頁緩存中,這會導(dǎo)致文件中的敏感數(shù)據(jù)信息被泄露。
[0063]本實施例中步驟101采取的措施是在調(diào)用close系統(tǒng)調(diào)用關(guān)閉文件時,或因進程退出而調(diào)用eXit_files關(guān)閉未關(guān)閉的文件時,將文件對應(yīng)頁緩存中的物理頁框進行清零并釋放。步驟101的具體例子包括以下步驟:
[0064]11)在內(nèi)核源代碼文件sched.h中為進程描述符task_struct結(jié)構(gòu)的flags中定義標(biāo)志 PF_SWITHC_ADDRESS_FILE,定義如下:
[0065]#define PF_SWITHC_ADDRESS_FILE 0x00000001
[0066]PF_SWITHC_ADDRESS_FILE表示打開這個進程可以清零頁緩存和設(shè)備緩存。
[0067]task_struct 的 flags 在 do_execve_common O 函數(shù)中將相應(yīng)的位用 PF_SWITHC_ADDRESS_FILE 置位:
[0068]
【權(quán)利要求】
1.一種Linux系統(tǒng)內(nèi)存敏感數(shù)據(jù)的清除方法,包括: 當(dāng)進程調(diào)用close系統(tǒng)調(diào)用關(guān)閉文件時,或當(dāng)因進程退出而調(diào)用eXit_files關(guān)閉未關(guān)閉的文件時,通過文件結(jié)構(gòu)struct file定位到相應(yīng)的地址空間結(jié)構(gòu)struct address_space,判斷所要關(guān)閉的文件對應(yīng)的inode結(jié)構(gòu)是否有臟頁,如果有則調(diào)用vfs_fsync函數(shù)只將該文件中的臟頁回寫到磁盤中;遍歷所定位到的地址空間結(jié)構(gòu)中的基數(shù)樹,將基數(shù)樹中的所有頁面全部刪除、清零后釋放到空閑區(qū); 在每個進程中構(gòu)造讀寫鏈表,記錄對設(shè)備文件讀或?qū)憯?shù)據(jù)時在設(shè)備緩存中的起始地址address和數(shù)據(jù)長度length ;在read系統(tǒng)調(diào)用或write系統(tǒng)調(diào)用退出時,通過遍歷所述讀寫鏈表,對每個節(jié)點將從address開始,到address加length為止的地址空間中的數(shù)據(jù)清零。
2.如權(quán)利要求1所述的方法,其特征在于,還包括: 在進程調(diào)用exit系統(tǒng)調(diào)用進行退出而釋放頁表項對應(yīng)的物理頁框時,或是調(diào)用brk和unmmap系統(tǒng)調(diào)用時,在釋放物理頁框前將物理頁框中的數(shù)據(jù)清零。
3.如權(quán)利要求1所述的方法,其特征在于,還包括: 定期進行下述操作: 將系統(tǒng)調(diào)用過程中遺留在當(dāng)前內(nèi)核棧中的數(shù)據(jù)用預(yù)定的四字節(jié)標(biāo)志覆蓋;標(biāo)記所述內(nèi)核棧中已覆蓋的空間。
4.如權(quán)利要求3所述的方法,其特征在于,所述將系統(tǒng)調(diào)用過程中遺留在當(dāng)前內(nèi)核棧中的數(shù)據(jù)用預(yù)定的四字節(jié)標(biāo)志覆蓋的步驟包括: 當(dāng)進程第一次系統(tǒng)調(diào)用離開內(nèi)核棧,則找到thread_inf0的地址;當(dāng)進程非第一次系統(tǒng)調(diào)用離開內(nèi)核棧,則找到第一個具有連續(xù)50個所述預(yù)定的四字節(jié)標(biāo)志的地址;如果不存在具有連續(xù)50個該所述預(yù)定的四字節(jié)標(biāo)志的地址,則找到最后一個具有連續(xù)所述預(yù)定的四字節(jié)標(biāo)志的地址;將從esp開始到所找到的地址之間的數(shù)據(jù)用所述預(yù)定的四字節(jié)標(biāo)志覆至JHL ο
5.如權(quán)利要求1所述的方法,其特征在于,還包括: 當(dāng)回收內(nèi)存時,加密寫入交換區(qū)的數(shù)據(jù);清除被換出到交換區(qū)的匿名頁中的數(shù)據(jù),以及被內(nèi)存回收機制回收的頁中的數(shù)據(jù)。
6.一種Linux系統(tǒng)內(nèi)存敏感數(shù)據(jù)的清除裝置,其特征在于,包括: 文件數(shù)據(jù)清除模塊,用于當(dāng)進程調(diào)用close系統(tǒng)調(diào)用關(guān)閉文件時,或當(dāng)因進程退出而調(diào)用exit_files關(guān)閉未關(guān)閉的文件時,通過文件結(jié)構(gòu)struct file定位到相應(yīng)的地址空間結(jié)構(gòu)struct address_space,判斷所要關(guān)閉的文件對應(yīng)的inode結(jié)構(gòu)是否有臟頁,如果有則調(diào)用vfS_fSync函數(shù)只將該文件中的臟頁回寫到磁盤中;遍歷所定位到的地址空間結(jié)構(gòu)中的基數(shù)樹,將基數(shù)樹中的所有頁面全部刪除、清零后釋放到空閑區(qū); 設(shè)備數(shù)據(jù)清除模塊,用于在每個進程中構(gòu)造讀寫鏈表,記錄對設(shè)備文件讀或?qū)憯?shù)據(jù)時在設(shè)備緩存中的起始地址address和數(shù)據(jù)長度length ;在read系統(tǒng)調(diào)用或write系統(tǒng)調(diào)用退出時,通過遍歷所述讀寫鏈表,對每個節(jié)點將從address開始,到address加length為止的地址空間中的數(shù)據(jù)清零。
7.如權(quán)利要求6所述的裝置,其特征在于,還包括: 用戶數(shù)據(jù)清除模塊,用于在進程調(diào)用exit系統(tǒng)調(diào)用進行退出而釋放頁表項對應(yīng)的物理頁框時,或是調(diào)用brk和unmmap系統(tǒng)調(diào)用時,在釋放物理頁框前將物理頁框中的數(shù)據(jù)清零。
8.如權(quán)利要求6所述的裝置,其特征在于,還包括: 內(nèi)核棧清除模塊,用于定期進行下述操作:將系統(tǒng)調(diào)用過程中遺留在當(dāng)前內(nèi)核棧中的數(shù)據(jù)用預(yù)定的四字節(jié)標(biāo)志覆蓋;標(biāo)記所述內(nèi)核棧中已覆蓋的空間。
9.如權(quán)利要求8所述的裝置,其特征在于,所述內(nèi)核棧清除模塊將系統(tǒng)調(diào)用過程中遺留在當(dāng)前內(nèi)核棧中的數(shù)據(jù)用預(yù)定的四字節(jié)標(biāo)志覆蓋是指: 所述內(nèi)核棧清除模塊當(dāng)進程第一次系統(tǒng)調(diào)用離開內(nèi)核棧,則找到thread_inf0的地址;當(dāng)進程非第一次系統(tǒng)調(diào)用離開內(nèi)核棧,則找到第一個具有連續(xù)50個所述預(yù)定的四字節(jié)標(biāo)志的地址;如果不存在具有連續(xù)50個該所述預(yù)定的四字節(jié)標(biāo)志的地址,則找到最后一個具有連續(xù)所述預(yù)定的四字節(jié)標(biāo)志的地址;將從esp開始到所找到的地址之間的數(shù)據(jù)用所述預(yù)定的四字節(jié)標(biāo)志覆蓋。
10.如權(quán)利要求6所述的裝置,其特征在于,還包括: 回收過程清除 模塊,用于當(dāng)回收內(nèi)存時,加密寫入交換區(qū)的數(shù)據(jù);清除被換出到交換區(qū)的匿名頁中的數(shù)據(jù),以及被內(nèi)存回收機制回收的頁中的數(shù)據(jù)。
【文檔編號】G06F9/445GK104007993SQ201410258526
【公開日】2014年8月27日 申請日期:2014年6月11日 優(yōu)先權(quán)日:2014年6月11日
【發(fā)明者】涂碧波, 朱民, 孟丹 申請人:中國科學(xué)院信息工程研究所