目前,Linux操作系統已廣泛應用于各種設備和產品中,如服務器、PC機、機頂盒及路由器等。隨著Linux系統的不斷發展和廣泛應用,Linux系統的安全問題也引起越來越多的關注。在Linux操作系統中,存在一個超級用戶即root用戶。root也稱為系統管理員,它擁有管理系統的一切權限。當一個非法用戶獲得root用戶口令后,他就可以以超級用戶的身份登錄系統,然后做任何他想做的事情:如任意添加、刪除用戶,終止進程,刪除重要文件甚至更改root用戶的口令。因此,一旦root權限被惡意用戶利用,就可能導致系統數據的泄密和破壞。
該問題已經引起了國家的重點關注,如國家保密標準BMB20-2007《涉及國家秘密的信息系統分級保護管理規范》中明確提出:涉密信息系統應配備系統管理員、安全保密管理員和安全審計員這三類安全保密管理人員,三員應該相互獨立、相互制約、不得兼任。三個管理員之間的工作機制分為協作和制約兩種機制,行使的是原超級用戶的權力,即系統管理員、安全管理員和審計管理員間相互協作,共同維護系統的正常運行。制約機制指只有在當前管理員操作不影響其他管理員正在進行的操作時才被允許,從而保證了管理員行為的可預期性,避免超級用戶的誤操作或其身份被假冒而帶來的安全隱患,增強了系統的安全性。該規范可以有效防止由系統管理員權力過大所帶來的系統安全威脅和隱患[。
SELinux (security-enhanced Linux)[是安全增強的Linux,以強制訪問控制(mandatory access control, MAC)[技術為基礎,應用類型增強(type enforcement, TE)和基于角色訪問控制(role-base access control, RBAC)兩種安全策略模型。通過MAC技術可以實現對用戶和進程權限的最小化,即使在系統受到攻擊或者進程和用戶的權限被剝奪的情況下,也不會對整個系統的安全造成重大影響。SELinux對訪問的控制更徹底,它對系統中的所有文件、目錄、端口資源的訪問控制都基于一定的安全策略而設定。只有管理員才能定制安全策略,一般用戶沒有權限更改。因此SELinux為三權分離思想的實現奠定了基礎。
目前,SELinux的相關研究工作主要集中在安全策略分析和配置及SELinux安全模型研究[方面。文獻[
本文基于SELinux建立了三權分離安全模型,設計了三權分離安全策略,并實現了三權分離機制,最后通過實驗驗證了可行性和正確性。
1 SELinux的安全技術
1.1 MAC和DAC技術分析
SELinux除了采用自主訪問控制(discretionary access control, DAC)外,還在Linux內核中使用強制訪問控制機制嚴格控制所有對系統資源的訪問請求,并根據安全策略確定是否授予該請求相應的權限。MAC機制將能夠發出訪問請求的對象稱為主體(如進程),將系統的被訪問對象(如:文件、設備、socket、端口和其他進程)稱為客體,所有主體對客體的訪問都必須由MAC機制通過安全策略授權。MAC機制給進程僅授予操作所需要的權限,這遵循了最小權限原則。因此,在MAC機制的保護下,即使獲取root用戶的權限也無法訪問未授權的客體[。
在SELinux中,MAC與DAC機制聯合,以提高系統的安全性。如
圖1
圖1
SELinux的DAC與MAC
1.2 SELinux的安全策略模型[
安全策略作為訪問控制機制權限仲裁的依據,是SELinux中非常重要的內容之一。SELinux采用TE (type enforcement)和RBAC (role-based access control)相結合的安全策略。
1.2.1 TE[模型
SELinux中所有的安全策略,都必須用TE規則明確地定義,沒有被明確許可的其他訪問方式,都被禁止(最小權限原則)。TE訪問向量規則定義了主體可以訪問什么類型的客體,TE轉移規則定義了域類型的相互轉移[。本文只討論前者。
定義1?TE模型的關鍵要素:
源類型(source type, ST)主體(subject)或者域的類型。目標類型(target type, TT)客體(object)的類型。對象類別(class)訪問申請的某一類別資源,如:file、socket等。操作類型(opration, OPT)如:read、write等。許可權限(permission, P)表示主體對客體訪問時允許的操作。
定義2?TE策略模型:
TE策略模型可定義為:P=ST×OPT×TT,許可權限(P)=源類型(ST)對目標類型(TT)的資源類(class)的操作(OPT)。
定義3?根據上述TE策略模型,采用allow語法制定策略規則如下:
allow??ST??TT : class??{opt1, opt2, …};
根據此策略規則,定義出如下安全策略:
allow user_t bin_t : file {read execute getattr};
在allow基本語法規則中包含了兩個類型標識符:源類型(ST) user_t,目標類型(TT) bin_t。標識符file是定義在策略中的對象類別名稱(在這里,表示一個普通的文件),大括號中包括的操作是文件操作類型的一個子集,此安全策略示例的含義是擁有域類型user_t的進程可以讀/執行或獲取具有bin_t類型的文件客體的屬性。
1.2.2 SELinux的RBAC模型
傳統的基于角色的訪問控制RBAC模型[,為角色授權,然后將一個或多個角色分配給一個授權用戶。SELinux對RBAC模型進行了改進,提出了一種TE-RBAC聯合模型,改進后的模型如[。
圖2
圖2
SELinux的RBAC策略模型
定義4?TE與RBAC聯合模型:
聲明用戶及其關聯的角色,user??joe??roles {user_r};這個語句聲明了一個用戶joe,以及與之關聯的角色user_r。
聲明角色與其源類型關聯,role user_r types user_t;這個語句將源類型user_t與角色user_r關聯起來。
2 三權分離模型
2.1 權能集定義
依據最小特權和權值分離的管理思想,本文將原超級用戶的特權進行細粒度劃分,分別授予不同的管理員角色,使各種管理員只具有完成其任務所需的最小特權,不同管理員間相互協作共同管理系統。從邏輯上將承擔這3類職責的特權用戶命名為系統管理、安全員管理員和審計員管理員[。
根據上述非形式化描述,為了實現三權分離機制,本文首先將系統的root權能集進行劃分,并給出如下定義。
定義5?系統root權能集C
C={ Csy, Cse, Cau},其中Csy表示系統管理員權能集,Cse表示安全管理員權能集,Cau表示審計管理員權能集。
定義6?三權分離權能集。根據三權分離思想,將root權限拆分成下述3個權能集:
1)系統管理員權能集Csy
Csy管理與系統相關的資源,包括用戶身份管理、系統資源配置、系統加載和啟動、系統運行的異常處理[。
2)安全管理員權能集Cse
Cse制定系統安全策略,負責對系統中的主體、客體進行統一標記,對主體進行授權,配置一致的安全策略,并確保標記、授權和安全策略的數據完整性[。
3)審計管理員權能集Cau
Cau設置審計選項,對與安全有關的事件進行審計處理,包括監視系統的活動以及日志的處理,提供審計和監控功能,創建和維護受保護客體的訪問審計跟蹤記錄[。
4)各權能集之間相互隔離,當且僅當對任意a,b∈T(T={sy, se, au}),a≠b,有Ca?C,Cb?C,Ca∩Cb=?,其中C=Cse∪Csy∪Cau。即每個管理員所能訪問的權能集是絕對隔離的。
2.2 基于SELinux的三權分離策略模型
根據上述權能集的描述,下面基于SELinux建立一種三權分離策略模型,主要包括特權用戶、特權角色和源類型集定義,以及各特權用戶與對應的特權角色關聯和特權角色與對應的源類型集關聯。
如
圖3
圖3
三權分離策略模型
定義7?定義3組源類型集,STsy,STse,STau滿足下列條件:
STsy={ STasy, STbsy, …};STse={ STase, STbse, …};STau={ STaau, STbau, …}
并且根據SELinux的TE模型和上述全能集的定義,可得到如下3組TE策略模型:
1) Psy=STsy×OPT×TT,且Psy?Csy (即系統管理員各源類型的許可權限是系統管理員權能集Csy的子集);
2) Pse=STse×OPT×TT,且Pse?Cse (即安全管理員各源類型的許可權限是安全管理員權能集Cse的子集);
3) Pau=STau×OPT×TT,且Pau?Cau (即審計管理員各源類型的許可權限是審計管理員權能集Cau的子集);
4) STsy集∩STse集=?,STse集∩STau集=?,STsy集∩STau集=?,每組源類型集合之間都不能相交。
定義8定義三權分離的用戶與角色關聯
user??root??role??sysadm_r, 將root系統管理員用戶與sysadm_r角色關聯;
user??secadm??role??secadm_r,將secadm安全管理員用戶與secadm_r角色關聯;
user??auditadm??role??auditadm_r,將auditadm審計管理員用戶與auditadm_r角色關聯。
定義9?三權分離的角色與源類型集關聯
role??sysadm_r??types??STsy={STasy, STbsy, … }
role??secadm_r??types??STse={STase, STbse, … }
role??auditadm_r??types STau={ STaau, STbau, … }
本定義基于SELinux的RBAC安全模型為每個角色關聯一組源類型集合,即:
sysadm_r關聯STsy集;secadm_r關聯STse集;auditadm_r關聯STau集。
3 三權分離的安全策略設計與實現
在定義了三權分離模型后,為了在SELinux中實現該模型,必須修改SELinux已有的安全策略庫,添加三權分離的安全策略。下文詳細闡述基于SELinux的三權分離安全策略的設計與實現。
3.1 三權分離的安全策略設計
圖4
圖4
三權分離的安全策略設計
3.1.1 系統管理員策略設計
根據定義6~定義9的統管理員相關描述,系統管理員root關聯了角色sysadm_r,角色sysadm_r默認的源類型為sysadm_t,這個源類型允許轉換到與角色sysadm_r關聯的其他源類型,如
3.1.2 安全管理員策略設計
根據定義6~定義9中安全管理員相關描述,安全管理員secadm關聯了角色secadm_r,角色secadm_r默認的源類型為secadm_t,這個源類型允許轉換到與角色secadm_r關聯的其他源類型,如
3.1.3 審計管理員策略設計
根據定義6~定義9中審計管理員相關描述,審計管理員auditadm關聯了角色auditadm_r,角色auditadm_r默認的源類型為auditadm_t,這個源類型允許轉換到與角色auditadm_r關聯的其他源類型,如
3.2 三權分離的TE策略實現
上一節中已經描述了每個用戶角色所關聯的源類型,下面針對每個源類型按照前面所闡述的TE模型指定具體的安全許可規則。
3.2.1 系統管理員安全策略的實現
系統管理員擁有原root用戶的大部分權限,用來完成系統中日常的操作和維護,包括系統用戶賬戶的管理、網絡相關管理與操作、內核模塊加載、開啟和關閉系統、對文件的檔案備份和恢復、安裝或卸載文件系統等。以管理系統用戶賬戶為例,其源類型為useradd_t,系統管理員擁有添加用戶賬號的權限,即只有系統管理員可以執行useradd命令,因此需要在策略中按TE模型的描述給useradd_t源類型定義相應的許可權限。
allow??useradd_t??useradd_exec_t:??file {open??read??execute };
該allow規則定義了源類型useraddr_t對目標類型useradd_exec_t (表示useradd命令)的文件資源授予打開(open)、讀(read)和執行(execute)的權限。
3.2.2 安全管理員安全策略的實現
安全管理員是整個系統安全策略的制定者,負責制定生成安全策略,修改SELinux運行模式,裝載二進制安全策略,設置文件安全上下文等。以生成安全策略為例其源類型為checkpolicy_t,安全管理員擁有將策略規則源碼編譯成二進制策略文件的權限,即只有安全管理員可以執行checkpolicy命令,因此需要在策略中按TE模型的描述給checkpolicy_t源類型定義相應的許可權限。
allow checkpolicy_t??checkpolicy_exec_t:??file {open??read??execute };
該allow規則定義了,源類型checkpolicy_t對目標類型checkpolicy_exec_t (表示checkpolicy命令)授予打開(open)、讀(read)和執行(execute)的權限。
3.2.3 審計管理員安全策略的實現
審計管理員是系統的監督者,負責設置審計開關和審計閾值,啟動和關閉審計機制以及管理審計日志等。以auditadm_t源類型為例,只有審計管理員才能擁有查看審計日志的權限,在策略中按TE模型的描述給auditadm_t源類型定義相應的許可權限。
allow??auditadm_t??var_log_t:??file {open??read??getattr };
該allow規則定義了源類型auditadm_t對目標類型var_log_t (表示審計日志文件)授予打開(open)、讀(read)和獲取屬性(getattr)的權限。
4 三權分離實驗
4.1 實驗平臺介紹
實驗的硬件平臺為TQ2440(基于S3C2440A CPU)嵌入式開發板,軟件平臺為嵌入式Linux。Linux內核為Linux 2.6.30,Linux命令工具集為Busybox-1.22.0,安全策略由策略庫refpolicy-2.20090730[修改生成。
4.2 實驗原型的實現
根據上文描述的三權分離安全策略模型,基于refpolicy策略庫,在嵌入式Linux平臺上,借助于SELinux模塊實現了一個三權分離的實驗原型系統。該系統重點實現了三權分離的安全策略,定義3個特權角色及對應的3個SELinux特權用戶,并為每個用戶制定詳細的最小執行或訪問權限。禁止各用戶對其他用戶私有資源的訪問,最大化的限制用戶的權限,以提高系統的安全性。
4.3 三權分離功能測試
4.3.1 用戶角色關聯測試
系統管理員(root)關聯角色sysadm_r,且角色關聯sysadm_t源類型,如
圖5
圖5
用戶角色關聯標識測試
4.3.2 審計管理員功能測試
根據三權分離的設計模型,審計日志只能由審計管理員進行訪問,而其他用戶無權進行讀操作。
圖6
圖6
三權分離功能測試
值得注意的是,如果當前以root權限登錄去執行審計操作,由于root用戶不具備對審計日志的訪問權限,因此該請求被拒絕,如
4.3.3 安全管理員功能測試
根據三權分離的設計模型,只有安全管理員有權修改SELinux安全模式,測試結果如
5 結束語
為了解決root權限過大給linux操作系統所帶來的安全隱患問題,本文基于SELinux的強制訪問控制技術,采用三權分離思想,建立了三權分離策略模型,實現了一個安全增強的Linux操作系統。即使特權用戶的密碼被惡意用戶獲取,也不會對系統造成很大的損害,從而將惡意攻擊對系統的危害降到最低。本文的三權分離思想將Linux系統的root用戶權限拆分為安全管理、系統管理、審計管理三種權限。然后定義了三權分離策略模型,并基于SELinux的安全策略庫設計并實現了一套三權分離的安全策略庫。最后,在嵌入式Linux平臺上,借助于SELinux的強制訪問控制技術實現了一個實驗原型系統,并對系統各項功能進行了多次測試。實驗結果表示,本文的研究工作能夠嚴格的限制每個用戶的權限,如只有審計管理員可以查看系統的審計日志,只有安全管理員可以對系統的安全策略進行管理等,從而有效解決了Linux系統由于root權限過大所帶來的系統危害和被攻擊的問題。本文的研究工作適合于任何Linux平臺,包括嵌入式設備和服務器,通過這種三權分離機制可以克服權力過于集中給系統帶來的危害,以提高Linux系統的安全性。