丁 滟,王 鵬,王 闖,李志鵬,宋連濤,馮了了
(國防科技大學計算機學院,湖南 長沙 410073)
訪問控制[1]是數據保護的基礎性技術之一。傳統訪問控制模型主要有自主訪問控制模型DAC(Discretionary Access Control)、強制訪問控制模型MAC(Mandatory Access Control)和基于角色的訪問控制模型RBAC(Role-Based Access Control)3種?;趦群说膹娭圃L問控制因運行在高特權級,能夠為系統帶來較強的安全性保障。
隨著信息系統應用場景向多元化的趨勢演變,信息敏感等級可能隨應用場景而動態變化,對訪問控制的靈活性要求越來越高。
在云原生應用的部署運行中,應用以容器鏡像的形式發布,對應用資源訪問的安全策略也隨之一同發布,規定容器應用對容器內部以及主機操作系統資源的訪問權限。然而,由于容器發布時并不能完全確定未來運行該容器平臺的安全級別,當容器鏡像運行在不同安全級別的平臺上時,需根據其運行環境動態調整安全策略。密碼服務等高安全等級要求的計算平臺一般會根據生命周期被分為出廠、安裝、就緒和工作等不同狀態,平臺處于不同狀態時,系統中運行的主體以及受保護的客體資源都不相同,對系統的資源管理、設備管理和業務處理等均提出了不同的安全管控需求。在 BYOD(Bring Your Own Device)環境下,為滿足員工隨時隨地使用各種智能終端安全訪問公司數據和應用程序資源的需求,需要根據其使用的設備類型、位置、時間和訪問對象等因素對其訪問權限進行動態調控,以平衡辦公效率與安全。
為實現細粒度動態訪問控制,研究人員提出了基于時間、空間、行為和屬性等一系列訪問控制模型并進行了應用性探索。Bertino等人[2]提出了一種TRBAC(Temporal Role-Based Access Control)模型,將時間引入RBAC模型,以實現在不同時間激活不同角色并解決角色激活的相互依賴問題。Joshi等人[3]提出了一個基于廣義時態角色的訪問控制GTRBAC(Generalized Temporal Role-Based Access Control)模型,以表示角色、用戶-角色和角色-權限分配的周期性或持續時間約束。張宏等人[4]提出了一個支持空間上下文的訪問控制模型,提出了空間角色概念,可根據用戶的空間位置激活相匹配的角色。Cui等人[5]提出了一個擴展的基于角色的訪問控制ExRBAC(Extended Role-Based Access Control)模型,以表達身份和時空約束。李鳳華等人[6]提出了基于行為的訪問控制模型,通過行為來綜合角色、時態和環境的安全信息,增強了訪問控制策略的表達能力。為解決多方訪問控制下信任等級的細粒度區分問題,李唯冠等人[7]提出一種帶屬性策略的RBAC 權限訪問控制模型,往角色中引入屬性,提供了更細粒度的控制,增強了訪問控制的靈活性和精確性。Hu等人[8]提出了基于屬性的訪問控制方案,通過設置可擴展的用戶、客體和環境屬性,解決了基于身份限定符的訪問控制策略表達能力不足的問題。劉曉威等人[9]設計實現了一個基于環境屬性的訪問控制模型和原型系統,將內存占用率、CPU負載等環境屬性引入訪問控制的判定過程。微軟從 Windows 8開始引入動態訪問控制并不斷改進,將訪問控制主體從單純的用戶擴展到角色及訪問設備,客體引入資源敏感度,并采用集中式的域控制器通過布爾函數進行統一判斷授權,實現了訪問權限的動態調控[10]。
上述模型考慮了多種動態因素,但大都沒有落地到操作系統。文獻[9]中的模型未與現有操作系統的訪問控制機制相結合,在表達能力和靈活性上還存在不足。本文將屬性與經典操作系統的訪問控制機制相結合,提出了基于屬性的操作系統動態強制訪問控制模型,并在Linux平臺上實現了原型系統。實驗結果表明該系統能夠實現靈活的權限調控,且性能開銷小。
本文模型不再單純地從操作系統訪問控制主客體的安全標記信息來構建安全規則,而是引入屬性對訪問請求時的具體信息進行描述,并根據屬性描述的對象將其分類為主體屬性類別ATTSUB、客體屬性類別ATTOBJ和環境屬性類別ATTENV。
ATTSUB是對主體的訪問控制特征的描述,包括角色和安全級別等屬性。ATTOBJ是對訪問對象的訪問控制特征的描述,包括類別和敏感級別等屬性;ATTENV是對訪問請求發起時環境的訪問控制特征的描述,包括時間和系統狀態等屬性。
各屬性都有一組表示屬性狀態的屬性值,屬性值可表示為原子形式或區間形式。原子式屬性如角色屬性,其取值由崗位名集合組成。區間式屬性如時間屬性,其取值可由一組時間段組成的集合組成。
2.1.1 基本概念
(1)屬性。表示為A=(c,V),其中,c∈{ATTSUB,ATTOBJ,ATTENV},表示屬性A所屬類別;V表示屬性A的取值集合,表示屬性值域。
(2)屬性值域。表示為原子類型Atomic或區間類型Range取值集合,形式化定義如式(1)所示:
(1)
其中,category(A)表示屬性取值類型,當category(A)為原子類型取值時,屬性值域VA為原子類型集合list(A);當category(A)為區間類型取值時,屬性值域VA為區間類型取值集合2list(A)。
(3)屬性組合。表示為2個或多個屬性之間屬性值域的笛卡爾積,2個屬性組合的定義如式(2)所示:
A1×A2=VA1×VA2=
{(vA1,vA2)|vA1∈VA1,vA2∈vA2}
(2)
n個屬性組合可通過式(3)遞歸定義:
A1×A2×…×An=
A1×(A2×…×An-1×An)
(3)
(4)訪問權限。表示為P=(s,o,OPS),其中s表示用戶或進程等實體;o表示計算機系統中需要保護的對象,也是主體訪問的目標;OPS表示主體可以對客體或系統進行的操作集合。針對某一對象的訪問權限集合又被稱為安全規則集。值得注意的是,本文提出的是安全規則集的通用表示形式,在具體使用時,白名單策略、多級安全策略等均可以展開為上述基礎形式。
(5)屬性訪問權限。表示為exPA={(vA,SP,vA)|vA∈VA},其中vA∈VA表示屬性A的某個屬性取值;SP,vA表示屬性取值為vA時所對應的訪問權限集合,該訪問權限集合又被稱為屬性安全規則集。
相比前文的訪問權限,屬性訪問權限增加了屬性維度,表示當系統處于不同屬性取值時分別對應不同的屬性安全規則集。引入類別屬性,對訪問請求首先進行類別屬性分類,進而對每個屬性取值制定對應的屬性安全規則集。在系統安全策略加載時,將對各個屬性類別中的不同屬性取值所對應的訪問控制規則集一次性都裝載入內核,當訪問發生時,系統在捕獲訪問請求后,通過屬性匹配,定位具體的屬性安全規則集來實施訪問權限的動態調整。
2.1.2 模型定義
基于屬性的操作系統動態強制訪問控制模型,將訪問控制各要素落地到操作系統層面。如圖1所示,該模型由準備階段和動態訪問控制階段組成。

