徐 鋒,魏立峰,張國印
(1.哈爾濱工程大學計算機科學與技術學院,黑龍江哈爾濱150001;2.國防科學技術大學計算機學院,湖南長沙410073)
計算機信息安全除了要保護信息的機密性外,還要保護信息的完整性。文件的完整性是指文件完好無損,是完整的。一旦一個重要文件被替換或篡改,其危害甚至不亞于機密信息的丟失。
Tripwire是Linux下進行事后完整性檢查的一種手段,但不能實時地對文件完整性進行保護,僅在事后給出提示,顯然不能滿足完整性保護需求。為保護信息完整性,學者提出了很多完整性模型,包括Biba模型、Clark-Wilson模型、Chinese-Wall模型、LOMAC模型、Lipner完整矩陣模型等[1],并進行了一系列后續研究[2~7],從完整性訪問控制模型以及如何實施完整性訪問控制等角度進行了研究,但是都不能真正做到利用完整性控制機制保護系統平臺的完整性,防止外來程序的執行。
完整性保護是高等級安全操作系統的一項重要要求[8,9]。各安全操作系統基于不同的完整性保護模型進行適應性實現。銀河麒麟提出了可信數據認證技術,定義了兩個簡單完整級,分別表示可信和不可信,通過定義外來數據不可信防止惡意程序對完整性的破壞,同時起到抵御惡意攻擊的效果;紅旗安全操作系統則在Biba嚴格完整性保護策略的基礎上,實現了動態的嚴格完整性保護策略[3];FreeBSD在其強制訪問控制MAC(Mandatory Access Control)框架下實現了保護完整性的mac_lomac策略[10]。Windows 7和Vista的強制完整性控制MIC(Mandatory Integrity Control)策略[11]是Biba模型中Ring策略[1]的一種實現。利用MIC機制,Windows 7和Vista實現了IE保護模式,限制惡意代碼、程序和插件能夠通過瀏覽器獲得的權限操作。
雖然有很多的完整性模型及策略實現,但在實際使用中還是存在一些不足。無論信息完整性的保護需求有多高,總是有進程或用戶可以有意或無意地進行修改、刪除等操作,而在某些情況下,是不允許進行任何修改的,比如操作系統內核、重要配置文件以及系統重要命令或應用等,一旦這些文件被破壞,甚至可以導致系統癱瘓;較低完整性的文件是可以執行較高完整性程序的,因為并不會破壞完整性保護原則;新創建文件的完整性如何確定的問題并不是任何時候都要和進程完整性一致。基于此,本文提出了一種滿足完整性保護需求并兼顧靈活和防止瀏覽器劫持等惡意攻擊的靈活完整性控制策略,稱之為FIC(Flexible Integrity Control)完整性控制策略,并給出了在LSM(Linux Security Module)[11]訪問控制框架下的實現過程。FIC策略引入了輔助完整級,參與新創建文件客體的完整性標記確定規則中,并定義進程執行完整性標記規則,使得低完整性進程不能通過執行高完整性進程提升權限,高完整性進程執行低完整性進程必須降低權限,既增加了靈活性又不會對完整性造成破壞。分析表明,FIC策略即能滿足完整性保護目標,也能有效防止系統重要文件遭到破壞,同時還有防止外來惡意軟件運行和瀏覽器劫持等功能。
Biba模型是最經典的完整性模型和正式的計算機安全策略狀態轉換系統,由Biba K于20世紀70年代提出。類似于BLP[1]保密性模型,Biba模型為系統中的主客體定義了完整性等級,并制定了一套確保數據不被損壞的訪問控制規則,提供了分級別的完整性保證。
Biba模型針對完整性保護提出了三種策略:low-water-mark策略、Ring策略和嚴格完整性策略(Biba模型)。
low-water-mark策略定義了如下三種訪問控制規則:
(1)主體s能夠寫訪問客體o,當且僅當客體o的完整級小于或等于主體s的完整級;
(2)如果主體s讀訪問客體o,如果客體o的完整級低于主體s的完整級,那么主體s在讀訪問客體o后,其完整級等于客體o的完整級;
(3)主體s1能夠執行主體s2,當且僅當主體s2的完整級小于或等于主體s1的完整級。
Ring策略定義了如下三種訪問控制規則:(1)允許任何主體讀任何客體;
(2)主體s允許寫訪問客體o,當且僅當客體o的完整級小于或等于主體s的完整級;
(3)主體s1能夠執行主體s2,當且僅當主體s2的完整級小于或等于主體s1的完整級。
嚴格完整性策略也稱之為Biba模型,定義了如下訪問控制規則:
(1)主體s能夠讀訪問客體o,當且僅當主體s的完整級小于或等于客體o的完整級;
(2)主體s能夠寫訪問客體o,當且僅當客體o的完整級小于或等于主體s的完整級;
(3)主體s1能夠執行主體s2,當且僅當主體s2的完整級小于或等于主體s1的完整級。
Biba模型三種完整性策略的區別僅在于讀訪問時的限制,其目標就是對信息流進行限制,在主體訪問客體時,禁止低完整性等級的進程對高完整性等級的客體進行寫訪問,保證信息只會從等級較高的實體傳輸到等級低的實體。在low-watermark策略中,當高完整級的進程讀訪問了低完整級的文件時,進程要降低其完整性等級。也可以描述為具有更高等級的清潔實體受到損壞后,就變成等級低的非清潔等級實體。Biba模型則不允許進程讀更低完整級的客體。
Windows 7或者Vista的MIC機制實際上是Ring策略的一種實現。MIC只定義了簡化的四個完整級,并通過瀏覽器進程運行在最低完整級來限制惡意木馬或病毒通過瀏覽器對系統的破壞。
在Biba模型的三種策略中,低完整級進程不能執行高完整級應用,因為只要完整級不被提高,允許執行并不會對完整性造成破壞,因此靈活性不足。同時,高完整級進程在執行低完整級程序后沒有相應的完整級變化規則,可能導致低完整性程序被高完整性進程執行后具有高完整性從而破壞完整性。由于缺乏新建客體的完整性標記規則,通常繼承進程的完整性標記,但并不是任何時候高完整級進程創建的文件一定是高完整級文件,比如創建的臨時文件,可能需要和其他進程共享,因此其完整級并不需要和進程的完整級一樣高。
對操作系統本身而言,完整性保護的目標不只是信息的完整性,操作系統自身的完整性更加重要。如果操作系統內核、系統命令等被修改或刪除,可能造成重要安全隱患甚至導致系統癱瘓。因此,對于某些在任何時候都不能被修改的文件,有必要采取特別措施保護其完整性。
為保護信息的完整性,并考慮實用性和靈活性,FIC完整性策略為系統中的主客體定義一個完整性標記,包括主完整級IL(Integrity Level)和輔助完整級IAL(Integrity Auxiliary Level)。主完整級IL主要參與訪問控制決策以及客體完整性標記的確定;輔助完整級IAL則主要針對系統中的進程主體和目錄客體,并參與到文件客體完整性標記確定規則中,用以確定新生成的文件客體完整性標記。
FIC完整性策略缺省定義七個完整級,從高到低分別是NOMOD、CORE、SYSTEM、USER、TMP、LOW以及UNDEF,其各自含義及適用主客體如表1所示。其中主完整級可以取值NOMOD、CORE、SYSTEM、USER、TMP以及LOW,輔助完整級取值范圍則包括全部七個完整級。
一個完整性標記A的主完整級IL(A)和輔助完整級IAL(A)必須滿足如下關系之一:

