访问控制

时间:2024-04-14 16:37:22

访问控制目标

  1. 防止非授权用户的访问
  2. 防止合法用户以非授权的方式访问资源

访问控制原理

  1. 访问控制的安全策略:对于某个具体的系统资源,谁可以访问以及允许的访问类型。
  2. 广义的访问控制涉及的实体类型:
    访问控制
  • 认证:验证实体身份是其所声称身份的过程。
  • 授权:授予实体访问某种类型资源的权利。
  • 审计:对系统的活动进行独立的评审和检查,检查系统控制的正确性,以便系统按照既定的策略和措施来执行,检查安全违背的情况。
  1. 访问控制工作在用户(或用户进程)与系统资源之间。
  2. 系统必须首先认证试图访问的用户,认证结果决定了用户是否被允许访问系统,访问控制决定了用户是否被允许访问特定的系统资源。
  3. 访问控制策略
  • 自主访问控制策略(DAC):根据请求者的身份和访问规则控制访问。之所以是自主的,是因为允许一个实体按自己的意愿授予另一个实体访问某种资源的权利。
  • 强制访问控制策略(MAC):通过比较安全许可的安全标记来控制访问。之所以是强制的,是因为不允许一个实体按自己的意愿授予另一个实体访问某种资源的权利。

安全许可:用来表示用户进程的安全级别
安全标记:用来表示系统资源的安全级别

  • 基于角色的访问控制(RBAC):通过在系统中设置一些角色,角色具有对某种资源的访问权,然后将用户分配给角色从而控制访问。
  1. 访问控制系统应该支持的特征
  • 可靠的输入:访问控制系统要求用户是可信的,因此必须要求认证系统在访问控制系统之前;访问控制系统要求其他输入也是有效的,系统必须具有一种方法来确定信息来源。
  • 支持细粒度和粗粒度的规约:

细粒度规约:允许在一条记录或者在一个记录的某个字段的级别进行访问控制。
粗粒度规约:允许在一个文件或数据库,表的级别进行访问控制。

  • 最小特权原则:每个用户仅被分配完成工作所需的最小资源和权限。
  • 职责分离:将系统功能划分为多个级别,由不同的用户分别完成,可以防止由一个用户而破坏整个进程。
  • 开放和封闭策略

开放策略:除非特别禁止的访问,否则都是允许的。
封闭策略:仅允许特别授权的访问。

  • 策略组合和冲突解决:可以将多种策略组合运用到一种系统资源中且每种策略之间不能发生冲突。
  • 管理策略:管理策略用来指定谁能添加,删除或修改访问规则。
  • 双重控制:一项任务要求两个或两个以上个体合作完成。
  1. 访问控制的基本元素
  • 主体:能够访问客体的实体,一般指代表用户的进程。

三类主体:

所有者:可以是资源的创建者。
组:除了非配的资源的所有者的特权,组用户也可以被授予访问权。
世界:被授予访问权最少的用户。

  • 客体:外界对其访问受到控制的资源
  • 访问方式:主体可以访问客体的方式。

读:可以查看系统资源,包括复制和打印的能力。
写:可以添加,修改和删除系统资源,写权限包括读权限。
执行:可以执行指定的程序。
删除:可以删除某个系统资源
创建
搜索:列出目录中的文件或者搜索某个目录


自主访问控制

  1. 自主访问控制在操作系统中或数据库管理系统中通常用访问控制矩阵来实现。
    访问控制
  2. 访问控制矩阵一维由试图访问的主体组成,另一维标识了可以访问的系统资源,每一项表示特定主体对特定资源的访问权。
访问控制
  1. 将访问控制矩阵按列分解可以得到访问控制表(ACL),对于每个客体,ACL列出其被允许的访问权限。ACL可以包含一个默认的访问权限,使得特权用户具有一组默认的权限,默认的访问权遵循最小特权原则。
  2. 将访问控制矩阵按行分解可以得到能力权证,权证表示了一个具体用户对每一种能够访问的资源的访问权限。

