信息安全
内容
• 访问控制矩阵
• 安全策略
第2章 安全模型与策略
梁彬
中国人民大学信息学院计算机系
V 1.0
2.1 访问控制矩阵
• 访问控制矩阵(Access Control Matrix,
ACM)模型是最常用的用于描述系统保护
状态的模型
– 矩阵中存储有各主体(Subject)的权限
– 系统保护状态的改变将导致矩阵元素的改变
2.1 访问控制矩阵
• 2个概念:
– 主体(Subject):活跃的实体,如进程
– 客体/对象(Object):被保护实体,如文件
某些实体可能同时是主体与客体!
• 访问控制矩阵模型是一种抽象模型,要讨
论具体访问控制矩阵的意义,必须与系统
的具体实现相联系
2.1 访问控制矩阵
objects
…
o1
om
s
t
c
e
j
b
u
s
s1
s2
…
sn
• 主体 S = { s1,…,sn }
• 客体 O = { o1,…,om }
• 权限 R = { r1,…,rk }
• 元素 A[si, oj] ⊆ R
• A[si, oj] = { rx, …, ry } 意
味着 si对于客体 oj具有
权限 rx, …, ry
3
5
2.1 访问控制矩阵
objects (entities)
o1 … om s1 … sn
s
t
c
e
j
b
u
s
s1
s2
…
sn
2
4
6
1
实例
• 进程 p, q
• 文件 f, g
• 权限 r(读), w(写), x(执行), a(添加), o(拥有)
f
rwo
a
g
r
ro
p
rwxo
q
w
r
rwxo
p
q
2.1 访问控制矩阵
• 状态转换
– 将改变系统的保护状态
– |– 代表转换
• Xi |– τ Xi+1: 命令 τ 使得系统从状态 Xi 转换到 Xi+1
• X |– * Y: 一系列命令使得系统从状态 X 转换到Y
– 导致状态转换的命令常称为转换过程
(S, O, A) (S', O', A')
X
X’
2.1 访问控制矩阵
• 原语命令(Primitive Command)
– create subject s
• 在ACM中创建新行和列
– create object o
• 在ACM中创建新列
– enter r into A[s, o]
• 增加主体s对于客体o的权限r
– delete r from A[s, o]
• 删除主体s对于客体o的权限r
– destroy subject s
• 在ACM中删除行和列
– destroy object o
• 在ACM中删除列
create object o
• 前提条件: o ∉ O
• 原语命令: create object o
• 事后条件:
– S′ = S, O′ = O ∪ { o }
– (∀x ∈ S′)[a′[x, o] = ∅]
– (∀x ∈ S)(∀y ∈ O)[a′[x, y] = a[x, y]]
7
9
11
create subject s
• 前提条件: s ∉ S
• 原语命令:create subject s
• 事后条件:
– S′ = S ∪{ s }, O′ = O ∪{ s }
– (∀y ∈ O′)[a′[s, y] = ∅], (∀x ∈ S′)[a′[x, s] = ∅]
– (∀x ∈ S)(∀y ∈ O)[a′[x, y] = a[x, y]]
enter r into a[s, o]
• 前提条件: s ∈ S, o ∈ O
• 原语命令: enter r into a[s, o]
• 事后条件:
– S′ = S, O′ = O
– a′[s, o] = a[s, o] ∪ { r }
– (∀x ∈ S′)(∀y ∈ O′ – { o }) [a′[x, y] = a[x, y]]
– (∀x ∈ S′ – { s })(∀y ∈ O′) [a′[x, y] = a[x, y]]
8
10
12
2
delete r into a[s, o]
• 前提条件: s ∈ S, o ∈ O
• 原语命令: delete r into a[s, o]
• 事后条件:
– S′ = S, O′ = O
– a′[s, o] = a[s, o] – { r }
– (∀x ∈ S′)(∀y ∈ O′ – { o }) [a′[x, y] = a[x, y]]
– (∀x ∈ S′ – { s })(∀y ∈ O′) [a′[x, y] = a[x, y]]
destroy subject s
• 前提条件: s ∈ S
• 原语命令: destroy subject s
• 事后条件:
– S′ = S – { s }, O′ = O – { s }
– (∀y ∈ O′)[a′[s, y] = ∅], (∀x ∈ S′)[a´[x, s] = ∅]
– (∀x ∈ S′)(∀y ∈ O′) [a′[x, y] = a[x, y]]
destroy object o
• 前提条件: o ∈ O
• 原语命令: destroy object o
• 事后条件:
– S′ = S, O′ = O – { o }
– (∀x ∈ S′)[a′[x, o] = ∅]
– (∀x ∈ S′)(∀y ∈ O′) [a′[x, y] = a[x, y]]
实例
• 如果进程p创建了进程q。创建进程命令对访问控
制矩阵的作用可以用如下原语命令描述:
command spawn•process(p, q)
create subject q;
enter own into a[p, q];
enter r into a[p, q];
enter w into a[p, q];
enter r into a[q, p];
enter w into a[q, p];
end
13
15
17
14
实例
• 在Unix系统中,如果进程p创建了一个文件f,进
程p对文件f是拥有者,同时还有读权限r、写权限
w。创建文件命令对访问控制矩阵的作用可以用
如下原语命令描述:
command create•file (p, f)
create object f;
enter own into a[p, f];
enter r into a[p, f];
enter w into a[p, f];
end
Linux与Windows下的情况呢?
16
2.2 安全策略
如果将计算机系统当作一种有限状态自动
机,该自动机有一套完成状态改变的转换
函数,那么:
• 定义2.1:安全策略(Security Policy)是一
种声明,它将系统的状态分为2个集合:
– 已授权的,即安全的状态集合;
– 未授权的,即不安全的状态集合。
• 定义2.2:安全的系统(Secure System)
是一种始于已授权状态但不能进入未授权
状态的系统。
18
3
2.2 安全策略
• 定义2.3:如果系统进入了一个未授权状
态,则称发生了一次安全破坏(Breach of
Security)。
19
2.2 安全策略
• 定义2.7:安全机制(Security Mechanism)是实
施安全策略的某些部分的实体或规程。
• 定义2.8:安全模型(Security Model)是表达特定
策略和策略集合的模型。
策略类型:
• 定义2.9:军事安全策略(又称政府安全策略)是
以提供保密性为主要目的的安全策略。
• 定义2.10:商业安全策略是以提供完整性为主要目
的的安全策略。
• 定义2.11:保密性策略是仅处理保密性的安全策略。
• 定义2.12:完整性策略是仅处理完整性的安全策略。
21
2.2 安全策略
• 定义2.4:设X是实体的集合,I是某种信息。
如果X中的成员不能获取信息I,那么I对于X
具有保密性(Confidentiality)。
• 定义2.5:设X是实体的集合,I是某种信息
或某种资源。如果X中的成员都信任I,那么
I对于X具有完整性(Integrity)。
• 定义2.6:设X是实体的集合,I是一种资源。
如果X中的成员都可以访问I,那么I对于X具
有可用性(Availability)。
2.2 安全策略
安全策略可以单独或混合使用两种类型的
访问控制:
• 自主访问控制
• 强制访问控制
20
22
2.2 安全策略
• 定义2.13:如果个人用户可以设置访问控制机制
来许可或拒绝对客体的访问,那么这样的机制就
称为自主访问控制( Discretionary Access
Control ,DAC)或基于身份的访问控制
(Identity-based Access Control ,IBAC)。
DAC基于主体和客体的身份,客体拥有者一般通
过允许特定的主体进行访问,以限制对客体的访
问。拥有者根据主体的身份来规定限制,或者根
据主体的拥有者来规定限制。
2.2 安全策略
• 定义2.14:如果系统机制控制对客体的访问,而
个人用户不能改变这种控制,这样的控制称为强
制访问控制(Mandatory Access Control,
MAC),偶尔也称为基于规则的访问控制(Rule-
based Access Control )。
一般由操作系统实施强制访问控制。主体和客体
的拥有者都不能决定访问的授权。通常,系统机
制通过检查主体与客体的相关信息来决定主体是
否可以访问客体。规则描述了允许访问的条件。
23
24
4
实例
• Linux中的DAC
实例
Linux DAC相关命令
• 设置权限命令chmod
• 设置文件属主用户命令chown
• 设置文件属主用户组命令chgrp
在传统Linux中,超级用户root可以超越
DAC的权限限制!
25
26
实例
Linux特殊权限位:
•
set uid权限(SUID):只能用在二进制文件(binary file)上,用在目录上无效,
表示程序在执行的过程中能够暂时拥有该文件所有者的权限。
添加set uid权限的命令: chmod u+s 文件名
具备SUID位且属主可执行,则属主执行位显示s来代替没有SUID位的x,如
果属主不能执行,则显示为大写的S。
•
set gid权限(SGID):当二进制件(binary file)被设置了此权限,则无论使用者
是谁,在执行该文件时,他的有效群组将变为该文件的群组所有人。当目录
被设置了此权限,就表明该目录下所创建的文件都是为目录所属组。
添加set gid权限的命令 : chmod g+s 目录名
设置SGID位且属组可执行,则属组执行位改成s显示,否则以S显示。
• Sticky Bit权限(粘着位): 目前只针对目录有效,对文件已经没效果了。它对
目录的作用是:在具有粘着位的目录下,使用者如果在该目录下具有w以及x
的权限,则他在该目录下所创建的文件或目录,就只有他与root用户才有权
力删除。即:在这样的权限内容下,任何人都可以在这样的目录下新增或修
改文件,但只有该文件/目录创建者和 root用户能够删除自己的目录或文件。
添加t权限的命令: chmod o+t 目录名
设置粘着位且其它人可执行,则其它人执行位改成t显示,否则以T显示
27
实例
•
Linux 2.6内核中实现了ACL(Access
Control List),支持更细粒度的DAC
http://www.ibm.com/developerworks/cn/linux/l-acl/index.html
可以按照任意单个用户或用户组规定访问
控制
……/*
* If the DACs are ok we don't need any capability check.
*/
if (((mode & mask & (MAY_READ|MAY_WRITE|MAY_EXEC)) == mask))
return 0;
/*
* Read/write DACs are always overridable.
* Executable DACs are overridable if at least one exec bit is set.
*/
if (!(mask & MAY_EXEC) ||
(inode->i_mode & S_IXUGO) || S_ISDIR(inode->i_mode))
if (capable(CAP_DAC_OVERRIDE))
return 0;
/*
* Searching includes executable on directories, else just read.
*/
if (mask == MAY_READ || (S_ISDIR(inode->i_mode) && !(mask & MAY_WRITE)))
if (capable(CAP_DAC_READ_SEARCH))
return 0;
return -EACCES;
……
Linux中默认情况下:
capable(int cap) ≈ (当前进程有效UID或者文件系统UID(euid、fsuid) = = 0))
root uid = = 0
28
2.2 安全策略
• 定义2.15 创建者控制访问控制(Originator
Controlled Access Control,ORCON或
ORGCON)基于客体(或其包含的信息)的创建
者(的意愿)进行访问。
ORCON的目的是允许客体(或其包含的信息)
的创建者控制信息的分发,而客体的拥有者没有
决定谁能访问此客体的控制权。
在ORCON的实施中,非技术因素占有很大比
率!在某种程度上来说,ORCON是一种MAC与
DAC的混合策略。
29
30
5
思考题
• 熟悉Linux系统与Windows系统的DAC机制。
• 为什么可以认为ORCON是一种MAC与
DAC的混合策略?
31
6