定義1 當且僅當完整性標記A的主完整級IL(A)大于或等于完整性標記B的主完整級IL(B)時,即IL(A)≥IL(B)時,稱完整性標記A支配完整性標記B。

Table 1 Definition of FIC default integraity level表1 FIC缺省完整級定義
FIC完整性策略與Ring策略相似,但考慮了靈活性,策略規則定義如下:
(1)讀訪問規則:由于讀訪問不破壞完整性,缺省允許;
(2)寫訪問規則:當且僅當進程主體的完整性標記支配客體的完整性標記時,才允許該進程對該客體進行寫訪問;
(3)執行訪問規則:任何進程不允許執行主完整級為LOW的客體,且進程改變執行映像時,即在exec操作時,產生新進程的完整性標記為其父進程與被執行文件中完整性標記較小者。
通過上述完整性策略規則,FIC完整性策略既滿足Ring策略的要求,又保證了系統運行的靈活性,可保證高完整性標記的文件、進程等不會被低完整性標記進程破壞。系統運行時,高完整性的進程在執行低完整性的文件后會降低其完整性標記,而低完整性的進程不可能通過執行高完整性的文件提升自己的權限。
在系統執行過程中,進程主體的完整性標記應隨著其執行流的進行而改變,防止進程通過改變執行映像提高權限,并防止低完整性標記程序被高完整性標記進程執行時可能對系統完整性造成破壞。因此,進程在改變執行映像時需要根據進程的原有完整性標記和執行映像的完整性標記重新確定其完整性標記。新生成的客體完整性標記也是根據其父進程以及父目錄的完整性標記來確定。
當進程創建子進程時,子進程缺省繼承父進程的完整性標記。當進程p改變執行映像時,進程p的完整性標記按照如下規則改變:
(1)如果進程的當前完整性標記支配執行映像的完整性標記,則進程的主完整級降低為執行映像的主完整級;如果執行映像的完整性標記支配進程的當前完整性標記,則進程的完整性標記保持不變。
(2)如果執行映像具有輔助完整級,且輔助完整級不為NOMOD,則:
①如果進程當前沒有定義輔助完整級,即輔助完整級為UNDEF,則進程的輔助完整級設置為執行映像的輔助完整級;
②如果進程當前有輔助完整級,且映像的輔助完整級高于進程的輔助完整級,則進程的輔助完整級不變;
③如果進程當前有輔助完整級,且進程的輔助完整級高于映像的輔助完整級,則進程的輔助完整級設置為執行映像的輔助完整級。
(3)經步驟(1)、(2)后,如果進程的輔助完整級IAL(p)高于進程的主完整級IL(p),則進程的輔助完整級IAL(p)設置得與進程的完整級IL(p)相等。
當進程創建文件時,文件客體的完整性標記通常要繼承進程的完整性標記,但并不是所有新建文件都要和進程保持一致。輔助完整級主要用于文件或目錄客體創建時的完整性標記限定。如果進程的輔助完整級不為UNDEF,則輔助完整級表示進程所能創建的文件的最高完整性標記;如果目錄的輔助完整級不為UNDEF,則輔助完整級表示在該目錄下新創建的文件的最高完整性標記。
新建客體標記確定規則如下:
(1)如果進程具有輔助完整級,則文件客體的主完整級繼承進程的輔助完整級,否則文件客體的主完整級繼承進程的主完整級。如果要創建的文件客體所在的父目錄有輔助完整級,則轉2);否則,文件客體的輔助完整級取值為UNDEF,文件客體完整性標記確定完畢。
(2)如果步驟(1)確定的文件客體主完整級高于父目錄的主完整級,則繼承父目錄的主完整級。如果創建的文件客體是目錄,則目錄的輔助完整級也繼承父目錄的輔助完整級;否則,輔助完整級取值為UNDEF。轉(3)
(3)如果步驟(2)確定的文件客體完整性標記支配步驟(1)確定的完整性標記,則文件客體的完整級即為步驟(1)確定的完整標記;如果文件客體具有輔助完整級,且輔助完整級高于文件客體的主完整級,則輔助完整級設置得與文件客體的主完整級相同。
LSM是一種輕量級、通用的訪問控制框架,為各種增強的訪問控制策略提供一種底層的通用支持,使得安全模塊開發者可以專注于安全策略內部的細節實現,而不必關心整個操作系統的流程。目前,LSM已經集成在Linux內核中,Linux各主要發行版本均包括LSM框架。通過LSM框架,可以方便地實現各種安全策略,如SELinux就是掛接在LSM框架下實現對系統的保護。
LSM在內核主要的數據結構(如inode、task、file等)中均增加了相應的安全域,以無類型指針void*security表示,并在內核相關函數內部的關鍵點插入鉤子函數。根據控制對象的不同,LSM將hook函數進行分類,并定義在一個security_operations安全hook函數域結構中,各安全策略模塊根據自身策略需求實現相應的部分或全部hook函數實體。當主體訪問客體時,首先進行一系列常規操作及內核一般訪問檢查后,通過鉤子函數進入掛接在LSM下的各訪問控制策略檢查函數,并根據各訪問控制策略檢查結果,決定是否授予訪問權限。
4.2.1 FIC安全標記域
FIC完整性訪問控制策略作為一個安全策略模塊在LSM框架下設計實現,為系統內所有主客體定義如下一個fic_label完整性標記結構,在該結構中,fic_grade表示主完整級,fic_aux表示輔助完整級。

