這里來看看操作系統(tǒng)之前先看看內(nèi)核
操作系統(tǒng)和內(nèi)核是包含關(guān)系,內(nèi)核是操作系統(tǒng)最基本的部分,它提供了操作系統(tǒng)的最基本功能,是操作系統(tǒng)工作的基礎(chǔ)。
操作系統(tǒng)內(nèi)核負責操作系統(tǒng)的任務(wù)調(diào)度、用戶管理、內(nèi)存管理、多線程支持、多CPU支持等,并包含 必要的網(wǎng)絡(luò)協(xié)議、驅(qū)動等 。
內(nèi)核是所有軟件的基礎(chǔ),相應(yīng)的 內(nèi)核安全是操作系統(tǒng)安全的基礎(chǔ) 。
這里其實可以理解一下什么內(nèi)核和操作系統(tǒng):簡言之,操作系統(tǒng)就是內(nèi)核掌握了技能之后的樣子。
當前主流操作系統(tǒng)的內(nèi)核都屬于UNIX(或類UNIX)系統(tǒng)。UNIX是一個強大的多用戶、多任務(wù)操作系統(tǒng),支持多種處理器架構(gòu),屬于分時操作系統(tǒng)。
UNIX最早于1969年在AT&T的貝爾實驗室開發(fā),隨著時間演進產(chǎn)生若干分支,并在移動智能終端操作系統(tǒng)中獲得廣泛使用,如 iOS系統(tǒng)基于UNIX BSD規(guī)范 ,而 Android則基于Linux,同屬UNIX大類 。
簡單地說,UNIX是現(xiàn)代操作系統(tǒng)的典型代表,也是各種主要OS的技術(shù)源泉;而Linux是類UNIX的一個開源版本,具有產(chǎn)品級的系統(tǒng)穩(wěn)定性。
典型終端操作系統(tǒng)內(nèi)核使用情況如表所示。
可以看到,除了iOS,其他多數(shù)移動智能終端操作系統(tǒng)均采用了Linux內(nèi)核。但iOS系統(tǒng)是封閉的,整體來說,對Linux內(nèi)核的安全研究有相當?shù)膶嶋H價值。
在Linux基礎(chǔ)之上,2000年12月22日美國國家安全局(NSA,National Security Agency)發(fā)布了Linux安全增強版本SELinux, 其全稱為Security-Enhanced Linux ,之后被合并到主線Linux內(nèi)核版本中。隨著近幾年安全需求的不斷增強,SELinux開始在產(chǎn)品和系統(tǒng)中獲得使用。
于是請歡迎咱們的主角SELinux登場?。?!
1、SELinux整體架構(gòu)
1.1 SELinux基本概念
SELinux由NSA發(fā)布,之后,Red Hat、Network Associates、Secure Computing Corporation、Tresys Technology以及Trusted Computer Solutions等公司及研究團隊都為SELinux的發(fā)展做出了重要的貢獻。
SELinux本質(zhì)是一個Linux內(nèi)核安全模塊 ,可在Linux系統(tǒng)中配置其狀態(tài)。SELinux的狀態(tài)分為3種,即disabled、permissive和enforcing。
- (1)disabled狀態(tài):指在Linux系統(tǒng)中不啟用SELinux模塊的功能。
- (2)permissive狀態(tài):指在Linux系統(tǒng)中,SELinux模塊處于Debug模式, 若操作違反策略系統(tǒng)將對違反內(nèi)容進行記錄 ,但不影響后續(xù)操作。
- (3)enforcing狀態(tài):指在Linux系統(tǒng)中,SELinux模塊有效, 若操作違反策略,SELinux模塊將無法繼續(xù)工作 。
SELinux涉及的重要概念如下。
(1)主體
主體是訪問操作的發(fā)起者 ,是系統(tǒng)中信息流的啟動者。主體通常指用戶或代表用戶意圖的進程。
通常, 主體是訪問的發(fā)起者,但有時也會成為訪問或受控的對象 。
一個主體可以向另一個主體授權(quán),一個進程可能會控制幾個子進程,這時受控的主體或子進程就是一種客體。
(2)客體
客體相對主體而存在,通??腕w 是指信息的載體或從其他主體或客體接收信息的實體 ,即訪問對象。
(3)訪問控制分類
管理方式的不同形成不同的訪問控制方式。
通常,訪問控制方式分為兩類:自主訪問控制(DAC, Discretionary Access Control)和強制訪問控制(MAC, Mandatory Access Control)。
(4)域
域決定了系統(tǒng)中進程的訪問,所有進程都在域中運行 。本質(zhì)上 ,域是一個進程允許的操作列表,決定了一個進程可以對哪些類型進行操作 。SELinux中域的概念相當于標準Linux中uid的概念。
(5)類型
類型與域的概念基本相似,但是, 域是相對進程主體的概念,類型是相對目錄、文件等客體的概念 。類型分配給一個客體,并決定哪個主體可以訪問該客體。
(6)角色
角色決定了可以使用哪些域 。具體哪些角色可以使用哪些域,需要在策略配置文件中預(yù)先定義。如果在策略配置文件中定義了某個角色不可以使用某個域,在實際使用中將會被拒絕。
(7)身份
身份屬于安全上下文的一部分,身份決定了本質(zhì)上可以執(zhí)行哪個域。
(8)安全上下文
安全上下文是對操作涉及的所有部分的屬性描述,包括身份、角色、域、類型。
(9)策略
策略是規(guī)則的集合,是可以設(shè)置的規(guī)則。
策略決定一個角色的用戶可以訪問什么,哪個角色可以進入哪個域,哪個域可以訪問哪個類型等。
1.2、SELinux內(nèi)核架構(gòu)
最早期的SELinux是Linux系統(tǒng)一個增強安全的補丁集,其后為解決每個系統(tǒng)對安全的細節(jié)控制不盡相同的問題,Linux安全框架(LSM, Linux Security Modules)被提出,使SELinux可作為可加載的安全模塊運行。
LSM是一個底層的安全策略框架,Linux系統(tǒng)利用LSM管理所有的系統(tǒng)調(diào)用。SELinux通過LSM框架整合到Linux內(nèi)核中。
當用戶進程執(zhí)行系統(tǒng)調(diào)用時,進程首先遍歷Linux內(nèi)核現(xiàn)有的邏輯尋找和分配資源,進行一些常規(guī)的錯誤檢查,然后進行DAC自動訪問控制。
自主訪問控制(DAC, Discretionary Access Control)
進程僅在內(nèi)核訪問內(nèi)部對象之前,由LSM的鉤子詢問LSM模塊可否訪問,LSM模塊處理該策略問題并回答可以訪問或拒絕訪問。
LSM框架主要包括安全服務(wù)器、客體管理器和訪問向量緩存。LSM模塊架構(gòu)如圖所示。
安全服務(wù)器負責策略決定,安全服務(wù)器使用的策略通過策略管理接口載入。
客體管理器負責按照安全服務(wù)器的策略決定強制執(zhí)行它管理的資源集。
對于內(nèi)核, 客體管理器可以理解為一個內(nèi)核子系統(tǒng) ,負責創(chuàng)建并管理內(nèi)核級的客體,包括文件系統(tǒng)、進程管理和System V進程間通信(IPC, Inter-Process Communication)。
訪問向量緩存(AVC, Access Vector Cache)提升了訪問確認的速度,并為LSM鉤子和內(nèi)核客體管理器提供了SELinux接口。
1.3、SELinux策略語言
SELinux架構(gòu)中,對于內(nèi)核資源,策略通過策略管理接口載入SELinux LSM模塊安全服務(wù)器中,從而決定訪問控制。
SELinux的優(yōu)勢是其策略規(guī)則不是靜態(tài)的,用戶必須按照安全目標的要求自行編寫策略。使用和應(yīng)用SELinux本質(zhì)上就是編寫和執(zhí)行策略的過程。
策略在策略源文件中描述。策略源文件名稱為policy.conf,其文件結(jié)構(gòu)包括以下幾點。
- (1)類別許可, 指安全服務(wù)器的客體類別 ,對于內(nèi)核而言, 類別直接關(guān)系內(nèi)核源文件 , 許可指針對每個客體類別的許可。 通常,SELinux策略編寫者不會修改客體的類別和許可定義。
- (2)類型強制聲明,包括所有的類型聲明和所有的TE(Type Enforcement,類型強制)規(guī)則,是SELinux策略中最重要的部分。
- (3)約束,是TE規(guī)則許可范圍之外的規(guī)則,為TE規(guī)則提供必要的限制。多級安全(MLS)是一種約束規(guī)則。
- (4)資源標記說明,指對所有客體都必須添加的一個“安全上下文”標記,是SELinux實施訪問控制的前提。SELinux根據(jù)資源標記說明處理文件系統(tǒng)標記以及標記運行時創(chuàng)建的臨時客體規(guī)則。
SELinux策略大而復(fù)雜,由一個個小的策略模塊構(gòu)成。
策略模塊的生成一般采用源模塊法。源模塊法支持單策略的開發(fā),并通過一組shell腳本、m4宏和Makefile一起合并成為文本文件。
多個策略模塊集合組成策略源文件,即policy.conf,策略源文件是文本文件,通過策略編譯器checkpolicy編譯為二進制文件policy.xx(xx為版本號),并通過策略裝載函數(shù)security_load_policy載入內(nèi)核且實施訪問控制。
使用源模塊構(gòu)造和載入SELinux策略的全過程如圖所示。
- 首先,通過源模塊法生成一個個策略模塊,策略模塊聚合形成一個大的策略源文件policy.conf;
- 其次,策略源文件policy.conf通過策略編譯器checkpolicy,生成可被內(nèi)核讀取的二進制文件policy.xx;
- 最后,policy.xx通過策略裝載函數(shù)security_load_policy載入內(nèi)核空間并實施訪問控制。
目前,在SELinux策略上常見的是單策略組合。
-
二進制
+關(guān)注
關(guān)注
2文章
772瀏覽量
41534 -
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
588瀏覽量
27262 -
狀態(tài)機
+關(guān)注
關(guān)注
2文章
489瀏覽量
27433
發(fā)布評論請先 登錄
相關(guān)推薦
評論