基于進(jìn)程的訪問控制技技術(shù)究與實(shí)現(xiàn)_第1頁
基于進(jìn)程的訪問控制技技術(shù)究與實(shí)現(xiàn)_第2頁
基于進(jìn)程的訪問控制技技術(shù)究與實(shí)現(xiàn)_第3頁
基于進(jìn)程的訪問控制技技術(shù)究與實(shí)現(xiàn)_第4頁
基于進(jìn)程的訪問控制技技術(shù)究與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

摘要操作系統(tǒng)的安全是計(jì)算機(jī)系統(tǒng)安全的基石,對(duì)計(jì)算機(jī)的資源進(jìn)行訪問控制是操作系統(tǒng)安全機(jī)制的重要內(nèi)容?;谶M(jìn)程的訪問控制是為了增強(qiáng)現(xiàn)有的操作系統(tǒng)的安全性,其原理是依據(jù)進(jìn)程的具體功能,進(jìn)一步劃分對(duì)系統(tǒng)資源訪問權(quán)限管理的粒度,從而最大程度地降低有害程序?qū)τ?jì)算機(jī)系統(tǒng)的威脅。 本文分析了自主訪問控制(DAC)、強(qiáng)制訪問控制、基于角色的訪問控制(RBAC)的原理和機(jī)制,研究了通用安全框架LSM(Linux安全模塊)的實(shí)施過程,給出了在Linux系統(tǒng)中基于進(jìn)程訪問控制的設(shè)計(jì)和實(shí)現(xiàn)。本文分析了相對(duì)于傳統(tǒng)的自主訪問控制和強(qiáng)制訪問控制,基于進(jìn)程訪問控制的特點(diǎn);描述了在Linux2.6.X內(nèi)核上實(shí)現(xiàn)訪問控制的模型;設(shè)計(jì)了在LSM框架下基于進(jìn)程訪問控制的模型。 關(guān)鍵詞:Linux系統(tǒng)安全 訪問控制 LSM 安全框架 ABSTRACTOperating system security is the foundation of computer system security ,access control to computer resources is an important content of the operating system security mechanisms. Access control is based on the process to enhance the security of the existing operating system. The principle is based on specific features of the process ,and is further divided on the granularity of the access management of system resources so as to minimize the unwanted program threats to computer systems.This article analyses the discretionary access control (DAC), mandatory access control, role-based access control (RBAC) the principles and mechanisms, researches the General security framework LSM (Linux security modules) implementation process, provides the Linux system based on process design and implementation of access control.Also ,this article compares the relatively traditional discretionary access control and mandatory access control, process-based access control features; describes models of access control on the Linux2.6.X kernel and designs the context of LSM process-based access control model. Keyword:Linux system security Access control LSM 目錄目錄第一章 緒論11.1 操作系統(tǒng)安全的重要性11.1.1 操作系統(tǒng)安全面臨的威脅11.1.2 安全操作系統(tǒng)的發(fā)展21.1.3 中國安全操作系統(tǒng)的發(fā)展31.2 本文研究內(nèi)容及目標(biāo)3第二章 安全機(jī)制及安全框架52.1 安全機(jī)制52.1.1 基本概念52.1.2 自主訪問控制52.1.3 強(qiáng)制訪問控制62.1.4 基于角色的訪問控制72.2 LSM通用安全框架82.2.1 LSM的由來82.2.2 LSM設(shè)計(jì)思想82.3 LSM設(shè)計(jì)分析82.3.1 LSM設(shè)計(jì)分析82.3.2 接口說明:給內(nèi)核開發(fā)人員和安全研究人員使用的鉤82.4本章小結(jié)8第三章 基于進(jìn)程的訪問控制的設(shè)計(jì)83.1 基于進(jìn)程的訪問控制提出83.1.1 思路分析83.2訪問控制模型的建立83.2.1 基本集合83.2.2 模型定義83.2.3 模型描述83.3 基于進(jìn)程的訪問控制的設(shè)計(jì)83.3.1基于進(jìn)程的訪問控制模型的設(shè)計(jì)83.3.2基于進(jìn)程的訪問控制框架83.3.3 安全授權(quán)模塊的設(shè)計(jì)83.3.4 訪問規(guī)則模塊的設(shè)計(jì)83.3.5 訪問判決模塊的設(shè)計(jì)83.4 基于基礎(chǔ)的訪問控制機(jī)制的實(shí)現(xiàn)83.4.1安全授權(quán)模塊的實(shí)現(xiàn)83.4.2訪問規(guī)則模塊的設(shè)計(jì)83.4.3 訪問判決模塊的實(shí)現(xiàn)83.4.4 模塊的注冊(cè)和注銷83.5本章小結(jié)8第四章 測(cè)試和分析84.1模塊加載84.2 模塊測(cè)試84.3 系統(tǒng)性能測(cè)試84.4本章小結(jié)8第五章 總結(jié)和體會(huì)8致謝8參考文獻(xiàn):8第一章 緒論3第一章 緒論1.1 操作系統(tǒng)安全的重要性 隨著計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,信息共享的程度逐步提高,信息安全受到越來越多人們的關(guān)注。操作系統(tǒng)作為計(jì)算機(jī)系統(tǒng)的基礎(chǔ)軟件,是計(jì)算機(jī)資源的首要管理者,控制著整個(gè)系統(tǒng)的運(yùn)行,直接和硬件打交道并為用戶提供接口,是計(jì)算機(jī)軟件的基礎(chǔ)。因此,操作系統(tǒng)的安全是計(jì)算機(jī)系統(tǒng)安全的基石。 1.1.1 操作系統(tǒng)安全面臨的威脅隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,越來越多的系統(tǒng)遭到入侵攻擊的威脅,這些威脅大多數(shù)是通過操縱系統(tǒng)和應(yīng)用程序的弱點(diǎn)和缺陷實(shí)現(xiàn)的。對(duì)操作系統(tǒng)安全構(gòu)成的威脅主要有以下幾大類:1)計(jì)算機(jī)病毒:編制或者在計(jì)算機(jī)程序中插入的破壞計(jì)算機(jī)功能或者破壞數(shù)據(jù),影響計(jì)算機(jī)使用并且能夠自我復(fù)制的一組計(jì)算機(jī)指令或者程序代碼被稱為計(jì)算機(jī)病毒(Computer Virus)。具有破壞性,復(fù)制性和傳染性。 2)特洛伊木馬:指包含在合法程序中的非法程序,在用戶不知情的情況下執(zhí)行,并把用戶信息發(fā)給攻擊者。不具有復(fù)制性,但仍有潛伏性,并且會(huì)欺騙用戶并造成更大的危害。3)隱蔽通道:給定一個(gè)強(qiáng)制安全策略模型M和它在一個(gè)操作系統(tǒng)中的解釋I(M),I(M)中兩個(gè)主體I(Si)和I(Sj)之間的任何潛在通信都是隱蔽的,當(dāng)且僅當(dāng)模型M中的相應(yīng)主體Si和Sj之間的任何通信在M中都是非法的。(系統(tǒng)中不受安全策略控制的,違反安全策略的信息泄露路徑)隱蔽通道主要有兩種類型:存儲(chǔ)通道和定時(shí)通道.如果一個(gè)進(jìn)程直接或間接地寫一個(gè)存儲(chǔ)單元,另一個(gè)進(jìn)程直接或間接地讀該存儲(chǔ)單元,則稱這種通道為隱蔽存儲(chǔ)通道.如果一個(gè)進(jìn)程通過調(diào)節(jié)它對(duì)系統(tǒng)資源的使用,影響另外一個(gè)進(jìn)程觀察到的真實(shí)響應(yīng)時(shí)間,實(shí)現(xiàn)一個(gè)進(jìn)程向另一個(gè)進(jìn)程傳遞信息,則稱這種通道為隱蔽定時(shí)通道. 4)后門:是利用植入操作系統(tǒng)內(nèi)部的一段非法代碼入侵系統(tǒng)。后門只能利用操作系統(tǒng)本身的缺陷或有系統(tǒng)的開發(fā)人員安裝。面對(duì)各種各樣的安全威脅和攻擊,我們必須采取行之有效地安全機(jī)制進(jìn)行保護(hù)、防御和反擊。1.1.2 安全操作系統(tǒng)的發(fā)展從20實(shí)際60年代開始,人們便開始了對(duì)安全操作系統(tǒng)的研究,并經(jīng)歷了四個(gè)主要階段:奠基時(shí)期(foundation period)、食譜時(shí)期(cookbook period)、多策略時(shí)期(multi-policy period)、和動(dòng)態(tài)策略時(shí)期(dynamic-policy period)1。奠基時(shí)期:起始于1967年安全Adept-50項(xiàng)目的啟動(dòng)。在這個(gè)時(shí)期,安全操作系統(tǒng)經(jīng)歷了從無到有的探索過程,安全操作系統(tǒng)的基本思想、理論、技術(shù)和方法逐步建立。食譜時(shí)期:1983年美國國防部頒布了歷史上第一個(gè)計(jì)算機(jī)安全評(píng)價(jià)標(biāo)準(zhǔn),即可信計(jì)算機(jī)系統(tǒng)評(píng)價(jià)標(biāo)準(zhǔn)(TCSEC2),它為安全系統(tǒng)指定了一個(gè)單一的系統(tǒng)安全策略。在這一時(shí)期,主要是圍繞TCSEC為藍(lán)本研制安全操作系統(tǒng),包括:1984年,AXIOM公司研發(fā)的LINUS IV 系統(tǒng),1986年IBM公司的Xenix系統(tǒng),1988年AT&T BELL實(shí)驗(yàn)室開發(fā)的System V/MLS系統(tǒng),1990年TRW公司開發(fā)的ASOS系統(tǒng)等。多策略時(shí)期:起始于1993年, 這個(gè)時(shí)期人們開始超越TCSES的范圍,在安全操作系統(tǒng)中實(shí)現(xiàn)多種安全策略。1997年完成的DTOS(Distributed Trusted Operating System)項(xiàng)目就是能夠支持多種安全策略的一個(gè)原型系統(tǒng),能支持多級(jí)安全策略(MLS)、基于標(biāo)識(shí)的訪問策略(IBAC)、類型強(qiáng)制策略(TE)等。動(dòng)態(tài)策略時(shí)期:1999年FLASK3系統(tǒng)的誕生是進(jìn)入動(dòng)態(tài)策略時(shí)期的標(biāo)志,這個(gè)時(shí)期的特點(diǎn)是使安全操作系統(tǒng)支持多種安全策略的動(dòng)態(tài)變化,從而實(shí)現(xiàn)了安全策略的多樣性。 Linux作為一個(gè)類UNIX操作系統(tǒng),遵循GPL協(xié)議4和開放源代碼,可用來做服務(wù)器安全操作系統(tǒng)。而且已經(jīng)有許多訪問控制模型、框架被研發(fā)出來,如SELinux5(Security-Enforced Linux)、域與類型強(qiáng)制(Domain and Type Enforcement ,DTE)、RSBAC(Rule Set Based Access Control)等。為了支持眾多的安全模型,在Linus的提議下,Chris Wright ,Crispin Cowan,Stephen Smalley 等人發(fā)布了基于Linux 內(nèi)核2.4.18版本的Linux安模塊(Linux Security Modules,LSM6)的補(bǔ)丁程序。LSM是Linux黑河的輕量級(jí)通用訪問控制框架,它可允許多種不同的訪問控制模型作為可加載的內(nèi)核模塊實(shí)施,用戶可根據(jù)需求選擇合適的安全模塊加載到Linux內(nèi)核中,開發(fā)符合自身要求的安全模塊也無需改變內(nèi)核數(shù)據(jù)結(jié)構(gòu)及內(nèi)核源代碼,提高了Linux訪問控制機(jī)制的靈活性和易用性。1.1.3 中國安全操作系統(tǒng)的發(fā)展 我國的安全操作系統(tǒng)研究起步較晚,信息安全工作主要還是以網(wǎng)絡(luò)防護(hù)為主,但任然開展了一系列的工作,并取得了一定的成績。如:中科院軟件所的紅旗安全操作系統(tǒng)RFSOS(RedFlag Secure OS)7;國防科技大學(xué)主持開發(fā)了銀河麒麟服務(wù)器操作系統(tǒng)(KYLIN20);中科院計(jì)算所研究開發(fā)了Linux的入侵檢測(cè)系統(tǒng)(Linux Intrusion Detection System,簡(jiǎn)記LIDS)8;南京大學(xué)開發(fā)了SoftOS服務(wù)器安全操作系統(tǒng);中科院信息安全中心的SecLinux;信息產(chǎn)業(yè)部電子第三十研究所開發(fā)了強(qiáng)林Linux安全操作系統(tǒng)等。 1.2 本文研究內(nèi)容及目標(biāo) 本文先對(duì)安全操作系統(tǒng)現(xiàn)存的各種安全機(jī)制和安全框架進(jìn)行分析,提出構(gòu)建在LSM框架下的基于進(jìn)程的訪問控制,設(shè)計(jì)了其實(shí)現(xiàn)方法.第二章 安全機(jī)制及安全框架17第二章 安全機(jī)制及安全框架 2.1 安全機(jī)制2.1.1 基本概念訪問控制,是指控制系統(tǒng)中主體對(duì)客體的訪問,也即根據(jù)訪問主體和客體間的關(guān)系,來決定主體是否可以訪問客體。這里的主體可以是進(jìn)程等,客體可以是文件、目錄等,訪問可以是讀、寫和執(zhí)行等9。 主體是指主動(dòng)的實(shí)體,是訪問的發(fā)起者,它造成了信息的流動(dòng)和系統(tǒng)狀態(tài)的改變,主體通常包括人、進(jìn)程和設(shè)備。 客體是指包含或接受信息的被動(dòng)實(shí)體,客體在信息流動(dòng)中的地位是被動(dòng)的,是處于主體的作用之下,對(duì)客體的訪問意味著對(duì)其中所包含信息的訪問。客體通常包括文件、設(shè)備、信號(hào)量和網(wǎng)絡(luò)節(jié)點(diǎn)等。訪問(Access)是使信息在主體(Subject)和客體(Object)之間流動(dòng)的一種交互方式。訪問控制決定了誰能夠訪問系統(tǒng),能訪問系統(tǒng)的何種資源以及如何使用這些資源。適當(dāng)?shù)脑L問控制能夠阻止未經(jīng)允許的用戶有意或無意地獲取數(shù)據(jù)。訪問控制的手段包括用戶識(shí)別代碼、口令、登錄控制、資源授權(quán)(例如用戶配置文件、資源配置文件和控制列表)、授權(quán)核查、日志和審計(jì)等等。訪問控制涉及的領(lǐng)域很廣,方法也很多,通常訪問控制策略可以劃分為自主訪問控制、強(qiáng)制訪問控制和基于角色的訪問控制三種。 2.1.2 自主訪問控制自主訪問控制是一種最為普遍的訪問控制手段,用戶可以按自己的意愿對(duì)系統(tǒng)的參數(shù)做適當(dāng)?shù)男薷囊詻Q定哪些用戶可以訪問他們的文件,亦即一個(gè)用戶可以有選擇地于其他用戶共享他的文件。用戶有自主的決定權(quán)。自主訪問控制一個(gè)安全的操作系統(tǒng)需要具備訪問控制機(jī)制。它基于對(duì)主體及客體所屬的主體組的識(shí)別,來限制對(duì)課題的訪問,還要校驗(yàn)主體對(duì)客體的訪問清酒是否符合存取控制規(guī)定來決定對(duì)客體訪問的執(zhí)行與否。這里所謂的自主訪問控制是指主體可以自主地講訪問權(quán),或訪問權(quán)的某個(gè)子集授予其他主體。傳統(tǒng)的自主訪問控制模型是基于狀態(tài)機(jī)設(shè)計(jì)的,系統(tǒng)的狀態(tài)可以用三元組(S,O,A)表示,其中S表示系統(tǒng)中主體的集合,O表示系統(tǒng)中客體的集合,A表示二維的訪問矩陣。在此訪問矩陣中,主體用行來表示,客體用列來表示,主客體的交叉點(diǎn)就表示主體對(duì)客體所擁有的訪問權(quán)限,此訪問權(quán)限取決于訪問權(quán)限有限集,如讀、寫、追加等。 圖2.1訪問矩陣通過上圖的訪問控制矩陣,對(duì)任意的,都相應(yīng)的存在,決定了主體可對(duì)客體可以進(jìn)行何種操作。自主訪問控制可以通過圖2.2說明:圖2.2 自主訪問控制示意圖2.1.3 強(qiáng)制訪問控制強(qiáng)制訪問控制是“強(qiáng)加”給訪問主體的,即系統(tǒng)強(qiáng)制主體服從訪問控制政策。強(qiáng)制訪問控制(MAC)的主要特征是對(duì)所有主體及其所控制的客體(例如:進(jìn)程、文件、段、設(shè)備)實(shí)施強(qiáng)制訪問控制。為這些主體及客體指定敏感標(biāo)記,這些標(biāo)記是等級(jí)分類和非等級(jí)類別的組合,它們是實(shí)施強(qiáng)制訪問控制的依據(jù)。系統(tǒng)通過比較主體和客體的敏感標(biāo)記來決定一個(gè)主體是否能夠訪問某個(gè)客體。用戶的程序不能改變他自己及任何其它客體的敏感標(biāo)記,從而系統(tǒng)可以防止特洛伊木馬的攻擊。 強(qiáng)制訪問控制技術(shù)的基本思想是:系統(tǒng)中的主體、客體被賦予了相應(yīng)的安全屬性,系統(tǒng)通過比較主、客體安全屬性間的關(guān)系來確定主體是否有訪問客體的權(quán)限。安全屬性是強(qiáng)制的,它是由安全管理員或操作系統(tǒng)按照限定的規(guī)則分配,用戶或代表用戶的進(jìn)程不能修改安全屬性,即使是用戶擁有的客體的安全屬性也不能被修改。如果系統(tǒng)認(rèn)為具有某一安全屬性的用戶不能訪問某個(gè)客體,則任何人(含客體的所有者)都不能使該用戶具有訪問此客體的權(quán)限,即系統(tǒng)獨(dú)立于用戶行為“強(qiáng)制”執(zhí)行訪問控制。 強(qiáng)制訪問控制機(jī)制和自主訪問控制機(jī)制最根本的區(qū)別在于強(qiáng)制訪問控制是由系統(tǒng)(而不是屬主)依據(jù)相應(yīng)的訪問規(guī)則來判斷此次訪問的合法性,對(duì)用戶及用戶程序的行為進(jìn)行限制,而自主訪問控制則是由資源的屬主來決定誰可以對(duì)資源進(jìn)行何種訪問,訪問完全由資源屬主決定。在實(shí)際應(yīng)用中,某些關(guān)鍵資源的屬主可能對(duì)系統(tǒng)和安全沒有深入的了解,較難準(zhǔn)確地設(shè)置資源的安全屬性。強(qiáng)制訪問控制可通過圖2.3來說明 圖2.3 強(qiáng)制訪問控制示意圖2.1.4 基于角色的訪問控制基于角色的訪問控制(Role Based Access Control)的基本思想是:在用戶和訪問許可權(quán)限之間引入角色(role)的概念,角色可以由安全管理員根據(jù)實(shí)際的 工作需要生成或取消,并分配給指定的用戶,用戶與角色相聯(lián)系,角色與訪問許可權(quán)限相聯(lián)系,一個(gè)用戶對(duì)應(yīng)一個(gè)或多個(gè)角色,一個(gè)角色對(duì)應(yīng)一個(gè)或多個(gè)訪問許可權(quán)限1011。這樣便可以通過給用戶指派角色進(jìn)行授權(quán),從而實(shí)現(xiàn)了用戶與訪問權(quán)限的分離,降低了用戶對(duì)系統(tǒng)產(chǎn)生危害的可能性。 基于角色訪問控制(RBAC)模型是目前國際上流行的先進(jìn)的安全訪問控制方法。它通過分配和取消角色來完成用戶權(quán)限的授予和取消,并且提供角色分配規(guī)則。安全管理人員根據(jù)需要定義各種角色,并設(shè)置合適的訪問權(quán)限,而用戶根據(jù)其責(zé)任和資歷再被指派為不同的角色。這樣,整個(gè)訪問控制過程就分成兩個(gè)部分,即訪問權(quán)限與角色相關(guān)聯(lián),角色再與用戶關(guān)聯(lián),從而實(shí)現(xiàn)了用戶與訪問權(quán)限的邏輯分離。由于實(shí)現(xiàn)了用戶與訪問權(quán)限的邏輯分離,基于角色的策略極大的方便了權(quán)限管理。例如,如果一個(gè)用戶的職位發(fā)生變化,只要將用戶當(dāng)前的角色去掉,加入代表新職務(wù)或新任務(wù)的角色即可。研究表明,角色/權(quán)限之間的變化比角色/用戶關(guān)系之間的變化相對(duì)要慢得多,并且給用戶分配角色不需要很多技術(shù),可以由行政管理人員來執(zhí)行,而給角色配置權(quán)限的工作比較復(fù)雜,需要一定的技術(shù),可以由專門的技術(shù)人員來擔(dān)但是不給他們給用戶分,這與現(xiàn)實(shí)中的情況正好一致。圖2.4 RBAC模型結(jié)構(gòu)圖2.2 LSM通用安全框架2.2.1 LSM的由來近年來Linux系統(tǒng)由于其出色的性能和穩(wěn)定性,開放源代碼特性帶來的靈活性和可擴(kuò)展性,以及較低廉的成本,而受到計(jì)算機(jī)工業(yè)界的廣泛關(guān)注和應(yīng)用。但在安全性方面,Linux內(nèi)核只提供了經(jīng)典的UNIX自主訪問控制(root用戶,用戶ID,模式位安全機(jī)制),以及部分的支持了POSIX.1e標(biāo)準(zhǔn)草案中的capabilities安全機(jī)制,這對(duì)于Linux系統(tǒng)的安全性是不足夠的,影響了Linux系統(tǒng)的進(jìn)一步發(fā)展和更廣泛的應(yīng)用。有很多安全訪問控制模型和框架已經(jīng)被研究和開發(fā)出來,用以增強(qiáng)Linux系統(tǒng)的安全性,比較知名的有安全增強(qiáng)Linux(SELinux),域和類型增強(qiáng)(DTE),以及Linux入侵檢測(cè)系統(tǒng)(LIDS)等等。但是由于沒有一個(gè)系統(tǒng)能夠獲得統(tǒng)治性的地位而進(jìn)入Linux內(nèi)核成為標(biāo)準(zhǔn);并且這些系統(tǒng)都大多以各種不同的內(nèi)核補(bǔ)丁的形式提供,使用這些系統(tǒng)需要有編譯和定制內(nèi)核的能力,對(duì)于沒有內(nèi)核開發(fā)經(jīng)驗(yàn)的普通用戶,獲得并使用這些系統(tǒng)是有難度的。在2001年的Linux內(nèi)核峰會(huì)上,美國國家安全局(NSA)介紹了他們關(guān)于安全增強(qiáng)Linux(SELinux)的工作,這是一個(gè)靈活的訪問控制體系Flask在Linux中的實(shí)現(xiàn),當(dāng)時(shí)Linux內(nèi)核的創(chuàng)始人Linus Torvalds同意Linux內(nèi)核確實(shí)需要一個(gè)通用的安全訪問控制框架,但他指出最好是通過可加載內(nèi)核模塊的方法,這樣可以支持現(xiàn)存的各種不同的安全訪問控制系統(tǒng)。因此,Linux安全模塊(LSM)應(yīng)運(yùn)而生。Linux安全模塊(LSM)是Linux內(nèi)核的一個(gè)輕量級(jí)通用訪問控制框架。它使得各種不同的安全訪問控制模型能夠以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入侵檢測(cè)系統(tǒng)(LIDS)等等。在Linux2.4穩(wěn)定版本系列和Linux2.5開發(fā)版本系列中,LSM作為內(nèi)核補(bǔ)丁提供給用戶,在Linux2.6穩(wěn)定版本中,LSM被Linux內(nèi)核接受成為Linux內(nèi)核安全機(jī)制的標(biāo)準(zhǔn),在各個(gè)Linux發(fā)行版中提供給用戶使用。2.2.2 LSM設(shè)計(jì)思想Linux安全模塊(LSM)的設(shè)計(jì)必須盡量滿足兩方面人的要求:讓不需要它的人盡可能少的因此得到麻煩;同時(shí)讓需要它的人因此得到有用和高效的功能。以Linus Torvalds為代表的內(nèi)核開發(fā)人員對(duì)Linux安全模塊(LSM)提出了三點(diǎn)要求:真正的通用,當(dāng)使用一個(gè)不同的安全模型的時(shí)候,只需要加載一個(gè)不同的內(nèi)核模塊 概念上簡(jiǎn)單,對(duì)Linux內(nèi)核影響最小,高效,并且能夠支持現(xiàn)存的POSIX.1e capabilities邏輯,作為一個(gè)可選的安全模塊另一方面,各種不同的Linux安全增強(qiáng)系統(tǒng)對(duì)Linux安全模塊(LSM)提出的要求是:能夠允許他們以可加載內(nèi)核模塊的形式重新實(shí)現(xiàn)其安全功能,并且不會(huì)在安全性方面帶來明顯的損失,也不會(huì)帶來額外的系統(tǒng)開銷。為了滿足這些設(shè)計(jì)目標(biāo),Linux安全模塊(LSM)采用了通過在內(nèi)核源代碼中放置鉤子的方法,來仲裁對(duì)內(nèi)核內(nèi)部對(duì)象進(jìn)行的訪問,這些對(duì)象有:任務(wù),inode結(jié)點(diǎn),打開的文件等等。用戶進(jìn)程執(zhí)行系統(tǒng)調(diào)用,首先游歷Linux內(nèi)核原有的邏輯找到并分配資源,進(jìn)行錯(cuò)誤檢查,并經(jīng)過經(jīng)典的UNIX自主訪問控制,恰好就在Linux內(nèi)核試圖對(duì)內(nèi)部對(duì)象進(jìn)行訪問之前,一個(gè)Linux安全模塊(LSM)的鉤子對(duì)安全模塊所必須提供的函數(shù)進(jìn)行一個(gè)調(diào)用,從而對(duì)安全模塊提出這樣的問題是否允許訪問執(zhí)行?,安全模塊根據(jù)其安全策略進(jìn)行決策,作出回答:允許,或者拒絕進(jìn)而返回一個(gè)錯(cuò)誤。另一方面,為了滿足大多數(shù)現(xiàn)存Linux安全增強(qiáng)系統(tǒng)的需要,Linux安全模塊(LSM)采取了簡(jiǎn)化設(shè)計(jì)的決策。Linux安全模塊(LSM)現(xiàn)在主要支持大多數(shù)現(xiàn)存安全增強(qiáng)系統(tǒng)的核心功能:訪問控制;而對(duì)一些安全增強(qiáng)系統(tǒng)要求的其他安全功能,比如安全審計(jì),只提供了的少量的支持。Linux安全模塊(LSM)現(xiàn)在主要支持限制型的訪問控制決策:當(dāng)Linux內(nèi)核給予訪問權(quán)限時(shí),Linux安全模塊(LSM)可能會(huì)拒絕,而當(dāng)Linux內(nèi)核拒絕訪問時(shí),就直接跳過Linux安全模塊(LSM);而對(duì)于相反的允許型的訪問控制決策只提供了少量的支持。對(duì)于模塊功能合成,Linux安全模塊(LSM)允許模塊堆棧,但是把主要的工作留給了模塊自身:由第一個(gè)加載的模塊進(jìn)行模塊功能合成的最終決策。所有這些設(shè)計(jì)決策可能暫時(shí)影響了Linux安全模塊(LSM)的功能和靈活性,但是大大降低了Linux安全模塊(LSM)實(shí)現(xiàn)的復(fù)雜性,減少了對(duì)Linux內(nèi)核的修改和影響,使得其進(jìn)入Linux內(nèi)核成為安全機(jī)制標(biāo)準(zhǔn)的可能性大大提高;等成為標(biāo)準(zhǔn)后,可以改變決策,增加功能和靈活性。POSIX1e權(quán)能邏輯提供了授權(quán)被粗粒度訪問機(jī)制拒絕的訪問的功能。LSM將權(quán)能邏輯設(shè)計(jì)為一個(gè)可選的模塊,如圖2.5所示。首先像傳統(tǒng)訪問控制一樣,由主體發(fā)起對(duì)客體的訪問請(qǐng)求,然后進(jìn)行對(duì)主體身份的標(biāo)識(shí),在進(jìn)行傳統(tǒng)的DAC檢查時(shí),如果用戶ID檢查失敗,控制流程會(huì)通過調(diào)用LSM安全框架中的許可鉤子函數(shù),來詢問具體模塊中注冊(cè)的相應(yīng)函數(shù),如果函數(shù) 允許覆蓋DAC機(jī)制,那么安全模塊就可以對(duì)訪問請(qǐng)求重新授權(quán),否則拒絕訪問。從對(duì)權(quán)能邏輯的處理流程也可以發(fā)現(xiàn)對(duì)每一現(xiàn)存的安全模型,通用框架都盡可能提供最小支持以維持框架的通用性和對(duì)系統(tǒng)的影響最小。 圖 2.5 LSM權(quán)能邏輯框圖 加入LSM安全框架后,用戶進(jìn)程對(duì)資源進(jìn)行訪問的執(zhí)行過程如圖2.6所示。首先用戶進(jìn)程發(fā)起對(duì)客體進(jìn)行訪問的需求,然后執(zhí)行系統(tǒng)調(diào)用從而進(jìn)入內(nèi)核態(tài),由Linux內(nèi)核查找并分配資源,接著進(jìn)行錯(cuò)誤檢查,并經(jīng)過傳統(tǒng)的UNIX自主訪問控制,在Linux內(nèi)核試圖對(duì)內(nèi)核客體進(jìn)行訪問之前,通用框架的鉤子函數(shù)調(diào)用安全模塊注冊(cè)的函數(shù),從而對(duì)安全模塊提出問題“是否允許訪問執(zhí)行?”,安全模塊根據(jù)其安全策略進(jìn)行相應(yīng)的操作。通過圖26可以看出,鉤子函數(shù)是在最接近所需訪問的客體的層次上插入的,這樣可以 保證對(duì)內(nèi)核的影響達(dá)到最小。因?yàn)樗械牟僮鞫紩?huì)匯集到訪問的發(fā)生點(diǎn),鉤子函數(shù)在這里可以滿足各種安全項(xiàng)目的需求及設(shè)計(jì)簡(jiǎn)單的原則。 圖2.6 LSM結(jié)構(gòu)框圖2.3 LSM設(shè)計(jì)分析Linux安全模塊(LSM)目前作為一個(gè)Linux內(nèi)核補(bǔ)丁的形式實(shí)現(xiàn)。其本身不提供任何具體的安全策略,而是提供了一個(gè)通用的基礎(chǔ)體系給安全模塊,由安全模塊來實(shí)現(xiàn)具體的安全策略。其主要在五個(gè)方面對(duì)Linux內(nèi)核進(jìn)行了修改:在特定的內(nèi)核數(shù)據(jù)結(jié)構(gòu)中加入了安全域;在內(nèi)核源代碼中不同的關(guān)鍵點(diǎn)插入了對(duì)安全鉤子函數(shù)的調(diào)用; 加入了一個(gè)通用的安全系統(tǒng)調(diào)用 ;提供了函數(shù)允許內(nèi)核模塊注冊(cè)為安全模塊或者注銷; 將capabilities邏輯的大部分移植為一個(gè)可選的安全模塊。2.3.1 LSM設(shè)計(jì)分析 下面對(duì)這五個(gè)方面的修改逐個(gè)做簡(jiǎn)要的介紹。 (一) 安全域是一個(gè)void*類型的指針,它使得安全模塊把安全信息和內(nèi)核內(nèi)部對(duì)象聯(lián)系起來。下面列出被修改加入了安全域的內(nèi)核數(shù)據(jù)結(jié)構(gòu),以及各自所代表的內(nèi)核內(nèi)部對(duì)象:task_struct結(jié)構(gòu):代表任務(wù)(進(jìn)程) linux_binprm結(jié)構(gòu):代表程序super_block結(jié)構(gòu):代表文件系統(tǒng) inode結(jié)構(gòu):代表管道,文件,或者Socket套接字 file結(jié)構(gòu):代表打開的文件 sk_buff結(jié)構(gòu):代表網(wǎng)絡(luò)緩沖區(qū)(包) net_device結(jié)構(gòu):代表網(wǎng)絡(luò)設(shè)備 kern_ipc_perm結(jié)構(gòu):代表Semaphore信號(hào),共享內(nèi)存段,或者消息隊(duì)列 msg_msg:代表單個(gè)的消息 另外,msg_msg結(jié)構(gòu),msg_queue結(jié)構(gòu),shmid_kernel結(jié)構(gòu)被移到include/linux/msg.h和include/linux/shm.h這兩個(gè)頭文件中,使得安全模塊可以使用這些定義。 (二) Linux安全模塊(LSM)提供了兩類對(duì)安全鉤子函數(shù)的調(diào)用:一類管理內(nèi)核對(duì)象的安全域,另一類仲裁對(duì)這些內(nèi)核對(duì)象的訪問。對(duì)安全鉤子函數(shù)的調(diào)用通過鉤子來實(shí)現(xiàn),鉤子是全局表security_ops中的函數(shù)指針,這個(gè)全局表的類型是security_operations結(jié)構(gòu),這個(gè)結(jié)構(gòu)定義在include/linux/security.h這個(gè)頭文件中,這個(gè)結(jié)構(gòu)中包含了按照內(nèi)核對(duì)象或內(nèi)核子系統(tǒng)分組的鉤子組成的子結(jié)構(gòu),以及一些用于系統(tǒng)操作的頂層鉤子。在內(nèi)核源代碼中很容易找到對(duì)鉤子函數(shù)的調(diào)用:其前綴是security_ops-。對(duì)鉤子函數(shù)的詳細(xì)說明留到后面。(三)Linux安全模塊(LSM)提供了一個(gè)通用的安全系統(tǒng)調(diào)用,允許安全模塊為安全相關(guān)的應(yīng)用編寫新的系統(tǒng)調(diào)用,其風(fēng)格類似于原有的Linux系統(tǒng)調(diào)用socketcall(),是一個(gè)多路的系統(tǒng)調(diào)用。這個(gè)系統(tǒng)調(diào)用為security(),其參數(shù)為(unsigned int id, unsigned int call, unsigned long *args),其中id代表模塊描述符,call代表調(diào)用描述符,args代表參數(shù)列表。這個(gè)系統(tǒng)調(diào)用缺省的提供了一個(gè)sys_security()入口函數(shù):其簡(jiǎn)單的以參數(shù)調(diào)用sys_security()鉤子函數(shù)。如果安全模塊不提供新的系統(tǒng)調(diào)用,就可以定義返回-ENOSYS的sys_security()鉤子函數(shù),但是大多數(shù)安全模塊都可以自己定義這個(gè)系統(tǒng)調(diào)用的實(shí)現(xiàn)。(四) 在內(nèi)核引導(dǎo)的過程中,Linux安全模塊(LSM)框架被初始化為一系列的虛擬鉤子函數(shù),以實(shí)現(xiàn)傳統(tǒng)的UNIX超級(jí)用戶機(jī)制。當(dāng)加載一個(gè)安全模塊時(shí),必須使用register_security()函數(shù)向Linux安全模塊(LSM)框架注冊(cè)這個(gè)安全模塊:這個(gè)函數(shù)將設(shè)置全局表security_ops,使其指向這個(gè)安全模塊的鉤子函數(shù)指針,從而使內(nèi)核向這個(gè)安全模塊詢問訪問控制決策。一旦一個(gè)安全模塊被加載,就成為系統(tǒng)的安全策略決策中心,而不會(huì)被后面的register_security()函數(shù)覆蓋,直到這個(gè)安全模塊被使用unregister_security()函數(shù)向框架注銷:這簡(jiǎn)單的將鉤子函數(shù)替換為缺省值,系統(tǒng)回到UNIX超級(jí)用戶機(jī)制。另外,Linux安全模塊(LSM)框架還提供了函數(shù)mod_reg_security()和函數(shù)mod_unreg_security(),使其后的安全模塊可以向已經(jīng)第一個(gè)注冊(cè)的主模塊注冊(cè)和注銷,但其策略實(shí)現(xiàn)由主模塊決定:是提供某種策略來實(shí)現(xiàn)模塊堆棧從而支持模塊功能合成,還是簡(jiǎn)單的返回錯(cuò)誤值以忽略其后的安全模塊。這些函數(shù)都提供在內(nèi)核源代碼文件security/security.c中。(五) Linux內(nèi)核現(xiàn)在對(duì)POSIX.1e capabilities的一個(gè)子集提供支持。Linux安全模塊(LSM)設(shè)計(jì)的一個(gè)需求就是把這個(gè)功能移植為一個(gè)可選的安全模塊。POSIX.1e capabilities提供了劃分傳統(tǒng)超級(jí)用戶特權(quán)并賦給特定的進(jìn)程的功能。Linux安全模塊(LSM)保留了用來在內(nèi)核中執(zhí)行capability檢查的現(xiàn)存的capable()接口,但把capable()函數(shù)簡(jiǎn)化為一個(gè)Linux安全模塊(LSM)鉤子函數(shù)的包裝,從而允許在安全模塊中實(shí)現(xiàn)任何需要的邏輯。Linux安全模塊(LSM)還保留了task_struck結(jié)構(gòu)中的進(jìn)程capability集(一個(gè)簡(jiǎn)單的位向量),而并沒有把它移到安全域中去。Linux內(nèi)核對(duì)capabilities的支持還包括兩個(gè)系統(tǒng)調(diào)用:capset()和capget()。Linux安全模塊(LSM)同樣保留了這些系統(tǒng)調(diào)用但將其替換為對(duì)鉤子函數(shù)的調(diào)用,使其基本上可以通過security()系統(tǒng)調(diào)用來重新實(shí)現(xiàn)。Linux安全模塊(LSM)已經(jīng)開發(fā)并且移植了相當(dāng)部分的capabilities邏輯到一個(gè)capabilities安全模塊中,但內(nèi)核中仍然保留了很多原有capabilities的殘余。這些實(shí)現(xiàn)方法都最大程度的減少了對(duì)Linux內(nèi)核的修改影響,并且最大程度保留了對(duì)原有使用capabilities的應(yīng)用程序的支持,同時(shí)滿足了設(shè)計(jì)的功能需求。以后要使capabilities模塊完全獨(dú)立,剩下要做的主要步驟是:把位向量移到task_struct結(jié)構(gòu)中合適的安全域中,以及重新定位系統(tǒng)調(diào)用接口。2.3.2 接口說明:給內(nèi)核開發(fā)人員和安全研究人員使用的鉤Linux安全模塊(LSM)對(duì)于內(nèi)核開發(fā)人員和安全研究人員的價(jià)值就在于:可以使用其提供的接口將現(xiàn)存的安全增強(qiáng)系統(tǒng)移植到這一框架上,從而能夠以可加載內(nèi)核模塊的形式提供給用戶使用;或者甚至可以直接編寫適合自己需要的安全模塊。Linux安全模塊(LSM)提供的接口就是鉤子,其初始化時(shí)所指向的虛擬函數(shù)實(shí)現(xiàn)了缺省的傳統(tǒng)UNIX超級(jí)用戶機(jī)制,模塊編寫者必須重新實(shí)現(xiàn)這些鉤子函數(shù)來滿足自己的安全策略。下面簡(jiǎn)要介紹Linux安全模塊(LSM)提供的鉤子,詳細(xì)情況請(qǐng)參考源代碼,特別是include/linux/security.h頭文件中security_operations結(jié)構(gòu)的定義。至于具體如何根據(jù)自己需要的安全策略編寫安全模塊,可以參考SELinux,DTE,LIDS等系統(tǒng)的安全模塊實(shí)現(xiàn)。首先是任務(wù)鉤子,Linux安全模塊(LSM)提供了一系列的任務(wù)鉤子使得安全模塊可以管理進(jìn)程的安全信息并且控制進(jìn)程的操作。模塊可以使用task_struct結(jié)構(gòu)中的安全域來維護(hù)進(jìn)程安全信息;任務(wù)鉤子提供了控制進(jìn)程間通信的鉤子,例如kill();還提供了控制對(duì)當(dāng)前進(jìn)程進(jìn)行特權(quán)操作的鉤子,例如setuid();還提供了對(duì)資源管理操作進(jìn)行細(xì)粒度控制的鉤子,例如setrlimit()和nice()。其次是程序裝載鉤子。很多安全模塊,包括Linux capabilities,SELinux,DTE都需要有在一個(gè)新程序執(zhí)行時(shí)改變特權(quán)的能力。因此Linux安全模塊(LSM)提供了一系列程序裝載鉤子,用在一個(gè)execve()操作執(zhí)行過程的關(guān)鍵點(diǎn)上。linux_binprm結(jié)構(gòu)中的安全域允許安全模塊維護(hù)程序裝載過程中的安全信息;提供了鉤子用于允許安全模塊在裝載程序前初始化安全信息和執(zhí)行訪問控制;還提供了鉤子允許模塊在新程序成功裝載后更新任務(wù)的安全信息;還提供了鉤子用來控制程序執(zhí)行過程中的狀態(tài)繼承,例如確認(rèn)打開的文件描述符。再次是進(jìn)程間通信IPC鉤子。安全模塊可以使用進(jìn)程間通信IPC鉤子來對(duì)System V IPC的安全信息進(jìn)行管理,以及執(zhí)行訪問控制。IPC對(duì)象數(shù)據(jù)結(jié)構(gòu)共享一個(gè)子結(jié)構(gòu)kern_ipc_perm,并且這個(gè)子結(jié)構(gòu)中只有一個(gè)指針傳給現(xiàn)存的ipcperms()函數(shù)進(jìn)行權(quán)限檢查,因此Linux安全模塊(LSM)在這個(gè)共享子結(jié)構(gòu)中加入了一個(gè)安全域。為了支持單個(gè)消息的安全信息,Linux安全模塊(LSM)還在msg_msg結(jié)構(gòu)中加入了一個(gè)安全域。Linux安全模塊(LSM)在現(xiàn)存的ipcperms()函數(shù)中插入了一個(gè)鉤子,使得安全模塊可以對(duì)每個(gè)現(xiàn)存的Linux IPC權(quán)限執(zhí)行檢查。由于對(duì)于某些安全模塊,這樣的檢查是不足夠的,Linux安全模塊(LSM)也在單個(gè)的IPC操作中插入了鉤子。另外還有鉤子支持對(duì)通過System V消息隊(duì)列發(fā)送的單個(gè)消息進(jìn)行細(xì)粒度的訪問控制。下面是文件系統(tǒng)鉤子。對(duì)于文件操作,定義了三種鉤子:文件系統(tǒng)鉤子,inode結(jié)點(diǎn)鉤子,以及文件鉤子。Linux安全模塊(LSM)在對(duì)應(yīng)的三個(gè)內(nèi)核數(shù)據(jù)結(jié)構(gòu)中加入了安全域,分別是:super_block結(jié)構(gòu),inode結(jié)構(gòu),file結(jié)構(gòu)。超級(jí)塊文件系統(tǒng)鉤子使得安全模塊能夠控制對(duì)整個(gè)文件系統(tǒng)進(jìn)行的操作,例如掛載,卸載,還有statfs()。Linux安全模塊(LSM)在permission()函數(shù)中插入了鉤子,從而保留了這個(gè)函數(shù),但是也提供了很多其他inode結(jié)點(diǎn)鉤子來對(duì)單個(gè)inode結(jié)點(diǎn)操作進(jìn)行細(xì)粒度訪問控制。文件鉤子中的一些允許安全模塊對(duì)read()和write()這樣的文件操作進(jìn)行額外的檢查;還有文件鉤子允許安全模塊控制通過socket IPC接收打開文件描述符;其他的文件鉤子對(duì)像fcntl()和ioctl()這樣的操作提供細(xì)粒度訪問控制。接下來是網(wǎng)絡(luò)鉤子。對(duì)網(wǎng)絡(luò)的應(yīng)用層訪問使用一系列的socket套接字鉤子來進(jìn)行仲裁,這些鉤子基本覆蓋了所有基于socket套接字的協(xié)議。由于每個(gè)激活的用戶socket套接字有伴隨有一個(gè)inode結(jié)構(gòu),所以在socket結(jié)構(gòu)或是更底層的sock結(jié)構(gòu)中都沒有加入安全域。socket套接字鉤子對(duì)有關(guān)進(jìn)程的網(wǎng)絡(luò)訪問提供了一個(gè)通用的仲裁,從而顯著擴(kuò)展了內(nèi)核的網(wǎng)絡(luò)訪問控制框架(這在網(wǎng)絡(luò)層是已經(jīng)由Linux內(nèi)核防火墻netfilter進(jìn)行處理的)。例如sock_rcv_skb鉤子允許在進(jìn)入內(nèi)核的包排隊(duì)到相應(yīng)的用戶空間socket套接字之前,按照其目的應(yīng)用來對(duì)其進(jìn)行仲裁。另外Linux安全模塊(LSM)也為IPv4,UNIX域,以及Netlink協(xié)議實(shí)現(xiàn)了細(xì)粒度的鉤子,以后還可能實(shí)現(xiàn)其他協(xié)議的鉤子。網(wǎng)絡(luò)數(shù)據(jù)以包的形式被封裝在sk_buff結(jié)構(gòu)(socket套接字緩沖區(qū))中游歷協(xié)議棧,Linux安全模塊(LSM)在sk_buff結(jié)構(gòu)中加入了一個(gè)安全域,使得能夠在包的層次上對(duì)通過網(wǎng)絡(luò)層的數(shù)據(jù)的安全信息進(jìn)行管理,并提供了一系列的sk_buff鉤子用于維護(hù)這個(gè)安全域的整個(gè)生命周期。硬件和軟件網(wǎng)絡(luò)設(shè)備被封裝在一個(gè)net_device結(jié)構(gòu)中,一個(gè)安全域被加到這個(gè)結(jié)構(gòu)中,使得能夠在設(shè)備的層次上維護(hù)安全信息。最后是其他的鉤子。Linux安全模塊(LSM)提供了兩種其他系列的鉤子:模塊鉤子和頂層的系統(tǒng)鉤子。模塊鉤子用來控制創(chuàng)建,初始化,清除內(nèi)核模塊的內(nèi)核操作。系統(tǒng)鉤子用來控制系統(tǒng)操作,例如設(shè)置主機(jī)名,訪問I/O端口,以及配置進(jìn)程記帳。雖然現(xiàn)在的Linux內(nèi)核通過使用capability檢查對(duì)這些系統(tǒng)操作提供了一些支持,但是這些檢查對(duì)于不同操作差別很大并且沒有提供任何參數(shù)信息。2.4本章小結(jié)本章主要對(duì)Linux的安全機(jī)制和安全框架進(jìn)行的分析和研究,并給出了通過LSM安全框架來實(shí)現(xiàn)內(nèi)核安全模塊的方法。第三章 基于進(jìn)程的訪問控制的設(shè)計(jì)31第三章 基于進(jìn)程的訪問控制的設(shè)計(jì)3.1 基于進(jìn)程的訪問控制提出在傳統(tǒng)的訪問控制中用戶可以自主地將訪問權(quán),或訪問權(quán)的某個(gè)子集授權(quán)給其他主體,并以此來判斷對(duì)客體的操作。然而用戶對(duì)客體的訪問時(shí)通過執(zhí)行具體的進(jìn)程來實(shí)現(xiàn)的,因此進(jìn)程在對(duì)客體訪問時(shí)就有主體的所有訪問權(quán)限,這就導(dǎo)致了進(jìn)程的權(quán)限過于寬泛,訪問粒度不夠細(xì),違背了最小訪問權(quán)限的原則。強(qiáng)制訪問控制機(jī)制可以使訪問粒度變細(xì),但是不夠靈活。因?yàn)橐S護(hù)基本的訪問控制矩陣,每當(dāng)新的主體或?qū)ο蟊惶砑拥较到y(tǒng)中,他們必須被增加到訪問矩陣中(盡管在有的系統(tǒng)中該矩陣被作為一個(gè)模型,但基本的問題仍然存在,仍然需要占用每個(gè)主體和客體)。如果系統(tǒng)中存在很多的對(duì)象,沒增加一個(gè)主體,就不得不為所有的對(duì)象作出是否允許這個(gè)新的主體能夠訪問它們的決定。由此,我們提出基于進(jìn)程的訪問控制思想(Process Based Access Control),將用戶進(jìn)程作為訪問控制的主體,依據(jù)規(guī)則來指定進(jìn)程訪問控制客體資源12,這樣就可以有效地控制訪問粒度,防止進(jìn)程權(quán)限過于寬泛的問題了。3.1.1 思路分析傳統(tǒng)的訪問控制可以用三元組(S,O,A)表示,其中S表示用戶集合,O表示客體集合,A表示訪問權(quán)限集合。對(duì)任意的,都相應(yīng)的存在,決定了主體可對(duì)客體可以進(jìn)行何種操作。傳統(tǒng)的訪問控制模型中只描述了用戶對(duì)資源的訪問權(quán)限,而沒有準(zhǔn)確指出用戶執(zhí)行的某一進(jìn)程應(yīng)該享有該用戶的那些權(quán)限(該用戶的權(quán)限的一個(gè)子集),而是默認(rèn)用戶執(zhí)行的程序就擁有該用戶享有的所有權(quán)限。因此,當(dāng)用戶執(zhí)行一個(gè)進(jìn)程時(shí),這個(gè)進(jìn)程就有了的所有訪問權(quán)限,如果攻擊者將木馬植入該程序,入侵者就有可能通過該程序獲得用戶的權(quán)限。這樣以來,系統(tǒng)的安全就得不到保障?;谶M(jìn)程的訪問控制通過四元組(S,P,O,A)來表示,其中S表示用戶集合,P表示當(dāng)前正在運(yùn)行的進(jìn)程,這是訪問控制的主體,O表示客體集合,A表示訪問權(quán)限集合,這樣便可以組成一個(gè)三維的訪問控制矩陣,可描述如下:對(duì)于任意的都相應(yīng)的存在,表示當(dāng)用戶,在運(yùn)行進(jìn)程,時(shí)對(duì)客體。所進(jìn)行的操作。因此當(dāng)用戶,運(yùn)行進(jìn)程,時(shí)就無法獲得的所有權(quán)限,這樣即使該進(jìn)程被非法控制,由于對(duì)資源的訪問權(quán)限更加細(xì)致,所以造成的破壞比原先要小很多。可見,基于進(jìn)程的訪問控制思想不但能夠有效地阻止非法用戶的進(jìn)程對(duì)資源的訪問,同時(shí)也能限制合法用戶的進(jìn)程對(duì)系統(tǒng)資源的非法使用。在傳統(tǒng)的訪問控制模型之后,由基于進(jìn)程的訪問控制進(jìn)行更細(xì)致的控制,從而可以有效阻止針對(duì)系統(tǒng)安全漏洞的攻擊。3.2訪問控制模型的建立3.2.1 基本集合主體(Subject):系統(tǒng)中具有主動(dòng)行為能力的對(duì)象。主要包括用戶(User)和進(jìn)程(Process)??腕w(Object):系統(tǒng)中能夠保存信息的實(shí)體,只能被動(dòng)地接受主體的訪問。主要包括文件(file)、目錄(dir)、設(shè)備(dev)、進(jìn)程間通信(ipc)、訪問權(quán)限:主體對(duì)客體操作的學(xué)科,主體擁有某個(gè)權(quán)限表示主體可以對(duì)客體進(jìn)行某種操作,用一個(gè)三元組表示:(主體,客體,訪問類型)、3.2.2 模型定義USERS,PROCESS,OBJECTS,PERMISSION分別表示用戶,進(jìn)程,客體和權(quán)限的集合。UP表示用戶對(duì)客體操作許可權(quán)限的集合;PP表示進(jìn)程對(duì)客體操作許可權(quán)限的集合;,表示任意一個(gè)用戶;,表示任意一個(gè)進(jìn)程;,表示任意一個(gè)課題;,表示用戶對(duì)客體的訪問權(quán)限的集合;,表示進(jìn)程對(duì)客體的訪問權(quán)限的集合;,表示當(dāng)用戶 執(zhí)行進(jìn)程是對(duì)客體訪問權(quán)限的集合,且;UPA,權(quán)限到用戶的映射關(guān)系;PPA, 權(quán)限到進(jìn)程的映射關(guān)系;PH,表示進(jìn)程間的集成關(guān)系;如果(x,y)PH,可以表示為描述子進(jìn)程x集成父進(jìn)程y的所有權(quán)限。模型用圖3.1來表示:圖3.1 訪問控制模型框圖3.2.3 模型描述主體是系統(tǒng)中具有主動(dòng)行為能力的對(duì)象,包括用戶和進(jìn)程。用戶通過運(yùn)行可執(zhí)行程序來創(chuàng)建進(jìn)程。對(duì)客體的訪問取決于用戶對(duì)客體的訪問權(quán)限和進(jìn)程對(duì)客體的訪問權(quán)限。用戶對(duì)客體的訪問權(quán)限可由增強(qiáng)的自主訪問控制進(jìn)行分配;進(jìn)程對(duì)客體的訪問權(quán)限可由系統(tǒng)管理員通過系統(tǒng)調(diào)用進(jìn)行分配。對(duì)客體只能執(zhí)行同時(shí)存在于用戶權(quán)限集合和進(jìn)程權(quán)限集合中的訪問類型。例如,用戶userl通過運(yùn)行進(jìn)程P1來對(duì)文件file1和file2進(jìn)行操作,如果userl對(duì)file1的訪問權(quán)限為(open,read, write),對(duì)file2的訪問權(quán)限為(open,read),而pl對(duì)文件file2的訪問規(guī)則為拒絕,那么用戶userl運(yùn)行進(jìn)程pl時(shí)就只能對(duì)文件filel進(jìn)行相應(yīng)的操作,而不能對(duì)p2進(jìn)行操作。層次關(guān)系指的是父進(jìn)程和子進(jìn)程的權(quán)限關(guān)系,子進(jìn)程可以具有父進(jìn)程的全部權(quán)限,而父進(jìn)程不一定有子進(jìn)程的全部權(quán)限。 3.3 基于進(jìn)程的訪問控制的設(shè)計(jì)3.3.1基于進(jìn)程的訪問控制模型的設(shè)計(jì)訪問控制模型的最重要的原則就是:用戶權(quán)限和進(jìn)程權(quán)限的分離。進(jìn)程只有完成其任務(wù)鎖必需的安全權(quán)限,這樣就限制了原先利用了用戶全部權(quán)限的攻擊手段。由于主機(jī)系統(tǒng)的多樣性,只有用戶自己知道應(yīng)用環(huán)境的特點(diǎn),知道系統(tǒng)創(chuàng)建的進(jìn)程會(huì)訪問哪些資源,應(yīng)該具有哪些權(quán)限。本系統(tǒng)分為對(duì)用戶的訪問控制和對(duì)進(jìn)程的訪問控制兩部分,第一部分采用增強(qiáng)的自主訪問控制,第二部分則是基于LSM安全框架的基于進(jìn)程的訪問控制。用戶進(jìn)程首先通過DAC控制模塊,如果通過權(quán)限檢查就進(jìn)入PBAC模塊,否則直接拒絕。在PBAC模塊中,通過檢查當(dāng)前進(jìn)程是否具有訪問客體的權(quán)限來判斷是否允許其對(duì)客體進(jìn)行訪問,如果 通過了PBAC模塊的權(quán)限檢查,則進(jìn)程可以執(zhí)行實(shí)際的操作完成對(duì)客體的訪問。圖3.2 訪問控制模型結(jié)構(gòu)框圖3.3.2基于進(jìn)程的訪問控制框架為了不占用過多的系統(tǒng)資源,引入拒絕訪問的思想,我們使進(jìn)程對(duì)資源的訪問只有允許或拒絕,二沒有進(jìn)一步的控制到打開、讀、寫等操作?;谶M(jìn)程的訪問控制通過在進(jìn)程執(zhí)行時(shí)檢查訪問規(guī)則來控制對(duì)資源的訪問。因此,每一個(gè)運(yùn)行的進(jìn)程可以訪問未包括在訪問規(guī)則集中的資源。相對(duì)于進(jìn)程能夠訪問的資源,不能訪問的資源的數(shù)量是很少的,并且在具有斧子關(guān)系的進(jìn)程間,被禁止訪問的資源并不會(huì)有太大變化,因此對(duì)進(jìn)程應(yīng)用拒絕訪問的思想是可行的。基于進(jìn)程訪問控制的設(shè)計(jì),采用的是用戶對(duì)進(jìn)程授權(quán)訪問規(guī)則的方式,由用戶根于應(yīng)用環(huán)境來制定各個(gè)進(jìn)程對(duì)資源的訪問規(guī)則。系統(tǒng)分為三部分:安全授權(quán)模塊、訪問規(guī)則模塊、訪問判斷模塊。首先通過安全授權(quán)模塊來對(duì)新創(chuàng)建的進(jìn)程進(jìn)行授權(quán),然后訪問判斷模塊調(diào)用訪問規(guī)則模塊中的相關(guān)函數(shù),根據(jù)子進(jìn)程的訪問規(guī)則集來做出是否具備訪問資源權(quán)限的決定。在LSM框架下設(shè)計(jì)的基于進(jìn)程的訪問控制,決策部分主要通過調(diào)用LSM鉤子函數(shù)來執(zhí)行。圖3.3 PBAC訪問控制系統(tǒng)框圖3.3.3 安全授權(quán)模塊的設(shè)計(jì)在Linux中,進(jìn)程以樹的數(shù)據(jù)結(jié)構(gòu)形式來存儲(chǔ)。除了init進(jìn)程外,每個(gè)進(jìn)程都有自己的父進(jìn)程。當(dāng)啟動(dòng)Linux系統(tǒng)時(shí)內(nèi)核被裝載,首先創(chuàng)建init進(jìn)程,它是通過執(zhí)行/sbin/init產(chǎn)生的,因此進(jìn)程樹的根節(jié)點(diǎn)是init進(jìn)程,這個(gè)進(jìn)程產(chǎn)生許多新進(jìn)程,新進(jìn)程安全shell產(chǎn)生一個(gè)孩子進(jìn)程來處理后面的請(qǐng)求。用戶接口開始于bash,圖形用戶接口從這里開始。 圖3.4 進(jìn)程樹結(jié)構(gòu)圖安全授權(quán)模塊主要通過設(shè)置進(jìn)程的訪問規(guī)則集來實(shí)現(xiàn)的。當(dāng)一個(gè)進(jìn)程創(chuàng)建了一個(gè)新的孩子進(jìn)程時(shí),父進(jìn)程的訪問規(guī)則集將會(huì)繼承給孩子進(jìn)程,并且通過系統(tǒng)調(diào)用來為孩子進(jìn)程增加新的訪問規(guī)則,同時(shí),一個(gè)進(jìn)程不能改變自己的訪問規(guī)則集。因此孩子進(jìn)程總是至少具有它們父進(jìn)程的訪問規(guī)則。可用如下定義描述:假定p1和p2是進(jìn)程樹P中的節(jié)點(diǎn),并且p1具有訪問規(guī)則集合r1,p2具有訪問規(guī)則集r2,R是所有可能的訪問規(guī)則的集合。r1和r2是集合R的自己,如果p1是p2的后代,那么r1是r2的超集。訪問規(guī)則的繼承發(fā)生在新進(jìn)程創(chuàng)建之前,因此新進(jìn)程在所有訪問規(guī)則被設(shè)置好之前不會(huì)被執(zhí)行。3.3.4 訪問規(guī)則模塊的設(shè)計(jì)訪問規(guī)則可以將文件和信號(hào)等相關(guān)資源分開設(shè)計(jì),拒絕訪問信號(hào)(signal access deny,SAD)規(guī)則和拒絕訪問文件(file access deny,F(xiàn)AD)。相應(yīng)的規(guī)則集分為SAD規(guī)則集和FAD規(guī)則集兩部分。SAD規(guī)則是指對(duì)進(jìn)程設(shè)置不能訪問的信號(hào)和socket等資源。FAD規(guī)則是指不能訪問的文件資源,它被定義為該文件在系統(tǒng)中的路徑(Linux中設(shè)備視為文件)。訪問規(guī)則集中絕大部分的訪問規(guī)則是FAD規(guī)則集。如果設(shè)置了一個(gè)給定的路徑的訪問規(guī)則,那么進(jìn)程將不能訪問這個(gè)文件和這個(gè)路徑下面的所有資源。FAD規(guī)則集儲(chǔ)存在一個(gè)樹形的結(jié)構(gòu)中,以路徑作為元素。 當(dāng)一個(gè)進(jìn)程試圖訪問一個(gè)資源時(shí),就堅(jiān)持SAD規(guī)則集和FAD規(guī)則集。如果要訪問的資源是這個(gè)兩個(gè)集合的合集中的元素,訪問就被拒絕。例如,如果進(jìn)程的FAD規(guī)則集為/boot,則進(jìn)程就不能訪問/boot下的所有文件。 在訪問規(guī)則模塊中,通過定義一系列函數(shù)來操作SAD規(guī)則集和FAD規(guī)則集中的元素,進(jìn)而管理訪問規(guī)則。3.3.5 訪問判決模塊的設(shè)計(jì)由于應(yīng)用層程序?qū)ο到y(tǒng)資源的訪問時(shí)通過系統(tǒng)調(diào)用來實(shí)現(xiàn)的,所以可以通過在系統(tǒng)調(diào)用中截獲對(duì)資源訪問的請(qǐng)求,然后調(diào)用安全策略函數(shù)并返回訪問結(jié)果。具體流程如圖3.6所示,當(dāng)用戶進(jìn)程通過系統(tǒng)調(diào)用訪問系統(tǒng)資源時(shí),系統(tǒng)調(diào)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論