信息安全领域以网络安全最为吸引眼球,神马木马病毒,Sql注入XSS攻击,让大家是眼花缭乱,其实说白了,无非是两种类型:一是利用的操作系统上自身的系统程序的漏洞,来个溢出之类的攻击;二是针对OS上跑的花样繁多的各种应用,有单机应用也有Web应用,其开发时的各种漏洞和bug形成的攻击。所以归根结底,网络攻击之所以能够成功,还是得益于OS上跑的APP的漏洞导致的,这里的APP当然包括各种Web程序和DBMS了。自己突然想到,手机上现在流行的各种java应用,不断翻新的APP市场,这里面没有严格的漏洞检查机制,得有多少有缺陷的APP呢?呵呵,自己突然都不敢往下想了…
言归正传。任何APP运行的基础平台还是我们的OS,因此如何设计研发更加安全的OS,也是非常关键的一环,更何况,当今的主流OS都掌握在国外,搞不定在某个地方安了一个“天窗”呢!国家政关键部门府当然不会用windows之类的系统来办公,大多使用自主开发的定制Linux,但是国内自主研发OS的道路上还是有很多路程要走。今天先来简单看看安全的OS中要考虑的安全机制。
OS的安全机制大致可以分为硬件安全机制、标识与鉴别、访问控制、最小特权管理、可信路径和安全审计几个部分,今天先来重点看看其中的部分机制,更多的内容留待日后的学习补充完善。
一、硬件安全机制
计算机硬件安全的目标是:保证其自身的可靠性和为系统提供基本的安全机制,这些基本的安全机制具体指的是存储保护、运行保护和I/O保护。
1.存储保护
顾名思义,存储保护就是保护用户在存储器中的数据的完整性,简单来说就是数据没有损坏,没有被非法访问。存储保护与存储器管理使紧密相联的,存储保护是负责保证系统各个任务之间互不干扰,存储器管理则是为了更有效地利用存储空间。
对于存储保护来说,常用的有两种实现机制。第一种是为进程访问的物理内存页分配密钥,每个进程也分配密钥,只有当进程的密钥和内存页的密钥相互匹配并且访问控制信息(读写等模式)与该物理页的读写模式匹配时,才允许该进程访问该页内存,否则禁止访问。这样做法考虑比较自然,但是有两点缺陷:一是需要分配管理大量的密钥;二是每次进程切换、挂起重启时可能导致访问控制信息的频繁修改,导致系统开销的增大和性能的降低。
第二种则避免上述的问题,基于描述符的地址解释机制。其关键在于在描述符中含有了内存页的访问信息和访问模式,每次解析地址时会自动验证描述符,从而极大降低了系统的开销。
2.运行保护
存储器中的用户数据需要保护,运行中的用户数据也需要保护,避免其他用户进程的干扰和破坏。这里通过对于用户进程运行域进行分层设计,抽象为一个保护环来实现。最内层最小号码的环具有最高权限,最外层最大环号的环视最小的特权环。这种等级域机制保护某一环不被其外层侵入,并且允许在某一环内的进程能够有效地控制和利用该环以及低于该环特权的环,即不允许下级访问,但是可以操纵下级。
一种实现的机制是借助环界来实现。每个进程的运行域中的段描述符中使用环界区分特权,只标注出最大特权即可,比如:
Write:R1——Read:R2——Execute:R3
所有特权高于R1的段中的进程都可以写该段,所有特权高于R2的段的进程都可以读该段,依次类推。如果一个环内的进程可以写某段,那就不必限制器对该段的读和执行;如果进程对某段具有读操作的特权,那么当然也允许其运行该段的内容,即:
R1<<R2<<R3 (特权包含关系) 二、标识与鉴别
这部分的作用主要是控制外界对于系统的访问。其中标识指的是系统分配、提供的唯一的用户ID作为标识,鉴别则是系统要验证用户的身份,一般多使用口令来实现。这里自己感觉需要特别说的是,一旦系统验证了用户身份,就要开始赋予用户唯一标识用户id、组id,还要检查用户申请的安全级、计算特权集、审计屏蔽码;赋予用户进程安全级、特权集标识和审计屏蔽码。系统负责检查用户的安全级在其定义时规定的安全级之内,否则系统拒绝用户的本次登陆。 三、访问控制
OS安全机制的主要内容就是访问控制,说白了就是针对制定的资源要说明:
谁可以访问;
怎样访问(读写执行删除追加等);
访问控制主要针对登陆系统的用户及其进程,控制外界系统访问的技术是标识与鉴别。访问控制主要有两类:自主访问控制和强制访问控制。
1.自主访问控制:
“自主”主要体现在客体(访问的对象)的所有者有权可以指定其他主体对该客体的访问权限,这里的所有者也可以是专门具有授予权限的主体,将权限的子集授予其他主体。基于访问控制矩阵,一般有基于行和列的访问控制机制,但是由于基于行的访问控制机制实现较为困难,所以现在实际中使用的是基于列,即基于客体的访问控制机制,最常见的就是ACL(Access Control List)。每个客体维护自己的一张ACL:
主体1.rx——主体2.r——主体3.x——… …——主体N.rwx
主体1只具有读和执行权限,主体3只有执行权限,依次类推。后期由于可能主体数目很多造成ACL很大,因此又引入了Group的概念,针对一个Group进行ACL记录。
2.强制访问控制:
“强制”体现在每个进程、文件、IPC客体都被admin或OS赋予了不可改变的安全属性,这些安全属性不再能由用户自己进行修改,实际中常常将二者结合起来使用。用户使用自主访问控制访问其他用户非法入侵自己的文件,强制访问控制则作为更有力的安全保护方式,是用户不能通过意外事件和有意识的误操作逃避安全控制。
三、最小特权管理
最小特权管理的思想是系统不应该给用户/管理员超过执行任务所需特权以外的特权,一般可以通过设置管理员角色分割权限,或者使用POSIX权能机制来实现。权能(Capability)是一种用于实现恰当特权的能力令牌。POSIX权能与传统的权能机制类似,但是它为系统提供了更为便利的权能管理和控制:一是提供了为系统进程纸牌一个权能去调用或执行受限系统服务的便捷方法;二是提供了一种是进程只能调用其特定任务必须权能的限制方法,支持最小特权安全策略的实现。因此POSIX权能机制提供了一种比超级用户模式更细粒度的授权控制。每个进程的特权动态管理,通过进程和程序文件权能状态(许可集、可继承集、有效权能集)共同决定子进程的权能。