存在问题:权证分散的保存在系统中,可能存在权证伪造。
解决方案:由操作系统保存用户权证,存放在用户不能够访问的内存区域;为每一个权证设置一个权证标识。

  1. 自主访问控制通用模型
  • 保护状态:在一个时间点,每个主体对每个客体访问权的集合。
  • 模型的三种需求:表示保护状态,执行访问权以及允许主体以某些方式更改保护状态。
    访问控制
  • 扩展的访问控制矩阵客体包括:

进程:包括阻塞,唤醒或删除进程的能力。
设备:读写设备,控制设备操作,*解锁设备的能力。
存储单元或区域:包括读写一些某些在默认状态下不允许被访问的区域。
主体:对主体的访问权或者授予或删除主体对其他客体的访问权。

  • 一次访问尝试流程:

主体S对客体发出类型为a的请求
该请求导致了客体的访问控制器生成形如(S,a,X)的报文。
控制器询问访问控制矩阵,以确定a是否在A[S,X]中,如果在则允许访问,如果不再则拒绝访问,并触发警告及适当的动作。

  • 某些主体具有修改访问控制矩阵的能力,修改访问控制矩阵被看作是对矩阵的一次访问,矩阵的每一项作为访问的客体。
  1. 访问控制系统命令
    访问控制
  • 规则R1表示如果a* 存在与A[S0,X]中,那么S0可以将对客体X的a* 访问权带复制标识或不带复制标识授予任意主体。
  • 规则R2表示如果S0是客体X的所有者,那么S0可以授予任何其他主体对客体X的任何访问权。
  • 规则R3表示S0能删除其控制主体所在的行或者拥有的客体所在的列。
  • 规则R4表示S0能读取其拥有或控制的矩阵部分
  • 规则R5表示S0能够创建客体X,并且自己设为客体的拥有者
  • 规则R6表示客体的所有者可以销毁该客体,从而删除访问控制矩阵对于的列
  • 规则R7表示主体能够创建新的主体,并且拥有新的主体,新的主体对自身有控制权。
  • 规则R8表示主体的所有者能够删除该主体在访问控制矩阵对应的行和列。
  1. 保护域:是一组客体以及对这些客体的访问权,在访问控制矩阵中,一行就是一个保护域。
  • 进程与保护域之间的关联可以是静态的,也可以是动态的。动态联系是指进程在执行的过程中可以由一个保护域切换到另一个保护域。
  1. UNIX文件访问控制机制
  • 所有UNIX文件都由操作系统通过inode管理,文件数据都存储在块中,inode就是用来存储文件都元信息。
    访问控制
  • inode包含文件的元信息,具体来说有以下内容:
      * 文件的字节数
      * 文件拥有者的User ID
      * 文件的Group ID
      * 文件的读、写、执行权限
      * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
      * 链接数,即有多少文件名指向这个inode
      * 文件数据block的位置
  • inode也会消耗硬盘空间,硬盘格式化的时候,操作系统将硬盘分为两个区域。一个是数据区,存放文件数据。另一个是inode区,存放inode所包含的信息。
  • 每个inode都有一个号码,操作系统用inode号码来标识不同的文件,一般情况下,文件名和inode号码是一一对应关系,但是UNIX/Linux系统中允许,多个文件名指向同一个inode号码,这就意味着,可以用不同的文件名访问同样的内容。删除文件名,不影响另一个文件名的访问。这种情况就被称为硬链接。
  • 软连接:文件A和文件B的inode不同,但文件A中存放的是文件B的路径,打开文件A会自动导向文件B。

