查看原文
其他

网络安全之访问控制

计算机与网络安全 计算机与网络安全 2022-06-01

一次性进群,长期免费索取教程,没有付费教程。

教程列表见微信公众号底部菜单

进微信群回复公众号:微信群;QQ群:16004488


微信公众号:计算机与网络安全

ID:Computer-network

访问控制就是通过某种途径准许或者限制访问能力,从而控制对关键资源的访问,防止非法用户的侵入或者合法用户的不慎操作所造成的破坏。访问控制技术作为一种安全手段,无论是在计算机安全发展的初期还是在网络发达的现今,作为一种重要的计算机安全防护技术,都得到广泛应用。


一、访问控制概述


(一)访问控制技术背景


随着计算机网络广泛普及,新的软件应用模式层出不穷,极大地影响和改变了人们工作和生活的方式,提高了人们对于计算机信息系统的依赖程度。然而,由于信息系统自身的复杂性、网络的广泛可接入性等因素,系统面临日益增多的安全威胁,安全问题日益突出,其中一个重要的问题是如何有效地保护系统的资源不被窃取和破坏。在网络安全的大背景下,访问控制作为一种重要的安全支撑技术得到了更为广泛的应用,一个重要的特点在于:它明确地定义和限制了信息系统用户能够对资源执行的访问操作,因此可以有效提供对信息资源的机密性和完整性保护。


访问控制技术是由美国国防部(DoD,Department of Defense)资助的研究和开发成果演变而来的。最初的研究和应用主要是为了防止机密信息被未经授权者访问,后来的应用主要扩展至商业领域,但访问控制技术的重要性从未降低。在美国国防部公布的极具影响力的《可信计算机系统评估准则》(TCSEC)中明确提出了对访问控制的要求,C1级要求系统具备自主访问控制能力,B1级以后要求系统具备强制访问控制能力。《信息技术安全评估通用准则》(CC)(我国等同采用为国家标准GB/T18336)的“安全功能需求”的FDP_ACC.1−2条提出了访问控制安全策略的功能要求,FDP_ACF.1 给出了基于安全属性的访问控制要求,FMT_MSA.1−3 提出了安全属性管理要求。ISO7498−2 1989《信息处理系统开放系统互连安全体系结构》(对应国家标准GB/T 9387.2−1995)也把访问控制作为5种基本的安全服务之一提出。美国国家安全局在2002年制订颁布了《信息保障技术框架》(IATF 3.0),为政府、企业中的信息基础设施的保护提供技术指导,它围绕信息保障,分层次地、系统地总结了目前信息保障的技术措施,其中,访问控制作为第一种主要安全服务被提出。以上情况说明,访问控制在政府企业的内部信息管理和信息安全保障方面具有极其重要的作用和地位。


需要特别指出的是,访问控制是在组织或企业内实现内部管理控制的一种常用手段,但并不是唯一手段。很多人通常会将访问控制与内部管理控制(或简称内控)两者搞混淆,认为两者的目的是相同的或一致的,但其实并非如此。通常,在组织内实施内控,是为了保障实现以下的目标:(1)信息的可靠性和完整性;(2)政策、计划、规程、法律、法规和合同执行的正确性;(3)资产的保护;(4)资源使用的经济性和有效性;(5)业务或计划既定目标的达成。从以上目标可以看出,在组织或企业内进行内部管理控制是为了达成既定的目的和目标而采取的管理行动,是从组织或者企业的业务角度出发进行控制;而访问控制是从防止资源被恶意使用的角度采取的保护措施,目的只是从技术上保护程序、数据、系统或网络。通过对比可以看出,只有“对资产的保护”是内控和访问控制的共同目标,在其他方面,访问控制与内控的目标是不同的,因此,那种认为内控机制仅包括访问控制,或者只需要采用访问控制技术就能够实现内控机制的认识是错误的。而且,两者所涉及的被保护资产也有明显的不同:内控涉及所有的资产,包括有形的和无形的资产,既包括计算机相关的资产也包括和计算机无关的资产;访问控制涉及的无形(知识)资产包括程序、数据、程序库、网络等,有形资产主要包括硬件和放置计算机的房产等。

(二)访问控制的主要内容


访问控制技术的实现以访问控制策略的表达、分析和实施为主。其中,访问控制策略定义了系统安全保护的目标,访问控制模型对访问控制策略的应用和实施进行了抽象和描述,访问控制框架描述了访问控制系统的具体实现、组成架构和部件之间交互流程。下面对相关内容做简要介绍,并说明以上三部分内容在整个访问控制研究中的地位和作用,揭示其各自在整个访问控制体系中的位置。


(1)访问控制策略


访问控制系统采用的安全策略(简称访问控制策略)定义了对于系统而言怎样是安全的,是对安全目标的直接体现。访问控制策略定义了系统进行访问控制时应该遵循的规则(判定依据),这种规则需要通过策略描述语言表达出来。策略语言可以分为2种类型:高层策略描述语言和基于逻辑的形式化描述语言。高层策略描述语言具有丰富的语意,且易于制定、理解与实施,如XACML、Ponder、SPL、RT等,但其描述的访问控制策略难以进行形式化的分析和验证;基于逻辑的策略描述语言表达能力强大,且易于进行安全性质的分析与验证;但语言的语意不够直观,过于复杂,很难被广泛地接受。基于逻辑的形式化策略描述语言从计算方式的角度可以分为过程式和状态机式。绝大多数形式化策略语言都是基于状态机的。


(2)访问控制模型


访问控制模型是对访问控制策略的建模,位于面向用户的安全需求和面向计算机系统的顶层规范之间,是保证计算机系统正确实施安全策略的重要技术。安全策略模型是组织安全策略在计算机系统中的体现,它把抽象的、不精确的组织安全策略具体化,是沟通系统设计和组织安全策略的桥梁。安全策略模型在安全系统的整个生命周期中都具有重要的作用。在系统设计时,它可以作为安全设计的指南和规格说明书。在系统安全评测阶段,可以帮助评测人员评估设计人员对组织安全策略的理解是否正确以及系统设计和组织安全策略之间是否存在不一致,在系统设计和实现中是否存在安全策略不允许的隐通道。另外,它还可以有助于安全功能的维护和升级。


(3)访问控制框架


经典访问控制模型的背景大都是针对多用户信息共享的单机环境,它基于一个集中的引用监控器(RM,Reference Monitor),负责所有对资源的访问决策及决策结果的实施。但是,随着网络技术的迅速发展,出现了大量异构的计算环境,这些环境对信息的组织和处理采用了不同的模式,经典的引用监控器框架需要针对这些不同的计算环境增添多种不同的访问控制实现技术来满足对访问控制策略和模型的支持。不同的应用及运行环境也会导致多样化的安全威胁,带来不同的访问控制需求,因此,要求系统能支持安全策略的多样性,满足多样化的安全目标,所以,研究访问控制系统的组成架构和部件之间交互流程也成为了访问控制中一个实施的关键所在。


二、访问控制模型与管理


(一)访问控制基本概念


在介绍访问控制模型之前,需要对访问控制中的一些基本概念进行简要的介绍。


(1)主体:主体是访问操作中的主动实体,包括所有能够发起访问操作的实体,如人、进程、设备等。主体是访问的发起者,并造成了信息的流动或者系统状态的改变。


(2)客体:客体是访问操作中的被动实体,是包含信息或接受信息的被动接受访问的资源,如文件、设备、信号量、网络节点等。客体在信息流动中是处于主体的作用之下的,对客体的访问意味着对其中所包含信息的访问。


(3)动作:动作是信息在主体和客体之间流动的交互方式,有的文献称为“访问模式”。常见的动作主要包括读、写、读/写和执行等。


(4)权限(访问权限):是否允许主体(s)对客体(o)执行某种动作(a),如果主体可以访问,则为允许(pass);否则为禁止(deny)。权限的概念本质上描述的是一种对主体是否拥有许可的判定,用函数F可以表示为F(s, o, a)={ pass/deny}或者F(s, o, a)={1/0}。例如,在Windows系统中,具有管理员权限的用户Alice(主体)对注册表(客体)执行修改(动作)的操作,访问权限= pass;没有管理员权限的来宾用户Guest对注册表执行修改的操作,访问权限= deny。


(5)策略(访问策略、访问控制策略):是主体对客体的访问规则集,这个规则集直接定义了主体对客体的动作行为和客体对主体的条件约束。策略体现了一种授权行为,也就是允许某个主体可以被授予一组特权或者(与特权对应的)安全属性的行为。


(6)标识:在一定范围内唯一表示一个实体身份的符号。在访问控制中主要使用的标识可以分为主体标识、客体标识、动作标识、属性标识等。访问控制对信息资源实施保护的能力来自于要明确地定义“主体对客体执行某种动作”的整个访问操作过程,并对该过程通过某种途径施加限制,因此,访问控制机制能否正确实施,能否满足既定的安全目标,与主体、客体、动作等具体标识方法有密切的关系,不同的标识方法也有各自的优缺点和侧重点,这些都会对访问控制策略和具体的实现技术产生重要的影响。


