7.4.1 资源保护模型
一般来讲,一个系统拥有积极的和消极的两部分 。
积极的部分,例如进程或线程,代表了用户的行为;
消极的部分,类似于资源,在保护系统中叫做对象 。 在下面要讨论的保护模型中,
进程按权限要求去访问对象 。
一个进程在不同时刻,依赖于其当前所做的任务,对某对象有不同的权限。
例如,一个执行系统调用的进程拥有访问操作系统的权限,它一般也拥有用户所有的权限。举例来说,当使用系统表和操作系统资源时,UNIX系统在一个二进制文件中用 SetUID位来允许此文件暂时性地拥有超级用户权限。
在任何给定的时刻,某进程拥有的特定的一套权限都遵从于其所在的保护域。因此任何关于使用某进程的决定的对象必须包括此进程执行的所在保护域的因素。
一个保护系统由一套指定保护策略的对象,
主体和规则构成,它体现了通过系统保护状态定义的主体的可访问性 。 系统要保证为每次对象的调用都检查保护状态,如图
7-4中的 X通过主体 S进行的检查 。 内部保护状态只有通过一套执行了外部安全策略的规则才能被改变 。
策略保护状态状态传送规则主体X
对象
XX
SX
保护状态可抽象化为访问矩阵。在访问矩阵 A中,用行代表主体,用列代表对象,所有主体也是对象,因为进程需要能对其他进程实施控制。 A[S,X]中的每个入口是一个描述对象 S对对象 X的访问权的集合。每次访问包含以下步骤
步骤 1:
主体对对象初始化类型 α 使用 。
步骤 2:
保护系统验证 S并代表 S产生 ( S,α,X),由于身份由系统提供,这个主体不能伪造主体身份 。
步骤 3:
对象 X的检查器查询 A[S,X],如果 α ∈A[S,X]
则访问有效,若 α ! ∈ A[S,X]则访问无效 。
检查器

SX
访问授权
(S,α,X)
X
S α
访问矩阵保护机制可用于执行许多不同的安全策略 。 例如,假设某简单系统是如下构成的:
subjects = {S1,S2,S3}
objects = subjects ∪ {F1,F2,D1,D2}
这里 F1和 F2表示文件,D1,D2表示设备 。
图 8-6是一个代表了一个系统保护状态的访问矩阵,每个主体对其自身有控制权 。
S1对 S2有阻止,唤醒和占有的特权,对 S3
有占有的特权 。 文件 F1可被 S1进行读 *和写 *。 S2是 F1的所有者,S3对 F1有删除权 。
7.4.2保护状态的改变
保护系统用策略规则来控制用于切换保护状态的手段。就是说,
可通过选用在矩阵中出现的访问类型和定义一套保护状态转换规则来定义策略
例如,在图 7-7中显示的规则实现了一则特定的保护策略 。 它们是用图 7-6中所示的访问类型来定义的 。 在图中,S0试图通过执行改变访问矩阵入口 A[S,X]的命令来改变保护状态 。 例如,S0试图批准 S3对 D2的读的访问权,仅当此指令的所有者属于 A[S0,X]时,此指令才可执行 。 这导致读的访问权加入到 A[S3,D2]
中 。 这个安全策略的例子的目的是为了提出伪装,共享参数和限制问题的 。
Graham,Denning[1972]定义了一个保护系统:
l 伪装:此模型要求该实现能阻止某主体伪装成另一主体 。 验证模块可复杂到任何安全策略所要达到的,在此模块验证完此主体后,它为 S产生出一个不可伪造的标记来执行一个到 X的 α访问,然后把它送入 X的检查器 。 这就杜绝了伪装 。
l 限制和分配权限:对解决限制问题的模块和规则来说,它们必须提供一种机制,在此机制下,权限被限制于指定的主体集合里 。 拷贝标志限制了传输过程中的权限繁殖,同时,
所有权成为批准权限的前提 。 然而,还有很多值得考虑的敏感问题 。 能够限制主体繁殖权限和信息的想法是值得期待的 。 因为读的访问提供了复制信息的能力,在确信其不含有权限和信息的条件下,允许一个不可信的子系统提供服务是困难的 。 通常,这需要保证可疑的主体是无记忆性的 ---即它不具备保存信息或将信息泄漏给其他主体的能力 。 这意味着只要考虑程序的行为就可完全解决限制问题 。 若不可信主体不能证实为无记忆性的,限制问题就无法解决 。
l 参数共享:我们可通过只允许不可信主体对对象的间接访问仔细地检查参数共享 。 某所有者主体可创建一个,门卫,主体来保护对象不受不可信主体的有害访问 。 本质上,这导致用户把访问权控制委托给了,门卫,。 最终用户只需要用户有对,门卫,主体的访问权就可获得对对象的明确的占有权 。 所有者可在任何时刻取消不可信任子系统对,门卫,的访问,
而,门卫,可对不可信主体的每次访问进行验证 。
l 特洛伊木马:特洛伊木马问题的产生是因为某进程假定另一进程的权限在代表它运行 。 本模型把两个使用相同权限的进程区别为不同的主体,本模型使利用一套恰当的规则来解决特洛伊木马问题成为可能 ---不同于我们在上面例子中的解决方法 。 然而,许多规则集可能会为特定策略解决问题但并不能保证独立于策略的解决方案 。
7.4.3保护机制的开销
7.5 内部授权的实现要实现机制需考虑以下几点:
l 访问矩阵并不是保护状态的唯一可能的代表,
但它是大多数实现的基石 。
l 访问矩阵必须存在某种安全的中间存储媒体上并只可被选定的进程进行读写 。
l 此设计的目标是通过保护检查序列化所有的访问,这种序列化将确认当前的保护状态可用于使此次访问生效 。
l 保护机制应能够通过某个主体来验证每个要求的来源而不是通过过程调用接收作为一个参数的主体身份 。
l 要实现规则,检查器必须是一个受保护的进程 。 不得存在其他主体通过和检查器和解并确定传输机制 ( 如通过共享资源 ) 的可能 。
7.5.1 保护域与状态隔离
保护系统程序或用户程序不受其他用户程序的破坏,采用的方法是对计算机系统设置不同工作状态或者说处理器具有不同的工作模式,采用两态模式时常称:管态和目态。运行在管态下的程序比运行在目态下的程序有更多的访问权
两层次的域可概念推广成一个含有 N个在保护学中被叫做域环结构的同心圆的集合。环结构通过最早出现在 [Organic
1972]中的 Multics系统构架的概括进行描述。假设保护系统有 N个保护环构成,在这些环中,R0到 Rs支持操作系统域,而 Rs+1到 Rn-1则被应用程序使用。
则 i<j表示 Ri比 Rj拥有更多的权限。
一般的环结构并不需要支持内部环数据访问,只要支持过程调用 。 内部环中的数据只能用一个相应于内部环的过程来访问,
很像某抽象数据类型只允许通过公共接口对其进行引用 。
内核态执行态监管态用户态
l 内核 (Kernel)态:执行 VMS操作系统的内核,包括内存管理,中断处理,I/O操作等 。
l 执行 (Executive)态:执行操作系统的各种系统调用,如文件操作等 。
l 监管 (Supervisor)态:执行操作系统其余系统调用,如应答用户请求 。
l 用户 (User)态:执行用户程序;执行诸如编译,编辑,连接,和排错等各种实用程序 。
7.5.2空间隔离
每个用户进程的内存空间可以通过虚拟存储技术来实现内存保护,分页,分段或段页式,可提供有效的内存隔离 。 这时操作系统能确保每个页面或每个段只被其所属进程或授权进程访问 。
隔离技术能保证系统程序和用户程序的安全性,操作系统中还会采用各种技术实现其它资源的保护 。
7.5.3 访问矩阵的实现
访问矩阵高效的实现应使用入口索引表而不是将矩阵存在一个矩形数组中 。 例如,
如果 {α}是逻辑存储在 A[Si,Xj]中的字符串集合,这个索引表就可容纳表单
( Si,Xj,{α}) 的入口 。 这是解决稀疏矩阵的普遍的均衡方法 。 就是说,此索引表的长度正比于矩阵的入口数 ---密集矩阵则会产生出冗长的索引表 。
另一可用的方法是把矩阵转化为列向量,
每个向量存储为受保护对象的权限的列表 。
现在,在任何 Si想访问对象的时刻,对象的检查器只需简单地查询列表 。 对给定的对象这种向量被叫做访问控制列表
( ACL) 。
7.5.3.1 内存锁和钥匙

