天天看點

作業系統/虛拟化安全知識域:認證和識别以及通路控制清單

作者:老李講安全

用于隔離和中介的基元

在1960年代,Multics成為第一個從頭開始設計時考慮到安全性的主要作業系統。雖然它從未變得非常流行,但它的許多安全創新仍然可以在當今最流行的作業系統中找到。即使某些功能不是由Multics團隊直接發明的,它們內建到單個、工作、面向安全的作業系統設計中仍然是新穎的。Multics提供保護環、虛拟記憶體、基于分段的保護、支援自由通路控制(DAC)和強制通路控制(MAC).事實上,在許多方面,應軍方要求添加的Multics中的強制通路控制是Bell-LaPadula安全模型的直接軟體實作。最後,Multics確定其許多小型軟體元件被強封裝,隻能通過發生中介的已釋出接口通路。

如果這聽起來很熟悉,這并不奇怪,因為JeromeSaltzer是Multics團隊的上司者之一。可信計算機系統評估标準(TCSEC),更廣為人知的是著名的橙皮書,描述了評估計算機系統安全性的要求,并且強烈地基于Multics。毫無疑問,Multics非常先進,甚至可能領先于一些現代作業系統,但這也是它的垮台-系統變得如此之大,如此複雜,以至于至少在某些開發人員中,它可以說違反了心理可接受性原則。沮喪的KenThomson和DennisRitchie決定編寫一個新的,更簡單的作業系統。作為一個雙關語,并與Multics形成對比,他們稱之為“Unics”,後來拼寫為UNIX。與目前使用的所有主要通用作業系統一樣,它依賴于少量核心原語來隔離其不同的安全域。

那麼這些主要的隔離原因是什麼呢?首先,作業系統必須具有某種方式對使用者和安全域進行身份驗證,以便它可以決定他們是否可以通路某些資源。要隔離不同的安全域,作業系統還需要支援對對象(如檔案)的通路控制。此外,它需要記憶體保護,以確定一個安全域不能簡單地從另一個域的記憶體中讀取資料。最後,它需要一種方法來區分特權代碼和非特權代碼,以便隻有特權代碼才能在最低級别配置所需的隔離并保證所有業務的調解。

認證和識别

由于身份驗證是身份驗證,授權和責任CyBOK知識領域的主題,我們将觀察到要确定通路權限,作業系統需要對其使用者進行身份驗證,并且有很多方法可以做到這一點。傳統上,隻有使用者名和密碼用于此目的,但現在越來越多的系統使用其他方法(例如智能卡,指紋,虹膜掃描或面部)識别)——代替密碼或作為附加因素。多因素身份驗證使攻擊者更難僞裝成合法使用者,特别是如果這些因素具有不同的性質,例如,您知道的東西(如密碼)、您擁有的東西(如智能卡)和您“是”的東西(生物識别資料,如指紋)。

對于經過身份驗證的每個使用者,作業系統都會維護一個唯一的使用者ID。此外,它還可能保留有關使用者的其他資訊,例如他們所在的組(例如,學生、教職員工和/或管理者)。同樣,大多數作業系統将一些辨別附加到代表使用者運作的每個程序,并跟蹤它們使用的檔案的所有權和通路權限。例如,它為每個正在運作的程序提供一個唯一的程序ID,并注冊代表其運作的使用者的ID(以及使用者所在的組)。最後,它跟蹤哪個使用者擁有正在執行的二進制檔案。請注意,擁有二進制檔案的使用者和運作二進制檔案的使用者不必相同。例如,管理者可以建立并擁有其他使用者可執行但不能修改的系統程式集合。

順便說一下,以安全的方式存儲憑據至關重要。一些現代作業系統訴諸硬體來保護此類敏感資料。例如,他們可以使用受信任的平台子產品(TPM)來確定磁盤加密密鑰等憑據以加密方式密封,或者為憑據存儲使用單獨的VM,以便即使遭到入侵的VM将無法直接通路憑據。