(7)授权:授权是指将访问权限授予一个主体的行为。该定义至少包含了2个层次的含义:①断言一个主体可以被授予一组特权或者安全属性的行为;②在确定主体拥有对应的访问权限之后,允许主体访问资源的操作行为。第一个层次的含义描述的是一种授权管理行为,通常需要安全管理员的参与;而第二层含义描述的是一种自动化的访问控制操作行为,是由计算机系统自动实施的。


(8)访问控制:指在鉴别用户的合法身份后,通过某种途径显式地准许或限制用户对数据信息的访问能力及范围,阻止未经授权的资源访问,包括阻止以未经授权的方式使用资源。当主体提出资源访问请求时,系统必须先要确认是合法的主体,而不是假冒的欺骗者,也就是对主体进行鉴别(也称认证)的过程。主体通过鉴别以后,就会获得一个主体标识用来区别其身份,此时系统才能根据预设的访问控制策略来判定主体是否拥有权限对客体执行访问动作。该定义说明,授权管理过程往往发生在访问控制之前,前者是后者的执行依据。


(9)授权管理:从访问控制的定义中可以明确地看到,在实际应用中授权管理和访问控制发生的时间存在显著的差异。因此,在实际应用中通常需要明确地区分授权管理和访问控制。而在学术研究中,只有少数的学者明确地区分了授权管理和访问控制这2个概念,两者在大多数情况下是被混用的,也有学者将授权管理过程简称为“授权”,这实际上是对完整授权概念的缩小。


(二)访问矩阵(Access Matrix)


最早对访问控制的抽象是访问矩阵。1971年,Lampson第一次使用主体、客体和访问矩阵的概念形式化地对访问控制进行了抽象,开始了真正意义上计算机访问控制系统安全模型的研究。Lampson的论文中提出:主体是访问操作中的主动实体;客体是访问操作中的被动实体;访问矩阵的每行对应一个主体,每列对应一个客体,每个单元格描述了主体可以对客体执行的访问操作。图1给出一个访问矩阵的例子。

图1  访问矩阵示例

此外,该模型还包含了一组用于控制访问权限传播的规则,这些规则赋予客体的所有者(Owner)完全控制客体的权限,意味着如果主体User A对客体Obj1拥有Own权限,那么User A可以对Obj1进行任何操作。这形成了后面要介绍的自主访问控制的最初形式。


访问矩阵是计算机安全中一个基本的安全模型,其形式很简单,表达能力却十分强大。但实际系统却很少直接使用访问矩阵。这主要有2个原因:(1)实际系统中主体和客体的数目比较庞大,这可能造成访问矩阵的规模很大,耗费大量的存储空间;(2)访问矩阵通常是稀疏的,直接存储矩阵本身是不经济的,因为一个给定主体通常只能访问少量的客体,一个给定的客体通常只能被少数几个主体访问。不过,访问矩阵是一种重要的理论模型和分析工具。


在实际系统中,常见的实施访问矩阵的方法有2种:访问控制列表(ACL,Access Control List)、能力列表(CL,Capabilities List)。


按照ACL的方法,每个客体与一个ACL进行关联,记录了允许访问该客体的主体及其允许的访问操作。这种方法相当于按列存储访问矩阵。ACL方法可以很容易地查看所有能够访问一个客体的主体,也可以容易地撤销所有主体对客体的访问权限。但是在ACL中,要从主体的角度实施权限管理是十分困难的,这是因为要确定一个主体的所有访问权限,就需要遍历系统中所有的ACL,而很多系统ACL是随着客体在系统中分布存储的。如果想要从主体的角度实施权限分配与管理,就需要采用CL的方法。


CL是对主体访问能力的描述,按照CL的方法,每个主体关联一个CL,CL列出了该主体允许访问的所有客体及对应的访问操作。这种方式相当于按照行的方式存储访问矩阵,可以很容易地查看一个主体拥有的所有访问权限。同样地,要在CL中确定可以访问指定客体的所有主体也是困难的。


有学者通过研究提出,ACL方法和CL方法可以结合使用。在分布式系统中,这种混合的方法可以避免重复的用户认证。主要的原理是:由系统中的服务提供对客体的管理,用户如果要访问客体,将在通过认证后获得一个CL,通过使用该CL中描述的主体允许访问服务的能力来访问系统中的服务,服务则可以依据ACL进一步实施细粒度的访问控制。


(三)自主访问控制


自主访问控制(DAC,Discretionary Access Control) 又称为随意(或任选)访问控制,是一种最常见的访问控制方法。DAC是在确认主体身份及所属组的基础上,根据访问者的身份和授权来决定访问模式、对访问进行限定的一种控制策略。DAC策略允许对客体拥有控制权的主体明确地指定其他主体对该客体的访问权限。美国国家计算机安全中心(NCSC)发布的彩虹系列标准把自主访问控制定义为:一种根据主体的标识或者它们所属组的标识来限制其对客体的访问的方法。“自主”的含义是这种策略允许有某种访问特权的主体把对客体的访问权限传递给其他主体。典型的实施自主访问控制策略的机制主要包括ACL和CL。


自主访问控制模型(DAC Model,Discretionary Access Control Model)是根据自主访问控制策略建立的一种模型,允许合法用户以用户或用户组的身份访问策略规定的客体,同时阻止非授权用户访问客体,某些用户还可以自主地把自己所拥有的对客体的访问权限授予其他用户。自主访问控制又称为任意访问控制。LINUX、UNIX、Windows server 的操作系统都提供自主访问控制的功能。在实现上,首先要对用户的身份进行鉴别,然后就可以按照访问控制列表所赋予用户的权限允许和限制用户使用客体的资源。主体控制权限的修改通常由特权用户或是特权用户(管理员)组实现。


任意访问控制对用户提供的这种灵活的数据访问方式,使DAC广泛应用在商业和工业环境中;由于用户可以任意传递权限,那么,没有访问文件File1权限的用户A就能够从有访问权限的用户B那里得到访问权限或直接获得文件File1;因此,DAC模型提供的安全防护还是相对较低的,不能给系统提供充分的数据安全保护。


一般说来,自主访问控制中客体的拥有者持有对该对象的控制权,可以把对该客体的访问权限授予其他用户。这种授予和取消其他主体访问权限的行为本身也对应着一种特权,称为控制权(Control Permission)或者管理权(Administrative Permission)。自主访问控制还可以进一步分为受限自主访问控制和自由的自主访问控制。前者允许对客体拥有控制权的主体把对客体的访问权限授予其他主体,但不能把控制权授予其他主体。自由的自主访问控制允许对客体拥有控制权的主体把控制权进一步授予其他主体。与受限自主访问控制相比,自由的自主访问控制策略具有极大的灵活性。


自主访问控制模型的特点是授权的实施主体(可以授权的主体、管理授权的客体、授权组)自主负责赋予和回收其他主体对客体资源的访问权限。DAC模型一般采用访问控制矩阵和访问控制列表来存放不同主体的访问控制信息,从而达到对主体访问权限的限制目的。


自主访问控制存在2个重要的缺陷:权限传播可控性差、不能抵抗木马攻击。这使自主访问控制的安全程度低,难以独自支撑高安全等级要求的计算环境。在权限传播方面,自主访问控制策略安全性不高,信息在移动过程中的访问权限甚至特权关系都可能被改变。例如,最初客体的拥有者A把控制权传递给主体B以后,B可以把对客体的访问权甚至对客体的控制权传递给任意的主体C。B的这种权限传递行为是不受客体拥有者A控制的。因此,在权限传播过程中,原拥有者(如本例中的A)不希望其获得访问权限的某些主体可能会获得对客体的访问权限。为了解决这个问题,人们后来又提出了源发者控制的访问控制,但没有得到广泛的现实应用。


自主访问控制也不能有效地抵抗木马攻击。如图2所示,设主体A是文件f的拥有者,并且A不希望主体B获得文件f中的信息。主体B为了得到文件f中的信息,创建木马程序P,并植入到系统中提供给A使用。A为了使用程序P来管理文件f,就会把对文件f的读权限授予木马程序P。同时,主体B创建文件f ',并且授予木马程序P对f '的写权限,这样当A运行程序P时,P可以从f中读取信息并且成功写入到f'中,B就可以通过读f '读取到文件f中的内容。

图2  自主访问控制中的木马攻击

通过以上的介绍可以看到,自主访问控制通过将用户权限与用户直接对应实现了较高的访问效率和灵活度,但由于其权限传播可控性差,用户间的关系也无法进行体现和管理,管理人员难以确定哪些用户对哪些资源具有访问权限,导致信息容易泄露。一旦带有特洛伊木马的应用程序被激活,就会泄露和破坏接触到的信息,甚至可以改变这些信息的访问权限。此外,自主访问控制的授权管理也很繁琐,当用户情况发生变化时要进行大量的修改操作,使整个系统的统一授权管理非常困难,很容易产生安全漏洞和其他的技术问题。


