李天佑 翟高壽
(北京交通大學(xué) 北京 100044)
操作系統(tǒng)安全是計(jì)算機(jī)及信息系統(tǒng)安全的基礎(chǔ)。傳統(tǒng)的操作系統(tǒng)安全加固和安全增強(qiáng)主要通過(guò)在現(xiàn)有操作系統(tǒng)平臺(tái)上引入和完善強(qiáng)制訪問(wèn)控制機(jī)制來(lái)實(shí)現(xiàn),如Linux操作系統(tǒng)內(nèi)核中嵌入了基于RBAC[1]、TE[2]和MLS安全模型的SELinux[3]。但必須指出,這種安全加固的模式是建立在傳統(tǒng)兩層特權(quán)級(jí)的操作系統(tǒng)體系結(jié)構(gòu)上。由于第三方代碼仍然可能通過(guò)各種途徑成為核心代碼或運(yùn)行在核心代碼獨(dú)享的特權(quán)級(jí)上,故而有可能通過(guò)核心違規(guī)獲得各種客體資源的訪問(wèn)權(quán)限和實(shí)施破壞操作。
只有保證了操作系統(tǒng)核心運(yùn)行的安全,才能根本上保證在此基礎(chǔ)上進(jìn)行的訪問(wèn)控制等模式的安全加固起到系統(tǒng)安全增強(qiáng)的作用?,F(xiàn)有主流操作系統(tǒng)將運(yùn)行空間劃分為核心層和用戶層兩個(gè)層級(jí),并將所有操作系統(tǒng)內(nèi)核模塊代碼安排部署在一個(gè)公共的、共享地址空間的核心層運(yùn)行。這樣,在操作系統(tǒng)實(shí)現(xiàn)外設(shè)兼容和內(nèi)核模塊擴(kuò)展特性的過(guò)程中,任何添加到操作系統(tǒng)內(nèi)核中的外部第三方代碼都可能威脅到整個(gè)系統(tǒng)的安全,研究和設(shè)計(jì)一種超越兩層特權(quán)級(jí)、有效分離操作系統(tǒng)核心內(nèi)核和包括外部第三方內(nèi)核級(jí)代碼在內(nèi)的系統(tǒng)功能的操作系統(tǒng)安全體系結(jié)構(gòu)很有必要。
根據(jù)操作系統(tǒng)的資源管理特性,操作系統(tǒng)邏輯上等同于倒金字塔形的控制管理結(jié)構(gòu)[4]。作為運(yùn)行平臺(tái)的操作系統(tǒng)內(nèi)核具有管理計(jì)算機(jī)系統(tǒng)資源和為用戶提供功能服務(wù)兩個(gè)功能。操作系統(tǒng)內(nèi)核運(yùn)行是內(nèi)核模塊部分在核心內(nèi)核的組織下為用戶進(jìn)程系統(tǒng)核心服務(wù)功能的過(guò)程。依據(jù)角色訪問(wèn)控制原理,操作系統(tǒng)安全通過(guò)賦予操作系統(tǒng)不同運(yùn)行空間不同訪問(wèn)權(quán)限并進(jìn)行與之對(duì)應(yīng)的訪問(wèn)控制實(shí)現(xiàn),因此操作系統(tǒng)安全性能提高的關(guān)鍵是操作系統(tǒng)運(yùn)行空間訪問(wèn)權(quán)限的細(xì)化。本文提出的操作系統(tǒng)安全體系結(jié)構(gòu)將操作系統(tǒng)內(nèi)核拆分成對(duì)系統(tǒng)資源進(jìn)行組織管理的核心內(nèi)核和為用戶進(jìn)程提供服務(wù)的內(nèi)核模塊兩個(gè)相對(duì)獨(dú)立的部分,使內(nèi)核模塊部分從核心特權(quán)級(jí)空間剝離[5],由此內(nèi)核空間劃分成核心內(nèi)核空間和內(nèi)核模塊空間,因而提出基于三層特權(quán)級(jí)的操作系統(tǒng)安全體系結(jié)構(gòu)。系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 基于三層特權(quán)級(jí)操作系統(tǒng)結(jié)構(gòu)
表1 各個(gè)特權(quán)級(jí)運(yùn)行空間的數(shù)據(jù)及代碼分布
核心內(nèi)核是操作系統(tǒng)運(yùn)行的組織者和管理者,具有最高的系統(tǒng)權(quán)限。核心內(nèi)核由內(nèi)核進(jìn)行系統(tǒng)管理控制的部分組成,包含系統(tǒng)管理的內(nèi)核代碼和全局?jǐn)?shù)據(jù)。核心內(nèi)核作為系統(tǒng)運(yùn)行的控制頂層,具有最高權(quán)限。保存在核心內(nèi)核空間中的段頁(yè)表等全局?jǐn)?shù)據(jù)屬于核心內(nèi)核,通過(guò)核心控制空間對(duì)其進(jìn)行隔離保護(hù),保證了存放于核心控制空間的全局?jǐn)?shù)據(jù)的安全性。內(nèi)核服務(wù)模塊通過(guò)篡改核心全局?jǐn)?shù)據(jù)取得核心權(quán)限進(jìn)而控制整個(gè)操作系統(tǒng)隱患被消除。
系統(tǒng)運(yùn)行過(guò)程中,關(guān)于內(nèi)核模塊的使用存在兩種情況:(1)用戶進(jìn)程執(zhí)行過(guò)程中,由于發(fā)生中斷(包括系統(tǒng)調(diào)用或外部中斷等)切入到核心內(nèi)核態(tài)并獲得內(nèi)核模塊服務(wù),如圖2所示。(2)內(nèi)核模塊運(yùn)行過(guò)程中,由于產(chǎn)生外部中斷而需要執(zhí)行新的內(nèi)核模塊,如圖3所示。
圖2 從核心內(nèi)核態(tài)獲得內(nèi)核模塊服務(wù)的過(guò)程
圖3 內(nèi)核模塊被外部中斷的情況
內(nèi)核模塊是操作系統(tǒng)內(nèi)核為用戶提供功能性服務(wù)的模塊概括性總稱。內(nèi)核模塊通過(guò)系統(tǒng)隔離機(jī)制與核心內(nèi)核分隔開來(lái),而內(nèi)核模塊空間內(nèi)部各個(gè)功能模塊之間也在核心內(nèi)核的控制管理下進(jìn)行有效隔離,杜絕因個(gè)別功能模塊問(wèn)題影響系統(tǒng)服務(wù)的安全。內(nèi)核模塊與核心內(nèi)核的交互通過(guò)核心內(nèi)核為內(nèi)核模塊層提供的調(diào)用接口實(shí)現(xiàn),將內(nèi)核功能模塊存在的漏洞限制在其自身的運(yùn)行空間內(nèi)。為了表述內(nèi)核模塊空間中內(nèi)核功能模塊獨(dú)立運(yùn)行的過(guò)程,引入內(nèi)核模塊運(yùn)行體的概念。內(nèi)核模塊運(yùn)行體是內(nèi)核模塊運(yùn)行的狀態(tài)、服務(wù)的對(duì)象、占有的資源、運(yùn)行上下文概況性描述。
操作系統(tǒng)核心細(xì)化隔離保護(hù)有三個(gè)方面:不同層次間運(yùn)行空間的隔離保護(hù)、輸入/輸出隔離保護(hù)、內(nèi)核模塊間隔離保護(hù)。為有效進(jìn)行隔離保護(hù),必須依靠芯片級(jí)硬件存儲(chǔ)保護(hù)機(jī)制。Intel i386體系計(jì)算機(jī)保護(hù)模式運(yùn)行過(guò)程中空間分為具有不同特權(quán)級(jí)的4層,通過(guò)硬件的存儲(chǔ)保護(hù)模式為系統(tǒng)軟件提供分層保護(hù)[6]。
根據(jù)計(jì)算機(jī)系統(tǒng)的程序存儲(chǔ)式結(jié)構(gòu),操作系統(tǒng)進(jìn)行分層隔離所針對(duì)的對(duì)象即為存儲(chǔ)地址空間以及程序指令(寄存器通過(guò)指令尋址,因此隔離對(duì)象同時(shí)包括寄存器)。I386體系保護(hù)模式采用分段尋址的方式,通過(guò)段描述符描述段內(nèi)數(shù)據(jù)性質(zhì)、訪問(wèn)權(quán)限、線性地址基址和段界限在內(nèi)的地址空間段的情況。段描述符引入段界限和段優(yōu)先級(jí)的概念,規(guī)范、限制和保護(hù)對(duì)系統(tǒng)運(yùn)行空間的訪問(wèn)。
利用i386體系保護(hù)模式提供的硬件存儲(chǔ)保護(hù)機(jī)制,將系統(tǒng)運(yùn)行空間分為三層:核心內(nèi)核層(特權(quán)級(jí)0)、內(nèi)核模塊層(特權(quán)級(jí)1)、用戶層(特權(quán)級(jí)3)。不同層次存儲(chǔ)空間的隔離通過(guò)GDT中段描述符DPL賦值實(shí)現(xiàn)。
運(yùn)行中的內(nèi)核模塊屬于用戶進(jìn)程的系統(tǒng)服務(wù)部分。進(jìn)程和因處理進(jìn)程系統(tǒng)調(diào)用而運(yùn)行的內(nèi)核模塊在系統(tǒng)運(yùn)行過(guò)程中的狀態(tài)必須保持同步。內(nèi)核模塊因等待外部設(shè)備或者核心內(nèi)核分配資源阻塞的過(guò)程中,進(jìn)程也必須進(jìn)入阻塞的狀態(tài)。進(jìn)程切換的同時(shí)也必須進(jìn)行內(nèi)核模塊空間內(nèi)核模塊運(yùn)行棧之間的切換。
內(nèi)核模塊針對(duì)服務(wù)對(duì)象進(jìn)程的數(shù)據(jù)共享傳輸有核心內(nèi)核控制完成。在用戶進(jìn)程通過(guò)系統(tǒng)調(diào)用進(jìn)入內(nèi)核模塊服務(wù)時(shí),向核心內(nèi)核傳入數(shù)據(jù)段指針。在核心內(nèi)核切換到內(nèi)核模塊運(yùn)行過(guò)程中,此數(shù)據(jù)段暫時(shí)向提供服務(wù)的內(nèi)核模塊開放讀寫權(quán)限,此權(quán)限伴隨著內(nèi)核模塊的關(guān)閉被核心內(nèi)核收回。
內(nèi)核模塊之間的隔離表現(xiàn)在兩個(gè)方面,一個(gè)是杜絕各個(gè)模塊間的同特權(quán)級(jí)直接調(diào)用,防止因個(gè)別內(nèi)核模塊的不安全問(wèn)題影響系統(tǒng)內(nèi)核服務(wù)功能。根據(jù)這一原則,內(nèi)核模塊之間不提供調(diào)用接口,當(dāng)正在運(yùn)行的內(nèi)核模塊需要使用其他模塊提供數(shù)據(jù)或者調(diào)用其他模塊的方法時(shí),需要返回核心以系統(tǒng)調(diào)用的方式請(qǐng)求需要的內(nèi)核模塊提供服務(wù)。
另一方面,空間內(nèi)的功能模塊運(yùn)行體屬于不同的進(jìn)程,而且還有一個(gè)單獨(dú)的內(nèi)核模塊運(yùn)行體服務(wù)核心內(nèi)核用以處理中斷,這些運(yùn)行體之間不能相互影響因此必須分配不同的運(yùn)行棧空間,同時(shí)也有效分離不同進(jìn)程對(duì)同一內(nèi)核模塊的服務(wù)請(qǐng)求。
三層特權(quán)級(jí)結(jié)構(gòu)設(shè)計(jì)實(shí)現(xiàn)便于理論驗(yàn)證的兼具開放性方便后續(xù)功能開發(fā)的操作系統(tǒng)。本文提出的原型驗(yàn)證系統(tǒng)核心完全自主開發(fā),功能應(yīng)用部分參考M inix操作系統(tǒng)[7]。目前系統(tǒng)支持i386結(jié)構(gòu)。原型系統(tǒng)驗(yàn)證環(huán)境為VmWare虛擬機(jī)和Bochs虛擬機(jī)。
目前原型系統(tǒng)開發(fā)已經(jīng)完成:核心內(nèi)核:內(nèi)存管理、進(jìn)程管理(進(jìn)程調(diào)度、進(jìn)程切換、進(jìn)程管理、簡(jiǎn)單進(jìn)程間消息傳遞)、中斷處理、基本系統(tǒng)調(diào)用;文件系統(tǒng):通過(guò)文件系統(tǒng)接口實(shí)現(xiàn)FAT12;設(shè)備管理:塊設(shè)備管理(軟盤驅(qū)動(dòng))、字符設(shè)備管理(控制臺(tái))。并在此基礎(chǔ)上實(shí)現(xiàn)簡(jiǎn)單的shell程序,并對(duì)txt文件進(jìn)行修改操作。原型系統(tǒng)的總體結(jié)構(gòu)圖如圖4。
圖4 原型系統(tǒng)總體設(shè)計(jì)Fig.4 The overall design of the prototype system
這一設(shè)計(jì)與傳統(tǒng)操作系統(tǒng)的區(qū)別是將系統(tǒng)功能服務(wù)的內(nèi)核模塊與核心內(nèi)核特權(quán)級(jí)分離,在傳統(tǒng)操作系統(tǒng)的基礎(chǔ)上引入具有特權(quán)級(jí)1級(jí)的內(nèi)核模塊空間。因此原型系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)的關(guān)鍵在于內(nèi)核模塊層的組織管理,需要引入對(duì)內(nèi)核模塊進(jìn)行控制和管理。而核心內(nèi)核層和用戶空間與傳統(tǒng)操作系統(tǒng)的系統(tǒng)態(tài)和用戶態(tài)兩個(gè)層級(jí)基本一致[8],讀者可參考 Linux代碼分析,不在贅述。操作系統(tǒng)結(jié)構(gòu)變化帶來(lái)了系統(tǒng)運(yùn)行優(yōu)先級(jí)的變化。系統(tǒng)運(yùn)行優(yōu)先級(jí)從高到低依次為:核心內(nèi)核、服務(wù)中斷的內(nèi)核模塊運(yùn)行體、服務(wù)于系統(tǒng)調(diào)用的內(nèi)核模塊運(yùn)行體、用戶進(jìn)程。
3.2.1 內(nèi)核模塊控制體
內(nèi)核模塊結(jié)構(gòu)體唯一描述運(yùn)行中的內(nèi)核模塊。作為可執(zhí)行體,表征內(nèi)核模塊的數(shù)據(jù)中應(yīng)包含兩個(gè)部分,一是模塊狀態(tài)屬性,二是模塊運(yùn)行上下文。同時(shí),為了對(duì)模塊運(yùn)行狀況進(jìn)行管理,定義了與模塊運(yùn)行控制相關(guān)的若干屬性。內(nèi)核模塊結(jié)構(gòu)體如下所示:
內(nèi)核模塊運(yùn)行必須的程序入口和運(yùn)行環(huán)境在裝載內(nèi)核模塊的過(guò)程中存放與regs數(shù)據(jù)結(jié)構(gòu)中。其他屬性用來(lái)對(duì)加載內(nèi)核模塊的狀態(tài)進(jìn)行控制管理。call_proc用來(lái)區(qū)分內(nèi)核模塊的服務(wù)對(duì)象,call_state指示內(nèi)核模塊的狀態(tài)。call_type指示此內(nèi)核模塊服務(wù)對(duì)象的屬性。next指針,用以連接其他裝載后的內(nèi)核模塊。
內(nèi)核模塊空間運(yùn)行棧管理依賴三組數(shù)據(jù):內(nèi)核模塊運(yùn)行棧、內(nèi)核模塊運(yùn)行棧數(shù)組和內(nèi)核模塊運(yùn)行棧隊(duì)列。外部中斷處理內(nèi)核模塊運(yùn)行棧處理由核心內(nèi)核響應(yīng)外部中斷控制內(nèi)核模塊執(zhí)行的運(yùn)行體,此運(yùn)行體的服務(wù)對(duì)象為核心內(nèi)核具有最高運(yùn)行優(yōu)先級(jí),其被加載到 call_list隊(duì)列頭部。核心通過(guò)內(nèi)核模塊運(yùn)行體數(shù)組對(duì)內(nèi)核加載后的內(nèi)核模塊運(yùn)行棧進(jìn)行管理,通過(guò)隊(duì)列call_list組織加載的內(nèi)核模塊運(yùn)行。
3.2.2 內(nèi)核模塊生命周期及狀態(tài)切換
運(yùn)行的內(nèi)核模塊生命周期始于裝載過(guò)程中運(yùn)行棧的建立和相關(guān)資源的分配,結(jié)束于核心內(nèi)核回收資源和刪除內(nèi)核模塊運(yùn)行棧。在內(nèi)核模塊的一個(gè)生命周期內(nèi)有四種狀態(tài):就緒;運(yùn)行;阻塞;結(jié)束。這四種狀態(tài)之間的轉(zhuǎn)換關(guān)系如圖5。
圖5 內(nèi)核模塊狀態(tài)轉(zhuǎn)換關(guān)系Fig.5 The relationship of kernel module status transition
就緒狀態(tài),內(nèi)核模塊運(yùn)行棧加入內(nèi)核模塊運(yùn)行隊(duì)列等待執(zhí)行。運(yùn)行狀態(tài)表示此時(shí)內(nèi)核模塊占有計(jì)算機(jī)運(yùn)算資源運(yùn)行。阻塞狀態(tài)表示此時(shí)內(nèi)核模塊由于等待某些資源或者環(huán)境而處于被阻塞的狀態(tài),由于核心內(nèi)核請(qǐng)求的外部中斷處理內(nèi)核模塊運(yùn)行體屬于核心內(nèi)核,具有最高的系統(tǒng)運(yùn)行優(yōu)先級(jí),因此不會(huì)等待資源,進(jìn)而不會(huì)處于阻塞狀態(tài)。結(jié)束狀態(tài)表示內(nèi)核模塊完成服務(wù)功能正常退出或者由于核心內(nèi)核控制下被強(qiáng)制退出。
圖5中①表示服務(wù)核心內(nèi)核的功能模塊運(yùn)行棧開始執(zhí)行或者被加載到內(nèi)核模塊運(yùn)行體隊(duì)列中的內(nèi)核模塊運(yùn)行棧開始執(zhí)行。②表示在核心內(nèi)核控制下,內(nèi)核模塊運(yùn)行體由就緒狀態(tài)直接被刪除。③表示內(nèi)核模塊執(zhí)行體響應(yīng)內(nèi)核服務(wù)請(qǐng)求結(jié)束或者由核心內(nèi)核控制下內(nèi)核模塊運(yùn)行體直接被關(guān)閉刪除。④表示阻塞的內(nèi)核模塊運(yùn)行體被核心內(nèi)核喚醒。⑤內(nèi)核模塊運(yùn)行體需要等待資源而被阻塞。⑥表示處于阻塞狀態(tài)的內(nèi)核模塊運(yùn)行體被核心內(nèi)核控制直接關(guān)閉刪除。⑦表示在某些情況下由于中斷停止內(nèi)核模塊運(yùn)行體的執(zhí)行,在需要保證內(nèi)核模塊的服務(wù)與外設(shè)交互的時(shí)效性的情況下,操作系統(tǒng)允許內(nèi)核模塊通過(guò)軟中斷的方式返回核心內(nèi)核通過(guò)修改內(nèi)核模塊運(yùn)行棧中的內(nèi)核模塊運(yùn)行上下文關(guān)閉或打開部分中斷。
服務(wù)核心內(nèi)核的內(nèi)核模塊運(yùn)行體由于其服務(wù)對(duì)象具有最高優(yōu)先級(jí),因此只存在①、③和⑦三種狀態(tài)轉(zhuǎn)換情況。
3.2.3 內(nèi)核模塊的管理
系統(tǒng)功能模塊運(yùn)行是核心內(nèi)核根據(jù)中斷和系統(tǒng)調(diào)用加載。外部設(shè)備和系統(tǒng)調(diào)用中斷發(fā)生時(shí),系統(tǒng)進(jìn)入核心內(nèi)核的基本中斷處理過(guò)程,核心內(nèi)核基本中斷處理根據(jù)發(fā)生中斷的中斷號(hào)和寄存器中傳遞的參數(shù)(系統(tǒng)調(diào)用號(hào)、中斷功能號(hào))取得內(nèi)核模塊號(hào),通過(guò)系統(tǒng)功能號(hào)查找加載對(duì)應(yīng)的系統(tǒng)功能模塊。
新建內(nèi)核模塊運(yùn)行棧的過(guò)程是查找內(nèi)核模塊運(yùn)行棧數(shù)組中未被占用的元素,將內(nèi)核模塊入口、運(yùn)行上下文、運(yùn)行狀態(tài)、服務(wù)對(duì)象、模塊類型等信息寫入。服務(wù)核心內(nèi)核的內(nèi)核模塊加載過(guò)程與此類似,區(qū)別在于不新建運(yùn)行棧,將內(nèi)核模塊運(yùn)行體直接加載到中斷處理模塊運(yùn)行棧中。
內(nèi)核模塊空間的運(yùn)行順序?yàn)橄戎袛嗵幚砟K運(yùn)行棧,當(dāng)中斷處理模塊運(yùn)行棧為空時(shí),順序運(yùn)行隊(duì)列 call_list隊(duì)列中后續(xù)的內(nèi)核模塊運(yùn)行棧。
內(nèi)核模塊空間的管理主要工作圍繞著對(duì)內(nèi)核模塊運(yùn)行棧隊(duì)列的維護(hù)以及內(nèi)核模塊運(yùn)行體的操作上。針對(duì)內(nèi)核模塊加載和狀態(tài)轉(zhuǎn)換等系統(tǒng)功能模塊管理工作設(shè)計(jì)了以下主要函數(shù):
根據(jù)系統(tǒng)規(guī)定的運(yùn)行優(yōu)先級(jí),當(dāng)核心內(nèi)核運(yùn)行棧為空即內(nèi)核操作完成時(shí)將進(jìn)行運(yùn)行空間的切換。切換的順序?yàn)橄冗M(jìn)入內(nèi)核模塊空間,當(dāng)內(nèi)核模塊空間的運(yùn)行棧隊(duì)列沒(méi)有等待運(yùn)行的內(nèi)核模塊存在時(shí)切換進(jìn)入用戶進(jìn)程空間執(zhí)行。
3.3.1 核心內(nèi)核層到內(nèi)核模塊層的切換
從核心內(nèi)核空間(特權(quán)級(jí)0)到內(nèi)核模塊空間(特權(quán)級(jí)1)的跳轉(zhuǎn)是用IRET實(shí)現(xiàn)的,在核心內(nèi)核基本處理中斷結(jié)束后存在call_list不為空的情況下進(jìn)行??臻g切換之前將call_list頭節(jié)點(diǎn) RING1CALL數(shù)據(jù)結(jié)構(gòu)中的切換上下文放入相應(yīng)的寄存器中,IRET指令實(shí)現(xiàn)跳轉(zhuǎn)。
3.3.2 核心內(nèi)核層到用戶空間層的切換
用戶空間到核心的切換與傳統(tǒng)的操作系統(tǒng)結(jié)構(gòu)相同,通過(guò)IRET指令實(shí)現(xiàn)從核心到用戶的跳轉(zhuǎn)。本設(shè)計(jì)和原型系統(tǒng)的實(shí)現(xiàn)參考了 M inix操作系統(tǒng)[7]。用戶態(tài)通過(guò)進(jìn)程的方式組織運(yùn)行。具體設(shè)計(jì)實(shí)現(xiàn)過(guò)程不再贅述。與之不同在于核心到用戶態(tài)跳轉(zhuǎn)的條件是功能實(shí)現(xiàn)層無(wú)等待運(yùn)行的功能實(shí)現(xiàn)模塊。
3.3.3 用戶空間層到核心內(nèi)核層的切換
用戶層到核心通過(guò)系統(tǒng)調(diào)用的方式實(shí)現(xiàn),系統(tǒng)調(diào)用通過(guò)INT指令完成。本設(shè)計(jì)中提供了兩個(gè)主要的系統(tǒng)調(diào)用模式:核心層系統(tǒng)調(diào)用、功能實(shí)現(xiàn)層系統(tǒng)調(diào)用。分別應(yīng)用了80號(hào)和90號(hào)INT中斷。
80號(hào)中斷響應(yīng)過(guò)程參考了Linux中斷相應(yīng)的過(guò)程[8]。
90號(hào)中斷響應(yīng)過(guò)程與80號(hào)相同,區(qū)別是核心內(nèi)核中基礎(chǔ)中斷處理對(duì)應(yīng)的處理過(guò)程通過(guò)_add_ring1_call函數(shù)添加功能處理核心模塊。
3.3.4 核心內(nèi)核層到核心內(nèi)核層的切換
內(nèi)核模塊層到核心內(nèi)核的跳轉(zhuǎn)也是通過(guò)INT指令中斷實(shí)現(xiàn)的。本文原型系統(tǒng)中通過(guò)91號(hào)和92號(hào)中斷分別實(shí)現(xiàn)功能模塊的完成返回核心和功能模塊系統(tǒng)調(diào)用兩個(gè)系統(tǒng)調(diào)用。為防止用戶程序?qū)@兩個(gè)系統(tǒng)調(diào)用的誤操作,此原型系統(tǒng)中,91號(hào)和92號(hào)中斷核心內(nèi)核的基本中斷處理對(duì)調(diào)用的客體層級(jí)進(jìn)行檢測(cè),隔離用戶空間對(duì)這兩個(gè)中斷的使用。
安全性分析:Linux等二元結(jié)構(gòu)的操作系統(tǒng)中核心代碼復(fù)雜的功能實(shí)現(xiàn)部分或者被第三方裝載惡意代碼,操作系統(tǒng)核心之上的訪問(wèn)控制就形同虛設(shè)。如利用網(wǎng)卡驅(qū)動(dòng)中傳輸數(shù)據(jù)無(wú)空檢測(cè)的漏洞,產(chǎn)生溢出異常進(jìn)入系統(tǒng)核心獲得超級(jí)用戶權(quán)限。此設(shè)計(jì)過(guò)程中,網(wǎng)卡驅(qū)動(dòng)被獨(dú)立在模塊內(nèi)核空間中,溢出錯(cuò)誤將被隔離在內(nèi)核模塊空間內(nèi),在核心內(nèi)核的控制下將此內(nèi)核模塊運(yùn)行體關(guān)閉刪除。
性能測(cè)試:驗(yàn)證系統(tǒng)中一次中斷涉及多次特權(quán)級(jí)轉(zhuǎn)換,必然帶來(lái)系統(tǒng)運(yùn)行效率的下降。為了定量分析設(shè)計(jì)中特權(quán)級(jí)轉(zhuǎn)換對(duì)于系統(tǒng)運(yùn)行效率的影響采用如下方法進(jìn)行了測(cè)試:提供一個(gè)核心內(nèi)核直接處理的系統(tǒng)調(diào)用(空操作),提供一個(gè)內(nèi)核模塊處理的系統(tǒng)調(diào)用(空操作),加載進(jìn)程分別調(diào)用 10萬(wàn)次、20萬(wàn)次和30萬(wàn)次兩種空操作,分別記錄系統(tǒng)調(diào)用前和調(diào)用后系統(tǒng)滴答數(shù),比較兩種系統(tǒng)調(diào)用處理方式之間的用時(shí)。
通過(guò)統(tǒng)計(jì)學(xué)原理求兩種系統(tǒng)調(diào)用處理方式耗時(shí)之比的平均值為138.006%。由此可以得出結(jié)論:同等條件下,特權(quán)級(jí)轉(zhuǎn)換過(guò)程中基于三層特權(quán)級(jí)的操作系統(tǒng)通過(guò)內(nèi)核模塊處理系統(tǒng)調(diào)用效率下降將近40%左右。
本文提出的三層隔離安全操作系統(tǒng)結(jié)構(gòu),根據(jù)內(nèi)核功能控制管理層次權(quán)限細(xì)化分層隔離,由i386硬件存儲(chǔ)保護(hù)保證核心內(nèi)核不被內(nèi)核模塊實(shí)現(xiàn)層部分篡改,同時(shí)保證用戶進(jìn)程不會(huì)影響內(nèi)核模塊實(shí)現(xiàn)的正常運(yùn)行。有效防范系統(tǒng)性的安全風(fēng)險(xiǎn),提高系統(tǒng)的整體安全穩(wěn)定性。
從實(shí)驗(yàn)結(jié)果看,系統(tǒng)運(yùn)行效率還有很大的提高前景。下一步的研究目標(biāo)主要是細(xì)化系統(tǒng)控制管理與功能實(shí)現(xiàn)之間交集部分代碼權(quán)限,更大限度的豐富核心內(nèi)核功能,減少核心內(nèi)核與功能實(shí)現(xiàn)層之間特權(quán)級(jí)之間的切換頻度,提高系統(tǒng)運(yùn)行效率。深入研究通過(guò)三層隔離手段構(gòu)建系統(tǒng)中存在的資源共享與互斥的問(wèn)題,提高系統(tǒng)的并行效率和穩(wěn)定性。
[1]WALKER KM.STEME DF.BADGER ML,et a1.Confining root programs w ith domain and type enforcement(DTE)[A].Proceedings of the 6th USEN IX Security Symposium[C].Usenix Association,1996.2l一36.
[2]BELL DE,LAPADULA LJ.Secure computer systems:unified exposition and multics interpretation[R].MTR-2997,M ITRE Corp,1976.
[3]Gaoshou Zhai,Raodong Li.Study and Implementation of SELinux-Like Access Control Mechanism Based on Linux[C].International Conference on Security Technology Hainan,DEC 13-15,2008,pp.50-56.
[4]Gaoshou Zhai,W enlin Ma,M inli Tian,Na Yang,Chengyu Liu,Hengsheng Yang.Design and implementation of a tool for analyzing SELinux secure policy[C].Proceedings of the 2nd International Conference Page:446-451,2009.
[5]謝鈞,張韜,張士庚,黃皓.一個(gè)分層隔離的操作系統(tǒng)內(nèi)核[J].計(jì)算機(jī)應(yīng)用.2005年6月.第25卷第6期.pp.1286 – 1289.
[6]李忠,王小波,余杰.x86匯編語(yǔ)言:從實(shí)模式到保護(hù)模式[M].北京:電子工業(yè)出版社.2013,375.
[7]Andrew S.Tanenbaum,Albert S.W oodhull.Operating Systems:Design and Implementation[M](Third Edition).New Jersey:Prentice Hall.2006.1054.
[8]趙炯.Linux內(nèi)核完全注釋[M].北京:機(jī)械工業(yè)出版社.2004.652.