Figure 1 An attribute-based dynamic mandatory access control model for operating system
在準備階段,將預先建立的安全規則集載入內核,包括屬性相關的屬性安全規則集和屬性無關的通用安全規則集。本文將這種能快速命中的安全規則集稱為活躍安全規則集。
在動態訪問控制階段,屬性收集點ACP(Attribute Collection Point)負責主體、客體和環境屬性的收集、存儲和管理,并周期性將屬性值傳遞給策略判定點PDP(Policy Decision Point)。
策略執行點PEP(Policy Execution Point)截獲訪問控制主體的每一次訪問請求,向PDP發出決策請求,接收PDP返回的決策結果,以允許或拒絕該訪問請求。
PDP根據接收到的屬性值集合信息映射到一組生效屬性安全規則集,并與通用安全規則集分別進行決策后,將最終的聯合決策結果返回給PEP。本文將訪問請求到達時參與決策的安全規則集稱為生效安全規則集。
PDP決策過程如圖2所示。

Figure 2 Flow chart of PDP decision
策略判定點PDP接收每一個訪問請求作為輸入,該訪問請求對應一個訪問權限請求Requests=(s,o,OPS)。
首先判斷訪問請求是否被安全模塊限制,在本文模型中,即判斷其是否存在通用安全規則集,若存在,則先由生效屬性安全規則集集合進行屬性權限檢查,再由通用安全規則集進行通用權限檢查。若不存在,跳過安全模塊權限檢查。

