安全觀察:對象和安全主體
從最基本的層面上來講,安全性中的所有事物都可歸結(jié)為主體和對象。對象是所保護(hù)的事物,而主體是可能威脅對象安全的事物。在身份驗證(核對您的身份)、授權(quán)(授予某個事物的訪問權(quán)限)以及審核(跟蹤誰訪問過什么)中使用了這兩種結(jié)構(gòu)。從本質(zhì)上來說,這些概念非常簡單(如圖 1 所示)。
圖 1 一位用戶嘗試讀取某個文件
主體是執(zhí)行操作的事物,而對象是主體對其執(zhí)行操作的事物。并且,有時主體的操作對象又是另一個主體。
在安全性方面,Windows 支持一些非常豐富的語義并且極大地擴充了主體和對象的定義。主體可能不僅僅只是用戶,其表示遠(yuǎn)比基本用戶標(biāo)識符要復(fù)雜得多。
在 Windows 中,安全主體不僅包括典型的主體(即可視為用戶),還包括組和計算機。安全主體是可向其分配一個安全標(biāo)識符 (SID) 并授予其某些訪問權(quán)限的任何事物。
在本期的安全觀察中,我將介紹如何在 Windows 中表示和使用主體。
主體/對象/操作聚合
對安全性的管理往往涉及到主體/對象/操作聚合。主體是嘗試對某個對象執(zhí)行某種操作的行動者。例如,一位用戶可能嘗試訪問某個文件,如圖 1 所示。當(dāng)用戶嘗試讀取文件時,操作系統(tǒng)需要檢查對象(文件)上是否設(shè)置了權(quán)限,允許主體(用戶)對該特定對象執(zhí)行操作(讀取)。如果存在相應(yīng)權(quán)限,則訪問請求成功。否則,將拒絕訪問請求。這聽起來非常簡單。
安全主體的類型
基于 Windows 的系統(tǒng)以及基于 Windows 的網(wǎng)絡(luò)中的主體—或者安全主體(之后我將這樣稱呼它們)—遠(yuǎn)不止是用戶。但是,用戶仍是最基本的概念。
大小寫問題 在 Windows 文獻(xiàn)中,出現(xiàn)包含大寫字母 "A" 的單詞 "Administrator" 或 "Administrators" 時,通常分別指代用戶或組。若均以小寫字母形式拼寫 ("administrator") 則指代具有管理權(quán)限的某個用戶帳戶或人員。其他實體也適用這一原則,如 "Guest" 和 "guest"。 |
用戶 用戶是登錄計算機的某個獨立實體。從根本上來說,所有安全主體都與用戶至少有點相關(guān)。Windows 中可能存在以下兩類用戶:本地用戶和域用戶。本地用戶是在計算機的本地安全帳戶管理器 (SAM) 數(shù)據(jù)庫中定義的。每個基于 Windows 的計算機都有本地 SAM,它包含了該計算機上的所有用戶。
人們通常認(rèn)為域控制器 (DC) 沒有本地 SAM,因而沒有本地用戶。然而,這種觀點是錯誤的。即使是 DC 也有本地 SAM,只是其 SAM 中的帳戶只能在目錄服務(wù)還原模式下使用。#p#
本地 SAM 始終至少包含以下兩個用戶帳戶:Administrator 帳戶和 Guest 帳戶,并且 Guest 帳戶始終默認(rèn)處于禁用狀態(tài)。
在所有版本的 Windows Server 2008(除了 Windows Small Business Server 2008)中,默認(rèn)啟用 Administrator 帳戶并且在首次登錄計算機時必須使用此帳戶。在 Windows Vista 中,默認(rèn)禁用 Administrator 帳戶并且只能在非常嚴(yán)格的環(huán)境中使用它。
在這兩種情況下,均應(yīng)為即將管理指定計算機的每個人至少創(chuàng)建兩個帳戶。如果受到各種規(guī)章制度的約束(并且您可能就是此類人員),則這是必要條件。對于每位用戶,一個帳戶應(yīng)為用戶自己的個人管理帳戶。另一帳戶是用戶執(zhí)行非管理任務(wù)時使用的個人非管理帳戶。
并非本地用戶的用戶為域用戶 這些用戶在域的 DC 上定義。本地帳戶和域帳戶之間的區(qū)別主要在于帳戶范圍的不同。域帳戶可在域中的任意計算機上使用,而本地帳戶僅在定義它的計算機上有效。并且,與本地帳戶相比,域帳戶擁有大量與其相關(guān)的屬性(請參見圖 2 和圖 3 進(jìn)行比較)。
圖 2 本地帳戶的屬性窗口
圖 3 域帳戶的屬性窗口
域帳戶擁有更為豐富的一組語義,包括組織環(huán)境中的各種屬性:如電話號碼、管理關(guān)系以及電子郵件帳戶。域帳戶在網(wǎng)絡(luò)中的作用更大,因為可在整個網(wǎng)絡(luò)的計算機上使用它們并向其分配權(quán)限。此外,在域中定義帳戶簡化了管理過程,因為現(xiàn)在只在一個地方維護(hù)帳戶即可。#p#
計算機 計算機就是另一種類型的用戶。在 Active Directory 中,這一特點尤為鮮明,且經(jīng)過了繼承模型的證實。計算機承襲的繼承結(jié)構(gòu)如圖 4 所示。
圖 4 Active Directory 中顯示用戶和計算機關(guān)系的繼承層次結(jié)構(gòu)
圖 4 中展示了多個非常有趣的地方。首先,如您所見,Active Directory 中的所有類均派生自根類 Top。實際上,即使是 Top 也被視為 Top 的子類。其次,User 類由 organizationalPerson 類派生而來。再次(也是最有趣的地方),Computer 類由 User 類派生而來。換句話說,在面向?qū)ο蟮沫h(huán)境中,Computer 是一種用戶類型。以這種方式人性化計算機實際非常有意義,因為計算機也需被視為主體并與人擁有幾乎完全相同的屬性。
組 您應(yīng)該還記得,主體是嘗試訪問某個對象的事物。操作系統(tǒng)通過檢查對象的權(quán)限來確認(rèn)這一訪問嘗試。很早之前,操作系統(tǒng)設(shè)計者就意識到將每個對象的權(quán)限分配給需要它的每位用戶非常困難。為解決這一問題,設(shè)計者允許用戶成為組成員。這樣,除了用戶外,還可將權(quán)限分配給組。
組可能并非用戶,但組仍是一種安全主體,因為就像用戶和計算機一樣,它可以擁有標(biāo)識符。在 Windows 中,用戶可以是多個組的成員,并且對象可將權(quán)限分配給多個組。組還可以嵌套,只是存在一些限制。
非域控制器只有以下兩種類型的組:內(nèi)置組和管理員定義的本地組。但在 Active Directory 中有以下六種不同的安全組:內(nèi)置域本地組、內(nèi)置全局組、內(nèi)置通用組、用戶定義的域本地組、用戶定義的全局組以及用戶定義的通用組。
對于域本地組,只能將其定義域中資源的權(quán)限分配給它們。但是,它們可包含任意受信域或林的用戶、通用和全局組以及自身域中的域本地組。
全局組只能包含在其定義域中的用戶和全局組;但是,可將此域所在的林或任意信任林中任意域內(nèi)的資源的權(quán)限分配給它。
通用組可包含任意域的用戶、通用組和全局組。對于通用組,可將任意信任域或林中的資源的權(quán)限分配給它。換句話說,通用組是域本地組和全局組之間的一種混合體。
盡管默認(rèn)情況下工作站僅帶有兩個組—Administrators 和 Guests—域卻帶有所有這三種類型的組,并且數(shù)量相當(dāng)多。圖 5 顯示了域中的默認(rèn)組。所有組均被指定為安全組,即意味著可向其分配權(quán)限。(不要將安全組與 Microsoft Exchange Server 用于在電子郵件列表中分組用戶的通訊組相混淆。兩者均是在 Active Directory 中定義的。)所有基于 Windows 的計算機上存在的本地組都是在 DC 上的 Active Directory 中進(jìn)行定義的。#p#
圖 5 在 Active Directory 的 Users 容器中定義的默認(rèn)組
與 DC 一樣,一些非 DC 也有很多組。圖 6 顯示了測試計算機上的 16 個內(nèi)置組。任意指定計算機上組的具體數(shù)目各不相同,具體取決于已在該計算機上安裝的角色。
圖 6 某個非 DC 上的內(nèi)置組(單擊圖像可查看大圖)
如果打算分配某個對象的權(quán)限,您還會發(fā)現(xiàn)更多的組,比我目前為止所展示的要多。實際上,一個基本的 DC 上存在著 63 余個組和內(nèi)置安全主體,如圖 7 所示。#p#
在圖 7 中所顯示的 63 個組中,大部分都是代表動態(tài)安全主體組的抽象概念(有時也稱為“特殊身份”)。有時,它們也被稱為登錄組。
登錄組 登錄組是代表安全主體的某個動態(tài)內(nèi)容(如用戶或其他安全主體的登錄方式)的組。例如,圖 7 中所示的 INTERACTIVE 組包括通過終端服務(wù)登錄計算機控制臺的所有用戶。相比之下,NETWORK 組包括通過網(wǎng)絡(luò)登錄的所有用戶。根據(jù)定義,一位用戶一次只能是其中一個此類組的成員,并且組中的成員是在登錄時才指定的。可使用此類組向以某種特定方式登錄的所有用戶授權(quán),但卻無法控制誰將成為此類組的成員。
圖 7 一個基本的 DC 擁有 63 余個組和內(nèi)置安全主體
其他一些組也具有此項本性。特別需要注意的是 Everyone 組和 Authenticated Users 組。顧名思義,Everyone 組包括訪問該計算機的每位用戶,但是,從 Windows XP 起,其中不再包括完全匿名且未經(jīng)身份驗證的用戶。換句話說,在任意受支持的基于 Windows 的操作系統(tǒng)上,聲名狼藉的 NULL 用戶并不包括在 Everyone 組中。但 Guests 卻包括在內(nèi)。
Authenticated Users 組也是動態(tài)填充的,它僅包括那些經(jīng)過實際身份驗證的用戶。因此,Guests 并不包括在 Authenticated Users 中。這就是這兩個組之間的唯一不同之處。但由于操作系統(tǒng)上唯一的來賓帳戶處于禁用狀態(tài),Authenticated Users 與 Everyone 之間并不存在功能差異;除非可能由于希望 Guests 可以訪問資源并因此需要 Everyone 組完整無缺時,手動啟用了 Guests 帳戶。
盡管如此,還是有許多管理員由于“世界上的每個人都有權(quán)訪問我的服務(wù)器”這一事實而花費了大量時間,并且采取了非常極端的措施來修改權(quán)限以期矯正這一情形。這些修改通常會帶來徹底的災(zāi)難。無論如何,沒有理由嘗試用 Authenticated Users 的權(quán)限替換 Everyone 的權(quán)限。如果希望來賓有權(quán)訪問您的計算機,可啟用 Guest 帳戶;否則,需保持該帳戶的禁用狀態(tài)。如果確實希望來賓擁有訪問權(quán)限,可使用 Everyone 權(quán)限。否則,Everyone 組與 Authenticated Users 組沒有任何區(qū)別。
有些人認(rèn)為執(zhí)行此類更改是“深層防御”更改。如果將“深層防御”定義為“無法以任何其他方式證明的更改”,則的確如此。實際情況是此類修改在安全方面的改進(jìn)極少甚至毫無改進(jìn),而是會帶來極大的風(fēng)險。最好讓默認(rèn)值保持原樣。#p#
如果以上論述的說服力不夠,請參閱 Microsoft 知識庫文章 885409(“安全配置指南支持”)。簡而言之,它聲明大規(guī)模的權(quán)限替換可能致使支持合同無效。執(zhí)行此操作時,您基本上構(gòu)建了自己的操作系統(tǒng),而 Microsoft 無法再保證其可以正常運行。
內(nèi)置 Users 組與 Authenticated Users 之間的區(qū)別也有必要專門加以指出。這一區(qū)別之處非常明顯:Authenticated Users 包含通過身份驗證可以訪問計算機的每位個用戶,包括位于不同域的用戶、Users 組以外的本地組的成員用戶以及不是任何組成員的用戶(是的,此類情況完全可能出現(xiàn))。這意味著 Users 組的限制遠(yuǎn)比 Authenticated Users 嚴(yán)格。
盡管如此,我仍看到過有的組織因為想要“強化自身的系統(tǒng)”而嘗試將 Users 的權(quán)限替換成 Authenticated Users 的權(quán)限,導(dǎo)致破壞了整個網(wǎng)絡(luò)。我一直在與昏庸的 PCI/DSS 審核者進(jìn)行爭論,他們宣稱支付卡行業(yè)要求把所有 Users 權(quán)限替換成 Authenticated Users 權(quán)限。這種做法毫無可取之用。
我也支持世界各地的組織抵制那些將整體替換訪問控制列表 (ACL) 視為贏取寶貴時間的最有效方法的顧問。毫無疑問,任何將 Users 或 Everyone 整體替換成 Authenticated Users 的嘗試都會極大地?fù)p害安全性和穩(wěn)定性。
服務(wù)
Windows Vista 和 Windows Server 2008 都支持一種新的安全主體類型:服務(wù)。為了解這些實體有多大價值,以目前對基于主機的防火墻的討論為例。銷售產(chǎn)品的供應(yīng)商大力為許多人灌輸了一種觀點:即推崇基于主機的防火墻必須過濾出站流量,因為這樣可防止網(wǎng)絡(luò)的其余部分受到問題計算機的影響。更多客觀的人們指出:如果某臺計算機已遭到破壞,惡意軟件已進(jìn)入該計算機,因此惡意軟件有能力完全繞開或禁用基于主機的防火墻。
要了解出現(xiàn)此類情況的原因,以作為相同安全主體運行的兩個服務(wù)為例。允許服務(wù) A 通過防火墻實現(xiàn)通信,但不允許服務(wù) B 這樣做。如果服務(wù) B 遭到了破壞,攻擊者只需通過接管以該安全主體身份運行的另一進(jìn)程(如服務(wù) A)就可繞開該限制,并改為通過該進(jìn)程進(jìn)行通信。
為解決這一問題,Microsoft 需要利用某種方法以將權(quán)限應(yīng)用于進(jìn)程,或者更具體地說是服務(wù)。為此,服務(wù)變成了其自身權(quán)限的安全主體。這使得每個服務(wù)現(xiàn)在都擁有應(yīng)用權(quán)限所用的標(biāo)識符??赏ㄟ^在命令行運行 "sc showsid" 命令來查看任意服務(wù)的服務(wù) SID。
通過使用服務(wù) SID,可限制特定進(jìn)程對資源的訪問,而非僅限制特定用戶的訪問。在某些情況下,這一變化使得基于主機的防火墻出站過濾非常有意義。此類情況的具體性質(zhì)超出了本文的討論范圍,但如果有興趣了解更多此方面的內(nèi)容,建議閱讀我在 2008 年 6 月刊的《TechNet 雜志》中撰寫的有關(guān) Windows Vista 防火墻的文章(請參閱“管理 Windows Vista 防火墻”)。
結(jié)束語
安全主體是眾多 Windows 安全性的基礎(chǔ),因此所有的管理員都有必要至少基本了解各種安全主體的工作原理以及它們的使用方法。只有理解這些主題后,您才能有效地創(chuàng)建可充分利用這些安全主體的安全策略。有時,某些對安全主體一無所知的人希望您做出不必要且錯誤的更改,而那些更改可能危及網(wǎng)絡(luò)的正常運行,在駁斥這些觀點時,這一知識將非常有用。
本專欄系根據(jù)我的《Windows Server 2008 安全資源工具包》(Microsoft Press) 一書中的材料撰寫而成。