(四)强制访问控制


自主访问控制虽然具有很大的灵活性,并易于理解、使用,但由于其自身存在的重要缺陷难以保证安全,很难满足高安全等级的要求。因此,强制访问控制(MAC,Mandatory Access Control)应运而生。


强制访问控制依据主体和客体的安全级别来决定主体是否有对客体的访问权。强制访问控制本质上是基于规则的访问控制,系统中的每个进程、每个文件、每个 IPC 客体(消息队列、信号量集合和共享存储区)都被赋予了相应的安全属性,这些安全属性是不能改变的,它由管理部门(如安全管理员)或由操作系统自动地按照严格的规则来设置,不像自主访问控制那样由用户或它们的程序直接或间接地修改。


强制访问控制最典型的例子是Bell 和 La Padula提出的BLP模型。在BLP模型中,主体包括所有能够发起访问操作的实体,如操作系统进程等;客体是被动接受访问的资源,如文件。主体对客体的访问模式包括读、写、读写和执行。BLP模型赋予每个客体一个安全级别(Security Level),赋予每个主体一个安全通行证(Security Clearance),两者通称为安全标签。


BLP模型的主要特点如下。(1)将主体和客体分级,根据主体和客体的安全标签来决定访问权限。BLP模型中的级别按从下到上的顺序包括4级:无密级(Unclassified)、机密级(Confidential)、秘密级(Secret)、绝密级(Top Secret)。(2)从机密性的要求出发,遵循“下读/上写”的访问控制模式(也被分别称为简单安全—特性和*—特性),即:对于读操作,秘密级(S)的主体禁止读取绝密级(TS)客体中的内容,允许读取秘密级(S)、机密级(C)和无密级(U)客体中的内容;对于写操作,秘密级(S)的主体禁止向机密级(C)和无密级(U)客体中进行写入,允许向秘密级(S)、绝密级(TS)客体中进行写入。(3)通过为每一个主体与客体赋予安全标签,实现了单向的信息流通模式。BLP模型给出了系统状态的定义,并且把简单安全—特性和*—特性定义为状态不变量,把满足这2个特性的状态称为安全状态。BLP模型通过形式化的证明,得到基本的安全定理:如果一个系统的初始状态是安全的,并且所有的状态转换操作保持状态的安全性,那么,这个系统就是安全的。从直观上理解,即如果一个系统在初始状态已将主体和客体进行了正确的分级,并且系统中所有的主体和客体都严格遵循“下读/上写”的原则,那么,信息将只能沿着(U)→(C)→(S)→(TS)的方向进行单向的流通(这是因为任何级别的主体都只能向高于或等于自身级别的客体中写入),从而确保系统保持安全的状态。


强制访问系统根据主体和客体的敏感标记来决定访问模式。访问模式包括:


下读(Read Down):用户级别大于文件级别的读操作;

上写(Write Up):用户级别小于文件级别的写操作;

下写(Write Down):用户级别等于文件级别的写操作;

上读(Read Up):用户级别小于文件级别的读操作。


由于MAC通过分级的安全标签实现了信息的单向流通,因此,一直被军方采用,其中,最著名的是Bell-La Padula模型和Biba模型:Bell-La Padula模型具有只允许向下读、向上写的特点,可以有效地防止机密信息向下级泄露;Biba模型则具有不允许向下读、向上写的特点,可以有效地保护数据的完整性。


下面对MAC模型中的几种主要模型:Lattice模型、Bell-La Padula模型(BLP Model)和Biba模型(Biba Model)做简单的阐述。


(1)Lattice模型


在Lattice模型中,每个资源和用户都服从于一个安全类别。这些安全类别称为安全级别,也就是在本章开始所描述的5个安全级别:TS、S、C、R、U。在整个安全模型中,信息资源对应一个安全类别,用户所对应的安全级别必须比可以使用的客体资源高才能进行访问。Lattice模型是实现安全分级的系统,这种方案非常适用于需要对信息资源进行明显分类的系统。


(2)Bell-La Padula模型


BLP(Bell and La Padula,1976)模型是典型的信息保密性多级安全模型,主要应用于军事系统。Bell-La Padula模型通常是处理多级安全信息系统的设计基础,客体在处理绝密级数据和秘密级数据时,要防止处理绝密级数据的程序把信息泄露给处理秘密级数据的程序。BLP模型的出发点是维护系统的保密性,有效地防止信息泄露,这与后面的维护信息系统数据完整性的Biba模型正好相反。


Lattice模型没有考虑特洛伊木马等不安全因素的潜在威胁,这样,低级安全用户有可能复制和拷贝比较敏感的信息。在军方术语中,特洛伊木马的最大作用是降低整个系统的安全级别。考虑到这种攻击行为,Bell 和 La Padula 设计了一种模型抵抗这种攻击,称为Bell-La Padula模型。Bell-La Padula模型可以有效防止低级用户和进程访问安全级别比它们高的信息资源。此外,安全级别高的用户和进程也不能向比它们安全级别低的用户和进程写入数据。上述Bell-La Padula模型建立的访问控制原则可以用两点简单表示:①无上读;②无下写。


BLP模型的安全策略包括强制访问控制和自主访问控制两部分:强制访问控制中的安全特性要求对给定安全级别的主体,仅被允许对同一安全级别和较低安全级别上的客体进行“读”;对给定安全级别上的主体,仅被允许向相同安全级别或较高安全级别上的客体进行“写”;任意访问控制允许用户自行定义是否让个人或组织存取数据。Bell-La Padula模型用偏序关系可以表示为:①rd,当且仅当SC(s)≥SC(o),允许读操作;②wu,当且仅当SC (s)≤SC(o),允许写操作。BLP模型“只能从下读、向上写”的规则忽略了完整性的重要安全指标,使非法、越权篡改成为可能。


BLP模型为通用的计算机系统定义了安全性属性,即以一组规则表示什么是一个安全的系统,尽管这种基于规则的模型比较容易实现,但是它不能更一般地以语义的形式阐明安全性的含义,因此,这种模型不能解释主—客体框架以外的安全性问题。例如,在一种远程读的情况下,一个高安全级主体向一个低安全级客体发出远程读请求,这种分布式读请求可以被看作是从高安全级向低安全级的一个消息传递,也就是“向下写”。另一个例子是如何处理可信主体的问题,可信主体可以是管理员或是提供关键服务的进程,像设备驱动程序和存储管理功能模块,这些可信主体若不违背 BLP 模型的规则就不能正常执行它们的任务,而BLP模型对这些可信主体可能引起的泄露危机没有任何处理和避免的方法。


(3)Biba模型


Biba模型(Biba,1977)在研究BLP模型特性时发现,BLP模型只解决了信息的保密问题,在完整性定义方面存在一定缺陷。BLP模型没有采取有效的措施来制约对信息的非授权修改,因此,使非法、越权篡改成为可能。考虑到上述因素,Biba模型模仿BLP模型的信息保密性级别,定义了信息完整性级别,在信息流向的定义方面不允许从级别低的进程到级别高的进程,也就是说用户只能向比自己安全级别低的客体写入信息,从而防止非法用户创建安全级别高的客体信息,避免越权、篡改等行为的产生。Biba模型可同时针对有层次的安全级别和无层次的安全种类。


Biba模型的2个主要特征如下。


①禁止向上“写”,这样使完整性级别高的文件一定是由完整性高的进程所产生的,从而保证了完整性级别高的文件不会被完整性低的文件或完整性低的进程中的信息所覆盖;

②Biba模型没有下“读”。


Biba模型用偏序关系可以表示为:


①ru,当且仅当SC(s)≤SC(o),允许读操作;

②wd,当且仅当SC(s)≥SC(o),允许写操作。


Biba模型是和BLP模型相对立的模型,Biba模型改正了被BLP模型所忽略的信息完整性问题,但在一定程度上却忽视了保密性。


MAC访问控制模型和DAC访问控制模型属于传统的访问控制模型,对这2种模型研究的也比较充分。在实现上,MAC和DAC通常为每个用户赋予对客体的访问权限规则集,考虑到管理的方便,在这一过程中还经常将具有相同职能的用户聚为组,然后再为每个组分配许可权。用户自主地把自己所拥有的客体的访问权限授予其他用户的做法,其优点是显而易见的,但是,如果企业的组织结构或系统的安全需求处于变化的过程中时,就需要进行大量繁琐的授权变动,系统管理员的工作将变得非常繁重,且容易发生错误并造成一些意想不到的安全漏洞。考虑到上述因素,新的机制被引入。首先,要介绍一下概念,角色(Role)是指一个可以完成一定事务的命名组,不同的角色通过不同的事务来执行各自的功能;事务(Transaction)是指一个完成一定功能的过程,可以是一个程序或程序的一部分。角色是代表具有某种能力的人或是某些属性的人的一类抽象,角色和组的主要区别在于:用户属于组是相对固定的,而用户能被指派到哪些角色则受时间、地点、事件等诸多因素影响。角色比组的抽象级别要高,角色和组的关系可以这样认为:作为饰演的角色,我是一名学生,我就只能享有学生的权限(区别于老师),但是我又处于某个班级中,就同时只能享有本“组”组员的权限。


