陳大文
(江蘇金盾檢測技術(shù)股份有限公司,江蘇 南京 210000)
聯(lián)合文件系統(tǒng)(UnionFS)[1]是Linux操作系統(tǒng)中的一種新型文件系統(tǒng),在架構(gòu)上是一種層次化的、輕量級的文件系統(tǒng)。聯(lián)合文件系統(tǒng)通過對不同鏡像的文件系統(tǒng)層層掛載與疊加,最終將不同鏡像的文件目錄掛載至同一個虛擬文件系統(tǒng),向用戶展示一個統(tǒng)一的文件系統(tǒng)視圖。聯(lián)合文件系統(tǒng)是現(xiàn)代容器技術(shù)的基礎(chǔ),DOCKER容器的架構(gòu)如圖1所示。
圖1 Docker文件系統(tǒng)模型
(1)系統(tǒng)最底層的是Bootfs。在這個文件系統(tǒng)中包含Linux系統(tǒng)的引導(dǎo)加載程序以及Linux的內(nèi)核。Docker鏡像中作為一般使用的是宿主機的Bootfs。
(2)基于Bootfs的是Base Image層,該層是Docker鏡像的根文件系統(tǒng),又稱基礎(chǔ)鏡像,基于不同LINUX系統(tǒng)的Docker鏡像使用的根文件系統(tǒng)是不一樣的。
(3)在Base Image層之上是Docker File中通過命令自下向上層層疊加的各種鏡像層,包括可執(zhí)行文件、數(shù)據(jù)等。位于層次上方的鏡像層同名目錄會與下方鏡像層的同名目錄合并,而上方鏡像的同名文件會隱藏覆蓋下方的同名文件。
(4)最上層是容器層,與其他鏡像層不同的是容器層可以改寫,其他鏡像層的文件如果在執(zhí)行過程中需要改寫數(shù)據(jù)或文件,則采用copy-on-write (寫時拷貝)機制,將目標(biāo)文件拷貝到容器層改寫。因聯(lián)合文件系統(tǒng)的特性,改寫后新生成的文件將覆蓋底層不可改寫鏡像中的文件。
當(dāng)容器啟動時,依賴聯(lián)合文件系統(tǒng)實現(xiàn)各鏡像層的數(shù)據(jù)、文件統(tǒng)一映射與整合,最終形成位頂層的容器層。由上述的架構(gòu)可見,聯(lián)合文件系統(tǒng)是容器技術(shù)[2]的核心基礎(chǔ)。通過聯(lián)合文件系統(tǒng)的層疊式架構(gòu)實現(xiàn)高度離散靈活的容器構(gòu)建途徑以及不同鏡像層文件的共享。聯(lián)合文件系統(tǒng)作為一種新型的虛擬文件系統(tǒng),目前的主流有AUFS,OVERLAYFS[3]等,其中OVERLA-YFS已發(fā)展到二代,相對于AUFS速度更快,實現(xiàn)也較為更簡單。
容器的高度靈活性、輕便性給新型計算模型的發(fā)展帶來各種新的可能。算力網(wǎng)絡(luò)[4-5]就是其中一種,在未來大規(guī)模高速網(wǎng)絡(luò)的支持下,算力網(wǎng)絡(luò)將實現(xiàn)端、邊、中心三位一體的算力調(diào)度,盡可能將算力按需分配,這其中容器的可調(diào)度性、遷移性對算力網(wǎng)絡(luò)計算模式的支撐是必不可少的。但是依托容器遷移實現(xiàn)算力調(diào)度的模式仍然存在嚴(yán)重問題,限制著算力網(wǎng)絡(luò)計算模式發(fā)展。容器在算力網(wǎng)絡(luò)調(diào)度遷移過程中,用戶失去了對容器中數(shù)據(jù)以及相關(guān)程序文件執(zhí)行的控制權(quán)。顯然,在用戶對數(shù)據(jù)與軟件的控制得不到保護之前,算力網(wǎng)絡(luò)的大規(guī)模發(fā)展必然會受到阻礙。
由此,本文提出一種新型的OVERLAYFS文件加固機制,該機制主要包括兩方面內(nèi)容,一是引入信任構(gòu)建機制,通過該機制實現(xiàn)對平臺、容器各鏡像層文件擁有方的信任關(guān)系。二是擴展Linux系統(tǒng)中現(xiàn)有的SELinux[6-7]安全機制,通過在SELinux機制中加入新型安全執(zhí)行機制來與現(xiàn)有的宿主機系統(tǒng)對接,構(gòu)建信任關(guān)系以及執(zhí)行安全策略?;诩庸虣C制構(gòu)建的容器鏡像層對算力平臺的信任關(guān)系,并通過受信的算力平臺執(zhí)行安全策略以保護鏡像層數(shù)據(jù)和文件的權(quán)限,解決了算力網(wǎng)絡(luò)計算執(zhí)行模式帶來的安全問題。
安全增強型(Security-Enhanced Linux,SELinux)在LINUX2.6以及以上版本中,作為一種功能全面的 LSM(Linux Security Module)安全模塊,集成在Linux內(nèi)核。SELinux基于LSM框架[8],實現(xiàn)Linux 安全模塊對訪問內(nèi)核對象的行為實施訪問控制。SELinux的組成架構(gòu)主要由3部分組成。
(1)安全服務(wù)器:安全服務(wù)器是SELinux 的核心,主要功能是對確定內(nèi)核文件的安全標(biāo)記和訪問策略。其中最重要的是配置的安全策略。
(2)SELinux的文件系統(tǒng):向安全服務(wù)器提供接口,支持安全服務(wù)器的安全策略文件讀入,SELinux中安全策略文件是二進制,由安全服務(wù)器提供數(shù)據(jù)結(jié)構(gòu)存儲安全策略。
(3)訪問向量緩存:這是SELinux與LSM框架鉤子之間的一個緩存機構(gòu),主要用以提升SELinux的執(zhí)行效率,在訪問控制實施前查詢相關(guān)的策略與執(zhí)行方法,有則直接從緩存中取出,沒有則查詢安全服務(wù)器。
由于集成進入Linux內(nèi)核的主線,各宿主機Linux系統(tǒng)對SELinux具有廣泛的支持性。而且SELinux執(zhí)行靈活且嚴(yán)格MAC安全訪問控制機制,對容器的信任關(guān)系模型構(gòu)建有良好的支持,本文選用SELinux作為本文安全加固機制的系統(tǒng)集成點,集成到現(xiàn)有主流的Linux系統(tǒng)。
SELinux對系統(tǒng)內(nèi)主體和客體對象的訪問控制是通過雙方的安全屬性即安全上下文實現(xiàn)。針對進程或文件數(shù)據(jù),SELinux中定義的安全上下文本質(zhì)上可分成兩類,包括進程安全上下文和文件安全上下文,一個進程安全上下文可以對應(yīng)多個文件安全上下文。在SELinux安全服務(wù)器中只有進程安全上下文與文件安全上下文對應(yīng),才可執(zhí)行安全策略相應(yīng)的動作。
在SELinux中,安全上下文的定義包括4個字段,分別是用戶(User)、角色(Role)、類型(Type)和級別(Level)。根據(jù)上述SELinux的架構(gòu)與安全上下文的定義,本文機制對SELinux的擴展主要包括如下4個方面。
(1)用戶:對于進程安全上下文擴展新的用戶,以platform_trusted_u為標(biāo)識,表示受信任平臺上創(chuàng)建的進程;對文件安全上下文擴展新的用戶,同樣以platform_trusted_u為標(biāo)識表示受信任平臺可使用的文件數(shù)據(jù)。
(2)角色:對進程安全上下文擴展新的角色,以platform_trusted_r為標(biāo)識,表示受信任平臺上創(chuàng)建的進程;對于文件安全上下文擴展新的角色,以platform_object _r為標(biāo)識表示受信任平臺可使用的文件數(shù)據(jù)。
(3)類型:本文機制新增了一個platform trusted類型,該類型代表本文OVERLAYFS安全加固政策,其中包括多項可擴展的規(guī)則,與第4個部分的LSM框架的安全回調(diào)鉤子對接,以便在OVERLAYFS文件系統(tǒng)構(gòu)建與掛載鏡像層文件時觸發(fā)執(zhí)行。
(4)安全規(guī)則執(zhí)行的LSM回調(diào)模塊:該模塊主要用于執(zhí)行定義platform trusted類型的安全規(guī)則,包括文件訪問許可規(guī)則、網(wǎng)絡(luò)端口許可規(guī)則等。
由于算力網(wǎng)絡(luò)的算力調(diào)度執(zhí)行模式,容器的執(zhí)行可能在不同平臺進行,加上5G的C-RAN等軟件定義網(wǎng)絡(luò)的形式,容器運行的環(huán)境處于一種動態(tài)變化的狀態(tài),因此造成上文所述的安全性問題。在這種模式下必須構(gòu)建完備的信任關(guān)系,才可能實現(xiàn)容器整體的安全構(gòu)建以及不同平臺的遷移執(zhí)行。由容器的OVERLAYFS文件系統(tǒng)及其運行模式可知,容器運行至少需要構(gòu)建以下各方的信任關(guān)系。
(1)各鏡像層文件所有者之間的信任關(guān)系:由于OVERLAYFS文件系統(tǒng)可由多個鏡像層通過層疊而成的,而各鏡像層具有不同的來源,鏡像層中包括各類型的可執(zhí)行文件、數(shù)據(jù)文件等。因此,必須建立各鏡像層所有者之間的關(guān)系,整個容器才可能由OVERLAYFS文件系統(tǒng)建構(gòu)完成。
(2)各鏡像層文件所有者與算力平臺之間的信任關(guān)系:由于容器是在多個平臺之間進行自調(diào)度和執(zhí)行,最終的安全策略由平臺在容器執(zhí)行過程中實施,因此容器本身必須對其所在的執(zhí)行平臺之間形成信任關(guān)系,以保證容器的安全執(zhí)行。
因此,為了確保容器以及容器中各鏡像層的文件數(shù)據(jù)執(zhí)行安全,必須構(gòu)建一個多方參與的信任關(guān)系模型,本文的安全加固機制基于該模型形成容器執(zhí)行過程中多方的信任關(guān)系。本文所提出的信任關(guān)系模型的基本組成部分是信任元。其中信任元是五元組結(jié)構(gòu):
其中:
(1)user即用戶,其定義為platform_trusted_u的進程安全上下文與文件安全上下文,除了platform_trusted_u,還有unconfined_u角色,這個角色來自SELinux,表示不管制的進程以及來自鏡像層用戶自定義地表明自己身份的角色。
(2)role即角色,其定義為platform_trusted_r,除此之外,還有unconfined_r表示不管制的進程,object_r表示文件安全上下文。
(3)type定義為固定的上文所述的platform_trusted類型,用以觸發(fā)本文OVERLAYFS安全加固政策。
(4)action定義為對role的操作動作包括各文件類型的訪問操作以及網(wǎng)絡(luò)操作。
(5)transitive是本文新增用于構(gòu)建信任關(guān)系網(wǎng)絡(luò)的標(biāo)識符,表示該信任元是否接收信任關(guān)系傳遞。如不接收,則必須由信任元指定的user才能對role執(zhí)行type中相應(yīng)的動作。
在本文信任關(guān)系模型中,transitive相對于原生的SELinux框架進行擴展。由于算力平臺擔(dān)任信任關(guān)系建立的核心,OVERLAYFS中各鏡像層的用戶難以在容器構(gòu)建與運行前雙方建立點對點的信任關(guān)系。因此,在算力網(wǎng)絡(luò)的計算模式下只能依托算力平臺作為中間的信任代理構(gòu)建間接的信任關(guān)系。為此,本文的信任元中引入tranistive標(biāo)識符來控制信任關(guān)系的傳遞。
基于上述的信任關(guān)系模型及信任元,本文提出的基于信任關(guān)系模型的構(gòu)建算法如下所述。
step1:分別從當(dāng)前進程的安全上下文中獲得進程擁有的信任元,從該信任元中獲得用戶信息即user,同時從當(dāng)前進程訪問的對象獲得信任元,提取出信任元中指定的Role參數(shù)以及action參數(shù)。
step2:若對象信任元中指定的user為unconfined_u則進行step5,否則進入step3。
step3:若當(dāng)前進程信任元的user參數(shù)為platform_trusted,則進入step5,原因是容器在構(gòu)建之前要建立與算力平臺的雙方對等信任關(guān)系,即意味著鏡像層中文件對平臺開放。因此,若當(dāng)前進程來自platform_trusted用戶,即可執(zhí)行相應(yīng)操作;如果user參數(shù)不為platform_trusted,則進入step4。
step4:查看對象信任元中 transitive操作是否許可,若是則執(zhí)行step5,因為許可表明該對象允許信任傳遞,而平臺與每個鏡像用戶在容器構(gòu)建之前已經(jīng)建立有信任關(guān)系。因此,平臺作為信任中介實現(xiàn)雙方的信任傳遞。若否,則執(zhí)行step6。
step5:查看對象信任元中的action操作與當(dāng)前進程的操作是否一致,如果一致,則返回SELinux的執(zhí)行許可;若否,則執(zhí)行step6。
step6:拒絕當(dāng)前進程對訪問對象的操作,并返回。
上述算法部署在SELinux的安全服務(wù)器及容器的執(zhí)行過程中,算法中所述的進程與文件的信任元則會緩存在SELinux的訪問向量緩存中,以提高SELinux的執(zhí)行效率。同時本文所述的platform_trusted類型及其相關(guān)的執(zhí)行規(guī)則需要先行注冊到平臺的LSM框架中以備調(diào)用。
為了支持上述算力平臺信任關(guān)系模型,還需要定義鏡像層的結(jié)構(gòu)以及建立鏡像層用戶與平臺之間對等的信任關(guān)系。鏡像層是由鏡像用戶生成的文件包,文件包由兩個文件組成,第1部分是鏡像層文件的安全策略說明,該安全策略說明文件主要包括3部分:
(1)鏡像層與信任相關(guān)的屬性說明,包括鏡像層的標(biāo)識符、鏡像層的來源、指定的信任平臺以及鏡像層的MD5數(shù)據(jù)摘要等。
(2)鏡像層文件的信任元集合,對鏡像層中不需要安全訪問控制的文件,信任元可以采用默認(rèn)方式,即不設(shè)置,則容器在構(gòu)建過程中對這些文件的安全上下文設(shè)置為用戶unconfined_u,角色為object_r。對需要設(shè)置安全訪問控制的文件由上述的信任元五元素逐一說明。
(3)最后是對安全策略說明文件的用戶簽名以保證安全策略文件的完整性。
第2個部分是鏡像層文件系統(tǒng)壓縮包,該壓縮包使用用戶生成的密鑰進行壓縮與加密。本文所述的加固OVERLAYFS系統(tǒng)文件構(gòu)建與現(xiàn)有OVERLAYFS系統(tǒng)流程一致,區(qū)別在掛載容器任一鏡像層時,需分成以下步驟進行。
(1)首先讀取鏡像層文件的安全策略說明文件,根據(jù)安全策略說明文件中說明的鏡像層用戶信息,校驗說明文件的完整。
(2)校驗無誤后完成,平臺開始與鏡像層用戶建立信任關(guān)系,由平臺層發(fā)送申請包括鏡像層標(biāo)識、平臺身份認(rèn)證信息,用戶返回認(rèn)證確認(rèn)結(jié)果,建立平臺與用戶的信任關(guān)系。用戶在建立信任關(guān)系后,將返回鏡像層文件的解密密鑰。
(3)平臺層在接收到解密密鑰后,解密鏡像層加密壓縮的文件包,同時依據(jù)安全策略文件中說明的文件信任元,賦予解密后的各文件。
(4)平臺層調(diào)用OVERLAYFS文件系統(tǒng),將解密后的鏡像層文件層疊掛載到系統(tǒng)。
由上述加固OVERLAYFS文件系統(tǒng)構(gòu)建過程可知,在OVERLAYFS文件系統(tǒng)完成構(gòu)建前,平臺已經(jīng)與各鏡像層用戶建立基礎(chǔ)的信任關(guān)系。一旦加固OVERLAYFS系統(tǒng)文件構(gòu)建完成則系統(tǒng)中文件,包括由可執(zhí)行文件創(chuàng)建的進程都會被SELinux機構(gòu)賦予不同的信任元,從而依據(jù)本文信任關(guān)系模型完成對加固OVERLAYFS文件系統(tǒng)中各類文件的安全訪問控制。
由于未來算力網(wǎng)絡(luò)中容器會在邊緣、端點以及中心不同的位置遷移執(zhí)行,因此容器的執(zhí)行平臺與環(huán)境會出現(xiàn)不確定狀態(tài),從而帶來容器中文件安全訪問控制的新問題。本文針對該問題,提出一種針對OVERLAYFS文件系統(tǒng)的安全訪問控制加固機制。該機制中最核心的是信任關(guān)系模型的構(gòu)建,依據(jù)信任元的定義,信任關(guān)系模型的構(gòu)建和信任關(guān)系的傳遞性質(zhì)實現(xiàn)。通過信任關(guān)系建立不同平臺,不同鏡像層用戶之間的整合的信任網(wǎng)絡(luò),從而基于信任構(gòu)建起統(tǒng)一的聯(lián)合文件系統(tǒng)。完成在容器動態(tài)遷移以及鏡像層文件共享等復(fù)雜情況下的聯(lián)合文件系統(tǒng)安全訪問控制。此外,此機制加固了主流聯(lián)合文件系統(tǒng):OVERLAYFS文件系統(tǒng),同時利用目前Linux主線中常用的安全模塊,SELinux訪問控制模塊以及LSM框架,具有較高的適用性與前瞻性。