论文部分内容阅读
保护内核的完整性是构建可信操作系统的最根本的安全目标之一。至今通用操作系统仍因其自身的安全漏洞而频繁受到恶意攻击。内核模块的安全漏洞给了攻击者可以控制或破坏整个操作系统的机会。没有操作系统内核的安全,其它的安全解决方案的实施都无法得以保障。 本文主要通过分析宏内核操作系统Linux和微内核操作系统Minix的内核和服务进程(为叙述简便起见,以下都称为操作系统内核)结构、内核级rootkit的攻击原理,深入研究了操作系统内核的服务视图和完整性目标,提出了一套操作系统完整性的保护机制,并从设计的形式化验证、运行时监控两方面来保证上述完整性保护机制的实施。 主要成果与创新包括以下三个方面: (1)通过研究内核结构和内核攻击方法,总结出操作系统内核的完整性保护机制。 通过分析操作系统内核的功能、系统结构及安全需求,提出了操作系统内核的服务视图,基于此视图建立了一个操作系统自动机模型。分析了影响操作系统完整性的各种因素,最终给出了一个通用的操作系统内核完整性的目标。结合现有的对内核攻击方法的分析,提出了操作系统内核完整性保护的机制,根据保护机制实施的方式不同,将它们划分为两类:a)内核服务处理过程的执行完整性保护机制。包括服务处理过程的数据和行为的完整性保护机制。主要通过设计或实现验证、运行时监控的手段来实施;b)内核并发设计的验证机制。主要通过形式化验证的方法来证明并发执行的服务处理过程之间的通信与数据共享是符合设计者预期的。 (2)通过形式化验证手段验证内核服务的并发设计符合设计者期望。 操作系统在服务过程中往往并发地为不同的用户进程提供服务,本文深入分析了多个服务过程在并发服务过程中内核对象资源对服务效果的影响,发现了并发的两个服务过程所依赖和影响的内核对象资源存在着两种使用方式:(a)完全隔离使用;(b)存在共同的内核对象。 针对完全隔离使用的情况,通过建立服务不干扰模型,定义多个服务之间的隔离策略,并给出了服务设计满足隔离属性的条件。针对存在共同的内核对象的情况,本文提出了根据两个服务处理过程所依赖和影响的内核对象使用方式(隔离或共享)建立通信信道的方法,把对象的读写看作信息的流入和流出。通过不干扰理论,定义了多个服务处理过程之间的信道控制策略,限定任意服务处理过程访问内核对象的范围不包括其它服务过程隔离使用的对象集合,给出了服务设计满足信道控制策略的完整性条件。并通过基于通信顺序进程CSP的系统建模以及利用自动化验证工具FDR2对上述条件的形式化验证,确保内核服务模块的设计符合设计者的期望。 (3)通过运行时监控手段实施内核完整性保护机制。 现有的操作系统完整性监控手段有以下缺陷:1)监控设施与被监控内核具有相同的特权级,既不能保证监控设施和策略自身的安全性也不能保证监控不被旁路;2)部分监控设施构建在协处理器中,保证了监控设施和策略自身的安全,但是语义获取困难,且只能采用轮询方式,难以及时捕获系统异常,仍然不能保证监控不被旁路。3)部分监控设施构建在虚拟机管理器中,保证了监控设施和策略自身的安全,可以及时捕获系统异常,但是语义获取困难。 本文基于硬件虚拟化技术,在被监控系统的内核中构建监控模块,利用了硬件虚拟化技术保证了自身的安全,确保了被监控操作系统的特权操作以及对需要保护的内存或寄存器的访问都能陷入监控模块。由于监控模块共享操作系统的内核空间,易于获得对象语义和减少页表切换的时间开销。同时,为潜在的攻击源动态载入模块构建单独的页表,取消动态载入模块对内核数据的写权限。监控动态载入模块向内核核心代码的跳转,限制动态载入模块调用内核函数的范围。通过上述访问控制措施,限制动态载入模块的破坏能力。