强制访问控制的优点是管理集中,根据事先定义好的安全级别实现严格的权限管理,因此,适用于对安全性要求高的应用环境,是国防领域和政府机构安全系统中最为重要的访问控制模型。另外,强制访问控制通过信息的单向流动来防止信息扩散,可以有效抵御带有特洛伊木马的应用程序对系统保密性的攻击。强制访问控制的缺点在于安全级别间强制性太强,权限的变更非常不方便,很多情况下主体或客体安全级别的划分与现实要求无法一致,造成系统管理不便,因此,应用领域比较窄,使用不灵活,一般只适合政府机构和军事领域等具有严格机密性要求的行业或领域。


(五)基于角色的访问控制


MAC和DAC都属于传统的访问控制模型,对这2种模型的研究也比较充分。两者的优点与缺点也都较为明显。例如,DAC 中主体可以自由扩散权限,导致模型安全程度不高, MAC强制性太强,权限的变更非常不方便。此外,2种传统模型如果面临企业的组织结构或是系统的安全需求处于变化过程中时,需要进行大量繁琐的规则变动,系统管理员的工作将变得非常繁重,如果企业有1 000个主体访问10 000个客体、有3种访问动作,则最多可能需要3 000万条规则,在上千万条规则中进行修改是非常大的工作量,且容易发生错误并造成一些意想不到的安全漏洞。


基于角色的访问控制(RBAC,Role Based Access Control)通过引入角色的概念,把对客体对象的访问权限授予角色而不是直接授予用户,然后为用户分配角色,用户通过角色获得访问权限。RBAC模型通过将权限与角色相关联,极大地简化了权限的管理。


迄今为止,已经讨论和发展了4种RBAC模型,图3表示了它们之间的相互关系。其中,RBAC0为基本模型,RBAC1为角色分层模型,RBAC2为角色约束模型,RBAC3为统一模型。

图3  RBAC家族系列关系

(1)基本模型RBAC0


RBAC0表达了对任何支持RBAC系统的最小需求,由4个基本要素集合构成,如图4所示,即用户(User)、角色(Role)、会话(Session)、权限(Permission)。相关术语的定义如下。

图4  RBAC0模型

①用户:一个可以独立访问系统中数据或数据资源的主体,可以是人、进程等。


②角色:一个可以完成某种特定工作活动的工作位置,它代表了与特定工作活动相关的一系列动作和权限的集合。例如经理、会计、教师等。


③会话:会话对应于一个用户和一组激活的角色,表示用户的某种角色激活的过程。一个用户可以进行几次会话,在每次会话中激活不同的角色,这样用户将具有激活的角色所具有的各种权限。用户必须通过会话才能激活角色。


④权限:是对系统中的数据或用数据表示的其他资源进行访问的许可。权限的具体描述取决于系统的实现细节,如操作系统中保护的客体一般是文件、目录、端口、设备等,相应的操作模式有读取、写入、打开、关闭和运行等,而在关系型数据库管理系统中保护的客体是关系、元组、属性、视图,相应的操作模式有查询、更新、删除和插入等。


此外,针对系统中存在的用户集、角色集和权限集,还存在2种分配关系:用户的分配(UA,User Assignment)和权限的分配(PA,Permission Assignment)。UA是用户集合到角色集合的多对多映射,也就是说,RBAC中一个用户可以被管理员指派多个角色,一个角色也可以接纳多个用户。PA是权限集合到角色集合的多对多映射,即通过授权管理机制,管理员可以给一个角色多个访问权限,而一个权限也可以赋予多个角色。


在RBAC0模型系统中,当每个用户进入系统时,就得到了一个会话,会话对应于一个用户和一组激活的角色,表示用户的一个角色激活的过程。在角色激活过程中,有2种映射关系,一种是将每个会话映射到单个用户,另一种是将每个会话映射到该用户对应的一组角色,只要在授权管理过程中静态定义过这一组角色与该用户的关系,会话就将它所代表的用户映射到多个角色中去,用户将具有激活的角色所具有的各种权限。


由于一个会话激活的角色可能只是用户的全部角色的一个子集,因此这种关于角色和会话的设置带来的好处是容易实施最小特权原则(Least-Privilege Principle)。所谓最小特权原则是指将超级用户的所有特权分解成一组细粒度的特权子集,每个子集对应不同的“角色”,分别赋予不同的用户,每个用户仅拥有完成其工作所必须的最小特权,避免了超级用户的误操作或其身份被假冒后而产生的安全隐患。


另外需要特别注意的是,RBAC中的权限只能应用于数据和资源类客体,而不能应用于模型本身的组成要素,也就是说,修改集合U、R、P和关系PA、UA的权限称为管理权限(或管理特权),而前面介绍的RBAC中的权限并不包含管理权限。因此,在RBAC中假定只有安全管理员才能修改这些组成要素。


(2)角色分层模型RBAC1


RBAC1是在RBAC0中加入了角色继承的概念。在一般的单位或组织中,特权或职权通常是具有继承关系的,上级领导所得到的信息访问权限高于下级职员的权限,而角色层次(RH,Role Hierarchy)可以反映这种现实生活中组织的层次结构,并通过支持成员和权限继承以方便权限管理。


RBAC1中角色之间的继承关系是根据权限来划分的,即角色1继承角色2就表示角色1拥有角色2的全部权限。例如,如图5所示,初级角色为医院护理,医生相比医院护理为高级角色,因此,医生角色除了继承医院护理的权限之外,还可以具有自身的权限。主治医生则继承医院护理和医生的权限,它和主任医生都继承医生的权限,并且各自还可以被分配不同的权限。


(3)角色约束模型RBAC2


RBAC2除了继承RBAC0的原有特征外,还引入了约束(Constraints)的概念。约束是角色之间以及角色与权限之间的一种限制关系。在绝大多数组织中,无论它是否具有角色继承的层次关系,约束机制都是必不可少的。最明显的例子是“互斥角色”,类似于下面这种情况:一个公司的采购员和出纳员虽然都不算是高层次的角色,但是任何一个公司都绝不会允许某个人员同时担任这2个角色,因为很显然,这种工作安排必然很容易导致财务欺诈行为的发生。因此,对于一个大型的系统而言,很有必要增加角色约束机制。

图5  角色层次关系示例

RBAC2 中定义了不同的约束规则来对模型中的各种关系进行限制,最基本的约束主要如下。


①互斥角色(Mutually Exclusive Roles):针对互斥角色的约束主要包括角色静态互斥约束和角色动态互斥约束。角色静态互斥是限制某些角色不能同时分配给一个用户;角色动态互斥是一个用户开始会话时,不能同时激活某些角色,否则将会违背本组织的安全策略。


②基数约束(Cardinality Constraints):该约束可以限制一个角色可以分配的最大和最小用户数。例如,一个单位的最高领导只能为一人,中层干部的数量也是有限的,一旦分配给这些角色的用户数超过了角色基数的限制,就不再接受新配给的用户了。


③先决角色(Prerequisite Roles):用户为获得某些高等级角色必须首先拥有低等级角色,同理,某一角色必须具备了某些权限才能获得更高的权限。例如,总会计师必须首先是会计师,要写文件必须首先拥有读文件的权限。


④会话约束(Constraints in Session):该约束限制仅在特定会话中才允许激活某个角色,还可以限制一个用户在同一时间内可以激活的会话的数量,相应地,对该用户所激活的会话中所分配权限的数量也可以施加限制。


⑤等级约束(Hierarchy Constraints):该约束可以限制角色的层次不能超过多少层。


(4)统一模型RBAC3


统一模型是在RBAC0的基础之上加入了角色继承和约束,因此,它实际上是把RBAC1和RBAC2结合在了一起,既提供角色间的继承关系,又提供角色之间以及角色与权限之间的限制关系。RBAC3模型如图6所示。


综上所述,RBAC从控制主体的角度出发,根据管理中相对稳定的职权和责任来划分角色,将访问权限与角色相联系,这点与传统的MAC和DAC将权限直接授予用户的方式不同;通过给用户分配合适的角色,让用户与访问权限相联系。角色成为访问控制中访问主体和受控对象之间的一座桥梁。与其他模型相比,RBAC是面向企业实施的一种有效的访问控制方式,具有灵活性、方便性和安全性的特点,目前在大型企业系统的权限管理中成功得到了广泛的应用。


