【计算机系统安全】第四章 操作系统安全

第四章 操作系统安全

第四章、 操作系统安全

  • 操作系统的安全问题
  • 存储保护
  • 用户认证
  • 访问控制
  • Windows系统安全

4.1 操作系统的安全问题

操作系统的易用性和安全性是一对矛盾。

操作系统面临的安全威胁

(1)恶意代码的破坏和影响

(2)恶意用户的攻击

隐蔽信道(Covert Channel):通过公开通道传递秘密信息的方式就是隐蔽信道(隐蔽通道)。例如在考试中常常有人通过咳嗽、叹气、摸耳朵、摸鼻子等小动作来传递试卷答案。

隐蔽信道一般可分为存储通道和时间通道,它们都是利用共享资源(如文件,对文件是否存在的判断)来传递秘密信息的,并要协调好时间间隔。共享资源在多用户环境里是很普遍的。

阈下信道(Subliminal Channel)是公开合法信道中所建立的一种实现隐蔽通信的方式。它是一种典型的现代信息隐藏技术,有着广阔的应用前景。

可以举一个“囚犯问题”的例子。假设Alice和Bob被捕入狱,Bob被关在男牢房,而Alice被关在女牢房。看守Walter愿意让他们交换信件(消息),但不允许他们加密。但同时,Walter意识到这样他们会商讨一个逃跑计划,所以他必须要阅读他们之间的信件。

Walter也希望欺骗他们,他想让他们中的一个将一份欺诈的消息当做来自另一个人的真实消息。但Alice和Bob愿意冒这种欺诈的危险,否则他们就无法通信了,并且他们必须商讨他们的逃跑计划。为了完成这件事情,他们肯定要欺骗看守,并找出一个秘密通信的方法,他们必须建立一个阈下信道,即完全在Walter视野内的他们之间的一个秘密通信信道,即使消息本身并不包含秘密信息。通过交换无害的签名的消息,他们可以互相传送秘密消息,并骗过Walter,即使Walter始终监视着所有的通信。

一个简单的阈下信道可以是句子中单词的数目。句子中奇数个单词对应“1”,而偶数个单词对应“0”。因此,当读这种仿佛无关紧要的句子时,已经将信息“1010”传递给了自己的人员。不过这个例子的问题在于它没有密钥,安全性完全依赖于算法的保密性。

(3)用户的误操作

操作系统的安全性设计

操作系统安全的主要目标是:

  • 标识系统中的用户并进行身份鉴别
  • 依据系统安全策略对用户的操作进行存取控制,防止用户对计算机资源的非法存取
  • 监督系统运行的安全
  • 保证系统自身的安全性和完整性

安全机制:

  • 隔离控制(物理隔离、时间隔离、逻辑隔离、加密隔离)
  • 存储器保护(内存保护、运行保护、I/O保护)
  • 用户认证
  • 访问控制等

4.2 存储保护

内存保护

内存储器是操作系统中的共享资源,内存被用户程序与系统程序所共享,在多道环境下更是被多个进程所共享。

内存保护的目的是:

  • 防止对内存的未授权访问;
  • 防止对内存的错误读写,如向只读单元写;
  • 防止用户的不当操作破坏内存数据区、程序区或系统区;
  • 多道程序环境下防止不同用户的内存区域互不影响;
  • 将用户与内存隔离,不让用户知道数据或程序在内存中的具体位置。

