訪問控制是操作系統(tǒng)安全的基石,當前的操作系統(tǒng)已部署了很多訪問控制的模型:Unix和Windows NT多用戶安全;SELinux中的類型執(zhí)行;反惡意軟件產(chǎn)品;Apple OS X,Apple iOS和Google Android中的應用沙盒;以及面向應用程序的系統(tǒng)如FreeBSD中的Capsicum等。這種多樣性是一種驚人的結(jié)果。
本質(zhì)是本地化安全,將操作系統(tǒng)安全模型適應于本地或產(chǎn)品特定要求。這一轉(zhuǎn)變是由三個變化所驅(qū)動的:無處不在的互聯(lián)網(wǎng)連接;從專用嵌入式操作系統(tǒng)向通用操作系統(tǒng)的遷移,以尋求更復雜的軟件堆棧;以及從多用戶計算向單用戶設(shè)備與復雜應用模型的普遍使用。這種轉(zhuǎn)變得到了可擴展的訪問控制框架的支持,這些框架允許操作系統(tǒng)內(nèi)核更容易地適應新的安全要求。
其中一種可擴展內(nèi)核訪問控制框架是 TrustedBSD 的強制訪問控制 (MAC) 框架,它始于 2000 年,于 2003 年在開源的 FreeBSD 操作系統(tǒng)中發(fā)布。
1. 操作系統(tǒng)設(shè)計中的可擴展訪問控制
嵌入式和移動操作系統(tǒng)在過去的20多年中發(fā)生了巨大變化:設(shè)備已經(jīng)擁有運行通用操作系統(tǒng)的CPU能力,并被放置在網(wǎng)絡環(huán)境中,持成熟的軟件棧以及第三方應用程序,也暴露在惡意活動之下。供應商在現(xiàn)有開源操作系統(tǒng)的基礎(chǔ)上構(gòu)建,而不是從頭開始。這提供了成熟的應用程序框架和復雜的網(wǎng)絡堆棧,這兩個領(lǐng)域都是“嵌入式操作系統(tǒng)”的弱點。
這種趨勢在2007年得以實現(xiàn),當時基于Linux的谷歌Android和部分基于Mach和FreeBSD的蘋果iOS面世,從而改變了智能手機市場。
所有這些環(huán)境都注重安全性和可靠性,由于第三方應用程序在各種系統(tǒng)中部署,沙盒變得至關(guān)重要,首先是為了防止“變磚”,其次是為了限制惡意軟件。因此,操作系統(tǒng)安全性的作用已經(jīng)從保護多個用戶之間轉(zhuǎn)向保護單個用戶或用戶免受不可信應用的影響。嵌入式設(shè)備、移動電話和平板電腦現(xiàn)在成為交匯點:許多不同的利益相關(guān)者如消費者、電話供應商、應用程序作者和在線服務都必須借助于另一個空間和時間的操作系統(tǒng)來協(xié)調(diào)。
操作系統(tǒng)開發(fā)人員必須滿足設(shè)備供應商的需求,這些需求包括路由器和防火墻的加固以及移動應用程序的沙箱化。操作系統(tǒng)供應商已經(jīng)觀察到歷史上“可信任操作系統(tǒng)”的困境,其強制訪問控制方案在可用性、性能、可維護性和最為重要的是最終用戶需求方面都存在問題。同樣,許多有前途的新安全模型,其可行性都不確定,這表明沒有單一的訪問控制模型能夠滿足所有需求。
這種本地化安全的實際現(xiàn)實直接推動了可擴展訪問控制。在過去的20年中,已經(jīng)明確了需要一個自包含、不可繞過、可驗證的訪問控制中心。在20世紀90年代初,這個概念已經(jīng)與“封裝”的概念結(jié)合起來,出現(xiàn)在“通用訪問控制框架”中,并出現(xiàn)了“基于規(guī)則集的訪問控制”以及“Flask安全架構(gòu)”等。直到21世紀初,主流操作系統(tǒng)供應商才采用這些方法,例如FreeBSD的MAC框架以及Linux安全模塊(LSM)。在這些情況下,一個關(guān)鍵問題是支持第三方安全模型,而不像早期的可信系統(tǒng)一樣承諾固定的策略。
2.MAC框架
MAC框架于1999年提出,在2003年出現(xiàn)在FreeBSD 5.0中,作為一項“實驗性功能”,默認情況下被編譯排除,但可供早期采用者使用。2009年的FreeBSD 8.0將該框架作為“生產(chǎn)功能”編譯到默認內(nèi)核中。
MAC框架提供了一種邏輯解決方案,用于增強內(nèi)核的訪問控制。擴展基礎(chǔ)設(shè)施能夠代表許多不同的策略,提供了更好的可維護性,并得到操作系統(tǒng)廠商的支持。類似于設(shè)備驅(qū)動程序和虛擬文件系統(tǒng)(VFS)模塊,策略被編譯到內(nèi)核或可加載模塊中,并實現(xiàn)了定義良好的內(nèi)核編程接口。策略可以增強訪問控制決策,并利用常見的基礎(chǔ)設(shè)施,例如對象標記,以避免直接內(nèi)核修改和代碼重復。它們能夠在廣泛的對象類型上執(zhí)行訪問控制,從文件到網(wǎng)絡接口,并與內(nèi)核的并發(fā)模型集成。
2.1 強制性策略
MAC是一種安全模型,其中強制策略限制所有系統(tǒng)用戶的互動。與自主訪問控制方案不同,如文件系統(tǒng)訪問控制列表(ACL),允許對象所有者自行保護(或共享)對象,MAC則強制實施系統(tǒng)范圍的安全不變量,而不考慮用戶偏好。
早期的強制性政策側(cè)重于信息流,要求在內(nèi)核中實施。多級安全通過標記用戶和數(shù)據(jù)機密性來保護安全性,限制流動。Biba完整性策略是MLS的邏輯對偶,保護其完整性。這些模型維護主題和對象的安全標簽,持有機密性或完整性信息,并控制可能導致信息升級或降級的操作。SRI的可證明安全操作系統(tǒng)設(shè)計包括強制執(zhí)行對象類型,補充能力保護。這演變成了類型強制執(zhí)行以及域和類型強制執(zhí)行,這些模型很有影響力,類型強制執(zhí)行已部署在SELinux和McAfee的防火墻中。這兩個模型都是靈活且細粒度的,用象征性的域和類型標記主題和對象。管理員控制規(guī)則授權(quán)并在域之間交互和轉(zhuǎn)換。另外,還有一類特定于產(chǎn)品的加固策略,這些策略采用較少的原則性方法,直接控制服務而不是抽象模型。
在可擴展的訪問控制之前有如下技術(shù):
- 直接內(nèi)核修改
- 系統(tǒng)調(diào)用攔截
2.2 MAC框架的設(shè)計原則
MAC框架的可擴展性訪問控制和鼓勵上下游供應商參與的雙重目標,激發(fā)了幾項設(shè)計原則:
不要承諾特定的訪問控制策略。 沒有針對單一策略甚至策略語言的共識;相反,用C代碼捕獲策略模型。
避免特定于策略的內(nèi)核入侵。 將內(nèi)部封裝在策略無關(guān)的接口后面。這自然地導致了基于對象的設(shè)計,尤其是關(guān)于主體、對象和方法的訪問控制檢查。
提供策略無關(guān)的基礎(chǔ)設(shè)施。 這滿足了超越訪問控制的常見要求,例如標記和跟蹤。
支持多個同時加載的策略。 以此方式可以獨立地表達策略的不同方面,可能來自不同的供應商。組合必須是可預測的、確定性的,理想情況下是合理的。
強制實施有助于保證論證的結(jié)構(gòu)。 這可以通過引用監(jiān)視器分離策略和機制以及通過明確定義的KPI語義(例如,鎖定)來實現(xiàn)。
設(shè)計一個并發(fā)的內(nèi)核。 策略不僅必須正確地行為,而且還必須與它們保護的功能相匹配。
2.3 MAC框架的架構(gòu)
如下圖所示,MAC框架是一個薄層,將內(nèi)核服務、策略和安全感知應用程序鏈接起來。控制從內(nèi)核消費者通過大約250個入口點(對象類型x方法)傳遞到框架和策略:
圖片
- 內(nèi)核服務入口點允許子系統(tǒng)(例如VFS)在相關(guān)事件和訪問控制中使用引用監(jiān)視器框架。
- 策略入口點連接框架和策略,添加相對于相應內(nèi)核服務入口點的顯式標簽參數(shù)。它們由策略生命周期事件和庫函數(shù)補充。策略只需要實現(xiàn)它們需要的入口點。
- 應用程序使用標簽管理API管理標簽(例如進程和文件)。
- DTrace探針允許對入口點進行跟蹤和分析。
總體而言,這些接口允許策略以可維護的方式增強內(nèi)核訪問控制。
2.3.1 入口點調(diào)用
為了理解這些層如何相互作用,可以通過內(nèi)核跟蹤單個文件寫入檢查。
下面的代碼展示了vnwrite,一個實現(xiàn)write和writev系統(tǒng)調(diào)用的VFS函數(shù)。macvnodecheckwrite內(nèi)核服務入口點通過兩個主體憑證(fp->fcred和啟動寫操作的activecred)授權(quán)對vnode(vp)進行寫入。
static int
vn_write(struct file *fp, struct uio *uio,
struct ucred *active_cred, int flags,
struct thread *td)
{
...
vn_lock(vp, lock_flags | LK_RETRY);
...
#ifdef MAC
error = mac_vnode_check_write(active_cred,
fp->f_cred, vp);
if (error == 0)
#endif
error = VOP_WRITE(vp, uio, ioflag,
fp->f_cred);
...
VOP_UNLOCK(vp, 0);
...
return (error);
}
策略可以實現(xiàn) 能力語義或撤銷語義。
vnode鎖(vp->v_lock)在檢查和使用期間保持,保護標簽狀態(tài),并防止從檢查到使用的時間競爭條件。
從入口點中排除的參數(shù)與包含的參數(shù)一樣重要。例如,vn_write的數(shù)據(jù)指針(uio)被省略,因為這些數(shù)據(jù)位于用戶內(nèi)存中,不能在與寫入相關(guān)的競爭條件下無風險地訪問。框架中的類似設(shè)計選擇阻止了不安全的行為,這些行為不能通過內(nèi)核同步模型安全地表示。
在可能的情況下,最好從內(nèi)核子系統(tǒng)實現(xiàn)標記對象的角度出發(fā),并且可以通過對方法調(diào)用進行控制來執(zhí)行策略。這種方法與內(nèi)核的面向?qū)ο蠼Y(jié)構(gòu)自然契合,一旦確定了對象,放置入口點就需要小心:KPI粒度越細,策略就可以越容易表達,這是以策略復雜度為代價。調(diào)用入口點越少,驗證就越容易;然而,太少會導致保護不足。入口點設(shè)計還必須平衡將檢查放置得足夠深,以允許了解對象類型,同時最小化特定抽象級別的執(zhí)行點。
2.3.2 內(nèi)核對象標記
許多訪問控制策略為了支持訪問控制決策(例如完整性或保密級別)而標記主體和對象。MAC框架為內(nèi)核對象提供了與策略無關(guān)的標記工具、標記管理系統(tǒng)調(diào)用以及文件標記的持久化存儲。策略控制標記語義,不僅存儲字節(jié),還包括內(nèi)存模型。例如,策略可能存儲每個實例、引用計數(shù)或全局數(shù)據(jù)。
圖片
該框架使用 struct label 來表示標記存儲,對于內(nèi)核服務和策略來說是不透明的。在這個例子中,Biba將 低 完整性賦予新創(chuàng)建的套接字,從一個 低
3. 那些基于MAC框架的產(chǎn)品
下表描述了FreeBSD衍生的商業(yè)或開源產(chǎn)品中的策略。有許多因素促成了這一轉(zhuǎn)變的成功:
- 新訪問控制的需求迫在眉睫。經(jīng)典的Unix模型無法滿足ISP、防火墻和智能手機的需求。同時,攻擊威脅隨著普遍網(wǎng)絡化和強大的利益激勵而普遍存在。
- 框架的結(jié)構(gòu)論證是正確的。訪問控制的可擴展性是支持安全本地化的首選方式,適應各種需求。
- 沒有一個策略模型成為主導。因此,必須支持許多模型。
- 硬件性能提高增加了對安全開銷的容忍度。即使在消費品和嵌入式設(shè)備中也是如此。
- 開源技術(shù)轉(zhuǎn)型奏效。FreeBSD不僅提供了一個協(xié)作研究和開發(fā)的論壇,而且還提供了通往商業(yè)產(chǎn)品的渠道。
該框架自2003年以來得到了多個公司的貢獻,得到了長足的發(fā)展。
3.1 FREEBSD
FreeBSD是一個開源操作系統(tǒng),用于構(gòu)建在線服務、設(shè)備和嵌入式設(shè)備。FreeBSD或其組件可在數(shù)據(jù)中心、集成產(chǎn)品和嵌入式/移動設(shè)備(Juniper交換機和Apple iPhone)中找到。其起源可以追溯到20世紀70年代和80年代開發(fā)的伯克利軟件發(fā)行版(BSD)。BSD起源于許多中心化的Unix技術(shù),包括快速文件系統(tǒng)(FFS)和伯克利TCP/IP堆棧和套接字API。BSD許可證及其變體(MIT、CMU、ISC、Apache)通過允許無限制的商業(yè)使用來鼓勵技術(shù)轉(zhuǎn)換。FreeBSD的多樣化消費者是本地化安全的完美目標。
MAC框架是一個復雜的軟件,雖然框架本身只有8500行代碼,參考策略也只有15000行,但它與一個幾百萬行的內(nèi)核集成在一起。投入生產(chǎn)依賴于多個因素,包括對協(xié)調(diào)的信任增強以及針對設(shè)計、兼容性和性能的社區(qū)反饋。該框架作為FreeBSD 5.0中首次發(fā)布,被標記為“實驗性”,具有幾個含義:
- 啟用它需要重新編譯內(nèi)核。
- 文檔將其標記為潛在的不完整、不穩(wěn)定或不安全的,因此不受支持。
- 編程和二進制接口(API、KPI、ABI和KBI)穩(wěn)定性被放棄,允許不經(jīng)正式棄用而進行更改。
合并該框架對于獲得能夠幫助驗證和改進方法的用戶至關(guān)重要,同時保留了進行更改的靈活性。在框架在生產(chǎn)就緒之前,需要解決兩個問題:
- 必須更好地了解內(nèi)核、策略和其他模塊的二進制兼容性影響。
- 必須根據(jù)社區(qū)審查對性能進行分析和優(yōu)化。
3.1.1 性能指標和關(guān)鍵業(yè)務指標的彈性
FreeBSD規(guī)定,針對某個版本編譯的某些內(nèi)核模塊必須與同一系列后續(xù)的次要版本一起工作。目標是避免破壞消費者子系統(tǒng)的內(nèi)核二進制接口,并為策略模塊提供類似的二進制兼容性。子系統(tǒng)和策略的標簽存儲不透明性是改進的主要領(lǐng)域,這避免了將內(nèi)核數(shù)據(jù)結(jié)構(gòu)中的細節(jié)編碼到策略中,如果它們僅需要標簽訪問,則提供了靈活性來更改標簽。
3.1.2 性能優(yōu)化
許多FreeBSD部署非常敏感于性能,需要最小的開銷,特別是如果禁用了該框架的話。由于站點根據(jù)本地安全性能權(quán)衡選擇策略,因此,希望策略只產(chǎn)生他們實際使用功能的性能懲罰。然而,在FreeBSD 5.0中,衡量結(jié)果是可測量的,這是默認啟用框架的障礙。
3.1.3 標簽分配權(quán)衡
即使從框架中編譯出來,添加標簽到內(nèi)核數(shù)據(jù)結(jié)構(gòu)(特別是數(shù)據(jù)包mbufs)的膨脹也會導致顯著的分配時間成本。在FreeBSD 5.1中,內(nèi)聯(lián)的mbuf標簽被替換為指針,這減少了非MAC內(nèi)核的成本,但增加了MAC啟用內(nèi)核的分配和間接成本。
標簽分配在啟用框架時更加可測,并且對于未標記的策略是不必要的。這種影響在網(wǎng)絡數(shù)據(jù)包中最為明顯,并在FreeBSD 5.1中引入了每個策略標志來請求數(shù)據(jù)包標簽。在8.0中,這種方法被一般化,以便僅為至少一個加載的策略定義了初始化入口點的對象類型分配標簽。這有效地消除了不需要策略時的標記成本,恢復了性能比例,并滿足了一般情況。然而,使用數(shù)據(jù)包標記的一個商業(yè)產(chǎn)品McAfee Sidewinder Firewall看到足夠的開銷來繞過標記抽象,而采用了直接結(jié)構(gòu)修改的方法。
3.1.4 最小化同步開銷
已編譯的框架中,入口點調(diào)用時受鎖保護的引用計數(shù)操作對于頻繁操作(如每個數(shù)據(jù)包的交付檢查)非常容易測量。隨著多核硬件變得越來越普遍,鎖爭用也變得顯著起來。
從FreeBSD 5.2開始,策略被分為靜態(tài)和動態(tài)集,以幫助固定配置的嵌入式系統(tǒng)。前者在編譯或引導時被編譯或加載,并在此后可卸載,因此不需要同步。動態(tài)策略在引導后加載或卸載仍然需要多個鎖操作。
在FreeBSD 8.0中,同步進一步進行了優(yōu)化,以便MAC框架可以在默認內(nèi)核中運行。這項工作受益于內(nèi)核可擴展性的持續(xù)改進,特別是“讀多寫少鎖”,它不會在只讀獲取期間觸發(fā)緩存行遷移,代價是更昂貴的獨占獲取,但非常適合不經(jīng)常更改的策略列表。
3.2 MacOS和iOS
蘋果在2007年相繼發(fā)布了桌面版的Leopard版本,以及在2008年為iPhone和iPod Touch發(fā)布的iPhone OS 2版本,該版本將MAC框架作為參考監(jiān)控框架。OS X Snow Leopard帶有三種MAC策略:
- 沙箱。提供面向策略的沙箱,用于處理不可信數(shù)據(jù)的風險組件,例如網(wǎng)絡服務和視頻編解碼器。
- 隔離。對于下載的文件,支持顯示起始網(wǎng)站的用戶對話框。
- 時間機器安全。保護時間機器備份的完整性。
在OS X Mountain Lion中,通過Apple的應用商店分發(fā)的應用程序必須進行強制沙箱化。蘋果的iOS 2.0帶有兩個策略:沙箱和一個額外的策略。Apple移動文件完整性(AMFI)。與代碼簽名工具一起使用,終止數(shù)字簽名在運行時被取消驗證的應用程序;在應用程序開發(fā)期間免除調(diào)試。
這些策略共同支持系統(tǒng)完整性,并在應用程序之間提供強大的隔離,以保護數(shù)據(jù)的隱私性。OS X和iOS都與MAC框架的設(shè)計期望有很大差異,進行了重大的適應性修改。
3.2.1 XNU原型
蘋果公司在2000年開始測試OS X的beta版,一個具有開源內(nèi)核的商用桌面操作系統(tǒng)的承諾難以忽視。XNU內(nèi)核是卡內(nèi)基梅隆大學的Mach微內(nèi)核、FreeBSD 5.0、一些較新的FreeBSD元素以及蘋果公司開發(fā)的眾多特性的復雜融合。有了這些基礎(chǔ),MAC框架方法和甚至代碼是可重用的。
雖然不是微內(nèi)核,XNU采用了許多Mach的元素,包括其調(diào)度程序、進程間通信模型和VM系統(tǒng)。FreeBSD的進程模型、IPC、網(wǎng)絡堆棧和VFS被嫁接到Mach上,提供了豐富的Posix編程模型。OS X第一個版本中蘋果公司開發(fā)的內(nèi)核組件包括了I/O Kit設(shè)備驅(qū)動程序框架、網(wǎng)絡內(nèi)核擴展和HFS+文件系統(tǒng);這個列表隨著時間的推移一直在增長。從2003年到2007年,日益成熟的MAC框架被移植到了OS X上。
3.2.2 適配MacOS
MAC框架需要對FreeBSD內(nèi)核進行詳細分析,并與低級內(nèi)存管理和同步以及更高級的服務(如文件系統(tǒng)、IPC和網(wǎng)絡堆棧)緊密集成。雖然適應OS X可以大量依賴蘋果公司使用的FreeBSD組件,但需要進行根本性的變革以反映FreeBSD和XNU之間的差異。
第一步是將MAC框架與緊密對齊的BSD進程模型、文件系統(tǒng)和網(wǎng)絡堆棧集成。高層次的架構(gòu)對齊使得一些適配變得容易,但也遇到了一些差異。例如,F(xiàn)reeBSD的Unix文件系統(tǒng)認為目錄是專門的文件對象,而HFS+則認為目錄和對象屬性結(jié)構(gòu)或磁盤目錄是一級對象。這要求對框架和XNU進行更改。
接下來,覆蓋范圍擴展到包括Mach任務和IPC。每個XNU進程將Mach任務(調(diào)度、VM)與FreeBSD進程鏈接在一起,提出了一個問題:MAC框架是Mach還是BSD的一部分?雖然在架構(gòu)上有用,但XNU中的Mach-BSD邊界是人為的,引用經(jīng)常跨層,要求MAC框架同時服務于兩者。在BSD進程標簽上的標簽修改被映射到相應的Mach任務標簽上。
Mach端口是另一種微內(nèi)核與MAC框架的單內(nèi)核前提相沖突的情況。與由內(nèi)核管理名稱空間的BSD IPC對象不同,Mach端口依賴于由launchd(例如,用于桌面IPC)管理的用戶空間名稱空間。類似于內(nèi)核標簽結(jié)構(gòu)的用戶空間標簽句柄抽象用于此目的。
3.2.3 蘋果公司的采用方式
蘋果是世界上最大的桌面系統(tǒng)供應商之一,也是最早在智能手機中部署類Unix系統(tǒng)的公司之一。由于普遍的網(wǎng)絡化和惡意攻擊者的存在,同樣遇到了爆炸性的用例和新的安全要求。然而,蘋果對MAC框架的采用并不確定,因為競爭技術(shù)也被考慮在內(nèi),這些技術(shù)受到類似的觀察、未來產(chǎn)品方向、性能問題。替代方案包括基于系統(tǒng)調(diào)用插入的技術(shù),以及蘋果的Kauth3(內(nèi)核授權(quán)),這是一個針對殺毒軟件供應商的授權(quán)框架。蘋果發(fā)現(xiàn)了關(guān)于系統(tǒng)調(diào)用插入的不可靠性的爭論,并最終采用了兩種技術(shù):Kauth用于第三方殺毒軟件供應商,以及更具表現(xiàn)力和能力的MAC框架,用于其自己的沙箱技術(shù)。
沙盒策略 由于蘋果的OS X和iOS策略模塊不是開源的,因此無法考量它們的實現(xiàn),但是針對Mac OS 組件和第三方應用程序(例如Google的Chrome Web瀏覽器)使用的Sandbox策略存在著參考文檔。Sandbox允許應用程序自愿限制其對資源的訪問(例如文件系統(tǒng)、IPC名稱空間和網(wǎng)絡)。進程沙箱配置文件存儲在進程標簽中。
通過公共API或sandbox-exec助手程序可以設(shè)置字節(jié)碼編譯的策略。應用程序可以從幾個蘋果定義的策略(如下表)中選擇,或定義自定義策略。幾個應用程序使用默認策略,例如視頻編解碼器,它使用配置文件限制與主機進程的IPC。
圖片
Chrome使用的common.sb配置文件說明了關(guān)鍵的Sandbox構(gòu)造:sysctl內(nèi)核管理接口和共享內(nèi)存的粗略控制,以及文件路徑的精細正則表達式匹配?;谖募窂降目刂剖荢andbox策略的亮點,比Biba、MLS和TE中的文件標簽更好地解決了程序模型。
基于路徑的方案在VFS模型上很難實現(xiàn),雖然FreeBSD允許文件具有一個或多個名稱(硬鏈接),但HFS+為文件實現(xiàn)了父指針,并確保名稱緩存始終包含正在使用文件的明確路徑所需的信息。
雖然Sandbox與許多Mac OS服務一起使用,但許多第三方應用程序包含環(huán)境權(quán)限的強烈假設(shè),即能夠訪問系統(tǒng)中的任何對象。通過iPhone,蘋果打破了這種假設(shè):應用程序在與系統(tǒng)服務和彼此隔離的情況下執(zhí)行。這種模型現(xiàn)在出現(xiàn)在OS X中,同樣可以幫助保護設(shè)備完整性,防止應用程序的惡意行為和日益增多的最終用戶數(shù)據(jù)。
性能優(yōu)化
在FreeBSD 8.0的性能優(yōu)化之前,OS X和iOS使用的是MAC Framework,需要蘋果基于產(chǎn)品特定的限制進行自己的優(yōu)化。
與FreeBSD優(yōu)化類似,這些優(yōu)化通常關(guān)注框架入口和標簽的開銷。默認情況下,對于某些對象類型,標簽會在內(nèi)核中被編譯掉;對于其他類型,如vnodes,策略可能會有選擇地請求標簽分配,以適應MacOS策略中標簽的稀疏使用。
在FreeBSD中,框架和同步優(yōu)化依賴于愿意支付額外訪問控制擴展。在Mac OS中,假設(shè)大多數(shù)機器都使用沙箱技術(shù),但僅對高風險進程進行選擇性應用。為此,每個進程都攜帶著由策略設(shè)置的掩碼,指示哪些對象類型需要執(zhí)行。隨著沙箱技術(shù)普及,如在iOS中的情況,將應用進行了更全局的優(yōu)化。
4. 可擴展訪問控制的思考
MAC框架已成為許多本地化安全實例的基礎(chǔ),允許本地訪問控制策略與仍然流行的自主訪問控制模型進行組合。開源部署是一種成功的策略,提供了協(xié)作改進的論壇,早期采用者的訪問以及通往眾多產(chǎn)品的途徑。
行業(yè)對于用于設(shè)備和嵌入式設(shè)備的開源基礎(chǔ)采用已得到很好的滿足:
- 設(shè)備中的安全本地化已經(jīng)廣泛應用。
- 多處理的重要性只增加了。
- 安全標簽抽象已經(jīng)證明超越了它們的MAC根源。
- 關(guān)于訪問控制策略的非共識仍在繼續(xù)。
然而,MAC框架還需要改進和擴展以解決幾個未預料到的問題:
- 重新審視操作系統(tǒng)特權(quán)的結(jié)構(gòu)。
- 在將訪問控制應用于第三方應用程序時數(shù)字簽名的重要性。
- 關(guān)于基于名稱和基于標簽的訪問控制的緊張關(guān)系。
4.1新的設(shè)計原則
考慮到與MAC框架的廣泛實踐,有如下幾個新的設(shè)計原則:
- 策略的owner確定自己的性能、功能和保證權(quán)衡。策略可能不需要重量級的基礎(chǔ)設(shè)施(例如標簽),因此提供了較好的性能。
- 可追溯性是一個關(guān)鍵的設(shè)計問題。
- 編程和二進制接口的穩(wěn)定性至關(guān)重要。 API、ABI、KPI和KBI的可持續(xù)性經(jīng)常被忽視,因為原型通常是一次性的,沒有更多的支持義務。
- 控制操作系統(tǒng)特權(quán)對于增強而不是補充DAC的策略很重要。
- 應用程序作者是主要的負責人。蘋果的應用商店和Juniper的SDK都使用應用程序簽名和證書作為策略輸入。
- 應用程序本身需要靈活的訪問控制來支持應用程序隔離。
4.2 領(lǐng)域特定的策略模型
為什么在操作系統(tǒng)策略的表達方面沒有達成共識呢?顯然,策略模型的支持者認為捕捉了系統(tǒng)設(shè)計的關(guān)鍵問題。首先,策略模型旨在以根據(jù)最小特權(quán)原則的不同形式(例如信息流與系統(tǒng)特權(quán))捕捉其關(guān)鍵問題,使它們的方法互補;其次,不同的模型在多維權(quán)衡中解決了不同的領(lǐng)域問題,包括表達類型,保障,性能,管理復雜性,實現(xiàn)復雜性,兼容性和可維護性。這反映了對于領(lǐng)域特定的策略模型的共識。
4.3 可擴展性的價值
需要進行重要的設(shè)計增強嗎?這是否證實或拒絕了訪問控制可擴展性的假設(shè)?進一步與類似的框架(如VFS和設(shè)備驅(qū)動程序)進行比較似乎是合適的,兩者都經(jīng)常擴展以適應新的要求,例如分布式文件系統(tǒng)的變化或電源管理的改進。管理重要的源代碼庫的上游-下游關(guān)系是一個強有力的動機因素。MAC框架的部署似乎證實了更普遍的論點,即訪問控制可擴展性是當代操作系統(tǒng)設(shè)計的關(guān)鍵方面。
5. 小結(jié)
通過了解訪問控制可擴展性和框架設(shè)計的背景和挑戰(zhàn),進而觀察了幾個產(chǎn)品在部署安全策略中的實踐,包括 FreeBSD、Juniper 的 Junos 和 Apple 的 OS X 和 iOS。雖然訪問控制的可擴展性是這些項目的關(guān)鍵所在,但它們對框架本身也帶來了相當大的改變,最后嘗試討論了框架如何滿足每個產(chǎn)品的要求,以及操作系統(tǒng)安全的持續(xù)演進。