RBAC模型的安全性在于角色由系统管理员定义,角色成员的增减也只能由系统管理员来执行,即只有系统管理员有权定义和分配角色。用户与客体无直接联系,只有通过角色才能享有该角色所对应的权限,从而访问相应的客体。因此,用户不能自主地将访问权限授给别的用户,这是RBAC与MAC相似的特性,也是RBAC与DAC的根本区别所在。RBAC与MAC的区别在于:MAC是基于多级安全需求的,而RBAC则不是,且RBAC的权限控制更为灵活,可以更改角色的权限集合。RBAC本质上是一种更为灵活的强制访问控制机制,因此兼具较好的安全性和灵活性。

图6  RBAC3模型

(六)基于任务的访问控制


上述几个访问控制模型都是从控制环境是静态的角度出发去保护资源,在进行权限的控制时没有考虑执行的上下文环境发生变化的问题。而基于任务的访问控制(TBAC,Task Based Access Control)是从企业的工作流处理角度来解决安全问题,当数据在工作流中流动时,执行相关任务活动操作的用户在改变,用户的权限也在改变,这些变化都与数据处理的上下文环境相关。因此,TBAC的目的是从任务的角度来建立安全模型和实现安全机制,在任务处理的过程中提供动态实时的安全管理。


在TBAC中,对访问权限的控制并不是静止不变的,而是随着所执行任务的上下文环境发生变化。首先,TBAC考虑的是在工作流的环境中对信息的保护问题,因为在工作流环境中,数据的处理都是与上一次的处理相关联的,所以相对应的访问控制机制也应是如此,因而TBAC是一种上下文相关的访问控制模型;其次,TBAC不仅需要对不同工作流实行不同的访问控制策略,而且还要能对同一工作流的不同任务实例实行不同的访问控制策略,从这个意义上说,TBAC是一种基于实例(Instance Based)的访问控制模型;最后,因为任务都有时效性,所以在基于任务的访问控制中,用户对授予他的权限的使用也是有时效性的。


为了实现对工作流的动态、有效控制,TBAC模型中引入了新的基本概念,主要包括授权步、授权结构体、任务、依赖,具体如下。


(1)授权步(Authorization Step)


授权步表示一个原始授权处理步骤,是指在一个工作流程中对客体(如办公流程中的一份文档)的一次处理过程。授权步是TBAC中访问控制所能控制的最小单元。具体而言,授权步由受托人集(Trustee Set)和对应的多个权限集合(Permissions Set)组成,如图7所示。其中,受托人集是可被授予执行授权步的所有用户的集合,权限集合则是受托人集中的成员被授予授权步时拥有的访问权限。当授权步初始化以后,受托人集中的某个成员将被授予授权步,称这个受托人为授权步的执行者,执行者在执行授权步过程中所需权限的集合称为执行者权限。在TBAC中,一个授权步的处理可以决定后续授权步对客体的操作权限,将这些权限称为激活权限。执行者权限和激活权限一起称为授权步的保护态。

图7  授权步组成

授权步不是静态的,而是随着处理的进行动态地改变内部状态。授权步的状态变化一般是依据执行的条件而自动变迁状态进行自我管理,但有时也可以由管理员进行调配。在授权步的整个生命期中,包含的内部状态主要包括:


①睡眠状态,表示授权步还未生成;

②激活状态,表示授权步被请求激活,此时授权步已经生成;

③有效状态,表示授权步开始执行,随着权限的使用,它的保护态(执行者权限和激活权限)发生变化,比如执行者权限增加或者有的激活权限被去除;

④挂起状态,表示授权步因执行条件不足或被管理员强制设定处于挂起状态,它可以被恢复成有效状态,也可能因生命周期用完或被管理员强制为无效状态;

⑤无效状态,表示授权步已经没有存在的必要,可以在任务流程中删除。


根据需要,授权步的保护态的权限中也可以加入使用次数限制。比如,保护态中的写权限只能使用3次,当授权步使用写权限3次以后,写权限自动从保护态中的执行者权限中去除。


授权步的生命期、权限的次数限制和授权步的自我动态管理,三者形成了TBAC的动态授权。


(2)授权结构体(Authorization Unit)


授权结构体是由一个或多个授权步组成的结构体,它们在逻辑上是联系在一起的。授权结构体分为一般授权结构体和原子授权结构体。一般授权结构体内的授权步依次执行,原子授权结构体内部的每个授权步紧密联系,其中任何一个授权步失败都会导致整个结构体的失败。


(3)任务(Task)


任务是工作流程中的一个逻辑单元,是一个可区分的动作,可能与多个用户相关,也可能包括几个子任务。例如,一个支票处理的流程包括3个任务:准备支票、批准支票和提交支票,批准支票的任务下面又包括几个批准的子任务。这样,一个工作流的业务流程就由多个任务构成,一个任务对应于一个授权结构体,每个授权结构体由特定的授权步组成,任务中的子任务对应于授权结构体中的授权步。授权结构体之间以及授权步之间通过依赖关系联系在一起。


(4)依赖(Dependency)


依赖是指授权步之间或授权结构体之间的相互关系,包括顺序依赖、失败依赖、分权依赖和代理依赖。依赖反映了基于任务的访问控制中对基本粒度的组合原则。


与传统访问控制模型相比,TBAC模型中增加了生命期L和授权步AS的概念,一般用五元组(S、O、P、L、AS)来表示。在授权步AS被激活之前,处于睡眠状态,它保护态中的权限P是无效的,这些权限不可使用。而当授权步AS被激活时,它的执行者开始拥有执行者权限集中的权限,同时它的生命期开始倒计时。在生命期期间,五元组(S、O、P、L、AS)有效。生命期终止时,五元组(S、O、P、L、AS)无效,执行者所拥有的权限被回收。


综上所述,TBAC的优势在于从工作流中的任务角度建模,可以依据任务和任务状态的不同,对权限进行动态管理。因此,TBAC非常适合分布式计算和多点访问控制的信息处理控制以及在工作流、分布式处理和事务管理系统中的访问控制。


(七)授权管理模型介绍


授权管理是声明一个主体可以被授予一组访问权限或者安全属性的行为。在实际的应用系统中,授权管理和访问控制在很多方面都存在着较为明显的差异,例如,在实施方面,授权管理是一个需要有人类(安全管理员)参与的管理过程,而访问控制是由计算机系统自动实施的、自动化的判决行为;在时间上,授权管理过程往往发生在资源访问请求发起之前,而访问控制则是发生在资源访问请求之后;在一个完整的授权过程中,授权管理是对策略、规则的制订和修改,而访问控制是根据预设的策略或规则来做出判定,因此前者是后者的执行依据;从策略或规则的角度来看,在授权管理过程中,制订好的策略或规则是授权管理的输出结果,而对访问控制过程来讲,策略或规则是预设好的判定依据,是访问控制系统的输入。


通过以上对比可以看出,授权管理和访问控制在很多方面都存在着较为明显的差异,但访问控制和授权管理又是密切联系、不可分割的。授权管理是进行访问控制的前提和依据,访问控制是授权管理的最终目标。一个完整的、实用的访问控制模型通常需要先描述授权分配的过程,建立用户和权限(或安全属性)间的一种联系,然后再描述访问控制的过程。下面详细地介绍不同访问控制模型中的具体授权管理方式,有助于对完整的授权流程形成全面的了解。


(1)访问矩阵


访问矩阵的形式很简单,表达能力却十分强大。访问矩阵中每行对应了一个主体(Subjects),每列对应了一个客体(Objects),每个单元格描述了主体可以对客体执行的访问操作,因此,授权管理的过程就是向对应的单元格中添加所允许的访问操作的过程。图8中上下2个访问矩阵的变化即说明了向主体S3追加授予其对客体O3的写操作权限的过程。开始时,S3所在行和O3所在列对应的单元格中仅有读权限,表示S3只可以对客体O3进行读操作;经过授权管理过程后,S3所在行和O3所在列对应的单元格中变为具有读/写权限,表示S3被追加授予了对O3的写操作权限。

图8  授权前后访问矩阵的变化

通过以上的例子可以看出,对于访问矩阵,其授权管理过程就是直接修改访问矩阵的对应单元格,授权管理过程的输出结果就是新的访问矩阵。因此可以说,访问矩阵既是访问控制用的矩阵,同时也是授权管理使用的矩阵。


作为访问矩阵的2种主要实现方法,ACL与CL的授权管理过程与访问矩阵基本一致。在ACL中,相当于按列对访问矩阵进行存储,记录了与每个客体对应的允许访问该客体的主体及其允许的访问操作。如果要添加访问权限,就需要到该客体对应的ACL中,查看是否已包含了主体对应的权限节点:如果没有,则添加一个节点,并将所允许的访问操作添加进去;如果已有节点,则修改该节点中的访问操作,将需要追加的操作权限添加进去。在CL中,相当于按行对访问矩阵进行存储,记录了每个主体允许访问的所有客体及对应的访问操作。如果要添加访问权限,就需要到该主体对应的CL中,查看是否已拥有了客体对应的权限节点:如果没有,则添加一个节点,并将所允许的访问操作添加进去;如果已有节点,则修改该节点中的访问操作,将需要追加的操作权限添加进去。