常用的内存保护技术:

  • 单用户内存保护技术

    在单用户操作系统中,系统程序和用户程序同时运行在一个内存之中,若无防护措施,用户程序中的错误有可能破坏系统程序的运行。

    可以利用基址寄存器在内存中规定一条区域边界(一个内存地址),用户程序运行时不能跨越这个地址。

    利用该寄存器也可以实现程序重定位功能,可以指定用户程序的装入地址。

    image-20210606192806761
  • 多道程序的保护技术

    对于多用户系统,可能有多个用户程序需要在内存运行,利用一个基址寄存器无法将这些用户程序分隔在不同内存区运行。

    解决这个问题的办法是再增加一个边界址寄存器(或简称边界寄存器),保护用户程序的边界。

    如果使用多对基址和边界寄存器,还可以把用户的可读写数据与只读数据区和程序区互相隔离,这种方法可以防止程序自身的访问错误。

    image-20210606192928348
  • 内存标记保护法

    用前面介绍的多对基址和边界寄存器技术只能保护数据区不能被其他程序访问,不能控制自身程序对同一个数据区内单元有选择地读或写。

    例如,一个程序中若没有数组越界溢出检查,当向该数组区写入时就有可能越界到其他数据单元,甚至越界到程序代码区(这就是缓冲区溢出的一种情况),而代码区是禁止写操作的。

    为了能对每个存储单元按其内容要求进行保护,如有的单元只读、读/写、或仅执行等不同要求,可以在每个内存单元中专用几个比特来标记(Tagging)该单元的属性。

    每次指令访问这些单元时,都要测试这些比特,当访问操作与这些比特表示的属性不一致的时候就要报错。

    image-20210606193156881

    X表示执行,R表示读,W表示写。

  • 分段与分页保护技术

    对于稍微复杂一些的用户程序,通常按功能划分成若干个模块(过程)。每个模块有自己的数据区,各模块之间也可能有共享数据区。各用户程序之间也可能有共享模块或共享数据区。

    这些模块或数据区有着不同的访问属性和安全要求,使用上述各种保护技术很难满足这些要求。

    分段将内存分成很多逻辑单元,如一组组私有程序或数据。采用分段技术以后,用户并不知道他的程序实际使用的内存物理地址,操作系统把程序实际地址隐藏起来了。这种隐藏对保护用户代码与数据的安全是极有好处的。

    image-20210606193348381

    分段技术有许多优点:

    任何段可以放在任何内存空间——假设地址空间大小足够容纳任何一个段;

    不同的访问控制可以实施在不同的段中;

    在分段这种方式下,任何地址的引用必须通过操作系统,这样操作系统可以进行完全的调度。

    分段的管理方式存在的问题与困难主要是:

    1)当操作系统使用<段址,偏移地址>的方式来进行寻址时,必须知道段的大小以确保访问的地址在该段之内。但是很多段(比如那些可以进行动态内存分配的段)的内存是可以在执行的过程中动态增长的。所以,操作系统中必须保存可变化段的大小。为了保证安全,要求系统检查所产生的地址,验证其是否超出所访问段的末端。

    2)因为段大小可变,内存“碎片”成为一个潜在的问题,使得内存中虽然剩余碎片的总和大于某个段的长度,但仍无法为该段分配内存的现象发生。

    3)如果压缩内存以便于更加有效地利用已有空间,分段表则会发生改变。

    总之,分段本身比较复杂,并且它给操作系统带来了明显的负担。

    为了解决分段可能产生的内存碎片问题,引入了分页技术(如图)。分页是把目标程序与内存都划分成相同大小的片段,这些片段称为“页”。在分页模式下,需要使用参数对<页,偏移地址>来访问特定的页。

    image-20210606193538534

    分页技术虽然解决了碎片问题,但又损失了分段技术的安全功能。由于段具有逻辑上的完整意义,而页则没有这样的意义,程序员可以为段规定某些安全控制要求,但却无法指定各页的访问控制要求。

    解决这个问题的方法是将分页与分段技术结合起来使用,由程序员按计算逻辑把程序划分为段,再由操作系统把段划分为页。在段的基础上进行分页的好处在于不会产生碎片、效率高,并且不需要考虑每部分大小的变化所带来的各种问题。

    image-20210606194423662

    操作系统同时管理段表与页表,完成地址映射任务和页面的调进调出,并使同一段内的各页具有相同安全管理要求,这也是虚拟存储器的基本思想。系统还可以为每个物理页分配一个密码,只允许拥有相同密码的进程访问该页,该密码由操作系统装入进程的状态字中,在进程访问某个页面时,由硬件对进程的密码进行检验,只有密码相同且进程的访问权限与页面的读写访问属性相同时方可执行访问。这种安全机制有效地保护了虚拟存储器的安全。

运行保护

安全操作系统很重要的一点是进行分层设计,而运行域正是这样一种基于保护环的等级式结构。运行域是进程运行的区域,在最内层具有最小环号的环具有最高特权,而在最外层具有最大环号的环是最小的特权环。

设置两环系统是很容易理解的,它只是为了隔离操作系统程序与用户程序。这就像生活中的道路被划分为机动车道和非机动车道一样,各种车辆和行人各行其道,互不影响,保证了各自的安全。

对于多环结构,它的最内层是操作系统,它控制整个计算机系统的运行;靠近操作系统环之外的是受限使用的系统应用环,如数据库管理系统或事务处理系统;最外一层则是各种不同用户的应用环

Intel x86微芯片系列就是使用环概念来实施运行保护的,如图所示。

image-20210606195620225

环有4个级别:环0是最高权限的,环3是最低权限的。当然,微芯片上并没有实际的物理环。

Windows操作系统中的所有内核代码都在环0级上运行。用户模式程序(例如Office软件程序)在环3级上运行。包括Windows和Linux在内的许多操作系统在Intel x86微芯片上只使用环0和环3,而不使用环1和环2。

下面介绍两域结构的实现,在段描述符中相应的有两类访问模式信息:一类用于系统域,一类用于用户域。这种访问模式信息决定了对该段可进行的访问模式,如下图所示:

image-20210606195700632

如果要实现多级域,那么就需要在每个段描述符中为每个域保存独立的W、R、X比特集,集的大小将取决于设立多少个等级。这在管理上是很笨拙的,我们可以根据等级原则简化段描述符以便于管理。

简化的基本思想就是利用环界(Ring Bracket)的思想只保存拥有某种操作能力的最低特权环号。

