安全内核是指
计算机系统中,能根据安全访问控制策略访问资源,确保系统用户之问的安全互操作,并位于
操作系统和程序设计环境之间的核心计算机制。安全内核的目标是能够灵活地控制被保护的对象,免于被非法的使用和拷贝。安全内核的安全机制通过保护域界定,并通过存取监视器控制。存取监视程序检查和实施安全访问策略。
发展
安全内核的概念是由Roger Schell在1 972年提出来的,通常被定义为实现存取监督器抽象的硬、软件。这种想法提出十六年来,只实现了少量的安全内核,且很少达到商业化,几乎也未投入实际应用。这种绝少的进步并不是由于内核方法本身,而是买方对安全方法缺少兴趣,这一点我们在第二章中已讨论过。在工业部门和政府部门对安全问题的兴趣日益增高的今天,可以预计几年后会出现更多的基于内核开发的商业化的系统。
第一个安全内核是作为政府援助的项目由MITRE开发,在DEC PDP—l 1/45机器上运行,以证明安全内核这个概念。另一个值得注意的安全内核研究是PDP一11/4和1 1/70上的UCLA Data Secure Unix。国防部在一个称作“保护人”的计划中,资助了Multics的安全内核的设计和形式描述,但这个内核从未实现过。政府资助的功能系统开发中(现在已很少使用),包括由系统开发公司(现在是Unisys的一部分)开发的KVM——IBM的VM/370的加强版(,和Ksos——由福特太空通讯公司在PDP一11/70上开发的支持
Unix的内核。还有两个商业级的安全内核:Honeywell的STOP,在SCOMP上运行,该机是该公司的第六级加强型小型计算机;另一个是Gemini,计算机公司的GEMSOS,在Intel iAPX 80286微处理器上运行
设计原则
概括地来讲安全内核的设计和实现应当符合以下3条基本原则。
完整性原则要求主体引用客体时必须通过安全内核,即所有信息的访问都必须经过安全内核。但是操作系统的实现与完整性原则的明确要求之间通常有很大差别:操作系统认为系统的信息存在于明显的地方,比如文件、内存和输入输出缓冲区,并且操作系统有理由控制对这些客体的访问。完整性原则并不满足于对客体的特别定义,它认为任何信息存在之处,不管它们大小怎样,用途如何,都是一个潜在的客体。
同时,完整性原则对支持内核系统的硬件也有一定要求。如果内核不检查每条机器指令就允许有效地执行不可信程序,硬件就必须保证程序不能绕过内核的存取控制。所有对
内存、
寄存器、
输入输出设备的引用必须由内存管理中的存取控制等存取机制进行合法存取检查。内核必须使各个进程独立,并且保证未通过内核的各进程间不能相互联系。若一台机器允许所有进程不加约束就能访问
物理存储器的公共页面,该机器就不适于建立安全内核。
2.隔离性原则
隔离性原则要求安全内核具有防篡改的能力,即可以保护自己,防止偶然破坏。
在实际实施隔离性原则时常需要软硬件相结合。硬件的基本特性是使内核能防止用户程序访问内核代码和数据,这与内核防止一进程访问别的进程是同一种内存管理机制。同时,还必须防止用户程序执行内核用于控制内存管理机制的特权指令。这需要某种形式的域控制机制,比如保护环机制。
在拥有这些硬件特性的系统中,用户程序几乎没有机会通过写内核的存储器、执行特权指令或修改内核软件等方法使内核受到直接攻击。
3.可验证性原则
可验证性原则是通过如下一些设计要素实现的:
·利用最新的软件工程技术,包括结构设计、模块化、信息隐藏、分层、抽象说明以及合适的高级语言;
·内核接口简单化;
·内核小型化;
·代码检查;
作用
安全内核的主要作用是维护信息的机密性和完整性。它管理以下四种基本的操作:
(1)进程激活。在多道程序并发处理的环境下,进程的激活和撞起经常发生:由一个
进程切换到另一个进程需要安全的
寄存器、重定位映像、文件访问控制表、进程状态信息、
指针等敏感信息安全处理手段。
(2)运行区域切换。运行在某一区域的进程为了进行敏感信息服务,常需要调用其它区域的进程或进行切换。
(3)内存保护。由于内存中保存了数据和程序代码,其中许多是敏感信息。为确保各区域的机密性和
数据完整性,安全内核必须对内存实施
安全管理。
(4)
I/O操作。I/O操作可覆盖所有区域,也是常调用的一种操作。在许多系统电,有将字符转换成I/0操作的功能,这就需要在外层连接用户程序,在内层连接
I/O设备管理。为保证该过程的安全,需对I/O操作进行安全管理。
设计方法
安全内核的设计有如下两种方法:
1.在操作系统内核中增加安全防护功能。系统的安全防护功能,如访问控制、监视、审计等,·般都与内存访问’、I/0操作、文件或程序存取有关。在模块化设计的操作系统中,这些功能都是由不同的模块来处理的。在这些模块中增加安全功能,使之形成操作系统的安全内核。
如果将所有安全功能增加到原有的内核中,会破坏操作系统的模块化特性,降低其原有的功能。因此,有些功能可放在操作系统的外层或应用层去完成,内核中只保留最基本的安全功能。而形成安全内核。
2.先设计安全内核。合理的设计应是先设计安全内核,然后围绕安全内核设计操作系统。在基于安全的设计中,安全内核为接口层,它完成操作系统的所有硬件访问保护功能、安全内核依赖于支持的硬件。它应该是小而有效,如比较成熟的安全操作系统的实际安全内核仅有10000行原程序左右。