以該標記結構為基礎,為inode、file、task、bprm等定義相應的完整性標記結構。
4.2.2 主體函數設計
FIC策略主要實現與訪問控制相關的inode客體標記、進程再標記等hook函數。
進程訪問文件的主體函數fic_inode_perm的邏輯結構如圖1所示。

Figure 1 Logic structure of process access files圖1 進程訪問文件邏輯結構
進程p執行b的時候,進程完整性標記需要根據b的完整性標記重新確定進程p的主完整級和輔助完整級。主體函數fic_bprm_apply_creds的邏輯結構如圖2所示。

Figure 2 Logic structure of process tags to determine圖2 進程標記再確定邏輯結構
新建文件o的完整性標記缺省根據進程p的完整性標記確定,但如果父目錄d下創建的文件完整性標記有特殊要求,則新建文件o的完整性標記根據進程p和目錄d二者的完整性標記綜合確定。主體函數fic_inode_init_security的邏輯結構如圖3所示。
FIC策略引入主完整級和輔助完整級,并允許低完整性標記的進程可以執行高完整性標記的程序,高完整性標記進程在執行低完整性程序后降低其完整性,實現了系統執行控制的靈活性。輔助完整級主要文件客體創建時的標記限定中,通常用于瀏覽器等進程以及/tmp等臨時目錄。