如下图所示,称这3个环号为环界。相应地,R1、R2、R3分别表示对该段可以进行写、读、运行操作的环界。

image-20210606195800077

比如环界集为(0, 0, 0)的段只允许最内环(最高特权)访问。而环界集(7, 7, 7)则表示任何环都可以对该段进行任何形式的访问操作。

I/O保护

I/O介质输出访问控制最简单的方式是将设备看作是一个客体,仿佛它们都处于安全边界外。

由于所有的I/O不是向设备写数据就是从设备接收数据,所以一个进行I/O操作的进程必须受到对设备的读写两种访问控制。

这就意味着设备到介质间的路径可以不受什么约束,而处理器到设备间的路径则需要施以一定的读写访问控制。

4.3 用户认证

用户的认证包括:标识与鉴别

标识(Identification)就是系统要标识用户的身份,并为每个用户取一个系统可以识别的内部名称:用户标识符。用户标识符必须是惟一的且不能被伪造,防止一个用户冒充另一个用户。

将标识符与用户联系的过程称为鉴别(Authentication),鉴别过程主要用以识别用户的真实身份,鉴别操作总是要求用户具有能够证明他身份的特殊信息,并且这个信息是秘密的或独一无二的,任何其他用户都不能拥有它。

认证用户的方法一般有三种:

(1)用户所知道的:如要求输入用户的姓名、口令或加密密钥等。

(2)用户所拥有的:如智能卡等物理识别设备。

(3)用户本身的特征:如用户的指纹、声音、视网膜等生理特征。

口令认证

口令系统提供的安全性依赖于口令的保密性,这就要求:

1)当用户在系统注册时,必须赋予用户口令

2)用户口令必须定期更改

3)系统必须维护一个口令数据库

4)用户必须记忆自身的口令

5)在系统认证用户时,用户必须输入口令

1、口令质量

​ 口令空间=AL

其中A表示口令的字符空间,L表示口令的长度。

2、口令存储

必须对口令的内部存储实行一定的访问控制和加密处理,保证口令数据库不被未授权用户读取或者修改。

还可以将口令存储在特殊设备,比如Smart Card中。

3、口令传输

在口令从用户终端到认证端的传输中,应施加某种保护。

4、口令管理

系统管理员应该担负的职责包括:

1)初始化系统口令:系统中有一些标准用户是事先在系统中注册了的,在允许普通用户访问系统之前,系统管理员应能为所有标准用户更改口令;

2)初始化口令分配:系统管理员应负责为每个用户产生和分配初始口令,但要防止将口令暴露给系统管理员。

5、口令审计

系统应该对口令的使用和更改进行审计,审计事件包括成功登录、失败尝试、口令更改程序的使用、口令过期后上锁的用户账号等。

一次性口令认证

一次性口令OTP(One-Time Password)的基本原理是:在登录过程中加入不确定因子,使每次用户在登录时输入的口令都不相同。认证系统得到口令后通过相应的算法验证用户的身份。

根据不确定因子的产生方式一次性口令可以分为几种常见的模式:口令序列、时间同步、事件同步、质询/响应(Challenge/Response)方案等。

口令序列:

image-20210606201632934

时间同步方案:该方案要求用户和认证服务器的时钟必须严格一致,用户持有时间令牌(动态密码生成器),令牌内置同步时钟、秘密密钥和加密算法。

时间令牌根据同步时钟和密钥每隔一个单位时间(如一分钟)产生一个动态口令,用户登录时将令牌的当前口令发送到认证服务器,认证服务器根据当前时间和密钥副本计算出口令,最后将认证服务器计算出的口令和用户发送的口令相比较,得出是否授权用户的结论。

该方案的难点在于解决好网络延迟等不确定因素带来的干扰,使口令在生命期内顺利到达认证系统。

质询/响应方案又名挑战/应答方案:在智能卡应用中的工作过程(如图):

image-20210606202306983

1)认证请求:客户机首先向服务器发出认证请求,服务器提示用户输入用户ID等信息。
2)质询:服务器选择一个一次性随机数X发送给客户端的智能卡。服务器根据用户ID取出对应的密钥K后,利用发送给客户机的随机串X,在服务器上用加密引擎进行运算,得到运算结果Es。
3)响应:智能卡根据输入的随机串X与智能卡内的密钥K使用硬件加密引擎运算,得到一个运算结果Ec,此运算结果将作为认证的依据发送给服务器。
4)验证结果:服务器比较两运算结果Es与Ec是否相同,若相同,则为合法用户。

由于密钥存在于智能卡中,也未直接在网上发送,整个运算过程也是在智能卡中完成的,密钥认证是通过加密算法来实现的,因而极大地提高了安全性。

并且每当客户端有一次服务申请时,服务器便产生一个随机串给客户,即使在网上传输的认证数据被截获,也不能带来安全上的问题。

令牌或智能卡

