張亞暉, 趙 敏, 李 劍, 韓 歡
(1.陸軍工程大學 通信士官學校,重慶 400035;2.陸軍工程大學 指揮控制工程學院,江蘇 南京 210007)
信息系統(tǒng)(information system,IS)是以處理信息流為目的的人機一體化系統(tǒng),在人類的社會生活、生產(chǎn)實踐、政治生態(tài)、軍事斗爭和人文學術等領域扮演著越來越重要的角色。但隨著計算機軟硬件的飛速發(fā)展,越來越多的信息系統(tǒng)成為遺留系統(tǒng)。長期運行的遺留信息系統(tǒng)通常承載著某些關鍵復雜業(yè)務,并具有以下特征:(1)系統(tǒng)架構陳舊、維護困難;(2)開發(fā)維護人員流動大、代碼和文檔缺失;(3)業(yè)務功能獨立,沒有集成;(4)安全防護問題突出。
遺留信息系統(tǒng)雖然存在較多問題,但因為長期運行,通常包含大量的業(yè)務數(shù)據(jù),是企業(yè)非常重要的資源。大部分企業(yè)在處理遺留信息系統(tǒng)時通常有兩種方式:(1)完全拋棄遺留信息系統(tǒng),進行重新開發(fā);(2)對遺留信息系統(tǒng)進行性能和安全優(yōu)化。重新開發(fā)的信息系統(tǒng)可以采用較新的軟硬件和開發(fā)技術,但通常需要對原有的數(shù)據(jù)進行適配轉換,在此過程中,還需要繼續(xù)使用遺留系統(tǒng)。因此,可以先對遺留信息系統(tǒng)進行性能和安全優(yōu)化,再根據(jù)需求進行信息系統(tǒng)的重新開發(fā)。目前雖然有關于遺留信息系統(tǒng)工程方面的文獻[1-2],但關于安全方面的研究相對較少,特別是目前遺留信息系統(tǒng)主要運行于基于Intel處理器的商用Windows平臺,操作系統(tǒng)和信息系統(tǒng)本身都可能存在漏洞,易受攻擊。雖然一些遺留信息系統(tǒng)具有身份認證、殺毒、加密等傳統(tǒng)安防手段,但仍面臨較大的安全風險,如無法解決運行態(tài)內存中的數(shù)據(jù)安全問題。
針對上述不足,本文以A公司在Windows上運行的無源代碼無文檔的遺留人力資源管理信息系統(tǒng)為例,提出采用SGX可信計算技術為該遺留信息系統(tǒng)中的敏感信息提供機密性和完整性保護,最大程度減少敏感信息的泄露問題。
本文的貢獻主要有:(1) 設計了Windows場景中基于SGX技術保護遺留信息系統(tǒng)的架構,解決了該場景中信息系統(tǒng)的敏感信息保護問題,推廣了SGX的典型應用場景。(2) 提出了基于Hook技術調用SGX的方法,解決了Windows遺留信息系統(tǒng)無法直接使用SGX的問題,豐富了遺留信息系統(tǒng)安全防護的技術手段。
微軟Detours庫[3]可以在程序運行過程中動態(tài)攔截函數(shù)調用。它的工作原理是將目標函數(shù)前幾個指令替換為一個無條件的跳轉,跳轉到用戶定義的Detour函數(shù)。而被攔截的函數(shù)保存在一個名為Trampoline的函數(shù)中。Trampoline函數(shù)保存了目標函數(shù)移除的指令和一個無條件跳轉,可以使執(zhí)行流重新跳轉回目標函數(shù)的執(zhí)行體部分(即未被移除的部分)。當執(zhí)行到目標函數(shù)的時候,可以根據(jù)用戶指令直接跳轉到用戶提供的Detours函數(shù),Detours函數(shù)開始執(zhí)行自己的函數(shù)代碼,執(zhí)行完畢后可以直接返回或調用Trampoline函數(shù)將執(zhí)行流程跳轉到原目標函數(shù)前。當目標函數(shù)執(zhí)行完以后,再將控制權交給Detour函數(shù),Detour函數(shù)執(zhí)行適當?shù)拇a返回。
SGX是Intel公司提出的一種芯片級信息隔離安全防護新技術,是對Intel體系(intel architecture)新的擴展,用于增強軟件的安全性[4],Intel公司在Skylake系列CPU中開始加入了對SGX技術的支持。SGX通過在硬件級別上為應用程序實現(xiàn)一個被隔離的內存空間來保證運行代碼和數(shù)據(jù)的機密性與完整性,被隔離的空間稱為飛地(enclave)。不同于以往的識別和隔離平臺上的惡意軟件,SGX是將用戶代碼和數(shù)據(jù)以明文形式封裝在Enclave中,而Enclave外的代碼和數(shù)據(jù)則需要加密存儲,因此對于非Enclave訪問,外部存儲器讀取的和總線監(jiān)聽的都是加密后的數(shù)據(jù)。
另外,在x86架構中,Intel CPU的運行級別分為Ring 0、Ring 1、Ring 2和Ring 3四級。其中Ring 0權限級別最高,Ring 3最低,權限級別高的可以修改查看與它同級或較低級別的數(shù)據(jù)和代碼,但反過來則經(jīng)常被認為是非法操作而不被允許。在不支持SGX技術的硬件設備中,一些惡意攻擊者可以通過獲取Ring 0權限級別,對Ring 3權限級別的用戶代碼和數(shù)據(jù)實施竊取和破壞。但在SGX技術中,雖然SGX運行于Ring 3權限級別,但操作系統(tǒng)等均不被SGX信任,可以防止更高權限的攻擊者對Enclave內代碼和數(shù)據(jù)的攻擊。
與當前流行的可信平臺模塊TPM[5]和ARM TrustZone[6]兩種硬件安全隔離技術相比,SGX還具有較小的可信計算基TCB(trusted computing base),僅包括CPU和Enclave本身,避免了基于軟件的TCB的漏洞與威脅。同時SGX可保障軟件運行時的安全,惡意軟件無法訪問和篡改Enclave中運行時的內容;SGX基于指令集的擴展與獨立的認證方式,使應用程序可以靈活調用SGX的安全功能并進行驗證。
自SGX技術提出以來,學術界和工業(yè)界對基于SGX的網(wǎng)絡應用和針對SGX攻擊與防御等[7-19]進行了大量研究與驗證。其中,基于SGX技術構建可信的系統(tǒng)調用庫LibOS可以提高安全應用的開發(fā)效率,為遺留系統(tǒng)提供安全增強保護,因而成為研究熱點。
文獻[7,8,11,12,17]基于SGX技術分別提出了Haven、SCONE、Panoply、Graphene-SGX和Occlum等LibOS方案。但遺憾的是,SCONE、Panoply、Graphene-SGX和Occlum只適用于Linux環(huán)境,且SCONE、Panoply和Occlum是利用交叉編譯器實現(xiàn)的源代碼級別兼容,即雖然可以不修改應用的源代碼但必須要對源代碼進行重新編譯;而Graphene-SGX是二進制級別兼容,解決了大部分應用在無源代碼情況下的隔離保護,已經(jīng)成為非常受歡迎的LibOS,但其存在性能和數(shù)據(jù)同步一致性的問題。Haven是Windows環(huán)境中的LibOS方案,但它需要在Enclave中重新封裝系統(tǒng)調用及其他的Shield模塊等,使得其可信計算基過大,且因其閉源而導致Windows環(huán)境中基于SGX可用的遺留系統(tǒng)安全增強方案幾乎空白。
A公司的遺留人力資源管理信息系統(tǒng),主要用于存儲公司的人力資源信息。因該系統(tǒng)開發(fā)時間較早,開發(fā)人員、文檔和源代碼等均已缺失,已成為無源代碼無文檔的遺留信息系統(tǒng)。經(jīng)安裝使用、逆向工程分析,其系統(tǒng)架構如圖1所示。
圖1 某遺留人力資源管理信息系統(tǒng)架構
該遺留信息系統(tǒng)是基于MFC開發(fā)的32位應用程序,并通過DLL動態(tài)鏈接庫實現(xiàn)對SQL Server數(shù)據(jù)庫的訪問。系統(tǒng)中的敏感信息是人員數(shù)據(jù),特別是用戶口令、薪酬數(shù)據(jù)等。且用戶口令和薪酬數(shù)據(jù)等敏感信息以明文的形式,分別存儲在數(shù)據(jù)庫表UsersLogin和WagesInfo中。
為該遺留人力資源管理信息系統(tǒng)的相關操作提供一個安全可信的執(zhí)行環(huán)境,并有效保護系統(tǒng)中的數(shù)據(jù)是亟待解決的問題?;诖耍疚募僭O系統(tǒng)的處理器是可信的,即Enclave安全容器及容器中的代碼和數(shù)據(jù)都是可信的。而Enclave外部是不可信的,即BIOS、操作系統(tǒng)及遺留信息系統(tǒng)自身是不可信的。攻擊者可以利用系統(tǒng)或軟件漏洞攻擊BIOS、操作系統(tǒng)或遺留信息系統(tǒng)等,獲得Ring 0級別特權,進而可以修改系統(tǒng)配置,植入惡意代碼、病毒,從而竊取、偽造或破壞遺留信息系統(tǒng)中的敏感信息。
該遺留人力資源管理信息系統(tǒng)是32位的應用程序,運行于基于Intel處理器的商用Windows平臺。而Intel SGX可信技術對硬件的要求是6代Skylake CPU及以上,對操作系統(tǒng)的要求是64位的Windows 7及以上,目前主流的64位操作系統(tǒng)是Windows 10、Windows Server 2012和Windows Server 2016等,可以兼容運行32位的應用程序,這為A公司的遺留信息系統(tǒng)使用SGX可信計算技術提供了硬件和軟件支持。
安全增強方案的目的是保護該遺留人力資源管理信息系統(tǒng)中的敏感信息。方案的基本思路是:
(1) 通過逆向工程、靜態(tài)分析等方法找到Windows無源代碼遺留信息系統(tǒng)的注入點;
(2) 編寫Hook邏輯改變遺留信息系統(tǒng)中的數(shù)據(jù)庫操作函數(shù)執(zhí)行流程,使新的執(zhí)行流程調用SGX不可信組件的接口函數(shù);
(3) 使用不可信組件的接口函數(shù)將遺留信息系統(tǒng)的明文敏感信息傳入可信Enclave安全容器;
(4) 在可信Enclave中對明文敏感信息進行加密處理并將相關的密鑰等隱私數(shù)據(jù)綁定至Enclave;
(5) 將加密后的敏感信息返回給原數(shù)據(jù)庫操作函數(shù),并將相關的密文存儲到數(shù)據(jù)庫中。
基于SGX和Enclave是安全可信的,即使操作系統(tǒng)或遺留信息系統(tǒng)內部被攻擊或篡改,仍可以保證Enclave安全容器中代碼和數(shù)據(jù)的安全可信,防止敏感信息被竊取,架構示意圖如圖2所示。
圖2 基于SGX的遺留信息系統(tǒng)安全增強方案框架
基于上述思路,開發(fā)人員不需要對原遺留信息系統(tǒng)進行任何修改,只需要:
(1) 改變原數(shù)據(jù)庫操作函數(shù)的執(zhí)行流程。
(2) 開發(fā)Hook函數(shù)與SGX不可信組件交互的接口函數(shù)。
(3) 開發(fā)SGX組件,包括可信組件(方案命名為可信Enclave,TEnclave)和不可信組件(除去可信組件的其他部分,命名為UTBridge)。其中可信組件用于執(zhí)行密鑰生成、敏感信息加解密等安全相關的操作;不可信組件負責與Hook函數(shù)以及可信組件的交互。可信組件中的代碼和數(shù)據(jù)在可信內存區(qū)域受到SGX可信計算技術保護,而不可信組件的代碼和數(shù)據(jù)位于一般的內存中。
3.2.1 方案的形式描述
重點對安全增強方案中敏感信息的加解密進行描述。
定義安全增強方案SES={KSGX,NSGX,SSGX}。其中:KSGX={key1, key2,…, keyn}為飛地中密鑰的有限集;NSGX={nonce1,nonce2,…,noncen}為飛地中隨機數(shù)的有限集;SSGX={(KSGX,NSGX)}為飛地中密鑰和隨機數(shù)組合的有限復合集。
算法1對明文敏感信息的加密算法(SGX_encrypt)
輸入:明文敏感信息Plaintext
輸出:密文敏感信息Ciphertext
a) 輸入Plaintext;
b)RSGX=Random(SSGX),從SSGX中隨機選取一組密鑰和隨機數(shù)的組合;
c) rv=Encrypt(Plaintext,Ciphertext,RSGX),在飛地中加密敏感信息;
d )if rv!=SGX_SUCCESS,轉f);
else轉e);
e) 輸出Ciphertext;
f) 結束。
算法2對密文敏感信息的解密算法(SGX_decrypt)
輸入:密文敏感信息Ciphertext
輸出:明文敏感信息Plaintext
a) 輸入Ciphertext;
b) 循環(huán):fori=1;i≤n;i++
rv=Decrypt(Ciphertext, Plaintext,SSGXi)
if rv!= SGX_SUCCESS continue;
else break;
c) if rv!=SGX_SUCCESS,轉e);
else轉d);
d ) 輸出Plaintext;
e) 結束。
3.2.2 改變原數(shù)據(jù)庫操作函數(shù)執(zhí)行流程
改變函數(shù)執(zhí)行流程的方法有很多,最簡單的方式是修改函數(shù)的源碼,但對于無源代碼的遺留信息系統(tǒng),則可以通過Hook技術更改函數(shù)的執(zhí)行流程。方案使用逆向工程、靜態(tài)分析等方式分析獲取原遺留信息系統(tǒng)的注入點,使用微軟Detours庫實現(xiàn)Hook函數(shù)的注入。
通過對原遺留信息系統(tǒng)進行逆向工程分析,其數(shù)據(jù)訪問層的DLL動態(tài)鏈接庫中主要有兩個與數(shù)據(jù)庫操作相關的函數(shù),分別是Dboperafunc和Dbselectfunc。經(jīng)分析驗證,其中Dboperafunc主要用于更改數(shù)據(jù)庫,即將人員信息寫入數(shù)據(jù)庫;而Dbselectfunc主要用于查詢數(shù)據(jù)庫,即查詢人員信息從而顯示到MFC應用中。
根據(jù)Detours庫的使用規(guī)則,安全增強方案需要定義4個函數(shù)實現(xiàn)Hook邏輯,包括2個Trampoline函數(shù)和2個Detour函數(shù)。定義的Trampoline函數(shù)為Real_dbopera和Real_dbselect,分別用于保存Dboperafunc和Dbselectfunc的移除指令和無條件跳轉,以及分別用于還原恢復Dboperafunc和Dbselectfunc函數(shù)的執(zhí)行流程。定義的Detour函數(shù)為Hook_dbopera和Hook_dbselect,分別用于改變Dboperafunc和Dbselectfunc的執(zhí)行流程,以便在更改后的執(zhí)行流程中使用SGX可信計算技術對敏感信息進行加密和解密操作。注意設計的Trampoline和Detour函數(shù)的參數(shù)列表、類型及函數(shù)返回值等均應與原函數(shù)相同,否則函數(shù)跳轉將失敗。更改前后的執(zhí)行流程分別如圖3、圖4所示。
圖3 函數(shù)正常的執(zhí)行流程
圖4 hook注入后的函數(shù)執(zhí)行流程
所需函數(shù)定義完成后,可以使用DetourAttach攔截目標函數(shù)。DetourAttach需要2個參數(shù):目標函數(shù)指針地址和Detour函數(shù)地址,但目標函數(shù)不能直接作為參數(shù)傳入,而需要傳入目標指針。DetourAttach為調用目標函數(shù)分配并準備好一個Trampoline函數(shù)。Detour運行以后,目標函數(shù)和Trampoline會被重寫,目標指針被更新,指向Trampoline函數(shù)。一旦目標函數(shù)被攔截,目標函數(shù)的調用會被轉到Detour函數(shù)。目標函數(shù)通過Trampoline被執(zhí)行的時候,Detour函數(shù)將參數(shù)復制過來。要想移除攔截,可以調用DetourDetach。與DetourAttach類似,DetourDetach也需要2個參數(shù):目標函數(shù)指針地址和Detour函數(shù)地址。DetourDetach執(zhí)行后,目標函數(shù)被重寫為其原來的狀態(tài)。Trampoline函數(shù)被刪除,目標函數(shù)指針恢復為原來的目標函數(shù)。
在安全增強方案中,因為要攔截的程序沒有源代碼,所以需要將Trampoline函數(shù)Real_dbXXfunc和Detour函數(shù)Hook_dbXXfunc封裝在HookHrMis.dll中,并在遺留信息系統(tǒng)啟動時,使用DetourCreateProcessWithDllEx將HookHrMis.dll注入遺留信息系統(tǒng)進程中。
3.2.3 安全操作與敏感信息的隔離保護
遺留信息系統(tǒng)的數(shù)據(jù)庫操作函數(shù)執(zhí)行流程被更改后,需使新的執(zhí)行流程調用SGX不可信組件的接口函數(shù),通過接口函數(shù)將系統(tǒng)中的明文敏感信息由不可信組件傳入可信Enclave安全容器,并在Enclave中對明文敏感信息進行加密處理。
SGX組件由可信組件和不可信組件組成,其中本方案的可信組件命名為TEnclave,不可信組件為除TEnclave以外的部分,命名為UTBridge??尚沤M件TEnclave與不可信組件UTBridge會進行交互,其交互規(guī)則要按照SGX規(guī)范編寫Enclave定義語言(enclave definition language, EDL)文件[20]。在安全增強方案中,編寫TEnclave.edl文件對方案的可信組件與不可信組件進行明確的劃分與定義,SGX可以使用該EDL文件自動完成可信組件和不可信組件相關文件的生成,并為可信容器TEnclave創(chuàng)建相關的OCALL和ECALL例程。自動生成的可信組件文件包括TEnclave_t.h、TEnclave_t.c,不可信組件文件包括TEnclave_u.h、TEnclave_u.c。ECALL和OCALL主要完成可信組件TEnclave與不可信組件UTBridge的交互,ECALL是不可信部分調用可信部分的方式,函數(shù)的執(zhí)行將從不可信組件UTBridge轉到可信組件TEnclave,而OCALL則是可信部分調用不可信部分的方式,函數(shù)執(zhí)行將從可信組件TEnclave轉到不可信組件UTBridge。
可信組件TEnclave和不可信組件UTBridge均被封裝為單獨的dll,從HookHrMis到TEnclave的函數(shù)調用將遵循圖5所示流程。
圖5 安全增強方案函數(shù)調用示意圖
3.2.4 敏感信息增強保護示例
下面以對遺留人力資源管理信息系統(tǒng)中的人員薪酬數(shù)據(jù)進行增強保護為例,說明如何改變原數(shù)據(jù)庫操作函數(shù)執(zhí)行流程,以及如何對安全操作與敏感信息進行隔離保護,其流程如圖6所示。
圖6 敏感信息增強保護示例流程圖
第1階段為改變函數(shù)流程。通過逆向工程、靜態(tài)分析等手段獲取原數(shù)據(jù)庫操作函數(shù),主要包括Dboperafunc和Dbselectfunc,分別設計相應的Trampoline函數(shù)和Detour函數(shù)。
(1) Trampoline函數(shù),用于保存原數(shù)據(jù)庫操作函數(shù)的移除指令和無條件跳轉,以便還原執(zhí)行流和實現(xiàn)原始的函數(shù)調用,有Real_dbopera和Real_dbselect。
(2) Detour函數(shù),用于攔截原數(shù)據(jù)庫的操作函數(shù),以實現(xiàn)對人員薪酬數(shù)據(jù)的加解密,有Hook_dbopera和Hook_dbselect。Hook_dbopera函數(shù)用于更改原數(shù)據(jù)庫操作函數(shù)Dboperafunc的執(zhí)行流程,通過分析得知原函數(shù)的參數(shù)為要執(zhí)行的SQL語句。通過使用SQL Server數(shù)據(jù)庫管理員賬號查看該人力資源管理信息系統(tǒng)數(shù)據(jù)庫的表結構,人員薪酬數(shù)據(jù)表為WagesInfo,其中的薪酬列名為Wage。分析函數(shù)Dboperafunc的參數(shù)SQL語句中是否存在表名“WagesInfo”以及是否存在“Insert”或“Update”等詞句,若存在這些詞句,則需要對該語句進行解析重寫,否則應直接調用Real_dbopera還原執(zhí)行流。
第2階段為隔離保護安全操作與敏感信息。提取SQL語句中的薪酬Wage字段,調用UTBridge.dll中的封裝函數(shù)Ew_X,再由Ew_X函數(shù)進行ECALL調用進入可信組件TEnclave。
(1) 啟動Enclave安全區(qū),使用Enclave前必須啟動Enclave并將生成的Enclave ID提供給ECALL例程。這對于其他函數(shù)應該是透明的,安全增強方案通過使用一個全局變量保存該ID信息,但這會導致在安全區(qū)內一次只能存在一個線程。對于安全應用來說這是一個合理的解決方案,因為較少的線程意味著較小的可信計算基和攻擊面。為了解決透明性問題,UTBridge.dll中的函數(shù)應首先檢查安全區(qū)是否已啟動,如果Enclave已啟動,則直接使用,否則先進行Enclave安全區(qū)的創(chuàng)建和啟動。通過檢查ECALL例程的返回值,除SGX_SUCCESS以外的任何結果都表明函數(shù)未成功進入Enclave安全區(qū),并且所請求的功能未成功執(zhí)行。
(2) 定義可信組件與不可信組件的交互接口。安全增強方案的交互接口通過EDL文件進行定義,以實現(xiàn)對人員薪酬數(shù)據(jù)的加解密。因為薪酬數(shù)據(jù)的明文和密文處于Enclave內外不同的地址空間,因此要將其從不可信部分封送到受Enclave保護的內存空間中。SGX可信部分與不可信部分之間的參數(shù)傳遞與傳統(tǒng)函數(shù)不同,需要明確:① 數(shù)據(jù)復制方向,對于加密過程,薪酬數(shù)據(jù)的明文先封送到可信Enclave中,加密完成后將密文返回給不可信部分。對于解密過程,薪酬數(shù)據(jù)的密文先封送到可信Enclave中,解密完成后將明文返回給不可信部分。SGX為了指明指針數(shù)據(jù)復制的方向,需要在函數(shù)的指針參數(shù)前指定方向,方向類型有[in]、[out]、[in, out],含義如表1所列;② 指針引用的數(shù)據(jù)緩沖區(qū)大小,SGX要求對于數(shù)組、Char和Wchar_t字符串等類型,如果要復制的數(shù)據(jù)緩沖區(qū)的長度超過一個元素,就必須指定緩沖區(qū)中的元素數(shù),否則將僅復制一個元素。安全增強方案需要在傳遞指針數(shù)據(jù)前,正確獲取要傳遞的元素個數(shù)或數(shù)組的長度,并將其作為函數(shù)的一個參數(shù)。
表1 ECALL和OCALL中的指針方向參數(shù)及其含義
(3) 選擇加解密函數(shù)。SGX的可信內存空間不能依賴第三方庫,因此Enclave中的加解密函數(shù)只能自己編寫或者選擇SGX所提供的加解密算法。SGX的密碼庫中自帶了一些常用的加解密方法和HASH函數(shù),方案分別選擇了SGX可信加密庫函數(shù)SGX_aes_ctr_encrypt和SGX_aes_ctr_decrypt進行薪酬數(shù)據(jù)的加解密操作,二者執(zhí)行的是CTR(計數(shù)器)模式下的AES加解密操作,可支持128位的密鑰。
至此,對薪酬數(shù)據(jù)明文加密完成后,將該密文字段傳回Hook_dbopera函數(shù),并重寫原SQL語句,利用DetourDetach還原數(shù)據(jù)庫操作函數(shù)執(zhí)行流程,使其執(zhí)行重寫后的SQL語句,將加密后的薪酬數(shù)據(jù)保存至數(shù)據(jù)庫。
實驗所選主機為Thinkpad E490筆記本電腦,CPU為支持SGX功能的i7-8565U,內存16 GB。SGX開發(fā)環(huán)境搭建步驟為:在BIOS中啟用主機的SGX功能;安裝Windows 10操作系統(tǒng),版本為1809;安裝Intel管理引擎驅動程序,版本為1909.12.0.1236;安裝Visual Studio 2017;安裝Intel Windows SGX SDK 2.7,SGX PSW 2.7。
在該遺留人力資源管理信息系統(tǒng)中注入HookHrMis.dll,對人員的口令、薪酬數(shù)據(jù)等敏感信息重新錄入后,查看數(shù)據(jù)庫中人員口令表UsersLogin中的口令字段和薪酬表WagesInfo中的薪酬字段已全部為密文,但在應用中可以查看到正確的明文信息。
結果表明,基于SGX的無源碼遺留信息系統(tǒng)安全增強方案正確實現(xiàn)了對人員口令和薪酬數(shù)據(jù)等敏感信息的加解密。惡意的數(shù)據(jù)庫攻擊者在沒有正確使用遺留人力資源管理信息系統(tǒng)的前提下,即使獲取到該數(shù)據(jù)庫,也無法獲取其中的敏感信息,實現(xiàn)了對敏感信息的增強保護。
安全增強方案使用SGX可信計算技術,對原遺留信息系統(tǒng)的性能會帶來一定的損耗。通過運行不同次數(shù)的安全增強方案測試程序,分別測試了在遺留信息系統(tǒng)中注入HookHrMis.dll前后插入人員信息和更新人員信息所耗費的時間,測試結果分別如圖7、圖8所示。
圖7 注入HookHrMis.dll前后插入人員信息所需時間
圖8 注入HookHrMis.dll前后更新人員信息所需時間
從測試結果可以看出,在原遺留信息系統(tǒng)中注入HookHrMis.dll后插入人員信息和更新人員信息相比注入前分別帶來了3.3%和4.37%的額外性能損耗。
分析性能損耗的原因主要在于Enclave安全容器的創(chuàng)建與銷毀、ECALL/OCALL調用過程中的數(shù)據(jù)傳遞以及敏感信息在Enclave安全容器中的加密和解密。但在應用的實際運行過程中,可以通過調整Enclave的創(chuàng)建與銷毀策略,如在應用的運行期間只創(chuàng)建一次Enclave,并只在應用退出時才銷毀該Enclave,這樣可以將Enclave創(chuàng)建與銷毀所帶來的開銷降至最低。因此,安全增強方案所帶來的額外性能開銷在可接受的范圍內。
因為所有Enclave可信內存都在EPC(enclave page cache)內存區(qū)域中實例化,但EPC是內存中的共享資源,即系統(tǒng)中所有正在運行的Enclave都必須位于其中。在系統(tǒng)中, EPC的大小可以在BIOS中設定,通常為64 MB或128 MB。由于此限制,應將Enclave的大小調整為適合其實際內存的使用量,并且分配給Enclave的內存不應超過其使用量,同時還應注意在使用完Enclave后及時釋放以避免可能的內存泄露。分配給Enclave的內存量是在Enclave配置文件中設置的,默認為每個線程分配256 kB??臻g和1 MB全局堆空間。
可以使用SGX提供的EMMT工具來測量運行安全增強方案的Enclave大小,運行安全增強方案測試程序1、100和1 000次的Enclave大小測量結果如圖9所示。
圖9 Enclave內存占用
測量結果表明,該安全增強方案在執(zhí)行期間Enclave安全區(qū)共使用了2 kB的??臻g和4 kB的堆空間,沒有發(fā)生內存泄露問題。
首先對相關背景知識進行研究,Intel的硬件可信計算技術SGX在越來越多的安全工程領域得到應用,然后針對當前Windows遺留信息系統(tǒng)中的敏感信息保護問題,提出了基于SGX技術的安全增強方案,方案不需要對原遺留信息系統(tǒng)進行任何修改,與數(shù)據(jù)庫系統(tǒng)弱相關。并以某無源代碼無文檔的遺留人力資源管理信息系統(tǒng)為例設計實現(xiàn)了該安全增強方案,對其中的隱私信息實現(xiàn)了安全保護。實測結果表明基于SGX技術的安全增強方案所帶來的額外性能開銷在可接受的范圍,并驗證了方案的正確性。本文主要針對Windows的無源代碼無文檔遺留信息系統(tǒng)進行增強保護,下一步將考慮Linux的無源代碼無文檔的遺留信息系統(tǒng)安全增強及Web信息系統(tǒng)安全增強等。