對于訪問權限請求(s,o,OPS),PDP首先匹配生效屬性安全規則集集合進行訪問控制決策。當(s,o)包含在第j個屬性安全規則集SP,vAj中時,如果主體對客體的操作在規則SP,vAj[s,o]中被允許執行,對應的決策decisionj為True;否則decisionj為False。當(s,o)沒有包含在第j個屬性安全規則集SP,vAj中時,decisionj為None。
遍歷完生效屬性安全規則集后,屬性決策結果decisionA為decision1&decision2&…&decisionn。當各屬性決策結果為True,或True與None的組合時,decisionA為True;當各屬性決策結果均為None時,decisionA為None;當某個屬性決策結果為False時,decisionA為False。對于訪問權限請求結果,True表示允許執行,False表示不允許執行,None表示其在屬性安全規則集中未定義。
當屬性決策結果非False時,PDP匹配通用安全規則集進行通用權限檢查。當(s,o)包含在通用安全規則集PG中時,若主體對客體的操作在規則PG[s,o]中被允許執行,那么對應的通用決策結果decisionG為True;否則為False。當(s,o)沒有包含在通用安全規則集PG中時,對應的通用訪問權限決策結果decisionG等于None。
訪問權限請求的最終訪問決策結果為decision=decisionA&decisionG,當屬性與通用訪問權限決策結果均為None或存在False時,decision為False,否則decision為True。
本文架構模型向傳統操作系統訪問控制技術中融入屬性獲取、判定及系統安全策略動態切換等相關機制,以解決訪問控制不夠靈活的問題。架構模型主要由屬性管理、安全規則集構建與動態訪問控制3個單元組成,如圖3所示。