这里讲的令牌是一种能标识其持有人身份的特殊标志。例如,公民身份证就是一种认证令牌。为了起到认证作用,令牌必须与持有人之间是一一对应的,要求令牌是惟一的和不能伪造的。

各种银行卡是网络通信令牌的一种形式,银行卡中记录了一些磁记录信息,通常磁卡读出器读出卡信息后,还要求用户输入通行字以便确认持卡人的身份。

智能卡(Smart Card)是一种集成电路卡,它是随着半导体技术的发展以及社会对信息的安全性和存储容量要求的日益提高而应运而生的。

它是一种将具有加密、存储、处理能力的集成电路芯片嵌装于塑料基片上而制成的卡片,智能卡一般由微处理器、存储器及输入、输出设施构成。微处理器用于计算卡的唯一数用户标识(ID),ID保证卡的真实性,持卡人使用ID访问系统。

为防止智能卡遗失或被窃,许多系统需要智能卡和个人标识号(Personal Identification Number,PIN)同时使用。若仅有卡而不知PIN码,则不能进入系统。

生物特征认证

生物认证,可以分为生理特征认证生物行为认证

4.4 访问控制

访问控制与用户认证的区别:

用户认证解决的是:“你是谁?你是否真的是你所声称的身份?”

访问控制技术解决的是“你能做什么?你有什么样的权限?”。

1、访问控制的三要素

(1)主体(Subject):访问操作的主动发起者,但不一定是动作的执行者。

(2)客体(Object):通常是指信息的载体或从其他主体或客体接收信息的实体

(3)安全访问规则:用以确定一个主体是否对某个客体拥有某种访问权力

2、基础的访问控制模型

(1)访问控制矩阵(ACM,Access Control Matrix):基本思想就是将所有的访问控制信息存储在一个矩阵中集中管理。当前的访问控制模型一般都是在它的基础上建立起来的。

image-20210606204531481

在访问控制矩阵的基础上人们研究建立了其他模型,主要包括访问目录表、访问控制表、能力机制和基于角色的访问控制模型。

(2)访问目录表(Access Directory List):这种访问控制机制实际上按访问控制矩阵的行实施对系统中客体的访问控制。

image-20210606210156685

(3)访问控制表(Access Control List):实际上是按矩阵的列实施对系统中客体的访问控制。

image-20210606210532743

(4)能力机制:上述几种访问控制机制适用于固定客体的访问控制,但有这样的实际需求:主体不仅能够创立新的客体,而且还能指定对这些客体的操作权限。

例如,应该允许用户创建文件、数据段、或子例程等客体,也应该让用户为这些客体指定操作类型,如读、写、执行等操作。

能力(Capability)机制就是可以满足这些要求更高的访问控制机制。

主体具有的能力是一种权证,类似一个“入场卷”。它是操作系统赋予主体访问客体的许可权限,它是一种不可伪造的标记。能力是在用户向系统登录时,由操作系统赋予的一种权限标记,用户凭借该标记对客体进行许可的访问。

能力可以实现复杂的访问控制机制。

假设主体对客体的能力包括“转授”(或“传播”)的访问权限,具有这种能力主体可以把自己的能力拷贝传递给其他主体。这种能力可以用表格描述,“转授”权限是其中的一个表项。一个具有“转授”能力的主体可以把这个权限传递给其他主体,其他主体也可以再传递给第三者。具有转授能力的主体可以把“转授”权限从能力表中删除,进而限制这种能力的进一步传播。

能力机制的实现和存储

能力机制需要结合访问控制表(或访问控制矩阵)实现,当一个过程要求访问新客体的时候,操作系统首先查询访问控制表,确认该过程是否有权限访问该客体,若有,操作系统就要为该过程创立一个访问该客体的能力。

为了安全起见,能力应该存储在用户程序访问不到的区域中,这就需要用到前面的内存保护技术。

能力的回收

当主体收回某客体的访问能力以后,该能力所管辖的对客体的访问权限也就被终止了。如何收回传递出去的能力或删除不再使用的能力,是一个稍微复杂的问题。可以在能力表中建立指针指向传递出去的能力,便于操作系统对这些能力进行跟踪、回收或删除。

能力机制的优缺点

能力机制的显著优点是更容易提供对客体的多重访问权限,因为主体可以有不同的能力,而这些能力可以对某个客体有不同的访问权限,这就容易实现一个主体在不同进程中对一个客体不同的访问能力。

不过,虽然能够直接判断一个主体是否拥有某种能力,但不能直接得到主体、客体之间的关系,这样不断追加能力以后,再对其进行修改就变得比较困难了。

(5)面向过程的访问控制:面向过程的访问控制是指在主体访问客体的过程中对主体的访问操作进行监视与限制。

例如,对于只有读权的主体,就要控制它不能对客体进行修改。要实现面向过程的访问控制就要建立一个对客体访问进行控制的过程,该过程能够自己进行用户认证,以此加强操作系统的基本认证能力。

