2.3 客体管理器及强制访问控制
客体管理器是负责安全策略实施的部分。Wind内核中任务、信号量、共享内存、消息队列、管道、信号、文件等的管理系统是不同的对象管理器。本系统实行强制访问控制,系统中每个任务、信号量、文件等都被赋予一定的安全属性,这些属性由客体管理器负责维护。
强制访问控制的具体过程为:监控器截获访问请求格式为主体SID、客体SID以及许可权限三元组,即<SID,SID,Perms>。监控器将三元组交与AVC进行匹配,如果有相应条目,则允许该访问请求;如果没有相应条目,则将该三元组交由安全服务器进行判定。安全服务器首先进行SID与安全上下文的映射,依据策略逻辑将映射后的该条访问信息交与策略验证器进行验证。如果验证通过则将该三元组写入AVC,同时运行此次访问,反之则不允许访问。
3 系统实现及测试
3.1 安全系统的实现方式
在分析VxWorks系统内核Wind结构的基础上,结合上述提出的安全核设计,本系统实现了安全标记和强制访问控制,即实现了对Wind任务、信号量(二进制/互斥/计数信号量)、消息队列、管道、事件等的安全标记和强制访问控制。实现了监控器部分来支持对系统调用的控制;实现了策略服务器使之初步支持MLS、TE、RBAC策略判定;实现了策略缓存部分以提高系统性能。监控器的实现:监控器对系统调用实施拦截,实质上是作为一个转向器将正常的系统调用转入强制访问控制阶段。系统通过调用全局安全钩子函数securi_hooks()调用各子系统安全钩子函数,如sec_task_hooks()、see_semB_hooks()、sec_semM_hooks()等。在系统调用级,定义了需要进行安全判定的接口函数,如sec_taskSpawn()、sec_taskDelete()、sec_emBCreate()等。
安全服务器的实现:本安全核的访问控制粒度为系统对象级,因此在安全服务器中实现了对每一个系统对象(任务、信号量等)定义安全属性,定义SID,以及将SID与安全属性相映射关联。安全策略的加载与验证,以及依据监控器发来的判定请求进行访问判定的功能也在安全服务器中进行了具体实现。验证函数的三个参数分别为:主题SID、客体SID、访问请求模式。只有在该请求同时满足TE、MLS、RBAC的情况下,验证函数才返回TRUE,同意访问。
策略缓存的实现:策略缓存实现中最重要的是缓存数据项。本系统中实现的缓存数据项结构为:

本文在对此安全内核测试时目标机采用Tornado系统自带的VxSim目标模拟器。宿主机配置为AMD Ath-lon 64x2 Dual Core Processor 3600+2.00 GHz,512 MB,安装Tornad02.2/VxWorks5.5。
安全核功能测试的内容包括安全标记以及强制访问控制。首先设计了测试用例,结果表明Wind安全内核目前可以标识Wind任务、信号量(二进制/互斥/计数信号量)、消息队列、管道,安全标签和对象一一对应且具有继承性。其次设定了不同安全等级任务的系统调用来测定系统的强制访问控制,测试表明监控器拦截了安全相关的所有系统调用,安全服务器依据配置好的安全策略给出了正确判定,没有任务绕过强制访问控制。
在安全核性能的测试上使用VxWorks提供的一组系统调用——timex()和timexN()——来记录使用安全核和未使用安全核时同一任务的执行时间,以及在使用安全核时使用策略缓存和未使用策略缓存时执行统一任务的时间。由于测试时使用的任务执行时间非常短,因此主要采用timexN()来记录重复执行该任务的时间。测试结果表明,未使用安全核、使用带缓存安全核、使用不带缓存安全核执行同一任务时间依次增加。以taskSpawn()任务为例,未使用安全核时执行时间为50μs,使用带缓存的安全核时执行时间为70 μs,使用不带缓存时执行时间为80μs,误差均小于10%。测试表明本文设计的安全内核会在一定程度上影响系统调用的时间,但是策略缓存可以有效地提高系统性能,整体上还是可以接受的。
该安全核结构具有通用性,改造后可以用于其他嵌入式系统。 (编辑:chiying)