Figure 3 System architecture
屬性管理單元主要是進行訪問控制主體、客體和環境等屬性的實時收集、存儲和管理,并將屬性信息傳遞給動態訪問控制單元。
安全規則集構建單元主要是構建不同屬性對應的安全規則集。審計功能完成訪問信息采集,安全規則生成工具完成訪問權限規則生成。
動態訪問控制單元對每個訪問請求進行屬性和通用訪問權限檢查。依據從屬性管理單元獲取的屬性信息,定位一組生效屬性安全規則集,再由其與通用安全規則集分別進行決策,并返回聯合決策結果。
在分析屬性爆炸對系統訪問控制決策性能影響的基礎上,從時間和空間2個方面進行性能優化。時間優化方面,提出了基于屬性安全規則集融合的聯合決策優化方法,通過減少決策次數大幅降低了訪問控制聯合決策的時間開銷;空間優化方面,提出了基于屬性特征分組的聯合決策優化方法,通過對屬性特征分類以及活躍安全規則集集合設置來降低當前有效安全策略的空間占用率。
為實現動態強制訪問控制,本系統針對每個屬性Ai,i=1,…,n都配置了一組屬性訪問權限exPAi,每個屬性訪問權限由一個屬性取值vAi和屬性取值所對應的屬性安全規則集SP,vAi組成。
發生訪問權限請求Requests=(s,o,OPS)時,最多進行n次屬性訪問權限檢查,且每次檢查都需切換至生效屬性安全規則集,引入了額外時間開銷,因此訪問決策時間開銷隨屬性數量增加而增大。為降低決策時間開銷,本節提出了基于屬性安全規則集融合的聯合決策優化方法。將屬性訪問權限轉化為屬性訪問權限組合,進行屬性訪問權限檢查時,由屬性組合安全規則集進行一次決策,大幅降低了決策次數,有效提升訪問控制決策性能。下面以2個屬性為例進行分析和介紹。
基于理論模型的決策過程,當訪問權限請求僅對應2個生效屬性安全規則集時,可將屬性安全規則集SP,vA1和SP,vA2融合為一個屬性組合安全規則集SP,vA1,vA2,其形式化定義如式(4)所示:
SP,vA1,vA2={(s,o,OPS)|(s,o,OPS)=
(4)
為使系統處于屬性A1和A2中任一個屬性取值組合時,都能僅用1次屬性檢查完成訪問決策,提出了屬性訪問權限組合概念,其形式化定義如式(5)所示:
exPA1×exPA2=
{(vA1,vA2,SP,vA1,vA2)|vA1∈VA1,vA2∈VA2}
(5)
其中,屬性訪問權限組合的屬性值域表示為VA1和VA22個屬性值域的笛卡爾積,其訪問權限集合SP,vA1,vA2是屬性取值為vA1時對應的訪問權限集合SP,vA1和屬性取值為vA2時對應的訪問權限集合SP,vA2融合得到的訪問權限集合。
屬性安全規則集融合算法1接收2個輸入,分別是需要融合的2類屬性訪問權限exPA1和exPA2,輸出結果是一組融合后的屬性訪問權限組合exPA1,A2={(vA1,vA2,SP,vA1,vA2)}。
算法1Merge算法
輸入:exPA1,exPA2。
輸出:merged_PA1,A2。
1.merged_exPA1,A2=[];
2.foriinrange(0,len(exPA1))do
3. (vA1,SP,vA1)=exPA1[i];
4.forjinrange(0,len(exPA2))do
5. (vA2,SP,vA2)=exPA2[j];
6.SP,set1,SP,set2,SP,set3=[],[],[];
7.for(s,o)∈SP,vA1do
8.if(s,o)?SP,vA2
9.SP,set1+=[(s,o,SP,vA1[s,o])];
10.else
11.SP,set3+=[(s,o,SP,vA1[s,o]∩SP,vA2[s,o])];
12.endif
13.endfor
14.for(s,o)∈SP,vA2do
15.if(s,o)?SP,vA1
16.SP,set2+=[(s,o,SP,vA2[s,o])];
17.endif
18.endfor
19.SP,vA1,vA2=SP,set1+SP,set2+SP,set3;
20.merged_exPA1,A2+=[(vA1,vA2,SP,vA1,vA2)];
21.endfor
22.endfor
23.returnmerged_exPA1,A2;
其融合過程主要分為4步。
第1步定義用于存放屬性訪問權限組合全集的空列表merged_exPA1,A2。
第2步從2類屬性A1和A2中選擇2個屬性取值vA1和vA2,其對應的安全規則集SP,vA1和SP,vA2為待融合對象,記融合后的結果為SP,vA1,vA2。同時定義3個列表SP,set1,SP,set2,SP,set3。

第4步將列表SP,set1,SP,set2,SP,set3的并集存到融合安全規則集SP,vA1,vA2中,并將屬性取值vA1和vA2及其對應的融合安全規則集SP,vA1,vA2添加到屬性訪問權限組合列表merged_exPA1,A2中。
隨著屬性及其屬性值數量的增加,屬性訪問權限組合呈指數增長,其對應安全規則集的規則數量也將呈指數增長。同時將所有安全規則集加載入內核會導致極大的空間占用。內存有限時,可以只加載部分安全規則集,但是一旦訪問權限匹配失敗,需重新加載其余安全規則集,這將會導致性能開銷大幅增加。
令函數f()表示屬性安全規則集大小,對于2個屬性A1和A2中的一個屬性取值組合(vA1,vA2),其屬性組合安全規則集SP,vA1,vA2與SP,vA1和SP,vA2有如式(6)所示的關系成立:
(6)
更一般地,對于n個屬性的某個屬性取值組合(vA1,vA2,…,vAn),其屬性組合安全規則集與各屬性安全規則集有如下關系成立:
(7)
最壞情況下各屬性安全規則集互不相交,即f(SP,vA1∩SP,vA2∩…∩SP,vAn)=0,屬性組合安全規則集達到最大,為各屬性安全規則集大小之和。
假設系統中有n個屬性A1,A2,…,An,各屬性Ai,i=1,2,…,n有m個屬性取值vAi,1,vAi,2,…,vAi,m,各屬性取值vAi,j,j=1,2,…,m對應屬性安全規則集SP,vAi,j的大小為k,且屬性安全規則集之間兩兩互不相交,則有如式(8)所示的等式成立:
(8)
當屬性取值數m和屬性安全規則集大小k不變時,屬性組合安全規則集大小隨屬性個數n的增長呈指數增長。
通過屬性特征分析,根據屬性取值是否可預測以及屬性取值是否被動觸發,將屬性分為階段穩定型屬性和瞬時動態型屬性,然后分別對階段穩定型屬性和瞬時動態型屬性進行安全規則融合,之后將階段穩定型屬性融合結果中的每個安全規則集與瞬時動態型屬性融合結果融合,此融合結果作為活躍安全規則集集合。
在實現上,將階段穩定型屬性的捕獲、處理、判斷邏輯置于應用層,瞬時動態型屬性的相關邏輯置于內核層,當階段穩定型屬性的屬性值變化時,利用安全規則加載機制將階段穩定型屬性新取值組合對應的一組安全規則集加載入內核,從而實現分組加載安全規則集,大幅減少了單次需加載的安全規則數量,在提升訪問決策性能的同時,降低空間占用。
實驗平臺配置如表1所示,本文以Linux的AppArmor模塊為基礎進行了原型系統實現。由于其安全規則匹配與主客體安全標記綁定,本文設計了將屬性與主客體標記綁定的機制,并對安全規則匹配邏輯進行了擴展,根據屬性動態匹配安全規則集以實現基于屬性的動態強制訪問控制。

Table 1 Configuration of experimental platform
4.2.1 功能測試
在AppArmor原訪問控制基礎上增加了時間屬性。實驗設置如表2所示。

Table 2 Settings of functional experiment
圖4為時間屬性測試。系統狀態不變,15時56分程序成功讀文檔,57分不能讀文檔。說明時間屬性變化后生效屬性安全規則集發生變化。

Figure 4 Attribute-time test
4.2.2 性能測試
以文件操作為例,實驗設置如表3所示。

Table 3 Settings of access control performance experiment
令Torig、Tattr和Tswitch分別表示原系統、屬性處理后直接命中安全規則集系統和屬性處理后切換生效屬性安全規則集系統在不同安全規則集規模下的運行時間。圖5中Torig與Tattr用于計算某活躍安全規則集規模下屬性處理時間開銷。柱狀圖表示該時間開銷與原系統訪問控制時間開銷的比值。

Figure 5 Performance overhead of attributes processing
性能開銷W1的計算如式(9)所示:
W1=(Tattr-Torig)/Torig
(9)
計算后可知屬性處理的性能平均損耗約為2.8%。
圖6中Torig、Tattr與Tswitch用于計算某活躍安全規則集規模下切換生效屬性安全規則集時間開銷。柱狀圖表示該時間開銷與原系統訪問控制時間開銷的比值。

Figure 6 Performance overhead of switching valid attribute security rule set
切換性能開銷W2的計算如式(10)所示:
W2=(Tswitch-Tattr)/Torig
(10)
計算得平均性能開銷為13.5%,與屬性處理開銷合計約16.3%,就訪問控制系統而言影響不大。
從數據結果分析可知,切換開銷并不會隨安全規則集的數量增加而大幅增加,該系統能夠適應大規模安全規則集的使用場景。
安全規則集融合的聯合決策系統記為Imp,未融合的聯合決策系統記為Ori。本節測量2種系統實施訪問控制的時間開銷。實驗設置如表4所示。實驗結果如圖7所示。

Table 4 Settings of time optimization experiment

Figure 7 Time overhead of joint decision
從圖7可知,系統Ori決策時間在60 μs~300 μs上下波動,約分為5個層次。系統Imp的單次決策時間穩定在60 μs左右。屬性安全規則集融合后,訪問控制性能有了大幅提升。
屬性總數一定時,研究系統Imp在階段穩定型與瞬時動態型屬性不同組合下生效屬性組合安全規則集的大小,以驗證其空間優化效果。實驗設置如表5所示。實驗結果如圖8所示。

Table 5 Settings of space optimization experiment

Figure 8 Space occupancy of combined attributes security rule set
從圖8可知,屬性數一定時,隨著瞬時動態型屬性數量增加,空間占用呈指數增長。當瞬時動態型屬性數量為2時,空間占用在100 KB以內;當其數量為5時,空間占用在2 MB以內;當其數量為10時,空間占用達到500 MB。
綜上,將屬性分為階段穩定型和瞬時動態型屬性,可有效控制生效安全策略空間占用率。階段穩定型屬性較多時空間優化效果尤其顯著。
本文構建了一種基于屬性的操作系統動態強制訪問控制模型,使經典操作系統訪問控制機制適應動態細粒度訪問控制需要,并以Linux的AppArmor為基礎進行了原型系統實現。實驗結果表明,該系統訪問控制效率影響可控。通過引入屬性后對系統性能影響的分析,從時間和空間2個方面進行優化研究。模擬實驗結果顯示,本文的優化方法能夠有效解決隨著屬性擴展引起的訪問控制性能下降問題。未來,將在分析屬性爆炸對系統訪問控制決策性能影響的基礎之上,嘗試將該機制應用于分布式場景,并在容器平臺及物聯網設備等實際工程應用場景中進行進一步驗證。