0110

1101

0101

0110

0110钥进程
7.5.3.2 访问控制列表
访问控制列表
UNIX文件保护机制
Windows NT的 ACL机制
7.5.3.3 权能
权能( capability)是一个独特的,通用的代表在一个系统中对某对象的访问权的名字。因此,权能可能是一张
Kerberos令牌,也可能是,对盘 k上 i扇区的读取访问,和,对进程 j的地址空间的虚拟地址的写入访问,。
权能充当两种职能。
首先,它为在一个很大的地址空间里的资源提供地址 。
其次,拥有权能代表了主体对描述对象的授权 。 后者是基于权能的系统的关键点
( 回想一下 Kerberos的例子 ) 。 就是说,
当一个主体获得某权能时,验证就发生了 。
一旦某权能被发布,就没有必要让运行检查器和访问矩阵去检查每次访问 。
权能的使用暗示了如下必然的属性:
一枝 衍生 。 这是因为一个使用权能的系统将需要许多不同的权能实例来代表所有主体到所有对象的所有访问 。
l 权能必须是独特的并且一旦被分配再也不能被重用 。 这防止了通过无意地给一个主体提供了原来对某对象的访问而引起的权能的,再生利用,现象 。
l 权能必须和似是而非的名字区别开来 。 例如,系统不能把普通的整型数字或指针和权能弄混 。
密码学
1数据加密模型
明文
密文
加密 /解密算法
密钥
7.6密码学
定义一个加密函数 encrypt和一个解密函数
decrypt,这里
decrypt( key’,encrypt( key,clearText))
=clearText
我们用 encrypt和一个密钥 key把明文加密成密文 。 另一个不同的密钥 ---key’,decrypt用它将密文转化为明文 。
有两种建立加密,解密机制的机制 。 一种建立的设计是加密和解密的细节未知,以至此实现的机制的一部分是保密的 。 另一种建立的设计是机制是公开的,但密钥是未知且难以伪造的 。
对第一种情况,函数 encrypt和 decrypt很复杂,以至无法猜出转换是如何完成的 。 对第二种情况,密钥是复杂的,以至无法猜出 。
对称的加密技术
非对称加密算法
完美隐私保护( Pretty Good Privacy)
邮件文摘( Message digest)
基本加密方法
易位法
置换法