概述
隨著分散式計算的不斷發展,傳統程式開發模式已逐步轉變為“鬆散耦合”的組件開發模式。組成應用程式的各組件通常來自於完全不同的組織,所以應用程式的不同組件可能要求不同的信任度。用組件動態組成的系統具有獨特的安全需求。
針對這種安全需求,有人提出了多種改進模型,試圖在分散式環境下實現傳統的角色訪問控制,但這些方案大都有以下缺陷:
1) 無法解決引誘攻擊問題。來自被信任組織的組件可能需要訪問敏感資源,而這些資源正常情況下需要得到保護以防止惡意代碼訪問。而引誘攻擊經常通過欺騙受信任的代碼組件對敏感資源進行調用,或以低信任度組件調用高信任度組件的方式來獲得合法代碼的許可權,以此訪問敏感資源。
2) 角色分配困難。有的代碼,例如可移動代碼可以由任意數量的用戶下載和執行,而這些用戶在開發時都是不了解的,因此身份無法判斷,角色也就無從分配。僅僅關心誰在運行代碼的RBAC 安全模型已經不再滿足要求。
針對以上角色訪問控制的缺點,不僅要關心誰運行代碼,還要考慮代碼的來源。這裡從微軟的代碼訪問安全性 ( Code Access Security ,CAS) 中歸納出基於證據的代碼訪問控制 ( Evidence-Based Code Access Control, EBCAC) 模型,給出了該模型的一種形式化解釋,並提出了基於證據的代碼訪問控制(EBCAC) 系統的一種改進設計方案,該方案結合了角色訪問控制和基於證據的代碼訪問控制兩者的優點,能夠從較低的代碼層次和用戶角色層次上進行訪問控制。
基於證據的代碼訪問控制模型
EBCAC 思想概述
EBCAC 思想最早來源於微軟.NET戰略中提出的代碼訪問安全性 (CAS) 。.NET框架除了提供傳統的基於角色的安全性( RBAC)安全模型之外,也在代碼上提供了代碼訪問安全性。
EBCAC不是基於用戶的身份,而是基於代碼的身份實現安全保護。在EBAC安全模型中許可權被授予代碼而不是給用戶,系統根據與代碼及其身份相關聯的標誌 ———證據來限制代碼能夠執行哪些操作、訪問哪些資源。這樣在某個用戶可以獲得信任以訪問某個資源的情況下,如果用戶執行的代碼不受信任,那么訪問資源將被拒絕。
EBCAC 模型的形式化解釋
經過以上歸納,給出基於證據的訪問控制抽象模型,並利用集合和關係的概念,給出一種簡單的形式化解釋。
代碼訪問安全控制模型如下,主要由三部分組成:程式集、證據、許可權。
程式集 A:程式集是代碼載入並運行的組織單元。定義為一個多元組 (AId , Ver , Ds ,PK):其中 AId 是程式集標識 (即它的簡單文本名
稱) ,Ver 是程式集的版本號,Ds 是發行者根據該程式集生成的數字簽名,PK是與“用於創建數字簽名的私鑰”相對應的公鑰,用於驗證數字簽名。由於程式集由標識、版本號組成並通過公鑰和數字簽名加強,這樣可確保程式集版本,且發行者的身份得到確認,代碼內容不被篡改。
證據集 E:證據是關於代碼身份和來源的標識,是系統安全策略用來給程式集授權的根據。證據集 E = {e1,e2 , …,en},ei 是一條證據,ei 定義為一個二元組 ( EType,MShip),其中 EType 表示證據類型的集合,EType = { Id , Source},MShip 是證據成員資格條件的集合。
許可權集 P:定義為一個二元組 (Ob,Op),其中Ob(Objects) 是系統中的客體,客體是一種可識別的信息實體,如檔案、目錄、服務等,一個客體可以包含另外一個客體,如 owner,group name 等。 Op(Operations) 是客體 ob 上的訪問方法集,它是一個集合,可能包含不止一種訪問方法,如 read,write,append或 rw,rc 等 。
基本操作
EBCAC 可以概括為以下基本操作:
規則 1. 把證據 e 賦予程式集 a;
a. EvSet = a. EvSet + {e}
規則 2. 刪除程式集 a 的證據 E;
a. EvSet = a. EvSet - {e}
規則 3. 給證據 e 添加一條新的成員資格條件mship;
e. Mship = e. Mship + {mship}
e. EType = e. EType + {etype}
規則 4. 刪除證據e的一條成員資格條件mship;
e. Mship = e. Mship + {mship}
e. EType = e. EType - {etype}
EBCAC 系統的工作原理
EBCAC系統分為請求預處理、角色分配、代碼預處理、安全策略、許可權計算、安全審核等 6 個模
塊:
1.請求預處理模組
該模組將接受來自於套用層的客戶請求,驗證該客戶的身份並分離出載入的代碼。
2.用戶角色分配模組
該模組根據用戶的身份分配角色,並根據角色分配用戶的訪問許可權。
3.代碼預處理模組
代碼預處理模組工作在代碼載入階段,主要實現功能有,把代碼組織成標準單元,即程式集;負責對代碼份和來源進行檢查;並添加相應證據給程式集。
4.安全策略模組
安全策略模組中定義的是安全策略,可以由管理員配置。 它和程式集的證據一起構成了許可權計算模組的兩個輸入。 其核心為安全策略級別和代碼組樹。
1) 安全策略
安全策略是一組由管理員事先配置好的規則,在決定允許代碼執行的操作時遵循此規則。 EBCAC 強制代碼只能訪問安全策略允許的資源和調用安全策略允許的代碼。 使用安全策略確定授予程式集的許可權。
2) 安全策略級別
安全策略級別表示管理責任中的不同領域。策略級別反映的是真實企業中存在著安全區域和分層管理的模型。 我們把策略級別從外到內劃分為 4 個:企業級、機器級、用戶級、應用程式級,各級別允許設定不同的管理員。 這種責任劃分允許由企業的管理人員設定整個企業範圍內的策略;而由本地的系統管理員來設定單獨影響一台機器的策略,且允許不同級別的管理員對同一程式集分配不同的許可權,這與現實企業安全情況一致。
3) 代碼組樹
安全策略是由多個代碼組形成分層的樹狀結構。 代碼組是運行庫安全策略中的關鍵組件,由用戶定義,它們對程式集進行分類,並設定相應的許可權。
代碼組 (CG):安全策略的構成單元,是關於證據的成員資格條件 X 和許可權集 Y 的映射,其定義為:
設 Mship 是關於成員資格條件表達式 X 的非空集合, Y 是關於許可權集的非空集合,如果存在一法則 f,使得對 X 中的每個成員資格條件 x ,按法則 f,在 Y 中有唯一確定的許可權集 y 與之對應,則稱 f 為從 X 到 Y 的映射。 記作 f :Mship → Y 。通過代碼組可以給滿足條件的程式集分配許可權。
由於安全策略從外到內被分為四個層次,許可權的具體計算方法是 :在同一個策略級別內部,求出所有滿足成員資格條件的代碼組的對應許可權集,然後求它們的並集。 這樣求出各個策略級別的許可權集,然後計算最終的許可權:最終的許可權為各策略級別下程式集獲得許可權集的交集,只包含所有策略級別都允許的許可權。
5.安全審核模組
安全審核模組執行許可權審核功能,檢查敏感資源的調用者及其上游的間接調用者是否有足夠的訪問許可權。其核心是調用堆疊,每層中存放訪問敏感資源的程式集及其上游所有函式的相關狀態信息及所擁有的許可權。每層都要檢查程式集要求的許可權集、EBCAC 賦予程式集的許可權和賦予用戶角色的許可權是否有衝突之處,只有當所有調用者都有訪問該資源的足夠許可權時,才允許代碼訪問系統資源,如果發現有一個調用者沒有足夠許可權,就交給異常機制處理並拒絕訪問資源。 以此來實現代碼對系統資源的訪問控制。
EBCAC 的特點
EBCAC 的最大特點在於,它實現了對系統更低層次 ———代碼的授權管理的支持。傳統的RBAC 安全控制著重對用戶及其擔當的角色進行授權管理,在分散式環境下,用戶的角色的重要性已經發生很大的變化,單靠RBAC 已經無法對系統安全進行有效控制,而 EBCAC 從根本的代碼入手,根據代碼身份實現授權管理。
EBCAC 的另一特點在於:安全策略及其級別的定義真實地反映了企業的安全區域和分層管理的實際情況,使系統管理員可在與企業業務管理相類似的層次上控制低層的代碼訪問。
EBCAC 不僅實現企業級、機器級等粗粒度的控制,還能實現用戶級、程式級等細粒度代碼控制。