按照ACL的方法进行授权管理可以很容易地查看能够访问一个客体的所有主体,也可以很容易地撤销所有主体对某个客体的访问权限,只需要将对应的权限节点全部删除即可。要从主体的角度实施授权管理是十分困难的,例如,对于新增加的某个主体S,要为S增加对应的访问权限,就需要遍历系统中所有的ACL,并逐一添加S对应的权限节点,假如S有权限操作的文件有2 000个,那这样的授权管理的工作量非常大;如果要想检查一个主体的所有访问权限是否正确,也需要遍历系统中所有的ACL,才能确定该主体拥有的所有访问权限。


类似地,如果按照CL的方法进行授权管理可以很容易地查看一个主体拥有的所有访问权限,也可以很容易地撤销一个主体的所有访问权限,只需要将对应的权限节点全部删除即可。然而要想从客体的角度实施授权管理是十分困难的,比如让系统中的所有主体都具有某个客体的读权限,或者确定可以访问指定客体O的所有主体,都需要遍历系统中存储的所有CL,而这些CL可能是以分布式方式存储的,查询、修改、删除起来都需要较大的开销。


(2)自主访问控制


在自主访问控制中,实行的是自主的授权管理机制。这种自主性体现在客体的拥有者持有对该客体的控制权,这种控制权是完全的控制和管理权,拥有者可以对其他主体访问该客体的权限进行控制。通常在DAC中,主要采用ACL或CL的方式进行授权管理。例如,在Linux系统中,利用ACL来控制主体对客体的访问,每一个客体都附带一个ACL,其中记录了三类访问主体对该客体的操作权限。客体的拥有者可以根据自己的安全需求对ACL中的访问权限进行修改,以防止别的用户对自己的客体进行不安全的操作。


在DAC中,客体的拥有者除了为每个用户赋予对客体的访问权限规则集,考虑到管理的方便,在这一过程中还经常将具有相同职能的用户聚为组,然后再为每个组分配许可权。例如,在Linux和Windows系统中,客体的拥有者除了可以对自身的读、写、执行权限进行管理之外,还可以对自己所属的用户组对相关客体的操作进行授权管理,比如将执行的权限分配给自己所属的用户组。这样,当该用户组的其他用户在执行该文件时,系统就会根据该用户的组标识(gid)和该文件拥有者的gid进行比较,确定该用户是否具有访问权限。对于较大规模的企业来讲,这种用户自主地把自己所拥有的客体的访问权限授予用户组其他用户的做法,其优点是显而易见的。这种授权过程中的灵活性是DAC的授权管理方式获得用户认可的重要原因。


(3)强制访问控制


强制访问控制实行的是强制式的控制机制,这种强制性体现在:系统事先给访问主体和受控对象分配不同的安全级别属性,在实施访问控制时,系统先对访问主体和受控对象的安全级别属性进行比较,再决定访问主体能否访问该受控对象。在这一过程中,主体不能改变自身的或任何客体的安全属性,包括不能改变属于自己客体的安全属性,而且代表用户的进程也不能通过授予其他用户访问权限简单地实现客体共享。如果系统判定拥有某一安全属性的主体不能访问某个客体,那么任何人(包括客体的拥有者)也不能使它访问该客体。从这种意义上讲,是“强制”的。


但在授权管理机制方面,MAC 实行的其实是一种描述型、模版式的管理机制,本质上是一种基于规则的方式。系统管理员事先采用定义的方式给每个用户、每个进程、每个文件、每个消息队列、信号量集合和共享存储区等都赋予了相应的安全属性,这一过程是把主体、客体与系统的安全级别一一对应。这种对应关系一经确定,通过套用规则的“模版”,主体所能访问的客体以及所能进行的操作也就确定了。因此,在MAC中,主体所具有的所有权限并不是一开始由系统管理员强制性地规定的,而是在已经建立的主体和客体的安全属性间联系的基础上,根据事先定义好的规则实现的。


(4)基于角色的访问控制


RBAC的授权管理从主体的角度出发,根据管理中相对稳定的工作职权和责任来划分角色,将访问权限与角色相联系,这点与传统的MAC和DAC将权限直接授予用户的方式不同;通过给用户分配合适的角色,让用户与访问权限相联系。角色成为权限分配过程中访问主体和受控对象之间的一座桥梁。


RBAC本质上是一种灵活的强制访问控制机制,因此,所有的用户都不能修改集合U、R、P和关系PA、UA等模型本身的组成要素,只有系统的安全管理员具有修改这些组成要素的管理权限。但是在大型系统中,角色的数量可能成百上千,管理这些角色和分配它们之间的关系将成为安全管理员面临的一个棘手的任务。一个可行的方法是由多个安全管理员组成一个管理员小组进行统一的授权管理,但这些安全管理员之间的管理权限如何分配、如何实现有效的分散控制,都是RBAC的授权管理模型需要重点考虑的问题。


鉴于RBAC在权限授予方面取得的巨大成功,一种比较自然的方案是采用RBAC模型对RBAC进行管理,这就是RBAC的管理模型ARBAC97。ARBAC97主要增加了管理权限AP和管理角色AR,管理角色中的成员具有管理权限,有权管理正规角色中的成员关系,但AP、AR和P、R之间是不相交的,即普通权限只授予普通角色,管理权限只授予管理角色。这样,通过创建多个管理角色,并对应不同的管理权限,就可以由多个安全管理员采用基于角色的方式实现对RBAC的高效授权管理。


(5)基于任务的访问控制


与传统访问控制模型中的授权管理仅包含主体、客体、权限三部分不同,TBAC模型中的权限管理一般用五元组(S,O,P,L,AS)来表示,其中,S表示主体,O表示客体,P表示权限,L表示生命期(Lifecycle),AS表示授权步。之所以这样,是因为工作流系统中的任务都是有时效性的,所以在基于任务的访问控制中,用户对授予他的权限的使用也是有时效性的。因此,在TBAC的授权管理过程中,除了需要考虑授权步AS所激活的权限P外,还需要考虑规定授权步AS的存活期限L以及L对权限P的影响。例如,在授权步AS被激活之前,它保护态中的权限是无效的,这些权限不可使用;而当授权步AS被激活时,它的执行者开始拥有执行者权限集中的权限,同时它的生命期开始倒计时;在生命期期间,五元组(S,O,P,L,AS)有效。生命期终止时,五元组(S,O,P,L,AS)无效,执行者所拥有的权限被回收。


TBAC的授权管理一般是由系统管理员直接配置,并且支持最小特权原则和最小泄露原则:在执行任务时只给用户分配所需的权限,未执行任务或任务终止后用户不再拥有所分配的权限;而且在执行任务过程中,当某一权限不再使用时,授权步自动将该权限回收。另外,对于敏感的任务需要不同的用户执行,这可通过授权步之间的分权依赖实现。


三、安全策略


(一)访问控制策略简介


(1)安全策略建立的需要和目的


安全的领域非常广泛繁杂,构建一个可以抵御风险的安全框架涉及很多细节。即使是最简单的安全需求,也可能会涉及密码学、代码重用等实际问题。做一个相当完备的安全分析不得不需要专业人员给出许多不同的专业细节和计算环境,这通常使专业的安全架构师也望而生畏。如果能够提供一种恰当的、符合安全需求的整体思路,就会使这个问题容易的多,也更加有明确的前进方向。能够提供这种帮助的就是安全策略。一个恰当的安全策略总会把自己关注的核心集中到最高决策层认为必须值得注意的那些方面。概括地说,一种安全策略实质上表明,当设计所涉及的那个系统在进行操作时,必须明确在安全领域的范围内,什么操作是明确允许的,什么操作是一般默认允许的,什么操作是明确不允许的,什么操作是默认不允许的。不要求安全策略作出具体的措施规定以及确切说明通过何种方式能够达到预期的结果,但是应该向安全构架的实际设计者们指出在当前的前提下,什么因素和风险才是最重要的。就这个意义而言,建立安全策略是实现安全的最首要的工作,也是实现安全技术管理与规范的第一步。


(2)安全策略的具体含义和实现


安全策略的前提具有一般性和普遍性,如何能使安全策略的这种普遍性和所要分析的实际问题的特殊性相结合,即紧密结合安全策略与当前的具体应用是最主要的问题。控制策略的制定是一个按照安全需求、依照实例不断精确细化的求解过程。安全策略的制定者总是试图在安全设计的每个设计阶段分别设计和考虑不同的安全需求与应用细节,这样可以将一个复杂的问题简单化。但是设计者要考虑到实际应用前的前瞻性,有时候并不知道这些具体的需求与细节是什么;为了能够描述和了解这些细节,就需要人们在安全策略的指导下对安全涉及的相关领域做细致的考查和研究。借助这些手段能够增加人们对于将安全策略应用到实际中或是强加于实际应用而导致的问题的认知。总之,对上述问题认识的越充分,能够实现和解释的过程就更加精确细化,这一精确细化的过程有助于帮助建立和完善从实际应用中提炼抽象凝练的、用确切语言表述的安全策略。反过来,这个重新表述的安全策略就能够使人们更易于去完成安全框架中所设定的细节。


