安全上下文是表示安全属性的变长字符串,是安全服务器私有的数据类型,由安全服务器依据一定的策略逻辑负责解释。安全上下文不直接与主客体绑定,而是在运行时由安全服务器依据标签规则进行其与安全标识符SID的映射。多策略验证器是安全服务器的核心模块,它包含系统设定的所有安全策略的判定逻辑。本安全核对多安全策略的支持由这一模块实现。按照不同的策略,对访问有不同的判定结果,安全服务器依据这些判定结果的交集做出最终的判定结论。
策略数据库是策略数据的存储结构,通过主机端配置工具配置其中相关信息。
本安全核的实现采用了一种结合类型实施(TE)、基于角色的访问控制(RBAC)和多级安全(MLS)的多安全策略。安全服务器定义的安全性上下文由用户身份、角色、类型及可选的安全级别和范围组成,其中角色只与任务(task)相关。只有合法的用户、角色、类别及安全级别或范围的组合才会被安全服务器赋予SID。
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()等。