访问目录表、访问控制表、访问控制矩阵、能力和面向过程的控制等五种对客体的访问控制机制的实现复杂性是逐步递增的。实现能力机制需要必须对每次访问进行检查,而访问目录表方式实现比较容易,它只需要在主体对客体第一次访问时进行检查。实现复杂的保护方式提高了系统的安全性,但降低了系统响应速度。安全与效率之间需要平衡。

主流访问控制技术(自主访问控制、强制访问控制和基于角色的访问控制)
自主访问控制(DAC)

由客体的属主对自己的客体进行管理,由属主自己决定是否将自己客体的访问权或部分访问权授予其他主体,这种控制方式是自主的,我们把它称为自主访问控制(DAC,Discretionary Access Control)。

在自主访问控制下,一个用户可以自主选择哪些用户可以共享他的文件。

1、基于行的访问控制机制

这种机制是把每个主体对所在行上的有关客体(即非空矩阵元素所对应的那些客体)的访问控制信息以表的形式附加给该主体,根据表中的内容不同又分为不同的具体实现机制:

(1)权限表(Capability List)机制

权限表中存放着主体可以访问的每个客体的权限(如读、写、执行等),主体只能按赋予的权限访问客体。

由于允许主体把自己的权力转授给其他进程,或从其他进程收回访问权,因此在运行期间,进程的权限可能会发生变化(增加或删除)。由此可见权限表机制是动态实现的。

(2)前缀表(Profiles)机制

前缀表中存放着主体可以访问的每个客体的名字和访问权限。当主体要访问某个客体时,系统将检查该主体的前缀中是否具有它所请求的访问权限。

前缀表机制的实现存在以下困难需要解决:

  • 前缀表可能很大
  • 只能由系统管理员进行修改
  • 撤销与删除困难

(3)口令(Password)机制

在这种机制中,每个客体相应地有一个口令。当主体请求访问一个客体时,必须向系统提供该客体的口令。如果口令正确,主体就可以访问该客体。

每个主体都拥有自己单独的口令,而且在大多数实现口令机制的系统中只允许对每个客体或对客体的每一种访问方式(如读、写、执行等)配备一个口令。

口令机制类似于权力表机制,但口令机制不是动态的。

2、基于列的访问控制机制

这种机制是把每个客体被所在列上的有关主体(即非空矩阵元素所对应的那些行上的主体)访问的控制信息以表的形式附加给该客体,然后依此进行访问控制。它有两种实现形式:

(1)保护位机制

保护位对所有主体、主体组以及该客体的拥有者指定了一个访问权限的集合,UNIX利用了这种机制。

(2)访问控制表(ACL)机制

在这种机制中,每个客体附带了访问矩阵中可以访问它自己的所有主体的访问权限信息表(即ACL)。该表中的每一项包括主体的身份和对该客体的访问权限。

如果利用组或通配符的概念,可以使ACL缩短。

在各种访问控制技术中,ACL方式是实现DAC策略的最好方法。

3、访问许可权与访问操作权

在DAC策略下,访问许可权(Access Permission)访问操作权是两个有区别的概念。

访问操作表示有权对客体进行的一些具体操作,如读、写、执行等;

访问许可则表示可以改变访问权限的能力或把这种能力转授给其他主体的能力。

对某客体具有访问许可权的主体可以改变该客体的ACL表,并可以把这种权利转授给其他主体。

在一个系统中,不仅主体对客体有控制关系,主体与主体之间也有控制关系,这就涉及到对许可权的管理问题。这个问题很重要,因为它与ACL的修改问题有关。在DAC模式下,有如下3种控制许可权手段:

  • 层次型的(Hierarchical)

操作系统仿照社会中的部门组织机构的控制关系建立对客体的访问权的控制关系。

在这个结构中,系统管理员有最高的控制(即访问许可)权,可以修改系统中所有对象(包括主体与客体)的ACL,也具有转授权,可以把修改ACL的权力转授给位于顶部第二层的部门管理员。当然,具有许可权的主体也可以修改自身的ACL。

最底层是被访问的对象,是纯粹的客体,它们对任何客体都不具备任何访问许可权与访问操作权。

  • 属主型的(Owner)

为每个客体设置一个拥有者,一般情况下客体的创建者就是该客体的拥有者。拥有者是唯一可以修改自己客体的ACL的主体,也可以对其他主体授予或撤销对自己客体的访问操作权。

拥有者拥有对自己客体的全部控制权,但无权将该控制权转授给其他主体。

  • 自由型的(Laisser-Faire)

客体的拥有者(创建者)可以把对自己客体的许可权转授给其他主体,也可以使其他主体拥有这种转授权,而且这种转授能力不不受创建者自己的控制。

