论文部分内容阅读
进程内核栈是操作系统管理进程、保证进程正常运行的重要数据内容之一,在完成进程切换以及用户态到内核态的特权级切换时发挥着保存和恢复进程上下文状态的重要作用。由于Linux等操作系统的设计,各个进程的内核栈并非互相隔离,这就为诸如Return-to-user和Return-to-schedule等攻击提供了条件,这些攻击给进程的正常执行以及系统安全带来了严重的威胁。因此,有一系列的工作旨在解决内核栈完整性保护的问题。多核环境提供了任务的并发能力,但是攻击者也能够攻击系统中正在运行的进程,这使得内核栈完整性保护的问题变得更加复杂。因此,本文主要研究:在多核环境中如何有效地为进程内核栈提供完整性保护。本文对此问题的难点和要点进行了研究和分析,针对以往工作的不足,给出了本文的多核环境内核栈完整性保护方案,对以往工作的安全性进行了增强。本文主要工作如下:1.总结了以往内核栈完整性保护的相关工作及其新需求。将相关工作分为对部分控制数据内容的保护、对整体内核栈的完整性保护两类,分析了这两类保护方案的工作原理及存在的缺陷。缺陷包括:保护的范围不足以及存在Stifling attack攻击的漏洞;尤其在多核环境中,以往保护方案不能阻止攻击者对其他核上正在运行进程的内核栈的攻击。据此确立本文的工作目标,在多核环境中对全部的进程内核栈提供完整性保护。2.针对以往保护方案安全性的不足,本文提出一个多核环境中内核栈完整性保护的安全增强方案。在多核环境中,拆分系统原本的全局地址翻译结构,为各处理器分别建立独立的地址翻译结构,使得在各处理器上运行的进程访问内存时使用不同的地址翻译结构,以此为内核栈区域提供细粒度的访问权限控制。与相关工作类似,本文假定攻击者具有内核级权限,因此依托具有更高权限的硬件辅助虚拟化技术来具体实现。将保护方案部署在Hypervisor中,为各个vCPU建立独立的EPT结构,在各EPT结构上细粒度地设置对各进程内核栈的访问权限,使得攻击者不能篡改其他进程内核栈来保障客户机中进程内核栈的完整性。本文以此方案弥补了以往工作安全性的缺陷。3.基于KVM和Qemu实现本文保护方案的原型系统,并从安全性和性能损失两方面对其进行了评价。实验结果表明,保护方案可以防御攻击模型中给定的攻击样例,解决了多核环境中内核栈完整性保护的问题;而且保护方案的部署并未对系统的整体性能造成过大的影响。