本發(fā)明涉及一種去除Root權(quán)限的方法,特別是涉及一種基于強制訪問控制與權(quán)能結(jié)合以去除Root權(quán)限的方法,屬于操作系統(tǒng)安全技術(shù)領(lǐng)域。
背景技術(shù):
自主訪問控制(DAC,Discretionary Access Control)是一種最為普遍的訪問控制手段,DAC的主要特征體現(xiàn)在:主體可以自主的把自己所擁有的客體的訪問控制權(quán)限授予其他主體;或者從其他主體回收所授予的權(quán)限;用戶可以按照自己的意愿對系統(tǒng)的參數(shù)做適當(dāng)修改以決定哪些用戶可以訪問他們的文件,即一個用戶可以有選擇的與其他用戶共享他的文件。用戶有自主的決定權(quán)。Linux操作系統(tǒng)的訪問控制模式以自主訪問控制為主。
強制訪問控制(MAC,Mandatory Access Control)是根據(jù)客體的敏感級和主體的許可級來限制主體對客體地訪問,進程和文件都有一個固定的安全屬性。系統(tǒng)通過安全屬性來判斷進程是否可以訪問某個文件。安全屬性是強制性的規(guī)定,是由安全管理員或操作系統(tǒng)根據(jù)特定的規(guī)則確定的,用戶和用戶的程序不能加以修改。如果系統(tǒng)認為具有某一個安全屬性的用戶不適用于訪問某個文件,那么包括文件擁有者在內(nèi)的所有人都無法使該用戶獲得訪問該文件的權(quán)力。
隨著計算機領(lǐng)域不斷向其他領(lǐng)域的滲透,其安全需求是不可預(yù)知的,需要傳統(tǒng)的DAC和MAC相結(jié)合來描述和控制。另外,Sandhu等學(xué)者提出了一套以角色為基礎(chǔ)的存取控制(Role-based Access Control,RBAC)模型,其基本組件包括使用者(User)、角色(Role)、授權(quán)(Authorization)和會話(Session)。第一個RBAC模型公布于1992年,95年重新修訂。1996年,Sandhu提出了一個公認的較為全面的RBAC框架模型,之后一些的新的在其之上改進的模型相繼提出并得到了很好的應(yīng)用。
最小特權(quán)原則是系統(tǒng)安全中最基本的原則之一。最小特權(quán)原則(Least Privilege Theorem)就是“應(yīng)限定網(wǎng)絡(luò)中每個主體所必須的最小特權(quán),確保可能的事故、錯誤、網(wǎng)絡(luò)部件的篡改等原因造成的損失最小”。角色管理機制依據(jù)“最小特權(quán)原則”對系統(tǒng)管理員的特進行分化,每個用戶只能擁有剛夠完成工作的最小特權(quán)。然后根據(jù)系統(tǒng)管理任務(wù)設(shè)立角色,依據(jù)角色劃分權(quán)限,每個角色各負其責(zé),權(quán)限各自分離,一個管理角色不擁有另一個管理角色的特權(quán)。最小特權(quán)原則即為每個使用者分配相應(yīng)的權(quán)利(即授權(quán))的行為準則。草案標準POSIX1003.1e所定義的能力機制正是實施最小特權(quán)的一種方式。
POSIX1003.1e規(guī)定操作系統(tǒng)的每個進程關(guān)聯(lián)一個權(quán)能狀態(tài)。其中繼承集表示子進程從父進程獲得的權(quán)能,進程間通過權(quán)能繼承形成一個繼承鏈。通過繼承集,子孫進程能夠繼承來自父輩進程的權(quán)能。許可集表示進程能夠使用的權(quán)能。如果某個權(quán)能屬于許可集,不屬于有效集,則表示權(quán)能暫時禁止這個能力;有效集表示進程真正具有的特權(quán),當(dāng)一個進程試圖進行特權(quán)操作時,操作系統(tǒng)將檢查進程有效集是否具有相應(yīng)的權(quán)能,如果有,則允許操作,否則拒絕操作。
POSIX1003.1e雖然規(guī)范了權(quán)能機制,為它的實現(xiàn)提供了指南,但POSIX1003.1e僅僅把權(quán)能與進程和文件關(guān)聯(lián),按照這種方式實現(xiàn)的操作系統(tǒng)是很難使用的,因為操作系統(tǒng)一般都是以基于用戶身份的訪問控制為基礎(chǔ)的。
Linux操作系統(tǒng)部分實現(xiàn)了遵循POSIX1003.1e的權(quán)能機制,但他只支持進程權(quán)能,不支持文件權(quán)能。僅有進程權(quán)能很難約束超級用戶及setuid程序(執(zhí)行該程序的用戶可以獲得程序擁有者的權(quán)限)和setgid程序(執(zhí)行該程序可以獲得程序擁有者所在用戶組的權(quán)限),這些程序很容易造成特權(quán)濫用。
系統(tǒng)中實現(xiàn)了基于角色的強制訪問控制模型,但由于系統(tǒng)是基于Linux操作系統(tǒng)的,所以需要先進行DAC檢查,然后進行MAC檢查。所以有些程序的執(zhí)行需要root權(quán)限的支持,而root權(quán)限的存在對系統(tǒng)又會產(chǎn)生另外一個安全隱患。
在Linux系統(tǒng)中用戶可以分為兩類:超級用戶(root)和普通用戶。超級用戶具有配置、控制系統(tǒng)的全部特權(quán),也可以不受DAC限制以任何方式訪問任何文件,而普通用戶沒有這樣的特權(quán)。這樣可以防止普通用戶修改系統(tǒng),從而保證系統(tǒng)的安全。但在某些時候需要允許普通用戶擁有超級用戶的特權(quán),去執(zhí)行某些特殊操作。
當(dāng)前Linux內(nèi)核支持Capability的體現(xiàn)相當(dāng)于原子操作的性質(zhì):即進程如果是特權(quán)的,則有所有權(quán)能;如果是普通的,則沒有任何權(quán)能。這樣使capability形同虛設(shè)。而攻擊者利用S位乘虛而入并沒有得到實質(zhì)的阻隔,使得緩沖區(qū)溢出攻擊成為可能。例如,ping只需要CAP_NET_RAW,如果它放棄除這個能力之外的其他能力,即便這個進程存在安全缺陷,也不會對系統(tǒng)造成太大的損害;反之,于安全則沒有任何限制的意義。而在vfs_permission()中可以看到,內(nèi)核對進程身份的檢查是粗糙的,只要和文件屬主一致,就沒有針對權(quán)能的檢查。而在權(quán)能部分的檢查恰恰也是粗糙的,只要有權(quán)能,就無關(guān)進程的身份,兩者并沒有互相制約。
需要解決的主要問題表現(xiàn)在:
1、Linux在文件系統(tǒng)訪問控制中對euid=0的情況檢測的不夠詳細,對權(quán)能位過于大意;
2、在運行S位程序時候,將root的權(quán)能過于粗糙的分配給了進程,而沒有從實際出發(fā)。
技術(shù)實現(xiàn)要素:
本發(fā)明的主要目的在于,克服現(xiàn)有技術(shù)中的不足,提供一種基于強制訪問控制與權(quán)能結(jié)合以去除Root權(quán)限的方法,使用Linux的S位程序機制,實現(xiàn)強制訪問控制,使得普通用戶執(zhí)行程序后將獲得超級用戶的特權(quán),提升操作系統(tǒng)安全性。
為了達到上述目的,本發(fā)明所采用的技術(shù)方案是:
一種基于強制訪問控制與權(quán)能結(jié)合以去除Root權(quán)限的方法,包括以下步驟:
1)將具有S位的程序進行歸類;
2)將完成歸類的具有S位的程序按照需要賦予權(quán)能,賦給程序相對應(yīng)的二進制可執(zhí)行文件權(quán)能;
3)對發(fā)出操作執(zhí)行的用戶和將要執(zhí)行的目標程序的類型進行對比驗證,如果對比驗證通過、即用戶和目標程序相關(guān)聯(lián),則運行目標程序;如果對比驗證不通過、即用戶和目標程序不關(guān)聯(lián),則拒絕用戶的操作執(zhí)行請求并退出。
本發(fā)明進一步設(shè)置為:所述步驟1)的具體實施步驟為,
1-1)明確每個權(quán)能位的作用;
1-2)分析每個具有S位的程序的功能和源代碼,按照賦予權(quán)能的種類對具有S位的程序進行分類,屏蔽掉多余的權(quán)能位。
本發(fā)明進一步設(shè)置為:所述步驟2)的具體實施步驟為,
2-1)給特權(quán)程序的二進制可執(zhí)行文件賦予權(quán)能,并將權(quán)能和可執(zhí)行文件在文件系統(tǒng)中的節(jié)點信息中的權(quán)能字段聯(lián)系起來;
2-2)對設(shè)置權(quán)能后的特權(quán)程序進行測試,以確保在運行特權(quán)程序時,能夠獲取特權(quán)程序的權(quán)能許可集。
本發(fā)明進一步設(shè)置為:所述步驟2-1)的具體實施步驟為,
在inode結(jié)構(gòu)體中增加一個32位的整型變量file_permitted作為文件的權(quán)能字段來擴充文件屬性,將特權(quán)程序所需權(quán)能賦予file_permitted變量;在do_execve()函數(shù)中,通過binprm結(jié)構(gòu)獲得可執(zhí)行文件的文件名filename,找到該文件后,在compute_creds()函數(shù)的權(quán)能計算中,使用這個file_permitted變量表示的文件的權(quán)能集合來屏蔽掉進程多余的權(quán)能位。
本發(fā)明進一步設(shè)置為:所述步驟3)的具體實施步驟為,
3-1)預(yù)先強制將操作系統(tǒng)的特權(quán)程序按功能進行分類;
3-2)根據(jù)所述特權(quán)程序的分類,將分類后的每一類特權(quán)程序分別與對應(yīng)的管理員角色進行關(guān)聯(lián),得到每一個特權(quán)程序與管理員角色之間的關(guān)聯(lián)關(guān)系;
3-3)將所述每一個特權(quán)程序賦予安全標記,并將其與管理員角色之間的角色對應(yīng)關(guān)系寫入安全策略文件,在內(nèi)核啟動時加載入內(nèi)核,對安全策略文件提供修改配置文件的特權(quán)程序,將修改配置文件的特權(quán)程序與指定的管理員角色進行關(guān)聯(lián),使得只有指定的管理員角色才能對安全策略文件進行修改、編譯和加載;
3-4)用戶請求運行特權(quán)程序時,將查詢安全策略來確定特權(quán)程序與管理員角色是否關(guān)聯(lián),如果關(guān)聯(lián)、則繼續(xù)執(zhí)行目標程序;如果不關(guān)聯(lián)、則拒絕用戶執(zhí)行請求并退出。
本發(fā)明進一步設(shè)置為:所述步驟3-2)中的管理員角色,具體包括系統(tǒng)管理員、安全管理員和審計管理員三個;所述步驟3-1)中的預(yù)先強制將操作系統(tǒng)的特權(quán)程序按功能進行分類,具體是指將操作系統(tǒng)的特權(quán)程序按功能分類為由系統(tǒng)管理員執(zhí)行、由安全管理員執(zhí)行和由審計管理員執(zhí)行三類。
本發(fā)明進一步設(shè)置為:所述步驟3-3)中的指定的管理員角色,具體是指安全管理員。
本發(fā)明進一步設(shè)置為:該方法基于Linux權(quán)能和基于角色的強制訪問控制模型實現(xiàn)。
本發(fā)明進一步設(shè)置為:該方法所有的訪問控制均在Linux內(nèi)核層執(zhí)行。
與現(xiàn)有技術(shù)相比,本發(fā)明具有的有益效果是:
1、使用Linux的S位程序機制,實現(xiàn)強制訪問控制,使得普通用戶執(zhí)行程序后將獲得超級用戶的特權(quán),通用性強,兼容性好,靈活性高,能很好地提升操作系統(tǒng)的安全性。
2、通過預(yù)先強制將操作系統(tǒng)的特權(quán)程序進行分類,并將分類后的每一類特權(quán)程序分別與不同的管理員角色進行關(guān)聯(lián),限定了特權(quán)程序的訪問權(quán)限,實現(xiàn)了強制訪問控制,提升了操作系統(tǒng)的安全性。
3、通過賦予特權(quán)程序相應(yīng)的權(quán)能,使得程序在執(zhí)行過程中不用再給予其root權(quán)限,從而降低了特權(quán)程序?qū)Σ僮飨到y(tǒng)的威脅。
4、通過增強管理員對安全策略文件的安全管理,防止未經(jīng)授權(quán)的惡意程序修改、編譯和加載安全策略文件,從而保證操作系統(tǒng)的安全。
上述內(nèi)容僅是本發(fā)明技術(shù)方案的概述,為了更清楚的了解本發(fā)明的技術(shù)手段,下面結(jié)合附圖對本發(fā)明作進一步的描述。
附圖說明
圖1為本發(fā)明實施例的訪問原理示意圖;
圖2為本發(fā)明實施例中Linux權(quán)能實現(xiàn)過程的判定流程圖;
圖3為本發(fā)明實施例中特權(quán)程序與管理員角色關(guān)聯(lián)關(guān)系示意圖。
具體實施方式
下面結(jié)合說明書附圖,對本發(fā)明作進一步的說明。
本發(fā)明提供一種基于強制訪問控制與權(quán)能結(jié)合以去除Root權(quán)限的方法,基于Linux權(quán)能和基于角色的強制訪問控制模型實現(xiàn),所有的訪問控制均在Linux內(nèi)核層執(zhí)行,如圖1所示,包括以下步驟:
1)將具有S位的程序進行歸類;
具體實施步驟為,
1-1)明確每個權(quán)能位的作用;
1-2)分析每個具有S位的程序的功能和源代碼,按照賦予權(quán)能的種類對具有S位的程序進行分類,屏蔽掉多余的權(quán)能位。
2)將完成歸類的具有S位的程序按照需要賦予權(quán)能,賦給程序相對應(yīng)的二進制可執(zhí)行文件權(quán)能;
具體實施步驟為,
2-1)給特權(quán)程序的二進制可執(zhí)行文件賦予權(quán)能,并將權(quán)能和可執(zhí)行文件在文件系統(tǒng)中的節(jié)點信息中的權(quán)能字段聯(lián)系起來;
如圖2所示,關(guān)于權(quán)能的設(shè)置如何實現(xiàn):在/fs/exec.c中有一個prepare_binprm()的函數(shù),這個函數(shù)在進程加載可執(zhí)行代碼之前要填寫binprm數(shù)據(jù)結(jié)構(gòu),這個結(jié)構(gòu)將直接影響到允許S文件時,進程的有效身份是如何變化的。內(nèi)核根據(jù)這個結(jié)構(gòu)的值來改寫進程task結(jié)構(gòu)。內(nèi)核在load二進制可執(zhí)行文件時,調(diào)用compute_creds()函數(shù)來完成對id和權(quán)能的校正。在可執(zhí)行映像將要被加載的時候,exe.c()函數(shù)中還有一個子函數(shù)load_a.out_binary()將會根據(jù)bprm結(jié)構(gòu)中的數(shù)據(jù)和當(dāng)前進程的特征做出判斷,決定給當(dāng)前進程身份和能力進行切實有效地修正。
但是,當(dāng)前Linux內(nèi)核,需要解決的主要問題表現(xiàn)在:Linux在文件系統(tǒng)訪問控制中對euid=0的情況檢測的不夠詳細,對權(quán)能位過于大意;在運行S位程序時候,將root的權(quán)能過于粗糙的分配給了進程,而沒有從實際出發(fā)。
針對所存在的問題,將具有S位的程序重新歸類,將inode的權(quán)能信息控制字段利用起來,將運行S位程序安裝所需進行權(quán)能賦予,減少權(quán)能的任意賦予,減少該進程由于多余的無用的權(quán)能給系統(tǒng)造成的隱患。
具體實施步驟為,
在inode結(jié)構(gòu)體中增加一個32位的整型變量file_permitted作為文件的權(quán)能字段來擴充文件屬性,將特權(quán)程序所需權(quán)能賦予file_permitted變量;在do_execve()函數(shù)中,通過binprm結(jié)構(gòu)獲得可執(zhí)行文件的文件名filename,找到該文件后,在compute_creds()函數(shù)的權(quán)能計算中,使用這個file_permitted變量表示的文件的權(quán)能集合來屏蔽掉進程多余的權(quán)能位。
2-2)對設(shè)置權(quán)能后的特權(quán)程序進行測試,以確保在運行特權(quán)程序時,能夠獲取特權(quán)程序的權(quán)能許可集。
3)對發(fā)出操作執(zhí)行的用戶和將要執(zhí)行的目標程序的類型進行對比驗證,如果對比驗證通過、即用戶和目標程序相關(guān)聯(lián),則運行目標程序;如果對比驗證不通過、即用戶和目標程序不關(guān)聯(lián),則拒絕用戶的操作執(zhí)行請求并退出;
具體實施步驟為,
3-1)預(yù)先強制將操作系統(tǒng)的特權(quán)程序按功能進行分類;
3-2)根據(jù)所述特權(quán)程序的分類,將分類后的每一類特權(quán)程序分別與對應(yīng)的管理員角色進行關(guān)聯(lián),得到每一個特權(quán)程序與管理員角色之間的關(guān)聯(lián)關(guān)系;
3-3)將所述每一個特權(quán)程序賦予安全標記,并將其與管理員角色之間的角色對應(yīng)關(guān)系寫入安全策略文件,在內(nèi)核啟動時加載入內(nèi)核,對安全策略文件提供修改配置文件的特權(quán)程序,將修改配置文件的特權(quán)程序與指定的管理員角色進行關(guān)聯(lián),使得只有指定的管理員角色才能對安全策略文件進行修改、編譯和加載;
3-4)用戶請求運行特權(quán)程序時,將查詢安全策略來確定特權(quán)程序與管理員角色是否關(guān)聯(lián),如果關(guān)聯(lián)、則繼續(xù)執(zhí)行目標程序;如果不關(guān)聯(lián)、則拒絕用戶執(zhí)行請求并退出。
其中,管理員角色,具體包括系統(tǒng)管理員、安全管理員和審計管理員三個;預(yù)先強制將操作系統(tǒng)的特權(quán)程序按功能進行分類,具體是指將操作系統(tǒng)的特權(quán)程序按功能分類為由系統(tǒng)管理員執(zhí)行、由安全管理員執(zhí)行和由審計管理員執(zhí)行三類;指定的管理員角色,具體是指安全管理員。
根據(jù)特權(quán)程序的功能,將操作系統(tǒng)的特權(quán)程序劃分為由系統(tǒng)管理員執(zhí)行、由安全管理員執(zhí)行和審計管理員執(zhí)行三類,分類后的特權(quán)程序再與對應(yīng)的管理員角色進行關(guān)聯(lián),即由系統(tǒng)管理員執(zhí)行的特權(quán)程序與系統(tǒng)管理員角色關(guān)聯(lián),以此類推。系統(tǒng)中存在多個特權(quán)程序,每個特權(quán)程序只能與一個管理員角色關(guān)聯(lián),一個管理員角色則可關(guān)聯(lián)多個特權(quán)程序,如圖3所示。
本發(fā)明的創(chuàng)新點在于,通過對特權(quán)程序進行分類,明確不同特權(quán)需要賦予相對應(yīng)的權(quán)能,防止賦予權(quán)能過大使得操作系統(tǒng)安全受到威脅,也避免賦予權(quán)能過小導(dǎo)致程序無法正常使用的問題;給特權(quán)程序的二進制可執(zhí)行文件賦予權(quán)能,將權(quán)能和可執(zhí)行文件在文件系統(tǒng)中的節(jié)點信息中的權(quán)能字段聯(lián)系起來,在運行特權(quán)程序時,能夠獲取特權(quán)程序的權(quán)能許可集;將特權(quán)程序進行分類并與不同的管理員角色進行關(guān)聯(lián),使得特定的特權(quán)程序只能由特定的管理員角色執(zhí)行,而特權(quán)程序由于強制訪問控制和權(quán)能限制了其訪問權(quán)限,有力的提升了操作系統(tǒng)的安全性。
以上顯示和描述了本發(fā)明的基本原理、主要特征及優(yōu)點。本行業(yè)的技術(shù)人員應(yīng)該了解,本發(fā)明不受上述實施例的限制,上述實施例和說明書中描述的只是說明本發(fā)明的原理,在不脫離本發(fā)明精神和范圍的前提下,本發(fā)明還會有各種變化和改進,這些變化和改進都落入要求保護的本發(fā)明范圍內(nèi)。本發(fā)明要求保護范圍由所附的權(quán)利要求書及其等效物界定。