igure 3 Logic structure of new file tags to determine圖3 新建文件標記確定邏輯結構
為保護操作系統內核等重要文件,通過安全配置工具ficset為/boot目錄下所有文件設置完整性標記為CORE[NOMOD]。測試表明,任何用戶對這些文件的修改操作都被拒絕,但不影響系統正常運行。
為瀏覽器進程定義TMP[LOW]完整性標記,即主完整級為TMP,輔助完整級為LOW,使得瀏覽器進程不能對系統造成破壞,且通過瀏覽器下載的文件或插件主的完整級只能是LOW,因此通過瀏覽器下載的惡意程序或木馬不能運行,進一步保護了系統的安全。測試也驗證了這一點。
本文研究了目前完整性保護機制的現狀,指出了其中存在的缺陷,提出了一種靈活的完整性保護策略FIC,并在LSM框架下設計實現。FIC策略定義了主完整級和輔助完整級的概念,并通過訪問控制規則、主體再標記規則和新建客體標記規則,實現了靈活的完整性保護。利用FIC策略,可以做到具有最高完整性保護要求的文件不會被任何用戶或進程修改,并可防止外來惡意程序或木馬的運行。
但是,FIC策略在設計實現過程中只簡單定義了有限的幾個完整級,在某些情況下,可能不能滿足實際需求。因此,還可以對FIC進行可擴展性研究,管理員根據需要動態增加自定義完整級,系統根據完整級配置文件在內核維護完整級鏈表,進一步滿足擴展需求。
[1] Bishop M.Computer security:Art and science[M].Boston:Addison Wesley,2002.
[2] Zhang Jun,Zhou Zheng,Li Jian,et al.Confidentiality and integrity dynamic union model based on MLS policy[J].Computer Engineering and Applications,2008,44(12):19-21.(in Chinese)
[3] Zhang Xiang-feng,Sun Yu-fang.Dynamic enforcement of the strict integrity policy in Biba’s model[J].Journal of Computer Research and Development,2005,42(5):746-754.(in Chinese)
[4] Zhou Zhou-yi,He Ye-ping,Liang Hong-liang.Hybrid mandatory integrity model composed of Biba and clark-wilson policy[J].Journal of Software,2010,21(1):98-106.(in Chinese)
[5] Luo Qin,Wang Xiao-ming,Fu zheng-fang.An improvement of clark-wilson integrity model[J].Microelectronics &Computer,2007,24(7):128-131.(in Chinese)
[6] Liu Zun,Wang Tao,Li Wei-hua.Role based integrity control model for operating system[J].Computer Science,2010,37(1):87-90.(in Chinese)
[7] Hu Ming,Pan Xue-zeng,Li Wen.Design and implementation of improved multiple-level security model[J].Computer Engineering and Applications,2011,47(4):77-80.(in Chinese)
[8] Galagher P R.A guide to understanding audit in trusted systems[M].US:National Computer Secuirty Center(NCSC),1987.
[9] Common criteria for information technology security evaluation(Version2.3)[S].Common Criteria Recognition Agreement(CCRA),2005.
[10] Wu Xin-song,Zhou Zhou-yi,He Ye-ping,et al.Static analysis of a class of memory leaks in trusted BSD MAC framework[C]∥Proc of ISPEC’09,2009:83-92.
[12] Riley S.Windows Vista system integrity technologies[R].Microsoft,2006:1-62.
[11] Wright C,Cowan C,Morris J,et al.Linux security modules:General security support for the Linux kernel[EB/OL].[2003-05-20].http://lsm.immunix.org.
附中文參考文獻:
[2] 張俊,周正,李建,等.基于MLS策略的機密性和完整性動態統一模型[J].計算機工程與應用,2008,44(12):19-21.
[3] 張相鋒,孫玉芳.Biba模型中嚴格完整性政策的動態實施[J].計算機研究與發展,2005,42(5):746-754.
[4] 周洲儀,賀也平,梁洪亮.基于Biba和Clark-Wilson策略的混合強制完整性模型[J].軟件學報,2010,21(1):98-106.
[5] 羅琴,王小明,付爭方.一種改進的Clark_Wilson完整性策略模型[J].微電子學與計算機,2007,24(7):128-131.
[6] 劉尊,王濤,李偉華.基于角色的操作系統完整性控制模型[J].計算機科學,2010,37(1):87-90.
[7] 胡明,潘雪增,李文.改進的多級安全模型的設計與實現[J].計算機工程與應用,2011,47(4):77-80.