基于角色的访问控制

  1. RBAC给角色分配访问权而不是给用户分配访问权,用户根据他们的职责被静态的或动态的分配给不同的角色。
  2. 用户与角色的关系是多对多的,角色与资源的关系也是多对多的。
  3. RBAC有助于实现最小特权原则,每个角色包含其所需要的访问权的最小集合。
  4. RBAC参考模型
    访问控制
  • RBAC0: 包含RBAC系统的最小功能
  • RBAC1:包含RBAC0的所有功能,并且增加了角色层次,一个角色能够继承另一个角色的许可
  • RBAC2:包含RBAC0的所有功能,增加了约束限制配置RBAC系统组件的能力。
  • RBAC3:包含RBAC0,RBAC1,RBAC2的所有功能。
  1. 基本模型—RBAC0
  • 包含四种类型的实体:
  • 用户:访问计算机系统的个体
  • 角色:负责完整计算系统中一项任务的职责
  • 许可:对一个或多个客体的访问权。
  • 会话:表示用户与该用户被分配的角色之间临时的一对多的关系,用户仅与完成特定任务所必须的角色建立会话,符合最小特权原则。
  1. 角色层次—RBAC1
    访问控制
  • 角色层次利用继承的概念使得一个角色能够获得其下级所拥有的访问权。
  • 两个角色之间的连线表示上级角色拥有下级角色所有的访问权及下级角色不具有的访问权,一个角色可以从多个角色那里继续访问权。
  1. 约束—RBAC2
  • 约束是在角色之间定义的关系或与角色相关的条件
  • 互斥角色

指一个用户只能被分配给集合中的一个角色,可以是静态的也可以是动态。动态是指在一次会话中,一个用户仅能被分配给集合中的一个角色。
连同互斥许可的分配,互斥角色集具有的性质:

一个用户只能(静态地或动态地)被分配给一个角色
一个许可只能被分配给一个角色

互斥角色具有不重叠的许可,互斥角色的目的增加具有不同的能力,如果攻击者想要攻击系统,必须被分配给更多的角色,增加了攻击的难度。

  • 基数
    限制被分配给一个角色用户的数量
  • 先决条件

一个用户仅当被分配直接下级角色,才能被分配上级角色。
好处:如果一个用户执行一个功能并不需要上级角色的全部许可,那么用户可以被分配下级角色,符合最小特权原则。

  1. NIST RBAC模型
    访问控制
  • 包括四个组件:核心RBAC,层次RBAC,静态职责分离(SSD)和动态职责分离(DSD)。

核心RBAC:
与RBAC0相同。但NIST引入了操作和对象这两个子实体细化了许可的概念。

对象:系统资源
操作:在调用时为用户执行某些功能

核心RBAC管理函数包括在用户集添加和删除用户,在角色集添加和删除角色,创建和删除用户到角色之间的分配,创建和删除角色到许可之间的分配。
支持系统函数:创建用户与角色集之间的会话,在会话中添加或删除角色,检查会话主体是否有权限执行对客体的请求操作
评审函数:使用户能够看清模型的所有元素及其关系。

层次RBAC
包含RBAC1描述的继承概念。在NIST标准中,继承包含两个方面的含义:

角色r1继承了角色r2的所有许可
分配给角色r1的用户也分配给角色r2
则称角色r1是角色r2的子孙

NIST模型定义两种角色层次:

通用角色层次:
一个角色可以从多个下级角色继续许可,并且多个角色可以继承同一个下级角色。
受限角色层次:将有一个或多个直接祖先的角色限制成唯一的子孙。

新增四个管理函数:

在两个已存在的角色之间添加新的直接继承关系
删除已存在的直接继承关系
创建新的角色并将其添加为已存在的角色的直接子孙
层次RBAC的评审函数使管理员能够查看各角色之间的继承关系

静态职责分离:

SSD是一个二元组(角色集,n),其中没有用户能够被分配给角色集中n个或n个以上的角色。
SSD包括创建,删除角色集及添加,删除角色成员的管理函数,还包括查看已存在的SSD集属性的评审函数。

动态职责分离:
DSD是一个二元组(角色集,n),n是大于等于2的自然数,没有用户在一次会话中能够**角色集的n个或大于n个角色。
DSD的管理员能够是用户在不同的时间段具有不同的能力,与SSD相同,DSD包括用来定义和查看DSD关系的管理和评审函数。