DAC机制的缺陷:

  • 允许用户自主地转授访问权,这是系统不安全的隐患。
  • 系统无法区分是用户合法的修改还是木马程序的非法修改。
  • 无法防止木马程序利用共享客体或隐蔽信道传送信息。
  • 无法解决因为用户无意(如程序错误、某些误操作等)或不负责任的操作而造成的敏感信息的泄漏问题。
强制控制访问(MAC)

强制访问控制机制MAC(Mandatory Access Control)可以有效地解决DAC机制中可能存在的不安全问题,尤其是像特洛伊木马攻击这类问题。

MAC中一般把信息按机密程度进行分级:

image-20210607130029343

1、MAC机制的实现方法

实现MAC机制时,最主要的是要做到两条:

(1)访问控制策略要符合MAC的原则。

(2)对系统中的每一个主体与客体都要根据总体安全策略与需要分配一个特殊的安全属性,该安全属性能够反映该主体或客体的敏感等级和访问权限,并把它以标记的形式和这个主体或客体紧密相连而无法分开。

2、支持MAC的措施

除了在系统中采用严格地强制访问控制机制外,还要有其他一些管理控制措施给予支持,这样才能有效减少恶意程序窃取信息的机会。

(1)防止恶意程序从外部进入系统

(2)消除利用系统自身的支持而产生木马的可能性

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

网络的发展,特别是Internet的广泛应用使网上信息的完整性要求超过了机密性,而传统的DAC或MAC策略难以提供这方面的支持。

90年代以来NIST (National Institute of Standards and Technology)提出了基于角色的访问控制RBAC(Role-Based Access Control)模型,这一访问控制模型已被广为接受。

RBAC中的基本元素包括:用户、角色和权限。

其核心思想是:将访问权限分配给角色,系统的用户担任一定的角色,与用户相比角色是相对稳定的。

所谓“角色”,是指一个或一群用户在组织内可执行的操作的集合。这里的角色就充当着主体(用户)和客体之间的关系的桥梁。

image-20210607131429616

RBAC与DAC的根本区别在于,用户不能自主的将访问权限转授给别的用户。

RBAC与MAC的区别在于,MAC是基于多级安全需求的,而RBAC不是。

RBAC的模型主要由如下几种:

1)RBAC 96模型

2)ARBAC 97模型(Administration RBAC)

3)NIST RBAC建议标准

RBAC的特点 :

(1)以角色作为访问控制的主体

(2)角色继承

(3)最小特权原则(Least Privilege Theorem)

(4)职责分离(主体与角色的分离)

(5)角色容量

新型访问控制

1、基于任务的访问控制(TBAC)

该模型的基本思想是:授予给用户的访问权限,不仅仅依赖主体、客体,还依赖于主体当前执行的任务及任务的状态。当任务处于活动状态时,主体拥有访问权限;一旦任务被挂起,主体拥有的访问权限就被冻结;如果任务恢复执行,主体将重新拥有访问权限;任务处于终止状态时,主体拥有的权限马上被撤销。

2、基于对象的访问控制(OBAC)

控制策略和控制规则是基于对象访问控制系统的核心所在,在OBAC模型中,将访问控制列表与受控对象或受控对象的属性相关联,并将访问控制选项设计成为用户、组或角色及其对应权限的集合;同时允许对策略和规则进行重用、继承和派生操作。

4.5 Windows系统安全

Windows系统安全模型

1、Windows安全子系统的结构

Windows系统在安全设计上有专门的安全子系统,安全子系统主要由本地安全授权(LSA)、安全账户管理(SAM)和安全引用监视器(SRM)等模块组成,如图4-12所示。

image-20210607132747434

(1)登录进程Winlogon和GINA(Graphical Identification and Authentication DLL,图形化标识和认证)

Winlogon是一个用户模式进程,运行的是\Windows\ System32\Winlogon.exe。在Windows系统的登录过程中,如果用户在Windows系统启动后按Ctrl+Alt+Del组合键,则会引起硬件中断,该中断信息被系统捕获后,操作系统即激活Winlogon进程(作为Windows安全子系统的重要组成部分,Winlogon进程提供交互式登录支持)。Winlogon通过调用GINA(DLL),将登录窗口(帐号名和口令登录提示符)显示在用户前。

GINA在收集好用户的登录信息后,就调用本地安全认证(LSA, Local Security Authority)的LsaLogonUser命令,把用户的登录信息传递给LSA。实际认证部分的功能是通过LSA来实现的。

Winlogon、GINA和LSA三部分相互协作实现了Windows的登录认证功能。

(2)本地安全授权LSA(Local Security Authority)提供了许多服务程序,保障用户获得存取系统的许可权

它产生令牌、执行本地安全管理、提供交互式登录认证服务、控制安全审查策略和由安全引用监视器(SRM)产生审计记录信息。

Lsass(Local Security Authority Subsystem Service)策略数据库是包含本地系统安全策略设置的数据库。该数据库被存储在注册表中,位于HKLM\SECURI TY的下面。它包含了诸如此类的信息:哪些域是可信任的,从而可以认证用户的登录请求;谁允许访问系统,以及如何访问(交互式登录、网络登录,或者服务登录);分配给谁哪些特权;执行哪一种安全审计。

