1.35k likes | 1.44k Views
第 5 章 可信操作系统的设计. 本章要点. 什么使得一个操作系统 “ 安全 ” 或者 “ 值得信赖 ” 如何设计可信系统,及在这些设计原则中,有哪些设计准则可以应用于其他程序开发任务中 我们如何促进对可信操作系统的正确性的保障. 如果一个操作系统能够稳定而有效地提供 内存保护、文件保护、一般对象的访问控制、用户鉴别 4 种服务,那么我们就说它是 可信的 (trusted) 。 本章将从设计者的角度来观察一个可信操作系统的设计以及提供安全服务的组件功能。. 本章将讨论可信系统的 4 个 主要方面:
E N D
本章要点 • 什么使得一个操作系统“安全”或者“值得信赖” • 如何设计可信系统,及在这些设计原则中,有哪些设计准则可以应用于其他程序开发任务中 • 我们如何促进对可信操作系统的正确性的保障
如果一个操作系统能够稳定而有效地提供内存保护、文件保护、一般对象的访问控制、用户鉴别 4种服务,那么我们就说它是可信的(trusted)。 本章将从设计者的角度来观察一个可信操作系统的设计以及提供安全服务的组件功能。
本章将讨论可信系统的4个主要方面: 策略:操作系统的安全需求是一个被良好定义的、一致且可实现的规则集,而且这些规则能被非常清楚并且无二义性地表达出来。为了保证需求是清楚、一致和有效的,操作系统通常会遵循一个预先规定好的安全策略——一个规则集,它展示了将要保护什么,以及为什么要保护。 模型:设计者通常先为需要保护的环境构建一个模型,这个模型实际上体现了系统将要实施的策略。设计者将模型和系统需求进行比较,以保证整个系统功能不会因为安全需求的引入而失效或降低。
设计:在确定了一个安全模型之后,设计者开始选择实现模型的方法。因此,设计包含两方面的内容:什么是可信操作系统(可信操作系统要实现的功能),以及怎样去构造(即实现)它。设计:在确定了一个安全模型之后,设计者开始选择实现模型的方法。因此,设计包含两方面的内容:什么是可信操作系统(可信操作系统要实现的功能),以及怎样去构造(即实现)它。 信任:我们对一个系统的信任基于两个方面:特征(操作系统包含了实施安全策略所必需的全部功能)和保障(操作系统的实现方式使我们确信它能够正确有效实施安全策略)。 # 一些安全系统最初就是针对安全需求而设计的,另一些安全系统则是将安全特性加入到现有的操作系统中。两种方法建立可信操作系统都是可行的。
5.1 什么是可信系统 如果代码被严格地开发和分析,使我们有理由相信代码只做其被要求做的,那么我们就说这个软件是可信软件(trusted software)。一般来说,可信代码能够作为其他不可信代码的运行基础。也就是说,不可信系统的质量部分地依赖可信代码;可信代码是构建整个系统安全的基础。特殊的,当我们确信操作系统能够对运行在它上的组件或系统的访问进行正确控制,就可以认为它是可信的。
5.1 什么是可信系统 (续) 要相信一个软件,必须对其进行严格测试分析,找到某些关键特性: 功能的正确性:程序按预期正确执行。 保持完整性:即使出现错误也能维持与其交互的数据正确。 有限的特权:允许访问安全数据,但这种访问是最小化的。 适合的可信级别:根据使用的数据和环境,对程序进行检查并给出适当的信任评级。
5.1 什么是可信系统 (续) 安全专家喜欢说“可信操作系统”而不是“安全操作系统”。可信操作系统是指这个系统不但达到了设计时的安全要求,质量很高,而且能证明用户对系统质量的信任是正确的。也就是信任是由系统的接收者或使用者来体会的,作为用户,你或许不能够直接评价一个系统是否值得信任。你可能会相信设计方案,可能会相信专家的评估,也可能相信同事的意见。但最终,还得由你自己来确定所需要的信任度。
5.1 什么是可信系统 (续) 信任度非常重要。与安全不同,信任不是一个互斥的概念。信任通常随着时间的推移而增加,其程度与证据和经历有关。 表 5.1 安全和可信的性质比较
5.1 什么是可信系统 (续) 可信操作系统还涉及以下几个概念: 可信进程(trusted process):能够影响系统安全的进程,或者说这个进程的不正确执行或恶意执行会破坏系统安全策略。 可信产品(trusted product):经过评估和认可的产品。 可信软件(trusted software):系统赖以实施安全策略的软件部分。
5.1 什么是可信系统 (续) 可信计算基(trusted computing base):计算机系统内所有保护机制的集合,包括硬件、固件和软件,它们一起对产品或系统实施了统一的安全策略。 可信系统(trusted system):该系统使用了充分的硬件和软件完整性措施,能够处理敏感信息。 # 与这些概念相关的概念是: 安全策略实施、足够的措施和机制、评估。
5.2 安全策略 5.2.1 军事安全策略 军事安全策略是很多可信操作系统的基础,而且很容易对其进行精确描述。军事安全策略(military security policy)是基于保护机密信息的策略。每条信息被标识为一个特定敏感等级,如不保密的、受限制的、秘密的、机密的、绝密的。这些等级构成了一个层次结构。我们用符号rankO表示对象O的敏感度。
5.2.1 军事安全策略(续) 图5.1 敏感度的层次结构
5.2.1 军事安全策略(续) 我们使用须知(need-to-know)原则来限制访问:只有那些在工作中需要知道敏感数据的主体才允许访问相应的敏感数据。每条机密信息都与一个或更多的项目相关,这些项目称做分隔项(compartments)。分隔项使人们只能访问那些与他们工作相关的信息,一个分隔项可以属于一个敏感级也可以属于多个敏感级。
5.2.1 军事安全策略(续) 图5.2 分隔项和敏感等级 # 可以通过指定名字来区分分隔项。单独一条信息可以不赋予分隔项名,也可以被赋予一个、两个或多个,这取决与信息的属性。
5.2.1 军事安全策略(续) 图5.3 信息与分隔项的联合
5.2.1 军事安全策略(续) <等级;分隔项>的组合被称为信息片断的类(class)或分类(classification)。通过以这种方式指定信息,我们就能够用安全等级和主题来实施须知原则。用户必须得到许可(clearance)才能够访问敏感信息。许可表明可以信赖某人访问某个级别以下的敏感信息,以及此人需要知道某些类的敏感信息。我们用组合<等级;分隔项>来表示对主体的许可。
5.2.1 军事安全策略(续) 由此,我们可以建立在敏感对象和主体集合上,称为支配(dominance)的关系“≤”。对于一个主体s和一个对象o: 一个主体可以读一个对象,如果: (1) 主体的许可等级至少和访问信息的敏感等级一样高; (2) 主体需要知道该信息分类时涉及的所有分隔项。
5.2.1 军事安全策略(续) 军事安全同时实施了敏感度要求和须知要求。我们知道,敏感度是层次化(hierarchical)的要求,因为它们反映了敏感等级层次结构;而须知限制是非层次化(nonhierarchical)的,因为分隔项不需要表现为一个层次结构。许可和分类通常由一些称为安全职员的人控制,而并不是个人能够随意改变的。这个策略非常适合通过权威中心进行严格访问控制环境。
5.2.2 商业安全策略 商业企业也非常关心安全问题。因此,即使商业界不像军事领域那样严格苛刻和层次化,在商业安全策略中仍然会发现许多与军事策略相同的概念。分属不同部门的数据项也具有不同的敏感度,例如,公共的、专有的或内部的。当然,这里并没有一个通用的层次结构。我们可以假设公共信息不如专有信息敏感,而专有信息又不如内部信息敏感。
5.2.2 商业安全策略 (续) 图5.4 敏感信息的商业观点
5.2.2 商业安全策略 (续) 商业信息安全和军事信息安全有两个很显著的区别。 (1) 商业与军事不同,通常没有正式的“许可”概念;从事商业项目的人不需要得到中心安全职员的正式批准就可以访问项目。典型的,在允许一个雇员访问内部数据之前不需要对其授予不同的信任度。 (2) 由于没有正式的“许可”概念,所以允许访问的规则不太规范。 因此,对于大多数商业信息访问不存在一个支配函数,因为没有正式的“商业许可”概念。
5.2.2 商业安全策略 (续) 前面的讨论主要集中在机密性问题上。然而,完整性和可用性在许多情况下和机密性至少是同等重要的。通过下面的几个例子探讨完整性。 (1)Clark-Wilson商业安全策略 Clark和Wilson为他们所称的良构事务(well-formed transactions)提供了一个策略。为了明白其中的原因,考虑这样一个例子:一家公司预定货物,然后付款。典型的流程如下:
5.2.2 商业安全策略 (续) (A) 采购员先做一张货物订单,并把订单同时发给供货方和收货部门。 (B) 供货方将货物运到收货部门。收货部门的接收员检查货物,确保收到货物的种类和数量是正确的,然后再送货单上签字。再将送货单和原始订单交给会计部门。 (C) 供货方将发票送到会计部门。会计人员将发票同原始订单进行校对(校对价格和其他条款)并将发票同送货单进行校对(校对数量和品种),然后开支票给供货方。
5.2.2 商业安全策略 (续) 在大多数实例中,订单和送货单都需要有某个授权的人员来签订。委任专人按顺序准确执行以上步骤,就构成了一个良构事务。Clark-Wilson策略的目标是使内部数据与其外部(用户)期望保持一致。Clark和Wilson用约束数据项(constrained data item)来表达他们的策略,受约束数据项由转变程序(transformation procedure)进行处理。转变程序就像一个监控器,对特定种类的数据项执行特定的操作,确认特定操作已经执行来维持数据项的完整。Clark和Wilson将这个策略定义为访问三元组(access triple):userID,TPi,CDIj,CDIk,… ,通过它将转变程序、一个或多个受约束数据项以及用户识别结合起来,其中用户是那些已被授权且以事务程序的方式操作数据项的人。
5.2.2 商业安全策略 (续) (2)职责分离 还是上面的那个订货的例子,我们希望建立一个策略,这个策略能够明确规定三个不同的人分别发送订单、接收货物和开支票,这种需求被称做职责分离(separation of duty)。由于访问三元组是“无状态的”,无法实现职责分离,但如果将它作为一个策略需求表述出来,上述限制是容易实现的。
5.2.2 商业安全策略 (续) (3) 中国墙安全策略 Brewer和Nash定义了一个名为中国墙(Chinese Wall)的安全策略,用于反映商业信息访问保护中的利益冲突问题。 安全策略建立在三个抽象等级上。 (A) 对象:位于最低等级,比如文件。每个文件只包含一家公司的信息。 (B) 公司群体:位于第二个等级,由与一家特定公司相关的所有对象组成。 (C) 冲突类:位于最高等级,相互竞争的公司的所有对象聚集。
5.2.2 商业安全策略 (续) 假设一家广告公司,存储了巧克力公司Suchard和Cadbury,银行 Citicorp、Deutsche Bank和Credit Lyonnais,以及航空公司 SAS的数据。广告公司希望其雇员不能从这些信息中牟利。运用中国墙等级结构形成三个冲突类:{Suchard,Cadbury},{Citicorp,Deutsche Bank,Credit Lyonnais}和{SAS}。这个结构可以导出一个简单控制策略:如果被访问的对象所属的公司群体中的某个对象已被访问过,或者这个对象所属的冲突对象从未被访问过,那么就允许访问该对象。
5.2.2 商业安全策略 (续) 图5.5 中国墙安全策略
5.2.2 商业安全策略 (续) 中国墙策略在商界中是非常有名的机密策略。中国墙策略注重完整性。它的访问许可可以动态变化:当一个主体访问某些对象后,就不能够访问先前可以访问的这一类中的其他对象了。
5.3 安全模型 我们常常用模型来描述、研究或者分析一个特定的情况或者关系。 Mclean给出了安全模型的一个良好概述。安全模型用于: (1) 检测一个特定策略的完善性和一致性。 (2) 对策略进行验证。 (3) 有助于构思和设计一个实现。 (4) 检测一个实现是否满足需求。 安全需求是由策略决定的,而模型仅仅是实施策略的一种机制。
5.3.1 多极安全 在理想情况下,我们希望建立一个模型能够表示一系列的敏感度,同时能够反映这样一个需求,即将主体同它们不能访问的对象严格地隔离开。这种一般化的模型被称为安全性的格模型(lattice model),因为它的元素构成了一种被称为格的数学结构。
5.3.1 多极安全 (续) 格是通过关系运算符(relational operator)来组织元素的一种数学结构。用符号“≤”或“≥”来表示这种关系。当元素之间有传递关系和反对称关系时,该关系称为偏序(partial ordering)。也就是对于任意三个元素a ,b和c有: 传递性:若a≤b且b≤c,则a≤c 反对称性:若a≤b且b≤a,则a=b 在一个格中并不需要任意两个元素都可以比较。但是每个元素都应该有个上界。也就是说即使a和b没有可比性,也存在一个上界元素u,使得a≤u和b≤u。进一步,格中每个元素还应该有一个下界。
5.3.1 多极安全 (续) 数字60的所有因子构成格。 图 5.6 格的实例
5.3.1 多极安全 (续) 格可以帮助我们描述关系。但是,许多典型的关系都只能表示成半格。在“小于”、“是其子非空集”、“报告于(对于雇员)”或者“是一个后续”这些关系中,都有一个唯一的上界(比如,一个共同的祖先),但是可能任何一对元素都没有一个下界。
5.3.1 多极安全 (续) 访问安全的格模型 军事策略中定义的支配关系“≤”就是格的关系。格中最大的元素是分类 <绝密;所有分隔项>,最小的元素是<不保密;无分隔项>。商业安全策略中的数据敏感度分为公共的、专用的和内部的,并按自然排序为:公共数据没有专用数据敏感,而专用数据没有内部数据敏感,这也构成格。 因为格是递增顺序的一种自然表示,所以被选作安全系统的基础。敏感等级的格表示被应用于很多计算场合。
5.3.1 多极安全 (续) Bell-La Padula机密模型 Bell-La Padula机密模型的目标是识别出对维持保密性至为重要的允许通信。该模型已经用来定义那些并发处理不同敏感等级数据的系统安全需求。该模型是军事安全策略的形式化结果。我们对安全信息流感兴趣,是因为它描述了处于不同敏感等级的主体和对象之间可接受的连接。安全等级分析的一个目的是为了构建一个系统,此系统能够对处于两个不同敏感等级上的数据执行并行计算。
5.3.1 多极安全 (续) 系统包含了主体集S和对象集O,S中的每一个主体s和O中的每一个对象o都有一个固定的安全类C(s)和C(o)。安全类按关系“≤”排序。安全信息流有两个特性: 简单安全特性:仅当C(o)≤C(s),主体 s才可以对于对象o有“读”访问权。 *-特性(称作“开始特性”):对于对象o行使了“读”访问权的主体,仅当C(o)≤C(p),才可能对于对象p有“写”访问权。
5.3.1 多极安全 (续) 解释 (1) 在军事模型中,简单安全特性是说信息接收者的安全等级(许可)不可低于信息的安全等级。 (2) *-特性是说得到某个等级信息的人只能将这条信息传递给那些等级不低于这条信息等级的人。 *-特性是用来防止“下写” (write-down),当一个能够访问高级别数据的主体通过“写”将数据传递给低级别对象时便会发生这种情况。
5.3.1 多极安全 (续) # 仅当对较高级别信息有访问权的主体不传送任何敏感数据给低级敏感对象时,向下的流才是可接受的。 图 5.7 安全信息流
5.3.1 多极安全 (续) Biba完整性模型 数据的完整性也很重要, Biba定义了“完整性等级”。对象和主体依据一个完整性分类方案来排序,分别用I(s)和I(o)表示。特性为: 简单安全特性:主体 s能够修改(有权“写”)对象o仅当I(s)≥I(o)。 完整性*-特性:如果主体s有权“读”具有完整性等级I(o)的对象o,则仅当I(o)≥I(p)时,s有权“写”对象p。
5.3.1 多极安全 (续) 解释 这两条规则自然包含对不可信信息的处理情况。一个不可信主体对于对象拥有写访问权会降低对象的完整性。类似的,人们有理由怀疑一份依据不确切证据作出的报告。源对象的低完整性意味着对于任何基于它的对象的完整性都很低。
5.3.2 安全系统在证明理论模型上的局限 模型对于说明方法的可行性非常有用。考虑一个系统应具有的安全特性,我们希望建立一个模型,能(在系统设计、编码和测试之前)告诉我们是否能真正获得这些特性。基于计算理论的模型可以帮助我们回答这些问题。
5.3.2 安全系统在证明理论模型上的局限(续) Graham-Denning模型 Graham-Denning模型对主体集合S,对象集合O,权限集合R和访问控制矩阵A进行操作。对每一个对象,标明为“拥有者”的主体拥有特殊权限;对每一个主体,标明为“控制者”的另一个主体也拥有特殊权限。 在Graham-Denning模型中,有8种基本的保护权。这些权限被表示为主体能够发出的命令,作用于其他主体或对象。 这实际给出一个保护系统的访问控制机制模型所必需的特性。
5.3.2 安全系统在证明理论模型上的局限(续) (1) 创建对象:允许主体引入新对象。 (2) 创建主体、删除对象以及删除主体:效果与创建或销毁一个主体或对象相似。 (3) 读访问权:允许一个主体确定一个主体对一个对象或主体当前访问权。 (4) 授予访问权:允许拥有者把对象的任意访问权交给另一个主体。 (5) 删除访问权:允许一个主体删除另一个主体对一个对象的权限。 (6) 转移访问权:允许一个主体把它对对象的权限转移给另一个主体。每个权限可以是可转移的,也可以是不可转移的。
5.3.2 安全系统在证明理论模型上的局限(续) 表 5.2 保护系统的命令 访问控制矩阵是A[s, o],其中s是主体,o是对象。用符号x表示执行命令的主体,r是权限。
5.3.2 安全系统在证明理论模型上的局限(续) Harrison-Ruzzo-UIIman模型 假设将要使用某个操作系统,并且想要知道是否一个给定的用户能被授权进行某种访问。Harrison-Ruzzo-UIIman模型(HRU模型)能够回答这类问题。 HRU模型是基于命令(command)的,其中每条命令含有条件(condition)和原语操作(primitive operation)。
5.3.2 安全系统在证明理论模型上的局限(续) 在HRU模型中,每个主体同时也是对象。因此,访问控制矩阵的列表示了所有主体和不是主体的对象。因此,一条命令的所有参数都表示为o,尽管它们要么是主体,要么是非主体的对象。每个op是一个原语操作。
5.3.2 安全系统在证明理论模型上的局限(续) 表5.3 HRU模型中的访问控制矩阵 原语操作op包括:创建主体s、创建对象o、撤消主体s、撤消对象o、往A[s, o]输入权限r、从A[s, o]撤消权限r。一个保护系统(protection system)就是由主体、对象、权限和命令组成的集合。Harrison等人说明,这些足以用于对几种常见保护系统进行建模。
5.3.2 安全系统在证明理论模型上的局限(续) HRU模型的两个重要结论: (1) 在模型化系统中,当每个命令都被限制为一个单独的操作时,我们就可能判断出一个给定的主体是否能够获得对一个对象的特殊权限。 由此我们知道,一个低级的主体能否获得对高级对象的读访问权是可以判定的(也就是说,能事先知道)。