通路控制清單

給定這些辨別,作業系統可以推理允許哪個使用者和哪個程序對特定對象執行哪些操作:通路控制。

當RobertDaley和PeterNeumann首次開發Multics檔案系統時,他們為系統中的每個資料塊引入了通路控制清單(ACL)。從概念上講,ACL是一個包含使用者和資料塊的表,它為每個資料塊指定哪些使用者具有哪種通路權限。大多數現代作業系統都采用了ACL的某些變體,通常用于檔案系統。讓我們看一個例子。在基于UNIX的系統上,預設的通路控制非常簡單。每個檔案都歸使用者群組所有。此外,每個使用者都可以在一個或多個組中。例如,在Linux系統上,使用者herbertb分為九個不同的組:

herbertb@nordkapp:~$ groups herbertb

herbertb : herbertb adm cdrom sudo dip plugdev lpadmin sambashare cybok

herbertb@nordkapp:~$

對于每個檔案,少量 權限位訓示 擁有使用者、擁有組和其他所有人的通路權限 。例如,讓我們 看一下Linux上一個名為myscript的檔案的ACL:

herbertb@nordkapp:~/tmp$ getfacl myscript

# file: home/herbertb/tmp/myscript

# owner: herbertb

# group: cybok

user::rwx

group::rwx

other::r-x

我們看到myscript由使用者herbertb群組cybok擁有。擁有使用者群組cybok中的所有使用者都有權read、write和ex執行檔案,而所有其他使用者可以read和ex執行(但不要寫入)。

這些基本的UNIX檔案權限非常簡單,但現代系統(如Linux和Windows)也允許更廣泛的ACL(例如,具有多個使用者或組的顯式通路權限)。每當有人嘗試讀取、寫入或通路檔案時,作業系統都會驗證ACL中是否有适當的通路權限。此外,UNIX中的通路控制政策通常是任意的,因為允許擁有使用者為其他人設定這些權限。例如,在上面的Linux系統上,使用者herbertb可以自己決定使檔案myscript可以被所有使用者寫入('chmodo+wmyscript')。

除了DAC之外,Multics還實作了MAC,雖然達到這個階段需要很長時間,但現在對于許多采用其靈感來自Multics(即當今最流行的作業系統)。Linux甚至提供了一個架構,允許通過所謂的“參考螢幕”插入各種通路控制解決方案,這些螢幕會審查每次執行安全敏感操作的嘗試,實際上存在多個MAC解決方案。最著名的可能是Security-EnhancedLinux(SELinux),這是一組Linux安全更新檔,最初由美國國家安全局(NSA)開發,源自FluxAdvanced。安全核心(FLASK)。

SELinux為使用者和程序提供了三個字元串的上下文:(使用者名、角色、域)。雖然元組已經(正确地)表明SELinux也支援RBAC,但在使用什麼和避免什麼方面存在顯着的靈活性。例如,許多已部署的系統僅對MAC使用域字元串,并将所有使用者的使用者名和角色設定為相同的值。除了程序之外,檔案、網絡端口和硬體資源等資源也具有與之關聯的SELinux上下文。根據此配置,系統管理者可以定義系統範圍的政策,以便對其系統進行通路控制。例如,他們可以簡單地定義程序必須對資源執行特定操作(讀取、寫入、執行、連接配接)的域,但政策也可能要複雜得多,具有多級安全性和嚴格執行資訊流類似于貝爾-拉帕杜拉、比巴或一些自定義通路控制模型。

SELinux等系統中的強制通路控制圍繞由中央管理者設定且不會更改的單個系統範圍政策。它們不允許不受信任的程序定義和更新自己的資訊控制政策。相比之下,石棉、HiStar和Flume等研究作業系統恰恰提供了分布式資訊流控制。換句話說,任何程序都可以建立安全标簽并對資料進行分類和解密。

來源:河南等級保護測評

繼續閱讀