Lsass策略数据库也保存一些“秘密”,包括域登录(domainlogon)在本地缓存的信息,以及Windows服务的用户—账户登录信息。

(3)安全账户管理器SAM(Security Account Manager)服务,负责管理一个数据库,该数据库包含了本地机器上已定义的用户名和组

SAM服务是在\Windows\System32\ Samsrv.dll中实现的,它运行在Lsass进程中。

SAM数据库是个名为SAM的文件,位于%SystemRoot% \system32\config文件夹下。在非域控制器的系统上,SAM数据库了已定义的本地用户和用户组的用户名、登录密码和其他属性。在域控制器上, SAM数据库保存了该系统的管理员恢复账户的定义及其登录密码。

(4)安全引用监视器SRM(Security Refrence Monitor)负责访问控制和审查策略,由LSA支持

SRM提供客体(文件、目录等)的存取权限,检查主体(用户账户等)的权限,产生必要的审查信息。客体的安全属性由安全控制项(ACE)来描述,全部客体的ACE组成访问控制表(ACL)。没有ACL的客体意味着任何主体都可访问。而有ACL的客体则由SRM检查其中的每一项ACE,从而决定主体的访问是否被允许。

(5)认证包(Authentication Package)

认证包可以为真实用户提供认证。这包括运行在Lsass进程和客户进程环境中的动态链接库(DLL),认证DLL负责检查一个给定的用户名和口令是否匹配,如果匹配的话,则向Lsass返回有关用户安全标识的细节信息,以供Lsass利用这些信息来生成令牌。

(6)网络登录(Netlogon)

网络登录服务必须在通过认证后建立一个安全的通道。要实现这个目标,必须通过安全通道与域中的域控制器建立连接,然后,再通过安全的通道传递用户的口令,在域的域控制器上响应请求后,重新取回用户的SIDs和用户权限。

(7)活动目录(Active Directory)是一个目录服务,它包含了一个数据库,其中存放了关于域中对象的信息

这里,域(Domain)是由一组计算机和与它们相关联的安全组构成的,每个安全组被当作单个实体来管理。活动目录存储了有关该域中的对象的信息,这样的对象包括用户、组和计算机。域用户和组的口令信息和特权也被存储在活动目录中,而活动目录则是在一组被指定为该域的域控制器(Domain Controller)的机器之间进行复制的。

2、Windows安全子系统的组件

(1)安全标识符SID(Security Identifiers)

Windows并不是根据每个账户的名称来区分账户的,而是使用SID。在Windows环境下,几乎所有对象都具有对应的SID,例如本地账户、本地账户组、域账户、域账户组、本地计算机、域、域成员,这些对象都有唯一的SID。可以将用户名理解为我们每个人的名字,将SID理解为每个人的身份证号码,人名可以重复,但身份证号码绝对不会重复。

SID是一个48位的字符串,在Windows Vista中,要想查看当前登录账户的SID,可以使用管理员身份启动命令提示行窗口,然后运行“whoami /user”命令。

例如,运行该命令后,我们可以看到类似这样的结果(如图4-13)。

image-20210607134536112

