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