ISO7498标准是目前国际上普遍遵循的计算机信息系统互连标准,1989年12月,国际标准化组织(ISO)颁布了该标准的第二部分,即ISO7498−2,并首次确定了开放系统互连(OSI)参考模型的信息安全体系结构。我国将其作为GB/T9387−2标准,并予以执行。按照ISO7498−2中OSI安全体系结构中的定义,访问控制的安全策略有2种实现方式:基于身份的安全策略和基于规则的安全策略。目前,使用的2种安全策略所建立的基础都是授权行为。就其形式而言,基于身份的安全策略等同于DAC安全策略,基于规则的安全策略等同于MAC安全策略。


(3)安全策略的实施原则


安全策略的制定实施也是围绕主体、客体和安全控制则集三者之间的关系展开的。


①最小特权原则:最小特权原则是指主体执行操作时,按照主体所需权力的最小化原则分配给主体权力。最小特权原则的优点是最大限度地限制了主体实施授权行为,可以避免来自突发事件、错误和未授权主体的危险。也就是说,为了达到一定目的,主体必须执行一定操作,但它只能做它所被允许做的,其他除外。


②最小分配原则:最小分配原则是指主体执行任务时,按照主体所需要知道的信息最小化的原则分配给主体权力。


③多级安全策略:多级安全策略是指主体和客体间的数据流向和权限控制按照安全级别的绝密(TS)、秘密(S)、机密(C)、限制(RS)和无级别(U)五级来划分。多级安全策略的优点是避免敏感信息的扩散。具有安全级别的信息资源,只有安全级别比它高的主体才能够访问。


访问控制策略定义了系统进行访问控制时应该遵循的规则,这种规则需要通过策略描述语言表达出来。访问控制策略描述语言大体可以分为两类:高层策略描述语言和基于形式逻辑的语言。高层策略描述语言具有丰富的语意,且易于制定、理解与实施,但其描述的访问控制策略难以进行形式化的分析和验证。基于形式逻辑的策略描述语言表达能力强大,且易于进行安全性质的分析与验证,但语言的语意不够直观,过于复杂,在实施和易于理解方面都有所不足。基于逻辑的形式化策略描述语言从计算方式的角度可以分为过程式和状态机式。绝大多数形式化策略语言都是基于状态机的。


Jajodia等提出的ASL是典型的基于逻辑的访问控制策略描述语言。Hayton提出的角色定义语言(RDL)基于Horn逻辑,是剑桥大学的Oasis安全体系结构的一个组成部分。此外, RBAC的约束描述大量采用了形式逻辑描述语言,如Ahn等提出的RCL2000。从表达能力来讲,基于逻辑的授权策略描述语言优点在于基于逻辑的(具有坚实的基础进行分析和验证)、很强的表达能力并且是声明式的(也就是说不必编程),但它们过于复杂,很难被广泛接受。


XACML、Ponder、SPL和RT是典型的高层策略描述语言。其中,Ponder是由伦敦帝国大学的Sloman等提出的高层策略描述语言,定位于分布式系统管理,对安全策略描述语言的研究有很大影响。SPL由Ribeiro等提出,是一种时间驱动的安全策略描述语言。RT给出了一种基于逻辑的信任管理策略语言,关注在分布式环境下的权限委托和信任链发现。XACML是一种基于XML定义的通用的安全策略描述语言,目前,在基于Web的分布式应用环境中得到了广泛的使用,用于对网络服务、数字版权管理以及企业安全应用信息、安全策略等进行描述。2003年2月,XACML由结构化信息标准促进组织OASIS批准,用于标准化XML的访问控制策略描述。下面将重点对ASL、XACML等代表性访问控制策略语言做进一步介绍。


(二)授权描述语言


授权描述语言(ASL,Authorization Specification Language)是一种逻辑语言,系统的安全管理员可以通过规则表达的方式描述访问控制策略,并且是基于Datalog逻辑语言表达的。在ASL中,一个访问控制策略的描述是一个从三元组(o,s,a)到集合<sign>={+,−}的映射。其中,o,s,a分别表示客体、主体、动作。


ASL语言中定义了若干种规则,用于描述系统的安全需求。其中,比较重要的是授权规则(Authorization Rule),用于对访问控制策略进行描述。授权规则的形式为:

其中,o,s,a分别表示客体、主体、动作,<sign>表示正号(+)或负号(−),代表正授权(允许)或负授权(禁止),L是一系列的原子公式,表示规则的前提条件。由授权规则组成的访问控制策略描述如图9所示。

图9  ASL访问控制策略描述

其中,第一条规则中的AOH表示客体类型的层次,in( )表示属于,该条规则的含义是:john可以读所有类型为“Letters”的客体。第二条规则的含义是:john 可以读客体 file1。第三条规则的含义是:Citizens可以读客体file2。第四条规则的含义是:Research-Staff可以读取客体cobol-manual。第五条规则的含义是:CS-Faculty可以激活“Faculty”角色。通过以上5条规则的描述,当有用户对系统中的客体进行访问时,就可以基于逻辑的方式进行权限判定。例如,如果john要读file2,并且file2的类型不是“Letters”,通过逻辑演算,最终获得的结果为“false”,即john没有获得读取file2的正权限。


(三)可扩展访问控制标记语言


OASIS于2003年发布了可扩展访问控制标记语言(XACML)规范,这是一个完全基于属性的访问控制策略语言。在XACML中,一个访问控制规则就是从一组用户属性集、资源属性集和环境属性集到某个授权决策的映射。通过把传统的访问控制策略使用的用户安全性质(如角色、组、清除级、标识等)统一地抽象成安全属性,XACML可以一致地描述这些策略。 XACML 允许在标准扩展点定义新的函数、数据类型、复杂或简单的规则组合逻辑(Combining Logic)等,以达到复杂的细粒度的访问控制。


XACML的优点在于:(1)XACML在策略表达上结构清晰,将安全规则表示为主体、客体、行为和约束4个主要属性的属性值集合;(2)XACML的标签规定了策略名、规则名及规则属性等,种类丰富,适应性强,能适应大多数访问控制策略的需求;(3)XACML策略的重用性强,单一XACML策略能应用于多个资源和多个不同的系统中,有助于在为不同资源编制策略时,避免不一致性和重复劳动。但XACML的缺点在于代码比较冗长,一般主要通过用户界面由程序生成,一般人员很难直接面对。


XACML是基于XML的访问控制策略语言,使用标签来标识安全策略的各个元素。XACML通过标签规定了策略名,规则名及规则属性等。XACML策略描述的一个简单的例子如图10所示。其中,<Policy>标签及其属性值声明策略ID、策略适用群组和规则联合算法,以对策略做出标识和说明。PolicyID和PolicyTarget分别用于声明策略ID和策略适用群组,RuleCombiningAlgId声明了规则联合算法,规则联合算法的作用是解决安全策略中不同安全规则可能造成的冲突,以保证每个访问请求只得到一个最终授权结果。策略是由规则组成的,XACML用标签<RuleID></Rule>来标识规则,在规则标签头中,Rule ID是规则ID, Effect 标识该规则的效用是一个许可规则还是拒绝规则。在规则体内,用<Target></Target>标识规则的各属性,包括主体Subject、客体Resource和行为Action,对每一个属性,都在相应标签中先标识属性名称,如“FileType”,再标识该属性的属性值。约束属性用<Condition>标签标识,位于<Target>之后。安全规则的4个属性中,如果对某个属性没有安全约束限制,则可以省略该属性的标签。

图10  XACML策略描述片段

目前,研究者对XACML的态度已经从观望到积极投身其中,XACML已被权威的网格工具Globus Toolkit、美国国家航空和宇宙航行局的Cardea等重要研究项目采纳。XACML是一种高层策略描述语言,使用该语言描述的策略难以分析与验证。基于此,Bryans等学者使用CSP对XACML策略及其性质进行形式化描述,进而通过模型检测的方法来分析策略是否具有制定的性质。Fisler等则采用另一种方案,将XACML翻译成二进制判决图从而给出其形式语义,进而对策略进行分析和验证。


四、访问控制实现技术


(一)访问控制列表与能力列表


访问控制列表ACL与能力列表CL是几乎所有采用自主访问控制的系统所使用的2种主要实现技术。尤其是对于采用DAC的集中式操作系统,如Linux、Windows等,全部采用ACL的方式实现。例如,在Linux系统中,每个客体都通过指针指向一个ACL列表的数据结构,在该数据结构中以链表的形式依次存储了客体拥有者所具有的读、写、执行权限,拥有者所属的用户组所具有的读、写、执行权限,其他用户所具有的读、写、执行权限,如图11所示。

