访问控制:原理及实践访问控制限制用户可直接进行的操作,以及代表用户的执行程序可进行的操作。
通过这种方式访问控制可以阻止违反安全的活动。
Ravi S. Sandhu and Pierangela Samarati摘要:访问控制的目的是为了限制一个合法的计算机系统用户可执行的活动和操作。
访问控制限制用户可直接进行的操作,以及代表用户的执行程序可进行的操作。
通过这种方式访问控制可以阻止违反安全的活动。
这篇文章解释了访问控制及其与其它安全服务的关系,如身份认证、审计和管理等。
然后讨论了访问矩阵模型并描述了在实际系统中实现这种访问矩阵的不同方法,最后讨论了在现行系统中普遍存在的访问控制策略以及对访问控制管理的简单思考。
访问控制和其它安全服务在计算机系统中访问控制依靠并与其它安全服务共存。
访问控制涉及限制合法用户的活动。
用户或代表用户的执行程序通过请求监听器对系统中的主体执行访问控制,而监听器促进每一次访问。
为了决定用户要进行的操作是否通过,请求监听器要向认证数据库发出请求。
认证数据库是通过安全管理员管理和维护的。
管理员在安全策略和组织的基础上设置这些认证。
用户也可以修改认证数据库中的一些部分。
例如,设置个人文件的访问权限、查询监听器和记录系统相关活动的日志。
图1是安全服务及其关系的逻辑图表。
它不应该用字面的意思去解释。
例如,后面将提到,对象经常是被请求监听器保护着存储在认证数据库中的,而不是被物理上分开的。
图表对区别身份认证,访问控制,审计和管理服务的区分较为理想化,可能不如图表显示的明显。
他们之间的区分被认为是必要的,但不是在每个系统中都表现得明显。
对认证和访问控制清楚区分开很重要。
认证服务的责任是正确地建立用户的身份。
访问控制则是假设用户的身份认证被成功核实后通过请求监听器执行访问控制。
当一个合法用户通过身份认证并正确地接管了请求监听器时访问控制的作用就停止了。
读者肯定对通过提供一个认证密码登录计算机系统很熟悉。
在一个网络环境中,身份认证因为许多原因而变得困难。
为了冒充合法用户,只要攻击者能找到网络通道就能重放认证协议。
同样,网络中的计算机需要互相认证。
在此文中,我们假先设认证已成功通过,然后关注后面即将发生的。
要了解单靠访问控制也不是一个保证计算机系统安全的根本方案,这一点很重要的。
审计必须贯穿于整个过程。
审计控制涉及对系统中所有请求和活动的后续分析。
审计要求对所有用户的登录请求和活动作后续的分析。
审计控制作为阻隔入侵和分析查找可能存在的入侵行为是很有用的。
最后,审计对于确定被审计者没有滥用特权也是很重要的。
换句话说就是保持用户的行为是可审计的。
注意,有效的审计要求有合适的身份认证。
在访问控制系统中用策略和机制来区分它们的不同。
策略是决定访问的控制方式和的访问决定的产生的高层指导。
机制则是执行策略的可配置的底层软硬件程序。
安全研究员已经试图将访问控制机制大大地发展为独立于策略,以便可以被他们使用。
为了重复使用可适合各种安全目标的机制,这是很可取的。
同样的机制经常可以被用于支持安全性、完整性和可用性目标。
从另一方面过来看,策略选择如此丰富以至系统执行者可以自主选择。
总之,不存在策略好坏的说法。
确切的说,一改是策略提供的保护可能有多有少。
不管如何,不是所有的系统都有同样的保护要求。
一个系统的策略并不一定适合另外一个系统。
例如,非常严格的访问控制策略在某些系统中至关重要,在一个需要灵活环境的系统中也许就不合适了。
访问控制策略的选择要看被保护的环境的特殊特性。
访问矩阵为了进行访问控制,信息安全从业人员已发展出一大批抽象概念。
也许最基本的实现就是所有被计算机系统控制的资源都能被数据存储对象(比如文件)所表示。
于是对这些对象进行保护是必要的要求,这也相应地保护了计算机系统控制的其他资源。
(当然,为了防止绕过计算机系统的访问控制,这些资源也应该物理上保护起来。
)系统中的活动是有所谓的主体发起的。
主体典型地可理解为用户或代表用户的执行程序。
用户可在不同的场合作为不同的主体登录进入系统。
例如,同时做两个工程的用户可从一个工程切换到另外一个工程。
这个时候我们有两个个符合用户的主体,它们依靠用户的工程。
一个经常被忽视的问题是,主体本身经常可以是对象。
为了完成任务一个主体可以产生派生主体。
子主体在各种网络计算机上也可执行。
在适当的时候父主体也可以暂停或终止它的子主体。
一个操作的发起者可以作为另外一个操作的目标时,主体就可以成为对象。
(在网络用语中,主体有时也称作发起者,对象也称作目标。
)主对象区别是基于访问控制的。
主体对对象发起动作或操作。
这些动作通过建立在系统上的用户认证被通过或拒绝。
用户认证表达为访问权限和访问模式。
访问权限的方式依靠考虑中的对象。
比如文件最典型的访问权限就是读、写、执行和属于。
前三个是顾名思义的。
属于关系涉及的是谁可以改变文件的访问权限。
一个对象,比方说银行账户,有查询、存款、借款的访问权限。
这些操作可通过应用程序执行,而操作系统可对文件进行典型的操作。
访问矩阵是一个概念上的模型,它描述每个对象过程对各个对象的权限。
这个矩阵中每个对象为一行,每一个对象为一列。
矩阵中每个节点描述了行中的主体到列中的对象的被授权访问。
访问控制的任务是为了确保只有那些被访问矩阵授权的操作得到执行。
这是通过请求监听器达到的,它对监听所有主体到对象的访问操作有监听作用。
访问矩阵模型明确地把审计和身份认证的问题区分开来了,这是值得注意的。
访问矩阵的例子如图2所示。
R和W分别代表读(read)和写(write)的权限。
其它权限同理如上所述。
这里主体是John,Alice和Bob。
有四个文件和两个账户。
这个矩阵描述了例如John是文件3的拥有者,并且能读和写这个文件。
但是John没有文件2和文件4的访问权限。
隶属关系的准确意义根据系统不同各有区别。
通常一个文件的拥有者可以授权其他用户访问这个文件。
同样也可以撤销访问。
因为John拥有文件1,如图2 所示他可以赋予Alice R权限和Bob R和W权限。
John 以后还可以随意撤销一个或多个这样的权限。
账户访问权限的例子阐述了访问是如何被应用程序的抽象操作所控制的。
查询操作与读操作类似,它们检索信息但是不改变它。
存款和取款操作则涉及到读出过去的账户余额,合理调整它的状态并最终写回。
执行这些操作的程序要求对这个账户数据进行读写控制。
然而,用户是不允许直接对这个账户对象进行读和写。
他们只能通过执行存款和取款操作的应用程序间接地操控账户对象。
同样要注意没有拥有账户这一权限。
例如银行账户对象没有真正有一个主人,能决定其他对象对这个账户是否有访问权。
明显在银行建立账户的用户不能决定谁可以使用这个账户。
在组织中只有银行里不同部门能基于工作职责访问账户。
执行方法在一个大的系统中,访问矩阵也是巨大的,而大部分的节点都可能是空的。
所以访问矩阵很少作为矩阵执行。
我们讨论关于在实际系统中执行访问矩阵的一些普遍方法。
访问控制列表执行访问矩阵的通常方法是通过访问控制列表(ACLs)。
每一个对象都与一张标示出系统中每一个主体的ACL相互关联,主体在对象上访问是被授权的。
这种方法相当于将矩阵按列存储。
ACLs相当于访问矩阵中的文件,如图2在图3中展示。
文件1的访问矩阵列就是按文件1存储的,等等。
通过看一个对象的ACL很容易判断主体对对象授权的现行访问模式。
换句话说,ACLs 对对象提供了一个方便的访问描述。
通过把一个现存的ACL用空表代替就能简单地撤销对一个对象的所有访问。
从另一面来看,要在一个基于ACL的系统中找到主体具有的所有访问。
回顾主体的访问描述来检查系统中每个对象的ACL是必要的。
同样地,如果主体的所有访问需要被撤销,需要逐个访问所有的ACLs。
(在实际撤销所有主体的访问时,经常是通过删除用户账户。
如果用户要离开这个组织这是可以理解的。
然而,如果一个用户重新登录这个组织,为了反映用户改变了的工作,保留其账户和改变其特权将让这变得更加方便。
)许多系统允许ACLs中存在一组名字。
例如,一个名为ISSE.R的进入者可以授权ISSE 所有成员读一个文件。
许多流行操作系统,例如UNIX和VMS,执行的是ACLs的简略形式,这种形势下ACL中只允许有少数、大部分只有一两个的组名字出现。
稀有名字是不允许的。
通过这种方法,ACL只需要一个很小的几个比特就能存储于文件中。
在另外一些情况下,有许多访问控制包在ACLs中使用复杂的规定限制访问撤销的时间和方式。
作用功能ACLs的作用是双重的。
每一个主体都牵涉到一张列表(称为作用列表),它指出系统中的每一个对象和主体被授权对对象进行的访问。
这种方法在矩阵中按行存储。
图4是显示的是图2中的文件的作用列表。
通过简单查询作用列表,浏览主体被授权的所有访问是很容易的。
然而,查找能访问某个特定对象的所有主体需要查找每个主体作用列表的每一项。
在70年代,大量基于作用列表的计算机系统被开发出来,但商业上是不成功的。
现行操作系统基于典型的ACL方法。
有可能会把ACLs和作用列表混淆。
获得了作用列表就足以让一个主体通过作用列表授权获得访问授权。
在分布式系统中,这种方法的优点是不需要反复对主体进行认证。
这可以让主体只认证一次就能获得它的能力,然后再从系统不同的服务器中获得各种服务。
每种服务器将来还会用到ACLs以提供更好的访问控制。
授权关系我们知道ACL和基于作用的方法都各有优劣点。
访问矩阵的表示不能因为某一方面而有好恶。
例如,访问矩阵可以被表示为授权关系或表,如表1。
表中每一行或数组制定了一个主体对对象的访问权限。
于是John对文件1的访问有三行。
如果这个表是按主体存储的,我们就用功能列表。
如果按对象存储,我们就用ACLs。
关系数据库管理系统就是使用这种典型的描述。
访问控制策略现在我们来讨论通常发生在计算机系统中的三种不同的控制策略如下:1、古典的任意访问策略2、古典的强制访问策略3、新型的角色访问策略前两种模型中的限定词“古典”,反应出了这个事实:这两种策略已经被研究人员和操作人员应用了很长时间。
但是,近些年来,舆论越来越质疑这两种策略的合理性,这些导致了角色控制策略的兴起。
需要指出的是,各种访问控制策略间并不是不兼容的。
各种不同的控制策略可以结合起来如图5所示那样(每种圆代表的控制策略允许其他策略同它结合起来)以便提供给系统更适合的保护。
当这些控制策略结合在一起后,只有同时满足它们才可能被访问。
这种控制策略的结合体相对来说比较径直面向对象,但它必须解决如下冲突:当一种特殊的访问被某种策略允许但同时被另一种策略禁止。
这种不同策略间的冲突需要恰当的管理协调予以解决。
古典的任意访问策略任意访问控制策略基于用户的身份和权限的不同来管理访问,这些不同如下:对于系统中的每个用户(或一群用户)和每个对象,使用者所被允许的访问模式(例如:读取,写入或者执行)。