SOA安全策略模态冲突发现:IMCD算法解析
立即解锁
发布时间: 2025-08-22 01:53:03 阅读量: 2 订阅数: 4 

### SOA安全策略模态冲突发现:IMCD算法解析
#### 1. 背景与动机
在SOA(面向服务架构)安全策略领域,现有的模态冲突检测方法存在效率低下或适用性有限的问题。例如,Jorge Lobo、Emil Lupu等人使用一阶谓词语言和溯因推理来估计安全策略是否存在模态冲突,但该方法在冲突解决方面存在不足,只能判断规则是否冲突,无法明确与哪些规则冲突。因此,寻找一种通用且低成本的SOA安全策略解决方案具有重要意义。
#### 2. 系统模型
- **策略规则组成**:策略$\hat{P}$由一组策略规则$\{R_1, R_2, ..., R_k\}$表示。每个策略规则$R_i(S_i,T_i,A_i,C_i)=D_i$包含主体$S_i$、目标$T_i$、动作$A_i$、条件$C_i$和决策$D_i$。
- **主体层次关系**:策略主体(主体和目标)之间通常存在层次关系,主体可能属于用户组、角色或其他聚合。例如,Role1可能包含User1,Role1在主体层次结构中高于User1。
- **模态冲突定义**:当两个或多个策略规则涉及相同的主体和目标,但对允许的动作做出冲突的策略决策时,就会出现模态冲突。在SOA中,这一问题在决定是否允许访问服务时尤为突出。
以下是一个示例策略$\hat{P}$的ORCA语言表示和形式化表示:
```plaintext
Listing 1.1. Sample security policy ˆP
Role1 can
access www.domain.net/service1 /* for {read , write},
if time =8:00-16:00.
Role2 cannot
access www.domain.net /* for {write},
if time =12:00-18:00.
Listing 1.2. Security policy ˆP in a formal representation
1 R1(S1 , T1 , A1 , C1)=Accept.
2 R2(S2 , T2 , A2 , C2)=Deny .
3 S1={ Role1}. // subjects
4 S2={ Role2}.
5 T1={"www.domain.net/service1 /*"}. // targets
6 T2={"www.domain.net /*"}.
7 A1={ read , write}. // allowed actions
8 A2={ write}.
9 C1={ time =8:00 -16:00}. // conditions
10 C2={ time =12:00 -18:00}.
```
主体和目标的层次结构如下:
|主体层次结构(HS)|目标层次结构(HT)|
| ---- | ---- |
|Role0 <br> Role1 <br> - User1 <br> - User2 <br> Role2 <br> - User3|T2=www.domain.pl/* <br> T1=www.domain.pl/service1/*|
#### 3. 改进的模态冲突检测算法(IMCD)
##### 3.1 先决条件
- **主体层次知识**:冲突检测算法需要了解主体(HS)和目标(HT)的层次结构。
- **主体降序定义**:当两个主体$P_1$和$P_2$存在关系,且$P_1$包含$P_2$时,$P_2$是$P_1$的直接后代(表示为$P_1 → P_2$)。
- **权限继承**:如果存在主体降序关系$P_1 → P_2$,则主体$P_1$的权限由主体$P_2$继承。
- **策略对象图(POG)**:POG是一个有向图(树),表示所有主体的层次结构,根节点为通配符“*”。弧表示直接的主体降序关系。同时,还使用无向图POG进行循环检测。
```mermaid
graph TD;
* --> Role0;
Role0 --> Role1;
Role1 --> User1;
Role1 --> User2;
Role0 --> Role2;
Role2 --> User3;
* --> T2;
T2 --> T1;
```
##### 3.2 准备阶段
IMCD算法的准备阶段(Alg. 1)创建必要的数据结构:
```plaintext
1: function Preparation(Policy {R1, ..., Rn}, Hierarchy {HS, HT })
2: POG ←Create a graph from HS, HT
3: POGS ←POG
:: All BV in POG are empty
4: POGT ←POG
5: for i ←1..n do
6: POGS(Ri.Subject).BV [i] ←1
:: Set BV[i] in node Ri.Subject
7: POGT (Ri.Target).BV [i] ←1
8: end for
9: foreach S in POGS do
:: descending propagation
10: if POGS(S).BV ̸= ⊘then
11: foreach direct descendant D of S do
:: i.e. ∀D: S →D
12: POGS(D).BV ←POGS(D).BV ∪POGS(S).BV
13: end for
14: end if
15: end for
16: foreach T in POGT do
:: descending propagation
17: if POGT (T).BV ̸= ⊘then
18: foreach direct descendant D of T do
19: POGT (D).−−→BV ←POGT (D).BV ∪POGT (T).BV ∪POGT (D).−−→BV
20: end for
21: end if
22: end for
23: foreach T in POGT do
:: ascending propagation (from leaves to the root)
24: if POGT (T).BV ̸= ⊘then
25: foreach parent D of T do
26: POGT (D).←−−BV ←POGT (D).BV ∪POGT (T).BV ∪POGT (D).←−−BV
27: end for
28: end if
29: end for
30: foreach cycles c ∈C do
:: all BV in a cycle must be the same
31: comm
```
0
0
复制全文
相关推荐









