摘要:針對目前Linux操作系統(tǒng)的主要安全問題,構(gòu)建了一種基于安全標(biāo)簽的訪問控制模型——SLinux。描述了該模型的結(jié)構(gòu)和工作原理,詳細(xì)論述了該模型基于LSM機(jī)制的實現(xiàn),對該模型的功能和系統(tǒng)兼容性作了理論分析,并用試驗進(jìn)行了驗證,最后總結(jié)了該模型的特點(diǎn)和不足。
關(guān)鍵詞: 訪問控制; 安全標(biāo)簽; 多級安全; 訪問域
中圖法分類號:TP309文獻(xiàn)標(biāo)識碼:A
文章編號:1001-3695(2007)01-0183-03
互聯(lián)網(wǎng)開放性的通信環(huán)境和日益增長的信息共享需求對計算機(jī)互連和計算機(jī)自身安全提出了新的要求。計算機(jī)的安全問題很大部分源于操作系統(tǒng)的安全脆弱性。
作為大多數(shù)網(wǎng)絡(luò)安全產(chǎn)品操作系統(tǒng)平臺的Linux本身就存在很大的安全問題:Linux只支持Root和普通用戶兩個安全級,Root權(quán)限過大違背了最小特權(quán)原則,而普通進(jìn)程有時也可通過SetUID和SetGID取得更大的權(quán)限;Linux傳統(tǒng)的自主訪問控制(DAC)安全機(jī)制對于竄改和繞過又是十分脆弱的;由缺少數(shù)組邊界檢查的C語言編寫的很多特權(quán)程序往往成為基于緩沖區(qū)溢出攻擊的首要目標(biāo)。
為解決上述問題,構(gòu)建了一種基于安全標(biāo)簽的訪問控制模型——SLinux(Secure Linux)。該模型是對經(jīng)典的多級安全訪問控制模型——BLP模型的擴(kuò)展,它的核心概念是由安全級別、訪問域、權(quán)能構(gòu)成的安全標(biāo)簽。其核心思想是通過安全標(biāo)簽來控制主體對客體的訪問:安全級別和訪問域控制進(jìn)程對文件系統(tǒng)的訪問,權(quán)能屬性用來控制進(jìn)程間的通信。
1相關(guān)訪問控制技術(shù)
1.1多級安全與BLP模型
多級安全是軍事安全策略的一種數(shù)學(xué)描述,它具有兩個主要特性:①簡單安全特性。僅當(dāng)一個主體的安全級不低于客體的安全級時,才允許該主體讀該客體。②*特性。僅當(dāng)一個主體的安全級不高于客體的安全級時,才允許該主體寫該客體。
BLP模型是一個狀態(tài)機(jī)模型,定義的系統(tǒng)包含一個初始狀態(tài)Z0和一些三元組(請求,判定,狀態(tài))組成的序列,三元組序列中相鄰狀態(tài)之間滿足某種關(guān)系W。如果一個系統(tǒng)的初始狀態(tài)是安全的,并且三元組序列中的所有狀態(tài)都是安全的,那么這樣的系統(tǒng)就是一個安全系統(tǒng)。
BLP模型雖然易用,但是功能單一,往往不能直接用于商業(yè)系統(tǒng)。例如對目錄不能直接進(jìn)行安全分級;沒有橫向的訪問控制:根據(jù)BLP的原則,某一應(yīng)用程序可以訪問等于或低于其敏感級別的屬于另一應(yīng)用程序的私有數(shù)據(jù),這樣的讀寫操作將會導(dǎo)致數(shù)據(jù)的泄漏甚至破壞。
1.2Linux中的權(quán)能機(jī)制
權(quán)能就是一個進(jìn)程能夠?qū)δ硞€對象進(jìn)行的操作,在訪問主體上實現(xiàn)。
從Linux 2.1版的內(nèi)核開始,內(nèi)核開發(fā)人員在Linux內(nèi)核中加入了權(quán)能的概念。其目標(biāo)是消除需要執(zhí)行某些操作的程序?qū)oot賬號的依賴。
每個進(jìn)程有三個與權(quán)能有關(guān)的位圖:inheritable(I),permitted(P)和effective(E),對應(yīng)進(jìn)程的描述符task_struct(include/linux/sched.h)中的cap_effective,cap_inheritable, cap_permitted。每種權(quán)能用一位表示,1表示具有某種權(quán)能,0表示沒有。當(dāng)一個進(jìn)程要進(jìn)行某個特權(quán)操作時,操作系統(tǒng)會檢查cap_effective的對應(yīng)位是否有效;cap_permitted表示進(jìn)程能夠使用的權(quán)能;cap_inheritable表示能夠被當(dāng)前進(jìn)程執(zhí)行的程序繼承的權(quán)能。
2SLinux訪問控制模型設(shè)計和實現(xiàn)
2.1模型的設(shè)計思想
BLP模型不能限制信息流的橫向流動,因此引入了訪問域的概念。訪問域是進(jìn)程可以訪問的資源的集合,每一個主體都在一個特定的訪問域下工作,訪問域并不是彼此獨(dú)立的,它們可以有交叉。這樣將BLP模型與訪問域結(jié)合可以更有效地限制訪問范圍,同時加入權(quán)能屬性以有效控制進(jìn)程間的訪問。
訪問控制粒度是訪問控制模型中一個至關(guān)重要的問題。在操作系統(tǒng)中,文件、用戶和進(jìn)程都是主體,其中文件和用戶是靜態(tài)表示,真正活動的主體是進(jìn)程,它是一個用戶擁有的可執(zhí)行文件的映像。一個進(jìn)程比一個程序或一個用戶有更細(xì)的粒度,而且進(jìn)程是臨時的,相對于程序和用戶而言,在一定程度上可以減少維護(hù)。
基于上面的分析,為了加強(qiáng)操作系統(tǒng)的安全性,設(shè)計了一個以進(jìn)程為控制粒度的基于BLP模型和安全標(biāo)簽(包括多級安全、訪問域和權(quán)能三個屬性)的訪問控制模型——SLinux。
2.2LSM機(jī)制
考慮到不同Linux版本之間的兼容性,該模型是基于LSM機(jī)制來實現(xiàn)的。
Linux安全模塊(LSM)是支持訪問控制的底層架構(gòu),該架構(gòu)可以使那些具體的安全策略及實現(xiàn)作為一個可選擇的內(nèi)核模塊載入內(nèi)核,從而大大提高了Linux安全訪問控制機(jī)制的靈活性和易用性。
LSM的基本設(shè)計思想是在內(nèi)核源代碼中放置鉤子(Hook)函數(shù),由用戶編寫Hook函數(shù)對內(nèi)核對象的訪問權(quán)限作出判斷,并在內(nèi)核數(shù)據(jù)結(jié)構(gòu)中放置透明安全字段(Opaque Security Field)作為內(nèi)核對象的安全屬性。
2.3模型的總體結(jié)構(gòu)和工作原理
整個模型包括四個模塊,即認(rèn)證模塊、判定模塊、審計模塊和標(biāo)簽管理模塊,另外還有安全標(biāo)簽數(shù)據(jù)庫、用戶的數(shù)字證書數(shù)據(jù)庫和審計日志文件。其結(jié)構(gòu)如圖1所示。
基于LSM機(jī)制實現(xiàn)的模塊的工作原理如圖2所示。用戶程序?qū)ξ募到y(tǒng)的訪問必須經(jīng)過Linux系統(tǒng)自帶的訪問控制和該訪問控制模型才能夠被允許。該模型主要包括兩個工作,即用戶請求的判定和基于安全標(biāo)簽的動態(tài)調(diào)整所實現(xiàn)的動態(tài)安全機(jī)制。
2.4重要數(shù)據(jù)結(jié)構(gòu)定義和說明
安全標(biāo)簽是SLinux訪問控制模型的核心概念,它包括主體和客體兩種。主體是指進(jìn)程(因為該模型的訪問控制是以進(jìn)程為粒度的),客體包括文件、目錄、特殊文件、進(jìn)程間通信結(jié)構(gòu)、進(jìn)程和模塊。在系統(tǒng)中不同的主體和客體的安全標(biāo)簽是不同的,并且有時主體(進(jìn)程)也可以是客體,如在進(jìn)程管理中。對于可執(zhí)行文件來說,主體和客體都不為空,對于數(shù)據(jù)文件等非可執(zhí)行文件來說,主體為空, 客體非空。
2.4.1主體的安全標(biāo)簽
SL:(L,D,C),其中L為主體的安全級,D為主體的訪問域,C為主體的權(quán)能(Capability)和權(quán)能擴(kuò)展。
(1)對權(quán)能控制的擴(kuò)充:為了實現(xiàn)某些操作系統(tǒng)不支持的特性,加強(qiáng)對操作系統(tǒng)自身的保護(hù),本模型引入了三種擴(kuò)充權(quán)能:
①CAP_PROC_HID(0x01)。實現(xiàn)進(jìn)程的隱藏,如果想隱藏某一個進(jìn)程,可以將該進(jìn)程安全標(biāo)簽的權(quán)能控制域s_capacity_ext與CAP_PROC_HID執(zhí)行或運(yùn)算就可以了。
②CAP_UNKILLABLE(0x02)。防止某些程序關(guān)閉一些系統(tǒng)服務(wù)等重要進(jìn)程,用法同上。
③CAP_CHANGE_PRIORITY(0x04)。賦予某主體修改自身安全標(biāo)簽的能力。
(2)訪問域:代表一部分可見并且可以被進(jìn)程訪問(讀或?qū)懀┑奈募到y(tǒng)的集合,包含程序代碼和數(shù)據(jù),它有效地創(chuàng)建了一個文件系統(tǒng)的盒子,運(yùn)行的進(jìn)程被限制在其中。這個訪問域并不代替?zhèn)鹘y(tǒng)的Linux文件系統(tǒng)的訪問控制,它們在一個更高的安全級別操作。
該模型將訪問類型根據(jù)訪問控制的目的分為三類,訪問域也相應(yīng)地分為三類:
①讀訪問。讀文件、搜索目錄、執(zhí)行文件、遵循鏈接等。
②寫訪問。創(chuàng)建文件、寫文件、刪除文件、移動文件等。
③權(quán)能控制。進(jìn)程之間的訪問控制,如發(fā)送信號給一個或一組進(jìn)程,客體為進(jìn)程。
2.4.2客體的安全標(biāo)簽
OL:(L,Mask), 其中L為客體的安全級;Mask是該客體的功能集合,每一位代表一種功能,目前只定義了三種:第一位為讀訪問不可繼承標(biāo)志,1表示在讀訪問域中為不可繼承客體;第二位為寫訪問不可繼承標(biāo)志,1表示不可繼承客體;第三位為隱藏標(biāo)志,1表示該客體對訪問它的主體是隱藏的。
2.4.3安全標(biāo)簽的配置
安全標(biāo)簽是由系統(tǒng)安全管理員在該系統(tǒng)初次安裝時為每個可能的主體和客體配置的,并把它們存放在安全標(biāo)簽數(shù)據(jù)庫中(存儲在文件系統(tǒng)不利于模型兼容性和擴(kuò)展性需要)。
在系統(tǒng)每次運(yùn)行時,進(jìn)程的安全標(biāo)簽在進(jìn)程中被創(chuàng)建,即fork()時確定,由標(biāo)簽管理模塊從安全標(biāo)簽數(shù)據(jù)庫中提取。用戶注冊時,因注冊而產(chǎn)生的進(jìn)程安全標(biāo)簽由用戶在允許范圍內(nèi)選定,可選級別(包括安全標(biāo)簽中的各項)不能大于用戶及用戶屬組的級別。已存在的客體或主體的級別可由安全管理員設(shè)置,新建客體(包括進(jìn)程)的級別通常等于創(chuàng)建該客體的進(jìn)程級別。對于新建目錄,可以在允許的范圍內(nèi)選定大于創(chuàng)建其進(jìn)程的級別。如果進(jìn)程通過調(diào)用產(chǎn)生子進(jìn)程時,那么子進(jìn)程從其父進(jìn)程那里繼承安全標(biāo)簽。在繼承時父進(jìn)程可以根據(jù)模型對客體定義的不可繼承標(biāo)志選擇性地授權(quán)給子進(jìn)程,這樣子進(jìn)程就不具備對不可繼承的客體的訪問權(quán)限。
在BLP模型的常規(guī)實施方法中,一個主體的當(dāng)前安全級別在其整個生命周期內(nèi)是不可改變的,這種方法的缺點(diǎn)是缺乏靈活性,很容易導(dǎo)致合法的資源訪問請求遭到拒絕。該訪問控制模型實現(xiàn)了進(jìn)程安全標(biāo)簽的自適應(yīng)變化,這是由標(biāo)簽管理模塊來實現(xiàn)的。當(dāng)一個進(jìn)程要改變安全標(biāo)簽時,如要改變訪問域,它會向標(biāo)簽管理模塊提出申請,將其安全標(biāo)簽更新。當(dāng)然不是所有的權(quán)限要求都可以被批準(zhǔn),標(biāo)簽管理部件中對此進(jìn)行了限制,如普通用戶不可以對系統(tǒng)配置信息進(jìn)行修改等。
2.5內(nèi)核模塊的實現(xiàn)
為了便于系統(tǒng)設(shè)計的模塊化,把認(rèn)證模塊、標(biāo)簽管理模塊、判定模塊和審計模塊等都以一系列內(nèi)核輔助函數(shù)的形式來實現(xiàn),這樣當(dāng)對其中某個模塊(如判定模塊)進(jìn)行修改時,只要接口不變,就不會影響到其他模塊。
2.5.1認(rèn)證模塊的實現(xiàn)
認(rèn)證模塊的主要功能是出現(xiàn)下面兩種情況時,對用戶的身份進(jìn)行認(rèn)證:
(1)當(dāng)用戶進(jìn)程要求動態(tài)調(diào)整自己的安全標(biāo)簽時;
(2)當(dāng)系統(tǒng)安全管理員調(diào)整安全標(biāo)簽數(shù)據(jù)庫中的安全標(biāo)簽時。
根據(jù)用戶權(quán)限的不同,定義了兩種認(rèn)證類型對應(yīng)上述兩種情況,分別為AUTH_CHANGE_PRIORITY和AUTH_CHANGE_CONFIG。
用戶通過該模型提供的用戶接口向認(rèn)證模塊提出認(rèn)證請求,認(rèn)證模塊從數(shù)字證書數(shù)據(jù)庫中取出該用戶的數(shù)字證書,與用戶提供的簽名信息進(jìn)行比較;如果一致將繼續(xù)判斷用戶的登錄類型與用戶要求的認(rèn)證類型是否相符,通過認(rèn)證后就將請求送入下面的標(biāo)簽管理部件。
如果系統(tǒng)安全管理員申請權(quán)限成功,對于安全標(biāo)簽的修改主要是修改該主體安全標(biāo)簽的讀寫訪問域,將安全標(biāo)簽數(shù)據(jù)庫或者配置文件所在的目錄加入其讀寫訪問域中。在系統(tǒng)安全管理員申請該權(quán)限以前,安全標(biāo)簽數(shù)據(jù)庫和配置文件是不在任何用戶的任何訪問域中的。
對于用戶申請權(quán)限,認(rèn)證模塊將調(diào)用標(biāo)簽管理模塊修改該進(jìn)程的權(quán)能屬性(增加CAP_CHANGE_PRIORITY權(quán)能)。該操作只是對該進(jìn)程內(nèi)存中的安全標(biāo)簽進(jìn)行修改,而不會修改安全標(biāo)簽數(shù)據(jù)庫中的內(nèi)容。
2.5.2標(biāo)簽管理模塊的實現(xiàn)
標(biāo)簽管理模塊主要向各內(nèi)核模塊以及用戶提供一組接口,對安全標(biāo)簽數(shù)據(jù)庫中的安全標(biāo)簽進(jìn)行管理和配置。在調(diào)用這些接口函數(shù)時,它們都會調(diào)用判定模塊來確定該用戶權(quán)限。
該模塊共包括三種類型的接口,前兩項通過sys_security鉤子函數(shù)提供給用戶:
(1)面向系統(tǒng)安全管理員的接口。它幫助安全管理員根據(jù)需要調(diào)整安全標(biāo)簽數(shù)據(jù)庫中的安全標(biāo)簽。
(2)面向普通用戶的接口。它可以讓用戶在一定范圍調(diào)整內(nèi)存中自己的安全標(biāo)簽,使其具有完成任務(wù)的最小權(quán)限。當(dāng)用戶提交申請時,標(biāo)簽管理模塊的函數(shù)會首先檢查該主體是否具有CAP_CHANGE_PRIORITY權(quán)能屬性,如果沒有將返回失敗信息;否則將該主體申請的安全標(biāo)簽與從安全標(biāo)簽數(shù)據(jù)庫中提取的安全標(biāo)簽進(jìn)行比較,如果滿足規(guī)則就設(shè)置該主體的安全標(biāo)簽,否則返回錯誤信息。
(3)面向內(nèi)核模塊的接口。它主要為其余內(nèi)核模塊完成相應(yīng)的任務(wù)提供服務(wù),所有通過該接口調(diào)整的都是調(diào)整主體在內(nèi)存中的安全標(biāo)簽,如上面提到的認(rèn)證模塊對標(biāo)簽管理模塊的調(diào)用都是調(diào)用的這些函數(shù)。例如,修改進(jìn)程的安全標(biāo)簽,使其具有修改安全標(biāo)簽數(shù)據(jù)庫或者配置文件的權(quán)利。
2.5.3判定模塊的實現(xiàn)
判定模塊的主要功能是實現(xiàn)對訪問請求的判定。它將訪問操作的主體、客體及操作與安全標(biāo)簽數(shù)據(jù)庫中的相應(yīng)信息進(jìn)行比較。根據(jù)判定規(guī)則,如果主、客體的安全級符合要求,并且客體在主體的訪問域內(nèi)(對于讀寫操作)或權(quán)能域內(nèi)(對于權(quán)能控制),另外對于權(quán)能控制還要求主體具有該權(quán)能才允許訪問,否則拒絕。
2.5.4審計模塊的實現(xiàn)
審計模塊主要是將通過認(rèn)證部件的信息及判定部件的信息記入到審計日志中,可為入侵檢測及系統(tǒng)錯誤的判斷提供有利信息。模型只記錄那些對系統(tǒng)來說比較重要的事件,如用戶登錄、讀寫操作和修改權(quán)限等。審計數(shù)據(jù)主要來自認(rèn)證模塊和判定模塊,每次收集到的審計數(shù)據(jù)都先寫入專門的審計緩沖區(qū)中,當(dāng)緩沖區(qū)中的數(shù)據(jù)快滿時再一次寫入審計數(shù)據(jù)庫中。
2.6SLinux與用戶接口
在SLinux系統(tǒng)中,與用戶接口是通過LSM提供的一個通用的多路安全系統(tǒng)調(diào)用security()實現(xiàn)的,其參數(shù)為(unsigned int id, unsigned int call, unsigned long *args),其中id代表模塊描述符,call代表調(diào)用描述符,args代表參數(shù)列表。這個系統(tǒng)調(diào)用缺省地提供了一個sys_security()入口函數(shù)。如果安全模塊不提供新的系統(tǒng)調(diào)用,可以定義返回ENOSYS的sys_security()鉤子函數(shù)。
2.7配置文件
在該系統(tǒng)中,用戶訪問域的設(shè)置、訪問域的設(shè)置,以及審計級別的設(shè)置是在配置文件中完成的。當(dāng)該模塊被注冊并調(diào)入系統(tǒng)后,配置文件會被映射為內(nèi)存映像文件,內(nèi)核模塊所有對配置文件的操作都是對內(nèi)存映像文件的操作。
3SLinux訪問控制模型分析和實驗
3.1系統(tǒng)安全性分析
該模型不僅實現(xiàn)了基于安全級別的縱向控制,而且實現(xiàn)了基于訪問域的橫向控制以及動態(tài)安全。以進(jìn)程為粒度、安全標(biāo)簽的動態(tài)調(diào)整以及權(quán)限的選擇性繼承體現(xiàn)了操作系統(tǒng)安全的最小特權(quán)原則;將Root視為與系統(tǒng)中其他用戶平等,限制了Root有意或無意對系統(tǒng)的破壞;即使進(jìn)程由于SetUID和SetGID屬性獲得了程序文件屬主和組的權(quán)限或者出現(xiàn)緩沖區(qū)溢出,其訪問也不可能超出訪問域的范圍,將可能的危害限制在盡可能小的范圍內(nèi)。同時訪問域還能將木馬和病毒程序?qū)ο到y(tǒng)的破壞限定在一定的范圍內(nèi)。這些措施有效地保證了系統(tǒng)的安全。
3.2系統(tǒng)的兼容性分析
由于該訪問控制模型是基于LSM機(jī)制實現(xiàn)的,作為可加載模塊裝入系統(tǒng),采用了標(biāo)準(zhǔn)的接口方式,改變的只是對一些系統(tǒng)調(diào)用實施了安全策略的檢查或增加了新的系統(tǒng)調(diào)用,因此它有很好的兼容性。
安全標(biāo)簽的存在采用了數(shù)據(jù)庫的形式,而沒有在現(xiàn)有文件系統(tǒng)(Ext2)的硬盤i節(jié)點(diǎn)結(jié)構(gòu)的基礎(chǔ)上擴(kuò)充其安全信息,這樣就可以避免操作系統(tǒng)的不兼容性問題。
3.3系統(tǒng)功能測試
測試系統(tǒng)為Red Hat 7.0,內(nèi)核版本2.4.20。
測試結(jié)果:在該模型的控制下,用戶只能讀、寫在自己相應(yīng)訪問域中的文件,而不能修改或者讀、執(zhí)行不屬于自己訪問域的文件,即使是系統(tǒng)安全管理員也只能按照此規(guī)則來進(jìn)行,不能訪問屬于別的用戶的文件。通過功能測試,該模型能有效地控制進(jìn)程的活動范圍,達(dá)到了該模型的設(shè)計目的。
4結(jié)論
本文的SLinux模型限制了超級用戶賬號Root,實現(xiàn)了細(xì)粒度的訪問控制,為內(nèi)核對象加入了安全標(biāo)簽,訪問控制引入了安全級別,基本可達(dá)到可信計算機(jī)系統(tǒng)評價標(biāo)準(zhǔn)(TCSEC)中的B1級。可見,該模型很好地解決了現(xiàn)有Linux系統(tǒng)自身的安全性問題,同時對系統(tǒng)內(nèi)核的修改很小,并且易于升級和擴(kuò)展,具有一定的實用價值和進(jìn)一步發(fā)展的空間。
本模型的不足之處在于安全標(biāo)簽數(shù)據(jù)庫的大量讀取操作和比較低效的記錄查找方式會造成系統(tǒng)的性能損失。
參考文獻(xiàn):
[1]蔡誼,沈昌祥.安全操作系統(tǒng)發(fā)展現(xiàn)狀與對策[C].北京:第十六次全國計算機(jī)安全學(xué)術(shù)交流會論文集,2001.15.
[2]石文昌,孫玉芳,梁洪亮.經(jīng)典BLP安全公理的一種適應(yīng)性標(biāo)記實施方法及其正確性[J].計算機(jī)研究與發(fā)展, 2001,38(11):13661372.
[3]Ravi Sandhu, Elisa Bertino, Jaeger. The Next Generation of Access Control Models[C]. New York: Proceedings of the 6th ACM Symposium on Access Control Models and Technologies,2001.53.
[4]Adrian Bullock, Steven Benford. An Access Control Framework for Multiuser Collaborative Environments[C]. Phoenix: Proceedings of the International ACM SIGGROUP Conference on Supporting Group Work,1999.140149.
[5]Crispin Cowan, Steve Beattie, Calton Pu, et al. SubDomain: Parsimonious Server Security[C]. New Orleans:USENIX the 14th Systems Administration Conference, 2000.355368.
[6]F B Schneider. Enforceable Security Policies[J]. ACM Transactions on Information and System Security, 2000,3(1):3050.
作者簡介:
張愛華(1965),男,湖南郴州人,副教授,碩導(dǎo),研究方向為網(wǎng)絡(luò)和多媒體計算機(jī)技術(shù);
林園(1979),女,碩士研究生,研究方向為網(wǎng)絡(luò)通信與信息安全。
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文