Windows XP中没有whoami程序,因此如果想要在Windows XP下查看当前账户的SID,或者在Windows Vista和Windows XP下查看其他账户的SID,可以借助微软的一个免费小工具PsGetSid (http://www.microsoft.com /technet/sysinternals/utilities/psgetsid.mspx)

(2)访问令牌(Access Tokens)

安全引用监视器使用一个称为访问令牌的对象来标识一个进程或线程的安全环境。访问令牌可以看做是一张电子通行证,里面记录了用于访问对象,以及执行程序,甚至修改系统设置所需的安全验证信息。

令牌的大小是不固定的,因为不同的用户账户有不同的特权集合,它们关联的组账户集合也不同。然而,所有的令牌包含了同样的信息,如图4-14所示。

image-20210607135934204

在进程管理器Process Explorer中,通过进程属性对话框的安全属性页面,可以间接地查看令牌的内容,如图4-15该对话框显示了当前进程的令牌中包括的组和特权。

image-20210607140026429

(3)安全描述符(Security Descriptors)。

为了实现进程间的安全访问,WindowsNT/XP中的对象采用了安全性描述符(Security Desciptor)。令牌标识了一个用户的凭证,而安全描述符与一个对象关联在一起,规定了谁可以在这个对象上执行哪些操作。

image-20210607140108774

(4)访问控制列表ACL(Access Control Lists)

访问控制表是Windows访问控制机制的核心,它们的结构如图4-17所示。每个表由整个表的表头和许多访问控制(ACE)项组成。每一项定义一个个人SID或组SID,访问掩码定义了该SID被授予的权限。

前面介绍过Windows中访问控制列表有两种:系统访问控制列表SACL和自主访问控制列表DACL。Windows XP下右击C:图标,选择属性,可查看C盘的DACL(如图4-18)。

image-20210607140253642

(5)访问控制项ACE(Access Control Entries)

访问控制项包含了用户或组的SID以及对象的权限。SID用来标识允许、禁止或审计访问的用户或组。访问控制项有两种:允许访问和拒绝访问。拒绝访问的级别高于允许访问。

3、Windows安全机制

(1)Windows认证机制

以Windows 2000为例,系统提供两种基本认证类型,即本地认证和网络认证

本地认证是根据用户的本地计算机或Active Directory账户确认用户的身份。

网络验证,根据此用户试图访问的任何网络服务确认用户的身份。为提供这种类型的身份验证,Windows 2000安全系统集成3种不同的身份验证技术:Kerberos V5、公钥证书和NTLM。

Kerberos认证:

image-20210607140451346

(2)Windows访问控制机制。

Windows NT/XP的安全性达到了橘皮书C2级,实现了用户级自主访问控制。其访问控制机制如图4-19所示。

image-20210607140549954

(3)Windows审计/日志机制

日志文件是Windows系统中一个比较特殊的文件,它记录Windows系统运行状况,如各种系统服务的启动、运行和关闭等信息。

Windows日志有3种类型:系统日志、应用程序日志和安全日志,它们对应的文件名为SysEvent.evt、AppEvent.evt和SecEvent.evt。这些日志文件通常存放在操作系统安装的区域“system32\config”目录下,可以通过打开“控制面板”→“管理工具”→“事件查看器”来浏览其中内容。

(4)Windows协议过滤和防火墙

针对来自网络上的威胁,Windows NT 4.0、Windows 2000则提供了包过滤机制,通过过滤机制可以限制网络包进入到用户计算机。而WindowsXP则自带了防火墙,该防火墙能够监控和限制用户计算机的网络通信。

(5)Windows文件加密系统

为了防范入侵者通过物理途径读取磁盘信息,绕过Windows系统文件访问控制机制。微软公司研究开发了加密的文件系统EFS (Encrypting File System),利用EFS,文件中的数据在磁盘上是加密的。用户如果访问加密的文件,则必须拥有这个文件的密钥,他才能够打开这个文件,并且像普通文档一样透明地使用它。

EPS:

image-20210607145039448
Windows用户账户

1、用户账户

在Windows中,访问控制依赖于系统能够惟一识别出每个用户。用户账户(User Account)提供了这种惟一性。

2、组

除用户帐户外,Windows还提供组帐户。可使用组帐户对同类用户授予权限以简化帐户管理。如果用户是可访问某个资源的一个组中的成员,则该特定用户也可访问这一资源。因此,若要使某个用户能访问各种工作相关的资源,只需将该用户加入正确的组。

3、本地账户和域账户

本地账户,即存储在计算机SAM中的用户账户和安全组。独立的计算机和工作组中的计算机都只使用本地账户。工作组中的每台计算机只维护含有该台计算机本地账户的自己SAM。本地账户只允许用户登录到存储其账户的计算机,并且只允许访问该计算机上的资源。

登录验证

1、验证机制

Windows 安全系统包括了三种不同的身份验证协议来进行加密:

(1)NTLM(与Windows NT 4.0系统兼容)
(2)Kerberos V5
(3)PKI

2、登录及身份验证过程

成功的登录过程要经过以下4个步骤:

1)Windows的Winlogon过程给出一个对话框,要求回答一个用户名和口令。

2)Winlogon将用户名和口令传递给LSA(Local Security Authority,本地安全授权),LSA决定该登录应该在本地计算机还是网络上进行身份验证。这实际上依赖于用户在“登录到”窗口所作的选择。

3)如果是本地登录,LSA会查询SAM数据库,以确定用户名和口令是否属于授权的系统用户。如果用户名和密码合法,SAM把该用户的SID以及所属的所有组的SID返回给LSA。LSA使用这些信息创建一个访问令牌(Access Token),每当用户请求访问一个受保护资源时,LSA就会将访问令牌出示以代表用户的“标记”。

4)Winlogon启动系统,该用户的访问令牌就成了用户进程在Windows系统中的通行证。用户无论做什么事情,Windows中负责安全的进程都会检查其存取标识,以确定其操作是否合法。用户成功地登录之后,只要用户没有注销自己,其在系统中的权力就以SID为准,Windows安全系统在此期间不再检查安全账户数据库SAM。这主要是考虑到效率。

Windows XP的安全策略主要包括:

  • 密码策略
  • 锁定策略
  • 审核策略
  • 用户权力指派
  • 安全选项
  • 装载自定义安全模板
  • 软件限制策略
  • 等。

Windows XP的安全策略的配置可以通过“控制面板”->“管理工具”->“本地安全策略”启动。

posted @ 2021-09-14 18:03  Clancy_gang  阅读(1449)  评论(0编辑  收藏  举报