(西安郵電學(xué)院 計算機(jī)系, 陜西 西安 710061)
摘 要:開源的安全項(xiàng)目Linux安全模塊(LSM)、分布式安全框架(DSI)為研究分布式集群系統(tǒng)中的分布式安全性提供了良好平臺。介紹了LSM和DSI的實(shí)現(xiàn)原理,并在此基礎(chǔ)上討論了分布式安全模塊的目標(biāo)、體系結(jié)構(gòu)、特點(diǎn)、性能以及實(shí)現(xiàn)狀態(tài)。
關(guān)鍵詞:Linux安全模塊; 分布式安全框架; 分布式安全模塊
中圖法分類號:TP316; TP309文獻(xiàn)標(biāo)識碼:A
文章編號:1001-3695(2006)08-0133-03
Study and Implementation of Distributed Security Based on Linux Security Module
CHEN Li jun, HE Yan
(Dept. of Computer, Xi’an Institute of Posts Telecommunication, Xi’an Shanxi 710061, China)
Abstract:Open source security projects, such as Linux Security Module(LSM), Distributed Security Infrastructure(DSI), provide a good platform for studying distributed security in distributed cluster system. This paper introduced the basic principle of LSM and DSI and discussed the goals of having a distributed security module, architecture, features, performance, and implementation status.
Key words:Linux Security Module(LSM); Distributed Security Infrastructure(DSI); Distributed Security Module
1引言
大規(guī)模商用集群系統(tǒng)在學(xué)術(shù)、科研及工業(yè)環(huán)境中的應(yīng)用越來越廣泛,這些集群共享和協(xié)調(diào)不同節(jié)點(diǎn)上各種資源(包括CPU、存儲器等)的使用。對于電信級的集群系統(tǒng)而言,應(yīng)當(dāng)具備高可用性和實(shí)時性,而對于高性能計算的集群系統(tǒng)而言,高可用性和實(shí)時性則次之。值得關(guān)注的是,這些集群系統(tǒng)日益受到來自公網(wǎng)的攻擊,因此有效而靈活的安全管理機(jī)制變得越來越重要。
集群系統(tǒng)安全的主要困難在于,即使集群中單個節(jié)點(diǎn)已經(jīng)具備很多安全機(jī)制,但是整個系統(tǒng)并不一定安全。簡單地說,對具有100個節(jié)點(diǎn)的集群實(shí)施安全不同于對100個單獨(dú)節(jié)點(diǎn)實(shí)施安全。例如,考慮傳統(tǒng)安全監(jiān)控工具的情況,它檢查單個集群節(jié)點(diǎn)的出入通信流量,這種工具只限于估計數(shù)據(jù)流的安全,而與具體集群的安全無關(guān);另一方面,與集群相關(guān)的監(jiān)控工具能夠估計給定節(jié)點(diǎn)到底是否在通信,這是通過集群的工作管理系統(tǒng)傳遞的信息來判斷的,也就是說,如果給定節(jié)點(diǎn)當(dāng)前沒有工作在執(zhí)行,那個節(jié)點(diǎn)就很可能沒有在網(wǎng)上發(fā)送或接收數(shù)據(jù)。
集群的安全必須從整體上來考慮,因?yàn)閱蝹€集群組件的行為可能太簡單,而多個組件的組合又可能導(dǎo)致復(fù)雜、不確定,甚至非理性的行為,這些都是難以或不可預(yù)測的。也就是說,即使構(gòu)成集群的某些硬件或軟件都確保是安全的,但是這些組件的組合在集群環(huán)境下就可能是不安全的。
集群安全是一種整合特性,因?yàn)樗m然與單個集群節(jié)點(diǎn)獨(dú)立的安全有關(guān),但更需要整個集群系統(tǒng)的安全。為了滿足基于Linux分布式集群系統(tǒng)的高級安全特性需要,開源社區(qū)啟動了一個開源項(xiàng)目分布式安全框架(Distributed Security Infrastructure,DSI),該項(xiàng)目的主要目的是為基于Linux分布式集群系統(tǒng)設(shè)計和開發(fā)一種安全框架,該框架能夠?yàn)檫@種系統(tǒng)提供先進(jìn)的安全機(jī)制。
本文討論了分布式安全框架的基本結(jié)構(gòu),并在分析Linux安全模塊機(jī)制的基礎(chǔ)上,給出了分布式安全框架實(shí)現(xiàn)的一種途徑——分布式安全模塊。
2強(qiáng)制訪問控制
目前所實(shí)現(xiàn)的安全機(jī)制主要依靠隨意訪問控制,但是,這些機(jī)制根本無法應(yīng)對今天復(fù)雜環(huán)境下各種各樣的攻擊。這種訪問決策是基于用戶身份和所屬關(guān)系的,因此這些機(jī)制很容易被繞過去,從而使應(yīng)用程序在系統(tǒng)安全上很輕易地失效,并留下隱患。
各種研究結(jié)果表明,由操作系統(tǒng)提供的強(qiáng)制安全對整個系統(tǒng)的安全是必不可少的;這也證明了強(qiáng)制訪問控制機(jī)制在支持分布式計算環(huán)境下不同實(shí)體之間的復(fù)雜關(guān)系是非常有效的。
我們基于DSI項(xiàng)目設(shè)計和實(shí)現(xiàn)了強(qiáng)制訪問控制的一種框架,該框架以Linux內(nèi)核模塊的形式實(shí)現(xiàn)了關(guān)于集群系統(tǒng)的訪問控制機(jī)制,從而有助于Linux成為一個安全的集群服務(wù)器操作系統(tǒng)。
分布式安全框架主要應(yīng)用于Linux集群服務(wù)器,而不是單個Linux服務(wù)器。另外,集群系統(tǒng)安全帶來的性能問題,因?yàn)榘踩缘脑鰪?qiáng)可能會引起系統(tǒng)性能的下降、管理開銷的增加以及為用戶帶來的煩惱。因此,分布式安全模塊的實(shí)現(xiàn)必須考慮這些因素。分布式安全模塊實(shí)現(xiàn)的一個重要方面就是其分布性,從安全的觀點(diǎn)看,這一特性會為集群系統(tǒng)中的安全資源提供位置上的透明性。
3Linux安全模塊
Linux安全模塊是Linux內(nèi)核的一個輕量級通用訪問控制框架。它使得各種不同的安全訪問控制模型能夠以Linux可加載內(nèi)核模塊的形式實(shí)現(xiàn)出來,用戶可以根據(jù)其需求選擇適合的安全模塊加載到Linux內(nèi)核中,從而大大提高了Linux安全訪問控制機(jī)制的靈活性和易用性。目前已經(jīng)有很多著名的增強(qiáng)訪問控制系統(tǒng)移植到Linux安全模塊(LSM)上實(shí)現(xiàn),包括POSIX.1e capabilities、安全增強(qiáng)Linux(SELinux)、域和類型增強(qiáng)(DTE),以及Linux入侵檢測系統(tǒng)(LIDS)等。
LSM增加了注冊和注銷安全模塊的函數(shù),當(dāng)然還增加了通用安全系統(tǒng)調(diào)用,這些調(diào)用可以使用戶程序與LSM之間進(jìn)行通信,從而保證應(yīng)用程序的安全性。每個LSM的“鉤子”其實(shí)就是一個函數(shù)指針,存放于全局?jǐn)?shù)據(jù)結(jié)構(gòu)security_ops中。因?yàn)殂^子是嵌入在內(nèi)核中的,而且有可能在一個安全模塊安裝前就被調(diào)用,因此用一個偽安全模塊所提供的函數(shù)來初始化這個數(shù)據(jù)結(jié)構(gòu)。register_security()函數(shù)使得安全模塊可以設(shè)置自己的安全函數(shù),從而覆蓋偽模塊中的偽函數(shù);與之相反,unregister_security()函數(shù)用來返回到偽函數(shù)。
LSM的函數(shù)分為兩大類:①處理安全域的鉤子;②執(zhí)行訪問控制的鉤子。當(dāng)一個Linux客體被創(chuàng)建時,就為其附上安全標(biāo)簽,這些標(biāo)簽就是用來實(shí)施強(qiáng)制訪問控制的,具體來說是通過調(diào)用安全鉤子來達(dá)到的。當(dāng)客體被撤銷時,標(biāo)簽也被隨之刪除。處理安全域的鉤子用于標(biāo)簽的創(chuàng)建和刪除,這些鉤子在task_security_ops結(jié)構(gòu)中,如alloc_security ()和free_security()函數(shù)。
通過LSM,強(qiáng)制訪問控制的過程如圖1所示。我們假定安全I(xiàn)D為SSec的主體(例子中為進(jìn)程),試圖訪問安全I(xiàn)D為TSec的客體(例子中為文件)①。為了進(jìn)行訪問,主體發(fā)出系統(tǒng)調(diào)用②,系統(tǒng)調(diào)用是由Linux內(nèi)核代碼處理的,如圖1中的系統(tǒng)調(diào)用接口。在作出訪問決定之前,內(nèi)核通過安全鉤子訪問LSM模塊③,在這里,用戶具體的安全性被實(shí)現(xiàn)為函數(shù)f 。LSM會計算函數(shù)f,并把結(jié)果返回給內(nèi)核,然后內(nèi)核來決定是允許還是拒絕訪問目標(biāo)資源④。
4分布式安全框架
分布式安全框架(DSI)作為集群系統(tǒng)的一部分,必須滿足集群系統(tǒng)的要求,諸如可靠性、可擴(kuò)展性及高的可用性。因此,分布式安全框架支持下列需求:一致的框架、進(jìn)程級安全、搶占式安全、動態(tài)安全策略、透明的鍵管理及盡可能少的性能損失。分布式安全框架的主要組成簡述如下:
(1)安全服務(wù)器(Security Server,SS),安全管理的中心點(diǎn)。它是系統(tǒng)中所有安全組建的核心安全機(jī)構(gòu),不但承擔(dān)著分布式安全策略分發(fā)的責(zé)任,還通過把分布式策略的改變傳播給所有安全管理器來定義整個集群系統(tǒng)的動態(tài)安全環(huán)境。
(2)安全管理器(Security Managers,SM),增加集群系統(tǒng)中每個本地節(jié)點(diǎn)的安全。它們承擔(dān)著在安全環(huán)境中進(jìn)行強(qiáng)制變化的責(zé)任,安全管理器與安全服務(wù)器僅僅交換安全信息。關(guān)于分布式安全框架更詳細(xì)的信息請參看文獻(xiàn)[1]。
為集群系統(tǒng)的強(qiáng)制訪問控制設(shè)計一種有效的解決方案是一項(xiàng)相當(dāng)復(fù)雜的任務(wù)。因?yàn)橹黧w和客體可能位于集群系統(tǒng)的不同節(jié)點(diǎn)上,因此在定義訪問權(quán)限時會涉及很多因素。為了簡化這種關(guān)系,我們可以在兩個級別上處理訪問控制:
(1)本地的,當(dāng)主體和客體位于同一節(jié)點(diǎn)。
(2)遠(yuǎn)程的,當(dāng)主體和客體位于不同的節(jié)點(diǎn)。
對于本地訪問控制,訪問權(quán)限是主體安全I(xiàn)D(SSID)和客體安全I(xiàn)D(TSID)的函數(shù)(圖1),這是基于Flask體系結(jié)構(gòu):Access=Function (SSID,TSID)。Flask體系結(jié)構(gòu)可以作為處理單個節(jié)點(diǎn)的一種解決方案。當(dāng)節(jié)點(diǎn)位于集群系統(tǒng)中時,安全方案就變得復(fù)雜。在這種情況下,我們把Flask擴(kuò)充到遠(yuǎn)程訪問模式。
分布式訪問控制的體系結(jié)構(gòu)如圖2所示,其中有一個新的參數(shù)叫做安全節(jié)點(diǎn)ID(SnID)。因此,訪問權(quán)不再僅僅是主體和客體安全I(xiàn)D的函數(shù),同時也是安全節(jié)點(diǎn)ID的函數(shù):
Access=Function(SnID2,SID2,SnID1,SID1)
分布式系統(tǒng)的一個重要組成部分就是網(wǎng)絡(luò),網(wǎng)絡(luò)把集群系統(tǒng)中的各個節(jié)點(diǎn)連接起來。為了在集群中實(shí)施訪問控制函數(shù),就必須在節(jié)點(diǎn)之間透明地傳遞安全參數(shù)。我們所實(shí)現(xiàn)的分布式強(qiáng)制訪問控制將在Linux內(nèi)核中進(jìn)行,因?yàn)閮?nèi)核可以為我們提供透明的、安全和較好的性能。
圖2顯示了一個分布式訪問控制如何工作的例子。安全服務(wù)器負(fù)責(zé)把安全策略傳遞到安全模塊,同時也負(fù)責(zé)為集群中的每個節(jié)點(diǎn)提供安全節(jié)點(diǎn)ID①。讓我們假定在節(jié)點(diǎn)SnID2的主體2試圖訪問節(jié)點(diǎn)SnID1的客體(文件)②,在這種情況下,主體2必須首先獲得對本地通信客體的訪問③,然后獲得一對標(biāo)識符(SnID2, SID2),這對標(biāo)識符必須傳遞給遠(yuǎn)程節(jié)點(diǎn)④。在遠(yuǎn)程節(jié)點(diǎn)SnID1上會對這些標(biāo)識符進(jìn)行驗(yàn)證,當(dāng)訪問被允許時,則信息就會傳遞到進(jìn)程1⑤。此時,進(jìn)程1將代表進(jìn)程2進(jìn)行訪問。
4.1標(biāo)簽
所有的主體和客體都必須標(biāo)上標(biāo)簽。因?yàn)榘踩K可以在運(yùn)行時裝載。因此,我們對主體標(biāo)簽的兩種模式加以區(qū)別:
(1)在模塊被裝載之前,系統(tǒng)中的主體和客體都沒有附標(biāo)簽。在模塊初始化過程中,所有正在運(yùn)行的任務(wù)被掃描,并附以標(biāo)簽。
(2)當(dāng)安全模塊被裝載之后一個新的進(jìn)程被創(chuàng)建,則安全鉤子用于給進(jìn)程加標(biāo)簽。
其他的標(biāo)簽在運(yùn)行時附加給客體,這就意味著模塊要對標(biāo)簽的存在與否進(jìn)行檢查,如果不存在,就要創(chuàng)建新的標(biāo)簽。
4.2網(wǎng)絡(luò)標(biāo)簽
因?yàn)樵诩合到y(tǒng)中可以從一個節(jié)點(diǎn)的主體對位于另一個節(jié)點(diǎn)的客體進(jìn)行訪問(圖2),那么也就有必要對這樣的訪問進(jìn)行控制。當(dāng)一個節(jié)點(diǎn)上的進(jìn)程要對另一個節(jié)點(diǎn)上的資源訪問時,首先要檢查能否對通信資源(套接字、網(wǎng)絡(luò)接口等)進(jìn)行本地訪問。當(dāng)本地訪問允許時,消息就可以被發(fā)往遠(yuǎn)程位置。
為了對發(fā)送主體進(jìn)行標(biāo)志,安全節(jié)點(diǎn)ID(安全節(jié)點(diǎn)標(biāo)識符)和主體的安全I(xiàn)D(安全主體標(biāo)識符)都被加到IP包中。為了實(shí)現(xiàn)分布式安全模塊,我們使用IP協(xié)議進(jìn)行安全信息傳送,利用IP協(xié)議棧上的鉤子把一個新的選項(xiàng)加到IP頭之后。在接收端,這種信息(安全節(jié)點(diǎn)ID和安全SID)被提取出來(利用IP棧上的鉤子),并用來構(gòu)建網(wǎng)絡(luò)安全I(xiàn)D(NSID)。
NSID=Function (SnID,SID)
通過安全服務(wù)器,以換算表的形式(我們的實(shí)現(xiàn)只是用了簡單的數(shù)學(xué)函數(shù))就可以指定這種函數(shù)。接收端通過給定的SnID和SID查找這種表,并提取出安全網(wǎng)絡(luò)ID。此時,安全網(wǎng)絡(luò)ID就可以用作所有訪問控制的本地標(biāo)簽。
5分布式安全模塊的實(shí)施
分布式安全模塊(DSM)是基于Linux安全模塊框架的,而LSM是加到內(nèi)核中的一組鉤子。當(dāng)然,要讓內(nèi)核支持LSM必須到LSM網(wǎng)站下載其安全補(bǔ)丁進(jìn)行安裝,LSM網(wǎng)站包含很多不同版本的補(bǔ)丁,可以根據(jù)合適的內(nèi)核版本進(jìn)行匹配。
我們來進(jìn)行三種類型的測試以獲得對安全模塊性能的初步估計。這些測試包括用Fork創(chuàng)建進(jìn)程、UDP本地訪問和UDP遠(yuǎn)程訪問。測試是在Pentium Ⅲ上進(jìn)行的。
(1)進(jìn)程創(chuàng)建。這個測試估量一個進(jìn)程創(chuàng)建子進(jìn)程后立即退出所花費(fèi)的時間。父進(jìn)程循環(huán)執(zhí)行100000次Fork和Wait系統(tǒng)調(diào)用,測試結(jié)果表明大約有1.2%的性能損失。這是因?yàn)橄到y(tǒng)在執(zhí)行Fork操作時要進(jìn)行權(quán)限檢查,并且花費(fèi)額外的時間對子進(jìn)程進(jìn)行標(biāo)簽。
(2)UDP本地訪問。這個測試估量進(jìn)程發(fā)送一條UDP消息所需要的時間。讓它在一個循環(huán)中發(fā)送500000條UDP消息。如果消息沒有被發(fā)送到節(jié)點(diǎn)之外,發(fā)送進(jìn)程并不進(jìn)行檢查,也不等待確認(rèn)。在這種情況下,服務(wù)器是否安裝DSM并不重要。測試結(jié)果表明有DSM比沒有DSM性能下降20%。性能的下降是因?yàn)樵谔捉幼稚习l(fā)送消息時要進(jìn)行權(quán)限檢查,并且還要對每條要發(fā)送的消息和IP消息都附標(biāo)簽。
(3)UDP遠(yuǎn)程訪問。這個測試測量進(jìn)程發(fā)送一條UDP消息和從服務(wù)器接收一條UDP消息所花費(fèi)的時間??蛻舳诉M(jìn)程在接收到服務(wù)器的確認(rèn)信息后發(fā)送一條消息。在這種情況下,服務(wù)器運(yùn)行DSM在接收端進(jìn)行權(quán)限檢查是很重要的。測試結(jié)果表明有DSM比沒有DSM性能平均下降30%。
由此可以看出,DSM的性能還有待提高。另外,通過在實(shí)際環(huán)境中測試,具有DSM的內(nèi)核能對緩沖區(qū)溢出攻擊進(jìn)行有效的防御。
6結(jié)論
分布式安全框架作為集群系統(tǒng)的一部分,必須滿足集群系統(tǒng)的要求,如可靠性、可擴(kuò)展性及高的可用性。因此,分布式安全框架支持一致的框架、進(jìn)程級安全、搶占式安全、動態(tài)安全策略、透明的鍵管理及盡可能少的性能損失?;诜植际桨踩蚣茏鳛樗鶎?shí)現(xiàn)的分布式安全模塊,在Linux內(nèi)核級對分布式集群系統(tǒng)的安全性得以強(qiáng)化。從實(shí)驗(yàn)可以看出,安全性的增強(qiáng)是以一定性能的損失為代價的。
分布式安全框架作為分布式安全的一般框架,它的研究和應(yīng)用將對移動計算、網(wǎng)格計算等分布式系統(tǒng)中出現(xiàn)的安全問題給出一種新的解決途徑。
參考文獻(xiàn):
[1]A Apvrille, E Gingras. Distributed Security Infrastructure(DSI)[EB/OL]. http://www.risq.ericsson.ca/dsi/master_dsi.pdf, 2003-05-29.
[2]Chris Wright, Crispin Cowan. Linux Security Module Framework[EB/OL]. http://www.lsm.immunix.org/docs/lsm ols 2002/lsm.pdf, 2002-06-27.
[3]安全體系機(jī)構(gòu)[EB/OL]. http://263.aka.org.cn/shalong/2002/20020317/SecuFramework.ppt, 2002-03-17.
[4]Ray Spencer. The Flask Security Architecture: System Support for Diverse Security Policies[EB/OL]. http://www.cs.utah.edu/flux/papers/flask usenixsec99 abs.html, 1999-08.
[5]陳莉君.深入分析Linux內(nèi)核源代碼[M].北京:人民郵電出版社,2002.107 109.
[6][美]Daniel P B, Marco C.深入理解Linux內(nèi)核(第2版)[M].陳莉君,等.北京:中國電力出版社, 2004.608-618.
作者簡介:陳莉君(1964),女,陜西人,副教授,碩士研究生,主要研究方向?yàn)椴僮飨到y(tǒng)、Linux內(nèi)核;賀炎(1980-),女,碩士研究生,主要研究方向?yàn)榍度胧讲僮飨到y(tǒng)和安全操作系統(tǒng)。
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。