图11  ACL的链表实现机制

当用户对文件进行访问时,通过该ACL链表结构可以很容易地查看该主体是否具有访问此客体的操作权限,客体的拥有者也可以很容易地查询、增加、撤销主体对客体的访问权限。


对于分布式系统,如果采用ACL的实现机制会遇到一定的困难。这是由于ACL是随着客体在系统中分布存储的,如果要从主体的角度实施权限管理,确定一个主体的所有访问权限,就需要遍历分布式系统中所有的ACL,而这通常是十分困难的。因此,在分布式系统中实施访问控制,通常需要采用CL的方法。CL也是采用类似图11的链表机制实现的,不同之处在于CL是随着主体进行保存的,每个主体关联一个CL,CL列出了该主体允许访问的所有客体及对应的访问操作,因此,用户在分布式系统登录以后就已经获得了访问控制的授权,当用户访问客体所在的节点时,只需要向节点出示CL,即可对客体进行访问。


表1列出了ACL与CL这2种实现技术的特点对比。在某些系统中,也可以将ACL方法和CL方法结合使用。在分布式系统中,这种混合的方法可以避免重复的用户认证。主要的实现方法是:由系统中的服务提供对客体的管理,用户如果要访问客体,将在通过认证后获得一个CL,通过使用该CL中描述的该主体允许访问服务的能力来访问系统中的服务,服务则可以依据ACL进一步实施细粒度的访问控制。

表1  ACL与CL2种实现技术的特点对比

(二)访问控制决策中间件


访问控制决策的过程是复杂的,要求每个上层应用都自己实现这个过程会带来很高的开发代价,而且不利于这部分功能的重用。另一方面,应用的访问控制决策功能在实现逻辑上具有较大的相似性,因此,可以通过构造一个通用的访问控制决策中间件来实现统一的访问控制决策功能。


最早提出的访问控制决策功能构想是针对单机环境的引用监控器模型(RM,Reference Monitor),RM 的核心思想是:把授权机制与能够对程序的运行加以控制的系统环境结合在一起,实现对受控共享的支持。RM揭示出的一个基本原则就是访问决策可以与实施分离。20世纪90年代,有学者提出了通用访问控制框架(GFAC),可以方便地增加新的访问控制策略而不必修改访问控制实施部分,可以看作是访问控制决策中间件的雏形。


各种分布式应用的广泛实施、XACML和SAML技术的出现,奠定了构造一个通用的访问控制决策中间件的技术基础。决策中间件通过中间件的形式对分布式环境下的访问控制决策过程进行封装,并采用一种通用的形式(如Web Services)对外提供通用的策略决策服务,策略语言通过采用XACML来描述各种传统的访问控制策略,支持同时实施多种访问控制策略,并提供了细粒度的策略组合方法,支持企业、组织对不同的资源提供不同的策略保护。


访问控制决策中间件主要包括4个组成部分:策略数据库、决策服务、属性服务和决策访问接口。如图12所示,策略数据库存储访问控制策略;决策服务是中间件的核心部分,完成策略评估功能;属性服务为决策服务提供评估策略时需要的安全属性信息;决策访问接口为上层应用提供访问中间件的决策服务的接口。为了保证中间件的通用性和兼容性,通常决策访问接口是一组JAVA类库或者C类库,通过使用这个接口,上层应用的访问决策实施点AEF可以构造合法的XACML判定请求并提交给决策服务;上层应用也可以通过这个接口获取决策服务返回的决策结果并从中提取它所需要的信息。

图12  访问控制决策中间件结构

当用户发起资源访问请求时,上层应用首先对用户进行身份认证,然后应用的AEF使用决策访问接口构造一个XACML决策请求并提交给决策服务。决策请求中通常包含了用户的标识、要访问资源的信息和访问操作的名称等。决策服务首先从策略数据库中检索适用本次决策请求的访问控制策略。然后对解析过的策略进行评估,在评估过程中如果发现决策请求中的用户属性对于策略而言是不够充分的,则可以主动向属性服务检索用户的属性;如果访问控制策略是基于环境信息(当前的时间、网络威胁级别等)的,则可以主动检索环境属性。最后,决策服务返回决策结果给决策访问接口,应用的AEF通过决策访问接口获得并且执行决策结果。


(三)信任管理技术


Internet的出现,使软件系统的形态发生了根本性的转变。从早期的网络服务到 Web Services,进而发展到SOA架构和P2P应用,软件系统正从面向封闭的、熟识用户群体和相对静态的形式向开放的、公共可访问的和高度动态的服务模式转变。这些服务模式都是基于Internet的跨域资源共享和保护。传统的访问控制技术主要基于请求方的身份进行授权,需要设定统一的安全管理域。然而,在开放的互联网中,由于参与主体数量规模大、运行环境的异构性、活动目标的动态性以及自主性等特点,各资源主体往往隶属于不同的权威管理机构,使基于身份的访问控制技术在跨多安全域进行授权及访问控制时显得力不从心,暴露出许多弱点。


1996年,Blaze等首次提出“信任管理(Trust Management)”的概念,基本思想是承认开放系统中安全信息的不完整性,系统的安全决策需要依靠可信任第三方提供附加的安全信息。


Blaze等将信任管理定义为采用一种统一的方法描述和解释安全策略(Security Policy)、安全凭证(Security Credential)以及用于直接授权关键性安全操作的信任关系(Trust Relationship)。信任管理的内容包括安全策略的制定、安全凭证的获取、判断安全凭证集是否满足相关的安全策略等。信任管理要回答的问题可以表述为“安全凭证集C是否能够证明请求r满足本地策略集P”。一般来说,服务方的安全策略形成了本地权威的根源,服务方既可使用安全策略对特定的服务请求进行直接授权,也可将这种授权委托给可信的第三方。可信第三方判断委托请求,并以签发安全凭证的形式返回给委托请求方。然后,服务方判断收集的安全凭证是否满足本地安全策略, 并做出相应的安全决策。基于信任管理引擎(TME, Trust Management Engine)的信任管理模型使信任可以独立于特定的应用。如图13所示, TME是整个信任管理模型的核心,体现了通用的、应用独立的一致性证明验证算法,根据输入的三元组(r, C, P),输出策略集P是否被满足的判断结果。

图13  基于信任管理引擎的信任管理

信任管理提供了一个适用于Internet应用系统的开放、分布和动态特性的安全决策框架。此后的信任管理系统,如Policy Maker、Key Note,均以TME模型为基础进行设计并加以实现。但需要注意的是,Policy Maker、Key Note等系统本质上都是基于能力(Capability)的授权系统,它们仍需要服务方预先为请求方颁发指定操作权限的凭证,无法与陌生方建立动态的信任关系。


Li等提出一种基于角色的信任管理框架(RT, Role-based Trust-management Framework),通过基于主体属性进行授权,为陌生方之间建立信任关系提供了一种有效方法。RT 中定义了4种类型的授权凭证,每一种类型对应一种不同的定义角色成员的方式。


(1)类型1 A.r←B


A和B是实体,r是角色名。该凭证的含义是A定义B是角色A.r的成员。从属性的角度,A断言B拥有属性r。


(2)类型2 A.r←B.r1


A和B都是实体,r和r1都是角色名。该凭证的含义是A定义其角色r包含了B的r1角色的所有成员。换句话说,A定义角色B.r1比角色A.r更强,因为B.r1的成员能够做角色A.r 的成员能够做的任何事情。这种凭证可以用来定义角色层次。从属性的角度,该凭证的含义是如果B断言一个实体拥有属性r1,A断言该实体拥有属性r。如果r和r1是相同的,则该凭证代表了一种从A到B的对r的管理权威的委托。


(3)类型3 A.r←A.r1.r2


A是实体名,r、r1和r2是角色名。A.r1.r2称为链接角色。该凭证的含义是如果A断言B拥有属性A.r1,并且B断言D拥有属性r2,则D拥有属性r。这在本质上是一种基于属性的委托,A定义不是直接通过身份的方式,而是通过指定其具有的属性的方式指定B是r2的权威。


(4)类型4 A.r←f1∩f2∩…fk


A是实体,k是一个大于1的整数,并且每个fj是一个实体、角色或者链接角色,称为交集(Intersection)。从属性的角度,任何拥有所有f1,…,fk的用户都拥有属性A.r。


RT通过使用这4种类型的授权凭证,体现出授权人对被授权人的信任关系。授权人基于主体属性进行授权,表明授权人认可被授权人的属性可以满足一定的条件,对应地,也可以获得一定的权限,否则授权人不会为其颁发授权凭证。这种信任关系又可以通过其他的授权凭证进行传递,正是通过这种基于主体属性的授权传递关系,为陌生方之间的互相访问建立起了信任关系。

    微信公众号:计算机与网络安全

    ID:Computer-network

    【推荐书籍】

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存