Linux? 一直被認(rèn)為是最安全的操作系統(tǒng)之一,但是通過(guò)引入安全增強(qiáng) Linux(Security-Enhanced Linux,SELinux),National Security Agency (NSA) 將 Linux 的安全性提升到了新的高度。SELinux 通過(guò)對(duì)內(nèi)核和用戶
空間進(jìn)行修改,對(duì)現(xiàn)有的 GNU/Linux 操作系統(tǒng)進(jìn)行了擴(kuò)展,從而使其變得堅(jiān)不可摧。如果您現(xiàn)在正在使用 2.6 版的內(nèi)核,就會(huì)驚奇地發(fā)現(xiàn)您已經(jīng)在使用 SELinux 了!本文將探究 SELinux 背后的思想及其實(shí)現(xiàn)方法.
公共網(wǎng)絡(luò)(比如 Internet)充滿著危險(xiǎn)。只要將電腦連接到 Internet(即使只連接很短的時(shí)間),您就會(huì)感受到這一點(diǎn)。攻擊者可以利用不安全性來(lái)獲得對(duì)一個(gè)系統(tǒng)的訪問(wèn),獲得對(duì)信息的未授權(quán)訪問(wèn),或者對(duì)一臺(tái)計(jì)算機(jī)進(jìn)行改造,以利用它發(fā)送垃圾郵件或攻擊其他高端系統(tǒng)(使用 SYN 泛洪攻擊,一種分布式拒絕服務(wù)攻擊)。
分布式拒絕服務(wù)攻擊(DDoS)通過(guò) Internet 上的多個(gè)系統(tǒng)來(lái)實(shí)現(xiàn)(所以也稱為僵尸電腦),這些系統(tǒng)消耗目標(biāo)系統(tǒng)上的資源,(利用 TCP 的三向握手)使其不能被合法的用戶訪問(wèn)。一種帶有 cookie 的四向握手協(xié)議(Stream Control Transmission Protocol [SCTP])可以防御這種攻擊,更多信息請(qǐng)參見(jiàn) 參考資料 一節(jié)。
SELinux 是一個(gè)面向政府和行業(yè)的產(chǎn)品,由 NSA、Network Associates、Tresys 以及其他組織設(shè)計(jì)和開(kāi)發(fā)。盡管 NSA 將其作為一個(gè)補(bǔ)丁集引入,但從 2.6 版開(kāi)始,它就被加入到 Linux 內(nèi)核中。
GNU/Linux 非常安全,但它也非常動(dòng)態(tài):所做的更改會(huì)為操作系統(tǒng)帶來(lái)新的漏洞,這些漏洞可能被攻擊者利用,盡管人們都非常關(guān)心阻止未授權(quán)訪問(wèn),但是發(fā)生入侵后會(huì)發(fā)生什么呢?
本文將探究 SELinux 背后的思想及其基本架構(gòu)。關(guān)于 SELinux 的完整描述涉及一整本書(shū)的內(nèi)容(參見(jiàn) 參考資料 一節(jié)),所以本文只關(guān)注其基本原理,使您了解 SELinux 的重要性及其實(shí)現(xiàn)過(guò)程。
大多數(shù)操作系統(tǒng)使用訪問(wèn)控制來(lái)判斷一個(gè)實(shí)體(用戶或程序)是否能夠訪問(wèn)給定資源?;?UNIX? 的系統(tǒng)使用一種自主訪問(wèn)控制(discretionary access control,DAC)的形式。此方法通常根據(jù)對(duì)象所屬的分組來(lái)限制對(duì)對(duì)象的訪問(wèn)。例如,GNU/Linux 中的文件有一個(gè)所有者、一個(gè)分組和一個(gè)權(quán)限集。權(quán)限定義誰(shuí)可以訪問(wèn)給定文件、誰(shuí)可以讀取它、誰(shuí)可以向其寫(xiě)入,以及誰(shuí)可以執(zhí)行它。這些權(quán)限被劃分到三個(gè)用戶集中,分別表示用戶(文件所有者)、分組(一個(gè)用戶組的所有成員)和其他(既不是文件所有者,又不是該分組的成員的所有用戶)。
很多這樣的訪問(wèn)控制都會(huì)帶來(lái)一個(gè)問(wèn)題,因?yàn)樗玫某绦蚰軌蚶^承用戶的訪問(wèn)控制。這樣,該程序就可以在用戶的訪問(wèn)層進(jìn)行操作。與通過(guò)這種方式定義約束相比,使用最小特權(quán)原則 更安全:程序只能執(zhí)行完成任務(wù)所需的操作。例如,如果一個(gè)程序用于響應(yīng) socket 請(qǐng)求,但不需要訪問(wèn)文件系統(tǒng),那么該程序應(yīng)該能夠監(jiān)聽(tīng)給定的 socket,但是不能訪問(wèn)文件系統(tǒng)。通過(guò)這種方式,如果該程序被攻擊者利用,其訪問(wèn)權(quán)限顯然是最小的。這種控制類型稱為強(qiáng)制訪問(wèn)控制(MAC)。
另一種控制訪問(wèn)的方法是基于角色的訪問(wèn)控制(RBAC)。在 RBAC 中,權(quán)限是根據(jù)安全系統(tǒng)所授予的角色來(lái)提供的。角色的概念與傳統(tǒng)的分組概念不同,因?yàn)橐粋€(gè)分組代表一個(gè)或多個(gè)用戶。一個(gè)角色可以代表多個(gè)用戶,但它也代表一個(gè)用戶集可以執(zhí)行的權(quán)限。
SELinux 將 MAC 和 RBAC 都添加到了 GNU/Linux 操作系統(tǒng)中。下一節(jié)將探討 SELinux 實(shí)現(xiàn),以及如何將安全增強(qiáng)透明地添加到 Linux 內(nèi)核中。
在早期的 SELinux 中,它還是一個(gè)補(bǔ)丁集,它提供了自己的安全性框架。這存在著一些問(wèn)題,因?yàn)樗鼘?GNU/Linux 限制到一個(gè)單獨(dú)的訪問(wèn)控制架構(gòu)。Linux 內(nèi)核繼承了一種通用框架,將策略從實(shí)現(xiàn)中分離了出來(lái),而不是采用單一的方法。該解決方案就是 Linux 安全模塊(Linux Security Module,LSM)框架。LSM 提供了一種通用的安全框架,允許將安全模型實(shí)現(xiàn)為可載入內(nèi)核模塊(參見(jiàn)圖 1)。
「轉(zhuǎn)」安全增強(qiáng) Linux (SELinux) 剖析
圖 1. SELinux 將安全策略和實(shí)施分離
在訪問(wèn)內(nèi)部對(duì)象之前對(duì)內(nèi)核代碼進(jìn)行修改,以調(diào)用一個(gè)代表實(shí)施函數(shù)的鉤子,該實(shí)施函數(shù)實(shí)現(xiàn)安全策略。該函數(shù)根據(jù)預(yù)定義的策略驗(yàn)證操作能否繼續(xù)進(jìn)行。安全函數(shù)存儲(chǔ)在一個(gè)安全操作結(jié)構(gòu)中,該結(jié)構(gòu)包含必須受到保護(hù)的基本操作。例如,security_socket_create 鉤子(security_ops->socket_create)在創(chuàng)建新 socket 之前檢查權(quán)限,并考慮協(xié)議集、類型、協(xié)議,以及 socket 是在內(nèi)核中創(chuàng)建還是在用戶
空間中創(chuàng)建。清單 1 提供了 socket.c 中用于創(chuàng)建 socket 的示例代碼(參見(jiàn) ./linux/net/socket.c)。
清單 1. 創(chuàng)建 socket 的內(nèi)核代碼
「轉(zhuǎn)」安全增強(qiáng) Linux (SELinux) 剖析
security_socket_create 函數(shù)在 ./linux/include/linux/security.h 中定義。它提供了從 security_socket_create 到 security_ops 結(jié)構(gòu)中動(dòng)態(tài)安裝的函數(shù)的間接調(diào)用(參見(jiàn)清單 2)。
清單 2. 用于 socket 創(chuàng)建檢查的間接調(diào)用
security_ops 結(jié)構(gòu)中的函數(shù)通過(guò)安全模塊安裝。在本例中,這些鉤子在可載入的 SELinux 內(nèi)核模塊中定義。每個(gè) SELinux 調(diào)用在 hooks 文件內(nèi)部定義,該文件實(shí)現(xiàn)從內(nèi)核函數(shù)到特定安全模塊的動(dòng)態(tài)調(diào)用的間接性(參見(jiàn)清單 3 中的 .../linux/security/selinux/hooks.c 代碼)。
清單 3. SELinux socket 創(chuàng)建檢查
「轉(zhuǎn)」安全增強(qiáng) Linux (SELinux) 剖析
清單 3 的核心部分是一個(gè)調(diào)用,用于驗(yàn)證當(dāng)前操作是否是當(dāng)前任務(wù)(通過(guò) current->security 定義,其中 current 代表當(dāng)前正在執(zhí)行的任務(wù))所允許的。訪問(wèn)向量緩存(Access Vector Cache,AVC)緩存了之前的 SELinux 決策(提高進(jìn)程的性能)。此調(diào)用包括源安全標(biāo)識(shí)符(sid)、安全類(根據(jù)請(qǐng)求操作的詳細(xì)信息構(gòu)造)、特定 socket 調(diào)用,以及可選的輔助審計(jì)數(shù)據(jù)。如果未在緩存中找到?jīng)Q策,那么會(huì)調(diào)用安全服務(wù)器來(lái)獲取決策(此過(guò)程如圖 2 所示)。
「轉(zhuǎn)」安全增強(qiáng) Linux (SELinux) 剖析
圖 2. 分層 Linux 安全進(jìn)程
初始化到 security_ops 中的回調(diào)鉤子被動(dòng)態(tài)定義為一個(gè)可載入內(nèi)核模塊(通過(guò) register_security()),但是在沒(méi)有載入安全模塊時(shí),這些鉤子包含偽樁(dummy stub)函數(shù)(參見(jiàn) ./linux/security/dummy.c)。這些樁函數(shù)實(shí)現(xiàn)標(biāo)準(zhǔn) Linux DAC 策略。始終存在回調(diào)鉤子,其中必須提供對(duì)象中介(mediation)來(lái)保證安全性。這包括任務(wù)管理(創(chuàng)建、通知、等待)、程序載入(execve)、文件系統(tǒng)管理(超級(jí)塊、inode、文件鉤子)、IPC(消息隊(duì)列、共享內(nèi)存、信號(hào)量(semaphore)操作)、模塊鉤子(插入和刪除)、網(wǎng)絡(luò)鉤子(覆蓋 socket、netlink、網(wǎng)絡(luò)設(shè)備和其他協(xié)議接口)。更多信息請(qǐng)參見(jiàn) 參考資料 小節(jié)或回顧 security.h 文件。
本文不打算討論 SELinux 策略的管理,但您可以在 參考資料 小節(jié)找到關(guān)于 SELinux 配置的更多信息。
SELinux 是目前最全面的安全框架之一,但它不是惟一的。本節(jié)回顧其他一些可用的方法。
AppArmor
AppArmor 最初由 Immunix 開(kāi)發(fā),隨后由 Novell 維護(hù),它是 SELinux 的替代方法,也使用了 Linux 安全模塊(LSM)框架。由于 SELinux 和 AppArmor 使用了同樣的框架,所以它們可以互換。AppArmor 的開(kāi)發(fā)初衷是因?yàn)槿藗冋J(rèn)為 SELinux 太過(guò)復(fù)雜,不適合普通用戶管理。AppArmor 包含一個(gè)完全可配置的 MAC 模型和一個(gè)學(xué)習(xí)模式,在學(xué)習(xí)模式中,程序的典型行為可以轉(zhuǎn)換為一個(gè)配置文件。
SELinux 的一個(gè)問(wèn)題在于,它需要一個(gè)支持?jǐn)U展屬性的文件系統(tǒng);而 AppArmor 對(duì)文件系統(tǒng)沒(méi)有任何要求。您可以在 SUSE、OpenSUSE,以及 Ubuntu 的 Gutsy Gibbon 中找到 AppArmor。
Solaris 10(是受信任的 Solaris)
Solaris 10 操作系統(tǒng)通過(guò)其增強(qiáng)了安全性的 Trusted Extensions 組件提供了強(qiáng)制訪問(wèn)控制。該功能適用于 MAC 和 RBAC。Solaris 通過(guò)向所有對(duì)象添加敏感性標(biāo)簽實(shí)現(xiàn)了這一點(diǎn),使您能夠控制設(shè)備、文件、連網(wǎng)訪問(wèn),甚至窗口管理服務(wù)。Solaris 10 中的 RBAC 的優(yōu)點(diǎn)在于,它通過(guò)提供對(duì)管理任務(wù)(可在以后進(jìn)行分配)的細(xì)粒度控制最小化了對(duì)根訪問(wèn)的需求。
TrustedBSD
TrustedBSD 是一個(gè)正在進(jìn)行中的項(xiàng)目,主要開(kāi)發(fā)可靠的操作系統(tǒng)擴(kuò)展,這些擴(kuò)展最終會(huì)加入 FreeBSD 操作系統(tǒng)。它包括構(gòu)建在 Flux Advanced Security Kernel (Flask) 安全架構(gòu)之上的強(qiáng)制訪問(wèn)控制,后者包括以插件模塊形式提供的類型強(qiáng)制和多級(jí)安全(MLS)。TrustedBSD 還合并了來(lái)自 Apple Darwin 操作系統(tǒng)的開(kāi)源 Basic Security Module (BSM) 審計(jì)實(shí)現(xiàn)(BSM 最初由 Sun 引入)。BSM 是一個(gè)審計(jì) API 和文件格式,它支持普通的審計(jì)跟蹤處理。TrustedBSD 還構(gòu)成了供 Security Ennetlink、網(wǎng)絡(luò)設(shè)備和其他協(xié)議接口)。更多信息請(qǐng)hanced Darwin (SEDarwin) 使用的框架。
操作系統(tǒng)虛擬化
增強(qiáng)操作系統(tǒng)內(nèi)部安全性的最后一個(gè)選擇是操作系統(tǒng)虛擬化(也稱為虛擬專用服務(wù)器(virtual private servers))。一個(gè)操作系統(tǒng)擁有多個(gè)獨(dú)立的用戶
空間實(shí)例,可以實(shí)現(xiàn)功能分離。操作系統(tǒng)虛擬化對(duì)在獨(dú)立用戶
空間內(nèi)部運(yùn)行的應(yīng)用程序功能進(jìn)行了限制。例如,一個(gè)用戶
空間實(shí)例也許不能修改內(nèi)核(載入或移除內(nèi)核模塊),也不能掛載或卸載文件系統(tǒng)。并且不允許修改內(nèi)核參數(shù)(例如,通過(guò) proc 文件系統(tǒng))。任何修改其他用戶實(shí)例環(huán)境的操作都是不允許的。
許多操作系統(tǒng)都能實(shí)現(xiàn)操作系統(tǒng)虛擬化。GNU/Linux 支持 VServer、Parallels Viruozzo Container 和 OpenVZ。在其他操作系統(tǒng)中,您可以找到容器(Solaris)和 jail(BSD)。在 Linux-VServer 中,每個(gè)單獨(dú)的用戶
空間實(shí)例稱為一個(gè)安全上下文。在每個(gè)安全上下文中,會(huì)為專用服務(wù)器實(shí)例啟動(dòng)一個(gè)新的 init。關(guān)于操作系統(tǒng)虛擬化和其他虛擬化方法的更多信息,請(qǐng)參見(jiàn) 參考資料 一節(jié)。
對(duì)于 Linux 內(nèi)核來(lái)說(shuō),強(qiáng)制訪問(wèn)控制和基于角色的訪問(wèn)控制都是相對(duì)較新的功能。隨著 LSM 框架的引入,新的安全模塊將會(huì)出現(xiàn)。除了對(duì)框架的增強(qiáng),還可以堆疊安全模塊,從而允許多個(gè)安全模塊共存,而且大限度地覆蓋了 Linux 的安全需求。隨著對(duì)操作系統(tǒng)安全性的深入研究,將會(huì)引入新的訪問(wèn)控制方法。
分享標(biāo)題:安全增強(qiáng) Linux (SELinux) 剖析
本文URL:http://muchs.cn/news/100222.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、微信小程序、移動(dòng)網(wǎng)站建設(shè)、云服務(wù)器、自適應(yīng)網(wǎng)站、定制開(kāi)發(fā)
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源:
創(chuàng)新互聯(lián)