操作系统的安全性表现
物理上分离:要求进程使用不同的物理实体
时间上分离:具有不同安全要求进程在不同时间运行
逻辑上分离:要求进程不能访问其允许范围外的实体
密码上分离:要求进程隐蔽数据及计算
操作系统安全的主要目标
依据系统安全策略对用户的操作进行访问控制,防止用户对计算机资源的非法访问(窃取、篡改和破坏);
标识系统中的用户和进行身份鉴别;
监督系统运行时的安全性;
保证系统自身的安全性和完整性。
必要的安全机制
硬件安全机制
访问控制机制:自主访问控制、安全标记与强制访问控制、客体重用
可追究机制:标识与鉴别、可信路径、安全审计
连续保护机制:系统完整性、隐蔽通道分析、最小特权管理、可信恢复
第一节硬件安全
基本安全机制,包括:存储保护、运行保护、I/O保护
一、存储安全
1.虚地址空间
存储进程的程序与数据的专用地址空间
由硬件实现虚-实地址转换/映射
2.请求式页面调度
操作系统建立一个作用于整个进程虚拟存储器的页面描述表,并在描述符中设置一个”ON DISK”标志,以指示那些页面不在物理存储器中, 此时要求进行中断页处理(整个进程用一个页表)
3.分段虚拟存储
典型二段方案:分为用户空间与系统空间
可变长分段与请求页面调度结合(每个进程的段数不同,每个段都有一个可变长的页面描述表)
二、运行保护
基于保护环的等级域机制:
1.执行域:涉及内容为:执行方式、状态以及范围。域是分层的。
2.保护环:分层图的图形像一组同心的环。环的编号越小,特权越高。
3.安全概念:保护每一环免遭其他环的影响,并允许每层环有效地控制该环及更低特权环上的应用程序。
三、IO保护
I/O硬件保护机制:
I/O是只能由操作系统执行的一种特权操作.
I/O介质输出访问控制最简单的方式是将设备看成客体,仿佛它们都处于安全边界外。
由于所有的I/O不是向设备写数据就是从设备接收数据,所以一个进行I/O操作的进程必须受到对设备的读/写两种访问控制。
因此,设备到介质间的路径可以不受什么约束,而处理器到设备间的路径则需要施以一定的读/写访问控制
第二节自主访问控制机制
计算机系统安全机制的主要目的是访问控制, 它包括三个任务:
(1)授权:确定哪些主体有权访问哪些客体
(2)确定访问权限(读、写、执行、删除、追加等存取方式的组合)
(3)实施访问权限
一、自主访问控制概述
文件的拥有者可以按照自己的意愿精确指定系统中的其他用户对其文件的访问权。
定义:自主访问控制是基于客体所属用户/组身份,以及需知原则来约束对客体的访问的一种手段。这种控制是自主的意义在于:具有特定访问权限的一个主体能够将该权限(直接或间接地)传递给另一个主体。
二、DAC分类
基于行的访问控制矩阵信息:连接可访问客体到指定用户。
基于列的访问控制矩阵信息:连接用户列表到指定的客体。
1. 基于行的自主存取控制机制:
① 能力表(capability list)
对于每个用户,系统有一个能力表。要采用硬件、软件或加密技术对系统的能力表进行保护,防止非法修改。能力的两个基本属性是: 它们可以从一个访问主体传递给另一个主体,且未经操作系统TCB的允许,拥有 某些能力 的 访问主体 不能 修改 或者 伪造 任何能力。
不足 :即使一个简单的“谁能存取该文件?”的问题,也要花费系统大量时间从每个用户的能力表中寻找。
②前缀表(profiles)
对每个主体赋予的前缀表,包括 受保护客体名 和 主体对它的访问权限。当主体要访问某客体时,自主存取控制机制将检查主体的前缀是否具有它所请求的访问权。
不足: (1)访问权的撤消 和 客体的删除一般都是比较困难的,因为系统必须能够检测每个主体的前缀;(2)对于一个可访问许多客体的主体,它的前缀量将非常大,很难管理;(3)如果不采用全路径,客体命名必须惟一,否则难以管理。
② 口令: password-based accesscontrol mechanisms
如果对每个客体,每个主体都拥有它自己独有的口令(类似能力表)每个客体都相应地有一个读/写口令 ,主体在对客体进行访问前,必须向操作系统提供该客体的口令。正确,才可以访问该客体。
2. 基于列的自主存取控制机制
在每个客体上都附加一个主体明细表,表示存取控制矩阵。表中的每一项都包括主体的身份和主体对该客体的访问权限。
方法一,“拥有者/同组用户/其他用户” 模式
Owner(前三位) 此客体的拥有者对它的访问权限;
Group(中间三位) owner同组用户对此客体的访问权限;
Other(最后三位) 其他用户对此客体的访问权限;
方法二 ACL和“拥有者/同组用户/其他用户”相结合模式
方法:仅对“拥有者/同组/其他用户”无法分组的用户使用ACL
优点:保持与原系统的兼容性,且控制粒度细化到单个用户
第三节强制访问控制机制(MAC)
在DAC控制下,以某个用户身份运行的程序可以任意地修改该用户所拥有文件的访问控制信息,而操作系统无法区分修改信息的是一个合法用户还是一个木马。尽管系统可以对拥有特权的特定程序修改访问控制信息的能力进行限制,但同时会失去灵活性。实际上,在DAC控制下并没有办法防止木马通过共享客体(shared objects)-比如文件、消息和共享内存等,把消息从一个进程传给另一个进程。
木马是一段计算机程序,表面上在执行合法功能,实际上却完成了用户不曾料到的非法功能。受骗者是程序的用户,入侵者是这段程序的开发者。木马必须具有以下功能才能成功地入侵:
(1)入侵者要写一段程序进行非法操作,其行为方式不会引起用户的怀疑
(2)必须设计出某种策略诱使受骗者接受这段程序
(3)必须使受骗者运行该程序
(4)入侵者必须有某种手段回收由木马发作为他带来的利益
一、MAC可以在一定程度上阻止木马
主要体现在:
(1)为每个主体(subjects)和客体(objects)赋予安全属性(security attributes),这些属性不像自主访问控制属性那样可以随意改变。(2)系统通过比较主体和客体的安全属性来决定该主体能否以期望的方式访问该客体。反之,如果系统判定拥有某一安全属性的主体不能访问某个客体,那么任何人(包括客体的拥有者)也不能使它访问该客体。从这种意义上讲,是“强制”的。(3)以某个用户身份运行的进程不能改变该用户本身及该用户所拥有客体的安全属性,所以简单地通过允许其他用户来访问一个文件不会泄露文件的内容。(4)可以阻止进程创建共享文件,避免利用这些共享文件将敏感信息传递给另一个进程。
二 多级安全的思想
1.起源:上世纪60年代末期,美国国防部研究保护计算机中机密信息的新方式;
2.多级安全的概念:(1)将文件按不同的密级(classification)进行分类,将用户按许可级(clearance)分类;(2)要想合法地获得信息,用户所具有的许可级别必须大于或等于信息的密级;
3多级安全系统的主要目标是:实施强制机密性安全策略,确保信息不会被无意泄露。
4.军事安全策略,也称多级安全策略,主要防止用户获得他不应获得的密级较高的信息,策略中主客体的许可级/密级等统称为安全级(security label),由两方面构成:保密级别(sensitive level/hierarchical level)例如,分为unclassified,confidential,secret,topsecret等级别。注意:保密级之间的关系属于线性排列,即: “unclassified <confidential < secret < top secret ”范畴集(category/compartment):安全级涉及的领域
例如,人事处、财务处等。
注意:范畴是互相独立和无序的,但两个范畴集之间的关系是包含、被包含或无关。比如: {人事处} {人事处,财务处}
三 安全级别的支配关系
两个安全级A和B之间的支配关系具体包括以下几种:
1.A支配B:即A的密级不小于B的密级,A的范畴集包含B的范畴集。
2.A支配于B或B支配A:即B的密级不小于A的密级,B的范畴集包含A的范畴集。
3.A等于B:即A的密级等于B的密级,A的范畴集等于B的范畴集。
4.A、B无关:即A的范畴集不包含B的范畴集,B的范畴集也不包含A的范畴集
三 BLP模型的安全属性:
1, 简单安全属性:不可上读2.*属性:不可下写
三 安全级标识
1. 主体的安全级:用户安全级范围的初始设置:由系统管理员在创建用户时完成,并保存到一个用户安全文档(例如:修改useradd和usermod命令,增加ia_userinfo命令来查看)在用户登录时,可以指定本次登录shell进程的安全级或缺省安全级,但都必须在用户所指定的安全级范围之内
2. 客体安全级:(1)“文件、有名管道”的安全级 = 创建进程的安全级,且必须等于其父目录的安全级,保存在相应的磁盘inode结点和内存inode结点中。(2)“进程、消息队列、信号量集合和共享存储区”的安全级 = 创建进程的安全级,保存在内存相应的数据索引结构中。(3)“目录”的安全级 = 创建进程的安全级,且必须大于或等于其父目录的安全级,保存在相应的磁盘inode结点和内存inode结点中。(4)设置客体安全级的命令为setlevel。
3. 设备的安全级:系统须在设备安全文件档中说明系统中每个设备的安全属性,如设备的最高安全级、最低安全级等。设备工作时还具有一个当前安全级,为调用该设备的用户进程、系统进程或系统服务进程的安全级,而且必须在设备允许的最高安全级和最低安全级范围之内。
4. 设备分为单级设备和多级设备。
单级设备在某个时刻只能处理单一安全级的数据。这类设备包括终端和用于某个相应状态的磁带机和软盘驱动器。如果一个设备用作一个公用资源,那么它必须是单级设备。
多级设备可以包含多个安全级数据。这个设备只能由具有适当特权的进程打开,这些进程包括内核和系统进程、具有适当特权的管理员进程。磁盘和存储器设备就是多级设备。
通常一个用户在登录时访问一个终端设备,这个用户将以某个安全级在该终端上进入系统。如果这个安全级不在这个终端所定义的安全级范围之内,这个登录就会失败。如果登录成功,这个设备的安全级就被设置成用户登录时所使用的安全级。
要使用磁带或软盘设备,或者不是在登录时访问终端设备,用户必须要求管理员分配(allocate)设备,管理员以某个安全级将此设备分配给这个用户。
如果这个安全级不在设备的安全级范围之内,这个分配将失败。
如果成功,用户就成为这个设备的所有者(owner),设备文件的DAC设置为600,设备安全级为分配时给定的安全级,并且管理员通知用户分配成功。如果用户当前的安全级等于分配的设备安全级,用户就可以任意地使用该设备了。
5.
第四节客体重用机制
1. 客体重用思想:包含一个或多个客体的存储介质(例如,页面,磁盘扇区,磁带)的主体的重新分配。通过标准系统机制,为新的主体重新分配时不应含有任何可用的残留数据。
2. 标准要求:
1)TCSEC(C2-A1)和GB17859(第二级~第五级)的要求:在计算机信息系统可信计算机基(TCB)的空闲存储客体空间中,对客体初始指定、分配或再分配一个主体之前,要求撤消客体所含信息的所有授权。当主体获得对一个已被释放的客体的访问权时,当前主体不能获得原主体活动所产生的任何信息。
2)CC和GB/T18336—2001(EAL2~EAL 7):PP中有FDP类(保护用户数据),其中子集“9、残留信息保护(FDP-RIP)”对应的就是TCSEC和GBl7859中的客体重用机制,用于保护文件和存储器中的残留信息。
3. 实施方法:即残留数据的清理工作:(1)硬盘、软盘、可擦写光盘的物理盘块空间:文件的删除和创建,可能会在重新分配物理盘块空间时,泄露这些盘块上以前曾经存放的信息。因为删除文件只是简单将该文件对应的目录索引项(包括I结点号、文件名)清零,而对应该文件的物理盘块上的内容则依然存在(2)内存页面:Linux内核采用页面式存储管理,虚拟地址空间划分成固定大小的“页面”,由MMU(内存管理单元)在运行时将虚拟地址“映射”成(或者说交换成)某个物理内存页面中的地址。所以,根据具体介质的不同,一个物理页面可以在内存中,也可以在磁盘(交换设备)上,分别称为“内存物理页面”和“盘上物理页面”。 在某项外部设备上,例如网卡上,用来存储一个页面内容的那部分介质,也称为一个物理页面,这里称为“外设物理页面”。由于内存页面的分配和释放,可能会在重新分配内存页面时,泄露其上以前曾经存放的信息。(3) 高速缓存:Linux内核在运行中常常会需要使用一些页高速缓存区。页高速缓存中可能包含的内容:a)含有普通文件数据的页;b)含有目录的页;c)含有直接从块设备文件读出的数据的页;d)含有用户态进程数据的页;e)属于特殊文件系统文件的页(注:内核的代码和内核数据不必从磁盘读也不必写入磁盘)。因此,由于这些页高速缓存空间的释放和再分配,也可能会泄露其以前曾经被存放的信息。
第五节标识与鉴别机制
1.标识,要求系统对用户的身份进行有效标记,且要求代表用户身份的特定名称,即用户标识符uid必须满足:(1)是唯一的,而且(2)是不能被伪造的
2.鉴别,将用户标识符与用户联系的过程。主要用以识别用户的真实身份鉴别操作总是要求用户提供能够证明他身份的特殊信息,比如口令/password等。
3. 传统Unix系统中文件客体包括正规文件、目录文件、块设备文件、字符设备文件、命名管道FIFO、Socket、符号链接等7种。每个文件客体对应唯一的属主标识uid和属主所在组的组标识gid,保存在文件的inode中。
系统中的主体(进程)也具有uid和gid,即主体所代表的用户和所在组。
FreeBSD中,新创建文件的uid被设置为创建进程的有效uid(euid),gid被设置为文件所在目录的gid。这样一个目录下的所有层次目录和文件都具有和该目录一样的gid。
FreeBSD,Linux和Mac OS中,超级用户可以使用chown改变文件的属主uid,但是文件的属主不能改变其属主uid,这样做的原因是防止磁盘空间配额限制被恶意绕过。
4. 与鉴别有关的认证机制:
(1)在进行任何需要TCB仲裁的操作之前,TCB都应该要求用户标识他们自己。
(2)TCB必须维护认证数据
(3)TCB必须保护认证数据,防止被非法使用
(4)TCB应能维护、保护和显示所有帐户的状态信息
5. 口令被用作一种保护机制时,至少要满足:
(1)用户选择一个其他用户已使用的口令时,TCB应保持沉默。
(2)TCB应以单向加密方式存储口令,访问加密口令必须有特权
(3)在口令输入或显示设备上,TCB应自动隐藏口令明文。
(4)在普通操作过程中,TCB应禁止使用空口令。只有系统管理员可以在某些特殊作中可以在受控方式下使用
(5)TCB应提供一种保护机制允许用户更换自己的口令,这种机制要求重新认证用户身份。TCB还必须保证只有系统管理员才能设置或初始化用户口令。
(6)对每一个用户或每一组用户,TCB必须加强口令失效管理。口令的使用期超过系统的指定值后,系统应当要求用户修改口令。系统管理员的口令有效期通常比普通用户短。过期口令将失效。只有系统管理员才能进行口令失效控制。
(7)在要求用户更改口令时,TCB应事先通知用户。在用户口令过期之前通知用户系统指定的口令有效时间,或者在口令过期后通知用户,并在更改口令前允许用户有指定次数的额外登录机会。
(8)要求在系统指定的时间段内,同一用户的口令不可重用。
(9)TCB应提供一种算法确保用户输入口令的复杂性。口令至少应满足以下要求:①口令至少应有系统指定的最小长度。②TCB应能修改口令复杂性检查算法。③TCB应允许系统指定一些不可用的口令。
第六节可信路径机制
1. 定义:用户登录、定义用户的安全属性、改变文件的安全级等操作,用户必须确定是与真实的安全内核通信,而不是与一个特洛伊木马打交道。一种用于保障用户和真实的内核通信的机制就是可信路径(或可信通路)
2. TCSEC B2级的可信路径要求为:“可信路径是终端人员能借以直接同可信计算基TCB 通信的一种机制,该机制只能由有关终端人员或可信计算基TCB 启动,不能被不可信软件模仿。”
3. TCSEC B3 级的可信路径要求为:“连接用户(比如注册、更改主体安全级)时,计算机信息系统TCB 提供它与用户之间的可信通信路径。可信路径上的通信只能由该用户或计算机信息TCB 激活,且在逻辑上与其他路径上的通信相隔离,且能正确地加以区分。”
4. 安全路径实现方法一:给每个用户两台终端,一台做通常的工作,一台用作与内核的硬连接。缺点:这种办法虽然十分简单,但太昂贵了。
5. 方法二:对用户建立可信路径的一种现实方法是使用通用终端,通过发信号给核心。这个信号是不可信软件不能拦截、覆盖或伪造的。一般称这个信号为“安全注意键”, Secure Attention Key。缺点:目前大多数终端十分智能,内核要使该机制不被特洛伊木马欺骗十分困难。
6. 安全注意键(SAK)机制的实现方法:在一秒钟内连续按下一个或一组键(在Linux X86 平台上,SAK 是ALT-SysRq-k),TCB 在按键传送到一个进程之前进行监视,以阻止SAK 机制被其他入侵进程截取。一旦可信路径建立,用户可进行登陆。
Linux中,SAK可以用下面命令来激活:echo “1” > /proc/sys/kernel/sysrq 。使用可信路径将终止其他所有进程对该终端的访问,因此防止其他进程欺骗该可信登陆进程。
7.
8. 安全注意键在Windows NT系统中被称为SAS(Secure Attention Sequence),默认为“Ctrl-Alt-Del”组合。整个可信路径机制作为WinLogon的子功能来实现。
Local Security Authority(LSA):系统的主要安全功能管理及维护进程。
Security Accounts Manager(SAM):负责管理系统用户帐号数据库的安全组件
Security Reference Monitor(SRM):安全引用监控器
Microsoft Verification Package(MSV):负责用户鉴别功能的具体软件包
第七节安全审计
1.概念:审计活动就是对系统中安全相关行为进行记录(recording), 检查(examining) 和 审核(reviewing)。目的:检测和阻止非法用户对计算机系统的入侵,并显示合法用户的误操作。意义:审计员可从审计追踪中获得详细、可靠的信息,为系统事故原因的查询、定位,事故发生前的预测、报警以及事故发生后的实时处理提供证据。
2.审计事件,是系统审计用户操作的最基本单位。比如:创建文件的事件creat,涉及如下系统调用:
open(“file1”,O_CREATE,mode)
creat(“file1”,mode)
所以, creat事件就在用户调用上述系统调用时由核心审计下来。
3.审计事件可分为主体审计事件和客体审计事件两大类:
主体审计事件:进程代表特定的用户请求系统服务、利用系统资源完成特定的任务,是系统中的活动主体。审计系统必须记录系统中所有执行安全相关活动的主体,这类审计事件即主体审计事件。
客体审计事件:操作系统中的客体是指文件、消息、信号量、共享区等,客体审计事件关注的是对安全攸关的系统客体(或文件) 进行的存取活动。
4.划分标准:从主体(用户和代表用户的进程)角度上看,系统要记录用户进行的一些活动,每个用户有自己的待审计事件集,称为用户事件标准。有些事件与系统安全性关系非常大,任何时候都不应免于审计,为固定事件集。
从客体对象角度,先定义关于某对象的哪些操作事件要求被审计,即包含客体对象的审计事件标准,再确定待审计客体的MAC安全级范围。
5主体审计事件:主体审计事件比如:exec,fork, mount, reboot, setgid, setuid, link, unlink, ……
主体审计记录中主要包括如下信息:(1)事件的类型、事件的成功与失败(2)主体审计事件所对应的进程标识pid (3)该进程对应的程序映像名称image(4)进程的真实用户/用户组标识ruid/rgid, 进程的有效用户/用户组标识euid/egid (5)进程当前的安全级sclass
6.客体审计事件:从操作系统安全的角度考虑,有一类主体安全活动与客体紧密相关。安全标准要求必须从客体的角度出发,记录这类事件。因此,这类操作即要产生主体审计记录,也要产生对应的客体审计记录。比如:chmod, chown, create, fcntl, ioctl, ……
客体审计记录必须记录:(1)客体的全路径(2)客体的属主/用户组uid/gid(3)客体的安全级
6. 审计保护:
审计系统必须保证:
审计系统进行了正确的设置,使系统能够记录下所有必要的行为及行为属性
在审计追踪纪录产生之后,要避免这些纪录被恶意的破坏、修改和删除。
有效保证措施:
审计职责隔离(审计员从系统管理员分离出来)
审计数据的安全保护(特定的策略)
7. 审计点:用户程序与操作系统的惟一接口是系统调用,也就是说当用户请求系统服务时,必须经过系统调用。因此,在系统调用的入口处(称作审计点)增加审计控制,就可以成功地审计系统调用,也就成功地审计了系统中所有使用内核服务的事件。当发生可审计事件时,要在审计点调用审计函数并向审计进程发消息,由审计进程完成审计信息的缓冲、存贮、归档工作
8.