◆馬 飛
(中國電建集團貴陽勘測設(shè)計研究院 貴州 550081)
本文主要研究一種基于Hook技術(shù)的系統(tǒng),解決機密文件在存儲和傳輸過程中的信息安全問題,對程序源代碼、工程圖紙、技術(shù)資料、財務(wù)報表、客戶資料等機密文件進行強制透明加密,以便使加密過的機密文件離開了指定的使用環(huán)境就無法解密使用,從而實現(xiàn)保護機密文件信息安全的目的[1]。
在 Windows系統(tǒng)上,通過掛鉤應(yīng)用程序接口函數(shù)來改變其讀寫方式。在關(guān)閉文件時,通過將用戶操作的臨時文件明文進行加密,然后再拷貝到文件原來所在的目錄下并將原文件覆蓋掉[2-3]。透明加密系統(tǒng)在應(yīng)用程序讀寫文件時改變其讀寫方式,使密文被讀入內(nèi)存時自動被系統(tǒng)轉(zhuǎn)變成程序能夠識別的明文,在保存時又要將內(nèi)存中的明文轉(zhuǎn)換成密文再寫入存儲介質(zhì)。其加解密實現(xiàn)步驟如下所示:
步驟1:用戶調(diào)用某種應(yīng)用程序操作某種機密文件;
步驟2:文件透明加密系統(tǒng)在驅(qū)動層掛鉤API,改變文件的操作方式;
步驟3:文件透明加密系統(tǒng)根據(jù)事先設(shè)定的加密規(guī)則判斷用戶訪問的文件是否需要加解密,如果需要進行加解密,則系統(tǒng)自動調(diào)用事先設(shè)定好的加密算法和指定的密鑰對文件進行加解密;
步驟4:Windows文件系統(tǒng)以密文的方式操作文件,即從磁盤上讀取機密文件的密文或者將加密后的機密文件寫入磁盤。
為了對指定類型的文件進行強制透明加密,系統(tǒng)構(gòu)建了一個基于進程名的訪問控制安全模型,即將文件分為機密文件和普通文件,機密文件是指根據(jù)系統(tǒng)的加密規(guī)則指定為需要加密的文件,而普通文件是指不需要加密保護的文件。同時,本原型系統(tǒng)將進程分為機密進程和非機密進程,機密進程是指在系統(tǒng)的監(jiān)控下,可以訪問機密文件的進程;非機密進程是指不受系統(tǒng)的影響,可以正常訪問普通文件的進程。根據(jù)本原型系統(tǒng)的加密策略規(guī)定,機密進程只能訪問機密文件,不能訪問普通文件;而非機密進程不允許訪問機密文件,只能訪問普通文件;系統(tǒng)只針對機密進程對機密文件的操作進行自動加密解密,而對非機密進程對普通文件的操作則不做處理。
本系統(tǒng)從邏輯上由里到外劃分為三個層次,其中核心層提供加密驅(qū)動功能,主要負(fù)責(zé)文件的加密、解密操作及用戶權(quán)限的控制;中間層負(fù)責(zé)用戶層對核心層的操作與控制;用戶層則負(fù)責(zé)提供用戶的操作界面。系統(tǒng)在組成上一共分為應(yīng)用控制模塊、核心功能模塊和密鑰管理模塊三個部分,應(yīng)用控制模塊提供用戶與系統(tǒng)的交互界面,控制核心功能模塊即加密驅(qū)動的起停、安裝與卸載,同時讓管理員方便地添加需要加密的進程類型和文件類型。
在系統(tǒng)的加解密過程中,許多應(yīng)用軟件都創(chuàng)建了臨時文件,整個加解密過程都是對臨時文件進行操作,當(dāng)操作結(jié)束后再用加密過的臨時文件將正式文件替換掉。因此核心加密模塊必須獲取機密文件的正式文件和臨時文件的讀寫訪問權(quán)限,才能對機密文件實現(xiàn)加密。因此,核心功能模塊的功能主要是負(fù)責(zé)文件的訪問權(quán)限控制和加解密處理。其中,核心層功能模塊共分為八個部分,其中Entry.c提供加密系統(tǒng)調(diào)用程序的入口,Hook.c模塊負(fù)責(zé)掛鉤System Service Dispatch Table(SSDT),攔截各種文件操作句柄,即攔截ZwCreateFile、ZwOpenFile、 ZwReadFile、ZwWriteFile、ZwCloseFile、ZwSetInformationFile函數(shù)的操作句柄;用HookZwCreateFile.c、HookZwOpenFile.c兩個模塊對新創(chuàng)建的機密文件進行從頭到尾整體加密,并將文件名、保存路徑及訪問文件的進程名存入指定的文件加密記錄表中;用HookZwWriteFile.c模塊對修改過的機密文件進行從頭到尾整體加密一遍,并將文件名、保存路徑和訪問文件的進程名存入指定的文件加密記錄表中;而HookZwReadFile.模塊則負(fù)責(zé)將合法用戶打開的機密文件解密;HookZwClose.c模塊負(fù)責(zé)關(guān)閉已打開的機密文件。
密鑰管理模塊主要負(fù)責(zé)文件加密密鑰的生成與管理。安裝過程中加密系統(tǒng)根據(jù)用戶輸入的用戶名和登錄密碼生成密鑰信息,采用單向散列函數(shù)SHA_1生成唯一的用于對文件加密的密鑰,將其傳遞給核心功能模塊,并將密鑰內(nèi)置于加密系統(tǒng)內(nèi)。當(dāng)用戶更改用戶名和登錄密碼后,系統(tǒng)就會生成一個新的文件加解密密鑰,因此用戶在更改用戶名和登錄密碼之前必須對原來的機密文件進行處理。
其系統(tǒng)架構(gòu)如圖1和系統(tǒng)功能結(jié)構(gòu)如圖2所示。
圖1 系統(tǒng)架構(gòu)圖
圖2 系統(tǒng)功能結(jié)構(gòu)圖
本系統(tǒng)采用的加密規(guī)則是進程名與文件擴展名的組合策略,系統(tǒng)根據(jù)用戶所調(diào)用的應(yīng)用軟件對應(yīng)的進程名及所訪問的文件的擴展名,與加密記錄表中的記錄進行比對,以此來判斷文件是否需要加解密。比如,系統(tǒng)設(shè)定自動加解密文件擴展名為.TXT的文件,當(dāng)用戶調(diào)用NotePad++軟件創(chuàng)建或者修改擴展名為.TXT的文件時,系統(tǒng)就會自動監(jiān)控到 NotePad++.exe進程對擴展名為.TXT的文件進行操作,然后自動將其加密;當(dāng)用戶調(diào)用NotePad++軟件讀取擴展名為.TXT的文件時,系統(tǒng)就會根據(jù)監(jiān)控到的文件擴展名與加密記錄表中的記錄進行比對,來判斷該文件是否已經(jīng)在文件加密記錄表中。如果已經(jīng)存在,則說明該文件已經(jīng)被加密處理過,系統(tǒng)會自動將其解密;如果不存在,則說明該文件未被加密處理過,系統(tǒng)先對文件從頭到尾加密一遍,然后再進行讀寫操作。
同時,系統(tǒng)通過用戶名和登錄密碼來生成唯一的加密密鑰和解密密鑰,使得機密文件只能在用戶指定的環(huán)境下使用,一旦離開指定的使用環(huán)境,便會因使用不了系統(tǒng)的解密服務(wù)而無法繼續(xù)操作。
本系統(tǒng)工作在操作系統(tǒng)的核心層,通過在系統(tǒng)內(nèi)核攔截文件的操作句柄,修改系統(tǒng)對文件操作的接口,同時根據(jù)用戶的身份、進程名及文件擴展名來判別當(dāng)前文件是否需要加密。如果需要加密就按照寫多少加密多少的原則,將內(nèi)存中的文件內(nèi)容全部加密,然后再寫入存儲介質(zhì);解密時同樣根據(jù)用戶的身份、進程名及文件擴展名來判別當(dāng)前文件是否需要解密,如需解密則按照讀多少解密多少的原則,將文件內(nèi)容從存儲介質(zhì)中讀取出來并進行實時解密,然后發(fā)給操作系統(tǒng)的I/O管理器,用戶再使用指定的進程以明文的形式將加密文件打開。這樣文件從被創(chuàng)建起就被強制加密,且始終以密文的形式存放在磁盤上,因此不會造成信息泄漏。
本系統(tǒng)的實現(xiàn)過程是根據(jù)系統(tǒng)事先設(shè)定的加密規(guī)則來判斷用戶訪問的文件是否滿足加密條件,如果滿足則本原型系統(tǒng)會自動對這些需要保密的文件進行加解密處理;如果不滿足,本原型系統(tǒng)則不進行加解密操作。
步驟1:用戶調(diào)用某種進程訪問某種文件;
步驟2:系統(tǒng)根據(jù)加密規(guī)則對訪問文件的進程名進行判斷,如果不符合加密規(guī)則要求就拒絕訪問,如果符合要求則繼續(xù)往下判斷,執(zhí)行步驟3;
步驟3:判斷該進程所調(diào)用的函數(shù)參數(shù)是否為FileCreate,如果是則對該文件進行加密處理,如果不是則繼續(xù)往下判斷,執(zhí)行步驟4;
步驟4:判斷文件擴展名是否符合加密規(guī)則,如果符合則對該文件進行加解密處理,如果不符合則不對其進行加解密操作。
經(jīng)過測試,本系統(tǒng)能夠?qū)崿F(xiàn)對Adobe Acrobat創(chuàng)建的擴展名為.pdf的文件,Paint創(chuàng)建的擴展名為.bmp的文件、NotePad++創(chuàng)建的文件等進行加密。
本系統(tǒng)實現(xiàn)了文件的透明加密,有效地保護了機密文件的信息安全。其加密規(guī)則是根據(jù)事先設(shè)定的加密策略對指定類型的文件強制加密,在用戶向外發(fā)送非涉密文件的明文時需要進行大量的解密操作,影響正常的工作效率。今后的努力方向是研發(fā)綜合手動加密方式和透明加密方式兩者優(yōu)點的智能動態(tài)加密系統(tǒng)。