论文部分内容阅读
随着信息化时代的到来,计算机核心地位日益凸显,与之相关的系统安全也成为人们日益关注的焦点。对于主流开源的Linux操作系统而言,其安全运行和管理控制的核心是内核。面对频繁的系统安全威胁,尤其是内存损坏攻击,如何有效地保护内核安全十分重要。内核隔离作为系统安全重要而热门的研究方向,近些年受到广泛的关注。其中,基于内存分配的内核隔离是主要解决途径之一。本文首先针对国内外内核隔离的方法和相关技术进行了调研分析,发现目前内核隔离主要采用基于进程、页表或虚拟机的内存隔离手段。其中,基于页表构建独立执行空间,完成内存分配隔离的思想得到广泛的应用。但在基于页表的实现中,内核存在将属于主内核或不同内核模块的数据分配到同一物理页框上的混合页问题。这种混合页的存在,Linux操作系统难以进行页级别的保护,极易发生内存泄漏或缓冲区溢出等内存损坏攻击。然后,本文围绕Linux内核内存分配机制展开深入的研究,发现导致混合页问题的根本原因是Linux内核在进行内存分配时,除使用常规的伙伴系统分配器外,还使用一种可以称之为块分配器的小块内存分配器。因此,为有效提升系统安全性,解决混合页的问题,必须对块分配器进行改进,从而更好地实现主内核和内核模块在内存分配时的隔离。通过对Linux内核源码的分析,本文发现在Linux内核空间中,存在SLAB、SLUB和SLOB三种块分配器,其中SLUB分配器是当前Linux内核默认块分配器。接着,本文重点论述了如何改进SLUB分配器。具体而言,改进后的SLUB分配器通过添加标识主内核和内核模块的分配标志,并构建专用的内存缓存,使内核可以根据分配标志调用专用的内存缓存完成相应的内存分配请求,从而解决混合页的问题。在此基础上,对伙伴系统分配器进行了相应的改进,构建了面向Linux内核空间的内存分配隔离方法的新分配器处理模型。最后,本文对新模型进行了实验检测和评估,原型实验结果表明,基于该方法构建的新模型可在不改变内核原有处理逻辑的前提条件下,实现对主内核和内核模块在内存分配时的隔离,并且对内核原有内存分配性能影响很小。需要说明的是,本文实现的新模型只是一种解决混合页问题的理论模型,距离真正应用和集成到Linux内核并提供安全可靠的内存分配和内核隔离服务还需有不少的工作要做。