信息的完整性要求是指维护系统资源在一个有效的、预期的状态,防止资源被不正确、不适当地修改。完整性模型与策略是对信息的完整性进行保护,防止信息的非授权修改和破坏,保证数据的一致性,此时对于信息的机密性保护成为次要目标。下面我们就来了解完整性策略以及典型的完整性模型。
商业需求与军事需求的区别在于,商业需求强调的是数据的完整性,因此,完整性策略主要应用在商业领域,保证完整性的主要任务是防止非授权修改,维护内部和外部的一致性防止授权但不适当的修改。例如,对于一个库存控制系统而言,它的正常运作建立在管理数据可以正常发布的情况下。如果这些数据被随意改动了,那么这个系统也就不能正常工作了。
完整性的主要目标是防止涉及记账或者审计的舞弊行为的发生。例如,入侵银行系统内部非法更改账户的存款金额、入侵大型超市的物流管理网络非法篡改货物信息等都是对信息的完整性进行破坏。
前面介绍的BLP模型的出现为人们解决信息系统的保密性问题做出了巨大的贡献,但是,人们发现商业与军事在安全方面的需求是不同的,商业安全更强调保留资料的完整性,BLP模型并不适合所有的环境。因此,人们提出了针对保护信息完整性的模型和策略。下面就利用Lipner所提出的完整性模型为例来明确商业生产系统安全策略中需要达到的目标。
针对特殊的商业策略,为保证完整性需求,Lipner提出并制定了相应的规则。虽然假设环境比较特殊,但是通过分析这些需求规则可以明确完整性模型需要达到的目标。该原则应用在系统开发的环境下,在后面2.4.3节中介绍Lipner完整性模型时会再用到以下原则。
· 用户不能随意编写程序,必须使用现有的生产程序与数据库。
· 编程人员是在一个非生产的系统上进行开发工作的。如果他们需要访问生产系统中的数据,他们必须通过特殊处理过程来获得这些数据,并且只能将这些数据用于自己开发的系统中。
· 开发系统上的程序必须经过特殊处理过程才能安装在生产系统上。
需要说明的是,上述原则中最后一条所说的特殊处理过程必须要受到控制和审计,并且要保证管理员和审计员必须能够访问系统状态和已生成的系统日志。以上这些原则表明了一些特殊的操作规则,例如职责分离规则、功能分离规则以及审计。
首先是职责分离规则。职责分离规则是指如果执行一个关键操作需要两个以上的步骤才能完成,则至少需要两个不同的人来执行这些操作。例如,应用中将程序从开发系统安装到生产系统中的这一关键操作,一般交给没有负责开发的人员来完成,原因是如果从开发到安装都是同一个人员完成,很多错误难以发现。由于开发人员在开发过程中总会提出一些假设,安装人员的工作正是要验证这些假设是否正确,只有假设正确,系统才能正常工作。另外,如果开发人员故意写入恶意的代码,只有将安装测试工作交给其他人员来完成才有可能检查出恶意代码。
其次是功能分离规则。功能分离规则是指开发人员不能在生产系统上开发程序或者处理生产数据,否则对生产数据会造成威胁。开发人员和测试人员可以根据各自的安全等级及信息的安全等级获得相应的生产数据。
最后是审计。可恢复性和责任可追究性在商业系统中十分重要。商业系统中需要大量的审计工作,用来确定系统中所进行的操作及这些操作的执行者,尤其当程序由开发系统转移到生产系统时,审计和相关日志十分重要。
由于完整性模型与保密性模型应用的环境不同,因此它们的目标也不相同。前者主要应用于商业环境,后者主要应用于军事环境。商业环境和军事环境对于信息的保护目标和原则有着明显不同的需求。首先,对于访问权限的获得问题,在军事环境中,安全等级和类别是集中建立的,这些安全等级直接决定了用户对信息的不同访问权限。在商业环境中,安全等级和类别都是分散建立的,如果某个主体在其职责内需要了解某个特定的信息,那么这个访问是会被允许的。其次,对于在商业安全模型中的特殊需求,在军事安全模型中可能不会遇到。例如,在商业环境中一些保密的信息很可能从一些可公开的信息中推导得到。为了防止这种情况发生,商业安全模型需要跟踪被访问的信息情况,这样就大大提高了模型的复杂性,对于这一点,保密性模型就做不到。下面要介绍的完整性安全模型正是针对商业环境中的这些特殊需求提出的。
1977年,K.J.Biba首先对系统的完整性进行了研究,解决了系统内数据的完整性问题,提出了完整性访问控制模型。Biba模型用完整性级别来防止数据从任何完整性级别流到较高的完整性级别,信息在系统中只能自上而下地流动。Biba通过以下3条主要法则来提供完整性保护。
· 简单完整性法则:主体不能从较低完整性级别读取数据(被称为“不向下读”)。
· 完整性法则:主体不能向位于较高完整性级别的客体写数据(被称为“不向上写”)。
· 调用属性法则:主体不能请求(调用)完整性级别更高的主体的服务。
Biba通过对系统完整性需求的研究提出了三种策略,分别是低水标(Low-Water-Mark)策略、环策略以及严格完整性策略。其中,严格完整性策略的模型一般被称为Biba模型。Biba模型使用一种非常类似于BLP的状态机,从主体访问客体这个角度来处理完整性问题。
为了更加简洁、直观地表示Biba模型策略及另外的两种策略,下面分别介绍系统模型中将涉及的元素以及它们之间的常见关系。
一个系统包含主体集合 S 、客体集合 O ,以及完整性级别集合 I 。
关系表达
· <⊆ I × I 表示第二个完整性等级高于第一个完整性等级。
· ≤⊆ I × I 表示第二个完整性等级高于或者等于第一个完整性等级。
函数表达方法
· min: I × I → I 表示两个完整性等级的较低者。
· i : S ∪ O → I 表示一个主体或者客体的完整性等级。
关系表达方法
· r ⊆ S × O 表示主体读取客体的能力。
· w ⊆ S × O 表示主体写入客体的能力。
· x ⊆ S × S 表示一个主体执行另一个主体的能力。
完整性等级越高,程序执行的可靠性就越高,高等级数据比低等级数据具有更高的精确性和可靠性。这种模型隐含地融入了“信任”的概念。例如,一个客体所处的等级比另一个客体所处的等级要高,则可认为前者拥有更好的可信度。
Biba在测试策略中引入了路径转移的概念。在一个信息系统中,主体可以通过一系列的读写操作将客体中的数据沿着一条信息流路径转移到其他客体中。路径转移的定义如下:一条转移路径是信息系统中的一系列客体 o 1 ,…, o n +1 和与之对应的一系列主体 s 1 ,…, s n ,使得对于所有的 i (1≤ i ≤ n ),满足 s i r o i 和 s i w o i +1 。
下面依次介绍Biba提出的三种策略。
1.Low-Water-Mark策略
该策略的要求是在一个主体完成对一个客体的访问后,该主体的完整性安全等级将变为该主体和被访问客体中较低的等级。具体规则表示如下。
· 主体集合中的一个主体 s 可以对客体集合中的一个客体 o 进行写操作,当且仅当 I ( o )≤ I ( s )。
第一条规则是用来防止主体向更高等级的客体写入信息的。如果一个主体改变更高可信度的客体,那么会使该客体的可信度降低,因此这样的写入操作是被禁止的。
· 如果主体集合中的一个主体 s 对客体集合中的一个客体 o 进行了读操作,那么该主体在完成了读操作之后的完整性等级为min( I ( o ), I ( s ))。
第二条规则说明,当一个主体读取了比自己可信度低的客体后,它所使用的数据资料的可信度就降低了,因此,该主体也就随之降低了自身的可信度等级。这样做是为了防止数据“污染”主体。
· 主体集合 S 中的两个主体 s 1 和 s 2 , s 1 可以执行 s 2 ,当且仅当 I ( s 2 )≤ I ( s 1 )。
第三条规则规定了主体只可以执行完整性等级比自己低的主体,否则,被调用的高等级主体就会被发起调用的低等级主体破坏安全级别。
Low-Water-Mark策略约束信息转移路径的等级条件是:如果从客体 o 1 ∈ O 转移到 o n +1 ∈ O ,存在一条信息转移路径,那么对于所有的 n ≥1,都存在 I ( o n +1 )≤ I ( o 1 )。
这种策略要求主体读取完整性等级较低的客体后必须降低其完整性等级,禁止了降低完整性标签的直接和间接修改。该策略的缺点是由于第二条规则的规定,主体的完整性等级肯定呈现非递增的改变趋势,因此主体很快就不能访问等级较高的客体了。
2.环策略
该策略中允许任何完整性等级的主体读取任何完整性等级的客体,也就是说该策略对于读权限没有任何限制。与其他安全策略中按照一定等级要求的访问相比,环策略的读权限似乎形成了一个回环。具体规则表示如下。
· 无论完整性等级如何,任何主体可以读取任何客体。
· 主体集合中的一个主体 s 可以写入客体集合中的一个客体 o ,当且仅当 I ( o )≤ I ( s )。
· 主体集合 S 中的两个主体 s 1 和 s 2 , s 1 可以执行 s 2 ,当且仅当 I ( s 2 )≤ I ( s 1 )。
3.严格完整性策略
严格完整性策略下建立的Biba模型是BLP模型数学上的对偶。具体规则表示如下。
· 主体集合 S 中的主体 s 读取客体集合 O 中的客体 o ,当且仅当 I ( s )≤ I ( o )。
· 主体集合 S 中的主体 s 写入客体集合 O 中的客体 o ,当且仅当 I ( o )≤ I ( s )。
· 主体集合 S 中的两个主体 s 1 和 s 2 , s 1 可以执行 s 2 ,当且仅当 I ( s 2 )≤ I ( s 1 )。
图2-6和图2-7分别说明了Biba模型中的主体“不向下读”和“不向上写”的重要原则,分别对应Biba模型中的读规则和写规则。
图2-6 Biba模型中的主体“不向下读”原则
图2-7 Biba模型中的主体“不向上写”原则
通过图2-6和图2-7可以清晰地看出,在Biba模型中,无论是合法的读权限还是合法的写权限,都会使系统中的信息流由较高的安全等级流向较低的安全等级。
例2-4 用户Bob的安全级别是“机密”,他要访问安全级别为“秘密”的文件“文件2”,他将被允许对“文件2”写入数据,而不能读取数据。如果Bob想访问安全级别为“顶级机密”的文件“文件1”,那么,他将被允许对“文件1”进行读取数据,而不能写入数据,如表2-3所示。这样,就使信息的完整性得到了保护,如图2-8所示。
图2-8 系统中主体与客体的安全级别
表2-3 系统中主体与客体的访问关系
通过上面的介绍,我们可以看出Biba策略模型的优势在于策略比较简单明确,易于实施和验证。但是,现有的Biba策略也存在一些问题。例如,存在可用性问题。Low-Water-Mark策略和Biba严格策略的动态实施都会随着主体的长时间运行失去可调节性。对于这个问题,这里不做详细讨论。
Lipner将BLP模型和Biba模型结合,设计出一种更符合商业模式需求的完整性策略模型。
1.Lipner模型中对BLP模型的使用
Lipner模型借鉴了BLP模型的建立模式。BLP模型中分别将系统中的客体划分为不同的等级并且赋予主体不同的安全许可,Lipner模型中也规定了自身的安全等级和安全许可类型。
由高级别到低级别提供了两个安全等级,分别是:审计管理(AM),表示系统审计和管理功能所处的等级;系统低层(SL),表示任意进程都可以在这一等级上读取信息。同时定义了5个类别,分别是:开发(D),表示正在开发、测试的过程中但并未适用的生产程序;生产代码(PC),表示生产进程和程序;生产数据(PD),表示与完整性策略相关的程序;系统开发(SD),表示正在开发过程中但还未在生产中使用过的系统程序;软件工具(T),表示生产系统上提供的与敏感的和受保护的数据无关的程序。
Lipner按照不同类型用户各自的工作需要赋予他们不同的安全许可,如表2-4所示;同样地,对系统中的数据及程序进行类别的分配,如表2-5所示。
表2-4 系统中的用户及其安全许可
表2-5 系统中的客体及其安全类别
然而,如果Lipner模型只是参照BLP模型来进行建立,则在实际应用中是不能够很好地满足完整性的需求的。因此,为了修正这个问题,Lipner模型同时与Biba模型相结合。
2.Lipner完整性模型
Lipner模型结合了Biba模型后,增强了对于完整性需求的满足。对安全等级进行了扩充,增加的三个完整性安全等级由高级别到低级别分别为:系统程序(ISP),表示系统程序的等级;操作级(IO),表示生产程序和开发软件的等级;系统低层(ISL),表示用户登录时的等级。用两个完整性类别来区分生产数据及软件和开发数据及软件:开发(ID),表示开发实体;产品(IP),表示生产实体。同时还定义了另外3个类别,分别是:生产(SP),表示生产程序和生产数据;开发(SD),表示正在开发、测试过程中但并未使用的生产程序;系统开发(SSD),表示正在开发过程中但还未在生产中使用的系统程序。
Lipner按照不同类型用户各自的工作需要赋予他们不同的安全许可及完整性许可,如表2-6所示;同时还分配给不同类别的客体安全等级及完整性等级,如表2-7所示。
表2-6 系统中的用户及其许可
表2-7 系统中的客体及其等级
上述描述明确了Lipner模型对于商业模型所定义的需求,下面通过例2-5来说明这些需求的实际应用。
例2-5 公司M是一家开发并生产IT产品的公司,公司中的员工拥有不同的安全级别,以便有效地保护公司中的数据。员工主要包括以下几类:公司中的普通员工(用A来表示),开发人员(用B来表示),系统程序人员(用C来表示),系统管理人员和审计人员(用D来表示),系统控制人员(用E来表示)。根据Lipner模型的需求,公司在安全开发生产中必须满足以下要求。
· 只有用户B具备对开发实体的写权限。
· 只有用户C具备对生产实体的写权限。
· 开发系统上的程序必须经过特殊处理过程才能安装在生产系统上。
· 只有用户E才能在必要时使用对于程序的降级权限,并且用户E的所有操作需要录入日志。
· 用户D可以访问系统状态和已生成的系统日志。
Lipner将BLP模型与Biba模型进行综合,取得了较好的效果。Lipner模型说明了灵活性是BLP模型的优点,虽然针对的目的不同,BLP模型仍然可以满足许多商业性的需求,但其本质是限制信息的流向。
Clark-Wilson模型是一个确保商业数据完整性且在商业应用系统中提供安全评估框架的完整性及应用层的模型,是一种防止未授权的数据修改、欺骗和错误的模型。该模型是计算机科学家David D.Clark和会计师David R.Wilson于1987年提出的,在1989年进行了修正。Clark和Wilson总结了军事领域和商业领域对信息安全的不同要求,认为信息的完整性在商业应用中有更重要的意义,Clark-Wilson模型采用事务作为规划的基础,以事务处理为基本操作,更适用于商业系统的完整性保护。
1.模型描述
Clark-Wilson模型着重研究与保护信息和系统完整性,即组织完善的事务和清晰的责任划分。组织完善的事务意味着用户对信息的处理必须限定在一定的权限和范围之内进行,以保证数据完整性;责任划分意味着任务需要两个以上的人完成,需要进行任务划分,避免个人欺骗行为发生。这里,完整性包含数据本身的完整性和数据操作的完整性。首先,保证系统数据的完整性。这个属性要求系统保证数据的一致性,即在每一次操作前后都要保持一致性条件。一个良定义的事务处理就是这样的一系列操作,使系统从一个一致性状态转移到另一个一致性状态。其次,保证对这些数据操作的完整性。这个属性建立在职责分离的定义之上。在商业领域,一项商业事务通常是由多个工作人员经过多个步骤共同完成的,否则,就极容易发生由于单个人员的舞弊而造成巨大损失。在至少两个工作人员共同完成的情况下,如果要进行数据破坏就需要至少两个不同的人员共同犯错,或者他们合谋进行破坏,这种多个人员分职责共同处理事务的形式大大降低了发生该类损失的可能性。责任分离规则就是要求事务的实现者和检验事务处理是否被正确实现的检验者是不同的人员。那么,在一次事务处理中,至少要有两个人参与才能改变数据。
例2-6 银行中的存款业务。存入金额为 n 的存款操作,必须保证操作后的金额总数等于操作前的金额数加上存入的金额数,即如果操作前账户上的存款金额为 m ,那么操作完成后账户上的金额数为 m + n 。这样就保证了一致性条件。
Clark-Wilson模型将系统中的数据定义为两种类型:有约束数据项(CDI),它们是系统完整性模型应用到的数据项,即可信数据;无约束数据项(UDI),与CDI相反,它们是不属于完整性控制的数据。CDI集合和UDI集合可以用来划分模型系统中的所有数据集合。
Clark-Wilson模型还在系统中定义了两种过程,即转换过程和完整性验证过程。转换过程(TP)的作用是把UDI从一种合法状态转换到另一种合法状态,是良定义的事务处理;完整性验证过程(IVP)用来检验CDI是否符合完整性约束,如果符合,则称系统处于一个有效状态,Clark-Wilson模型经常把它应用在与审计相关的过程中。
Clark-Wilson模型中的数据不能由用户直接修改,必须由可信任的转换过程完成修改,可信的数据项需要通过TP来进行操作,并且数据状态的完整性还需要通过IVP来进行检验。
对应到例2-6中,银行中的存储业务、账户结算就是CDI,检查账户的结算就是IVP,存入、取出和转账都属于TP。银行的检查人员必须验证银行检验账户结算的过程是否是正确的,以保证账户的正确管理。
Clark-Wilson安全策略下系统的安全特性是通过认证和实施规则来控制的,这些规则说明了Clark-Wilson安全策略下各元素之间的交互关系。下面介绍5条认证规则。
· 认证规则1:任意IVP在运行时,它必须确保所有的CDI处于有效状态。
· 认证规则2:对于相关的CDI,TP必须保证这些有效的CDI转换后的状态也是有效的。例如,某TP已经被证明可以进行银行的股票投资业务,但它可能没有考虑银行结算,如果该TP被允许执行,可能会导致银行结算出错,即操作后的CDI出错,这样的TP就应该被阻止。
· 认证规则3:访问关系必须满足职责分离的要求。例如,某用户是银行的合法用户,但当他要求银行提供服务时,必须证明自身对应系统中的身份是合法的。
· 认证规则4:所有的TP必须被认证,以保证数据转换为CDI之前被证明是正确的。例如,当一名银行用户要存入一定金额的存款时,他可能在添加存单时填写错误,将存入的1000元钱填写成10000元,此时银行柜员必须确认实际存款金额,向银行系统中输入正确的存款金额。
· 认证规则5:任何一个接受UDI作为输入参数的TP都必须经过认证,以保证UDI取任何可能的值,系统都能做出有效的转换操作,操作可能将UDI转换为CDI,可能拒绝该UDI,也可能不进行任何转换。
为了保证Clark-Wilson模型的安全策略得到正确的实施,下面描述4条实施规则。
· 实施规则1:系统必须保护CDI与TP的认证关系,且必须保证TP在具有操作权的情况下才可以操作CDI。
· 实施规则2:系统将用户与每个TP及相关CDI关联起来,只有被明确授权时,TP才能代表用户执行相关CDI。
· 实施规则3:系统必须认证每一个试图执行TP的用户。
· 实施规则4:只有通过TP认证的管理者才可以改变与此TP相关的实体列表。
Clark-Wilson模型用这9条规则定义了一个实行完整性策略的系统。这些规则说明了在商业数据处理系统中完整性是如何实施的。Clark-Wilson模型在信息安全领域引起了人们很大的兴趣,也表明商业上对信息安全有一些独特的要求。下面用例2-7来说明电子商务进程中对Clark-Wilson安全性模型的应用,模型中需要保证数据的一致性和转换的完整性。
例2-7 在一个普通的电子商务进程中,用户首先会向应用程序服务器提交订单请求(订单属于UDI),转换过程将订单转换为一个有约束数据项(CDI 1 ),CDI 1 更新客户的订单(CDI 2 )及账单(CDI 3 ),完整性验证过程需要检查客户的订单(CDI 2 )及账单(CDI 3 )是否满足Clark-Wilson安全性模型,这样才能保证交易的完整性,具体过程如图2-9所示。
图2-9 电子商务进程中Clark-Wilson安全性模型的应用
2.与其他模型的比较
Clark-Wilson模型有很多新的特性,下面通过将该模型与Biba模型进行比较来突出这些特性在安全策略方面的贡献。
Biba模型中主体和客体分别有对应的完整性等级。从某种意义上说,Clark-Wilson模型也是如此,其中每个主体有两个等级,即认证的和未被认证的,客体也有两个等级,即受约束(CDI)和不受约束(UDI)。通过这样的相似性来分析这两种模型的差异。
这两种模型的区别在于认证规则。Biba模型没有认证规则,它断言有可信的主体存在,并以此保障系统的操作遵守模型的规则,但它却没有提供任何机制来验证被信任的实体以及它们的行为。Clark-Wilson模型则提供了实体及其行为必须符合的需求。因为更新实体的方法本身就是一个转移过程,它会被验证其安全性,这就为提出的假设建立了基础。
Biba模型与Clark-Wilson模型在处理完整性等级变化的问题上的表现也不同。Biba模型连接多个信源,它的读写关系严格按照安全等级进行划分,因此很难找到一个可信实体能够将收到的所有不同安全等级的信息转发到更高安全等级的进程中。而Clark-Wilson模型中要求了一个可信实体向一个更高的完整性等级证明更新数据的方法,因此可信实体若要更新数据项,只需要证明更新数据的方法,并不需要证明每一个更新数据项,这种方法非常实用。