一種基于安全標記隨機化的操作系統(tǒng)強制訪問控制方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及Linux操作系統(tǒng)安全領(lǐng)域,具體涉及一種針對Linux內(nèi)核級提權(quán)攻擊進行防御的基于安全標記隨機化的操作系統(tǒng)強制訪問控制方法。
【背景技術(shù)】
[0002]隨著Linux操作系統(tǒng)的應(yīng)用范圍越來越廣,系統(tǒng)的安全問題也日益受到關(guān)注。其中,系統(tǒng)的用戶權(quán)限管理決定了系統(tǒng)中各類主體對系統(tǒng)資源的訪問權(quán)限,成為Linux系統(tǒng)安全的重要基礎(chǔ)之一。在Linux系統(tǒng)中,用戶一般分為系統(tǒng)管理員用戶root與普通用戶兩個級別。普通用戶僅擁有與用戶應(yīng)用相關(guān)的權(quán)限,而系統(tǒng)管理員則可以對系統(tǒng)范圍內(nèi)的所有資源進行訪問與管理。由于系統(tǒng)管理員具有“至高無上”的權(quán)限,因此一旦惡意攻擊者具有了 root權(quán)限,就可以訪問系統(tǒng)的所有資源。此外在系統(tǒng)管理過程中也必須避免系統(tǒng)管理員的權(quán)限濫用問題。
[0003]操作系統(tǒng)的強制訪問控制機制打破了 root用戶的特權(quán),在操作系統(tǒng)內(nèi)部根據(jù)不同的訪問控制安全策略對系統(tǒng)中各類對象之間的訪問控制行為進行控制管理。在這樣的系統(tǒng)中,即使進程的屬主為root,其所有行為也必須同時滿足強制訪問控制機制的要求才能夠在系統(tǒng)中被允許發(fā)生。典型的強制訪問控制策略有保護數(shù)據(jù)機密性及完整性的BLP/BIBA策略、實現(xiàn)最小特權(quán)的Capability策略、基于安全域隔離的SELinux策略等等。
[0004]在Linux操作系統(tǒng)中,為了簡化強制訪問控制機制的開發(fā),并且支持多種強制訪問控制策略的靈活擴展,系統(tǒng)中實現(xiàn)了 LSM強制訪問控制框架,實現(xiàn)了強制訪問控制的通用框架,并向安全策略開發(fā)人員提供Hook函數(shù),支持以模塊的形式來開發(fā)個性化的訪問控制策略。目前,在Linux系統(tǒng)中已經(jīng)列入內(nèi)核主線的強制訪問控制模塊有SELinux、AppArmor、SMACK等等。在具有強制訪問控制的Linux操作系統(tǒng)中,即使攻擊者將進程的ID修改為root,也并不能在系統(tǒng)中為所欲為,必須通過強制訪問控制機制的訪問權(quán)限決策,違反安全策略的訪問行為都會被拒絕。
[0005]具體實現(xiàn)時,Linux強制訪問控制機制為系統(tǒng)中的每一個主、客體對象關(guān)聯(lián)一個安全屬性,并且預(yù)先規(guī)定各類安全屬性之間的訪問控制規(guī)則。當(dāng)系統(tǒng)中發(fā)生主體對客體的訪問時,強制訪問控制機制將首先獲取主、客體的安全屬性,然后根據(jù)系統(tǒng)已有的訪問控制規(guī)則配置,判斷這次訪問是否可以繼續(xù)進行。通常情況下,Linux強制訪問控制機制的主要結(jié)構(gòu)如附圖1所示,主要包括位于內(nèi)核層的對象管理模塊、訪問許可決策模塊、訪問規(guī)則配置模塊,以及位于用戶層的核外安全配置管理模塊。這些模塊的主要作用分別為:
籲對象管理模塊,對象管理模塊主要負責(zé)管理操作系統(tǒng)中的各類主體與客體對象,包括進程、文件、socket等等,為系統(tǒng)中的每一個新生成的對象都維持一個安全屬性,以供訪問控制決策時使用。
[0006]籲訪問規(guī)則配置模塊。訪問規(guī)則配置模塊主要保存系統(tǒng)的安全管理員對操作系統(tǒng)中所有安全策略配置,包括系統(tǒng)存在的各類主體、客體的安全屬性,以及各不同安全屬性的主客體之間發(fā)生訪問時的許可規(guī)則。
[0007].訪問控制決策模塊。訪問控制決策模塊在系統(tǒng)中發(fā)生訪問行為時,分別獲取當(dāng)次訪問所涉及的主體與客體的安全屬性,并且查詢訪問規(guī)則配置模塊,查看在當(dāng)前的規(guī)則配置下,這樣的訪問是否允許發(fā)生。如果不被配置規(guī)則允許,就拒絕該次訪問操作。
[0008]?核外安全配置管理模塊。核外安全配置管理模塊主要在用戶層提供對安全策略的配置接口,以及對安全策略配置在文件系統(tǒng)中進行保存等等。
[0009]然而,隨著運行在系統(tǒng)更高級別的內(nèi)核態(tài)提權(quán)漏洞攻擊方法的出現(xiàn),攻擊者不僅可以篡改進程的用戶ID,還可以篡改進程的安全屬性。
[0010]下面,以內(nèi)核提權(quán)漏洞CVE-2013-2094為例,介紹進彳丁利用內(nèi)核提權(quán)漏洞進彳丁包括安全屬性在內(nèi)的提權(quán)攻擊典型攻擊流程:
第一步:利用內(nèi)核存在的邊界條件錯誤漏洞,將內(nèi)核空間的函數(shù)指針修改為指向用戶空間的shellcode代碼。在存在該漏洞的內(nèi)核中,在kernel/events/core, c中的perf_swevent_init函數(shù)使用不正確的整數(shù)數(shù)據(jù)類型,允許本地用戶通過特制的perf_event_open系統(tǒng)調(diào)用來提升權(quán)限。
[0011]第二步:在shellcode代碼中實現(xiàn)將內(nèi)核空間存儲的進程權(quán)限信息篡改為特權(quán)進程。在進程的內(nèi)核棧中,保存進程權(quán)限信息的thread_inf0結(jié)構(gòu)總是存放在內(nèi)核棧的底部。因此攻擊者可以根據(jù)內(nèi)核棧中某一變量的地址獲取內(nèi)核?;罚瑥亩@取進程task_struct在內(nèi)存中的位置,并進一步獲取進程cred在內(nèi)存中的位置,直接修改對應(yīng)內(nèi)存位置存儲的數(shù)據(jù)。步驟包括:(1)獲取進程task_strUCt在內(nèi)存中位置。通過將內(nèi)核棧中某一變量地址的低13位清零,獲取內(nèi)核?;?。在內(nèi)核?;肺恢么鎯χ赶蜻M程task_strUCt的指針,從而獲取進程task_strUCt在內(nèi)存中位置。(2)獲取進程cred在內(nèi)存中位置。根據(jù)進程task_struct結(jié)構(gòu)的特點,即進程cred和進程real_cred指針一般指向同一進程cred,并且根據(jù)用戶、組信息可以準確獲得進程cred在內(nèi)存中位置。(3)修改進程cred中權(quán)限信息。進程cred中存有進程的用戶、組信息以及Capabilities等與權(quán)限相關(guān)的信息,根據(jù)cred結(jié)構(gòu)就可以直接修改相關(guān)數(shù)據(jù)。將對應(yīng)的用戶ID和組ID修改0,即root用戶/組ID,將Capabilities修改為全1。(4)如果系統(tǒng)啟動了強制訪問控制安全策略,在cred結(jié)構(gòu)中找到指向的保存進程安全屬性的task_security_struct安全結(jié)構(gòu)的指針,進而獲取task_security_struct結(jié)構(gòu)的內(nèi)存地址,根據(jù)需要將安全上下文修改為目標安全上下文。
[0012]第三步:利用CVE-2013-2094內(nèi)核提權(quán)漏洞,獲取具有root權(quán)限shell。通過第二步當(dāng)前進程已經(jīng)擁有了所需的系統(tǒng)管理權(quán)限,調(diào)用execl( “/bin/bash”,”-sh”,NULL)獲取與系統(tǒng)進行交互的shell,該shell繼承當(dāng)前進程的權(quán)限。
[0013]通過上述實例可以看出,由于被入侵的進程在內(nèi)核態(tài)運行、具有更高的運行級別,因此可以直接對內(nèi)核中的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)進行修改,從而攻擊者可以對在內(nèi)核空間中存儲的進程權(quán)限進行任意改變,不僅改變進程的用戶ID、組ID等信息,并且可以根據(jù)需要對進程的強制訪問控制安全屬性也進行修改,繞過系統(tǒng)中強制訪問控制安全機制的檢查。而基于強制訪問控制的防御方法,由于Linux系統(tǒng)中各類安全策略下的主、客體安全屬性定義在系統(tǒng)編譯時就已經(jīng)確定,攻擊者可以很容易就確定需要的目標安全屬性并將進程屬性篡改為目標值,導(dǎo)致訪問控制機制的失效。
[0014]綜上所述,強制訪問控制機制使用進程的安全屬性來代替用戶ID來作為進程權(quán)限的標識,對傳統(tǒng)的修改用戶ID的提權(quán)攻擊具有緩解作用。但是目前已經(jīng)有攻擊方法可以進一步修改進程的安全屬性,攻擊者可以以此獲取想要的系統(tǒng)特權(quán)。因此,研究對系統(tǒng)的特權(quán)進程安全標記的保護措施,讓攻擊者無法獲取特權(quán)進程的安全屬性,進而保護系統(tǒng)重要資源的安全具有重要的現(xiàn)實意義。
【發(fā)明內(nèi)容】
[0015]本發(fā)明要解決的技術(shù)問題:針對現(xiàn)有技術(shù)的上述問題,提供一種能夠有效抵御攻擊者利用內(nèi)核提權(quán)漏洞修改內(nèi)核空間進程安全屬性的攻擊方式,安全性高、可靠性好、性能損失低、對用戶透明、適用范圍廣的基于安全標記隨機化的操作系統(tǒng)強制訪問控制方法。
[0016]為了解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案為:
一種基于安全標記隨機化的操作系統(tǒng)強制訪問控制方法,步驟包括:
1)預(yù)先在操作系統(tǒng)的強制訪問控制機制中構(gòu)建用于記錄安全標記的內(nèi)部標