论文部分内容阅读
操作系统是计算机软件与硬件资源的管理者,控制着整个计算机系统的运行。它直接和硬件交互并为用户提供接口,是计算机软件的运行核心和基础。因此,操作系统安全是整个计算机系统安全的基本前提和保障。而内核作为操作系统最核心部分,更成为操作系统安全乃至整个计算机系统安全的关键所在。然而,内核漏洞的不断发现和频繁利用,却给系统安全带来了巨大威胁。所以,对内核安全加固方法进行研究非常必要且具有重要的应用价值。论文工作主要包括以下三方面:(1)分析了内核安全威胁和内核加固方法。首先,研究讨论了缓冲区溢出漏洞、本地权限提升漏洞、空指针引用漏洞的原理及攻击方法,分析比较了每类漏洞的防护方法,针对每类漏洞提出有效且可实施的防护方法。其次,通过分析比较现有的内核安全加固方法,确定了基于编译器技术进行内核安全加固。最后,根据GCC编译器强大的兼容性和可移植性的特点,选取GCC编译器作为实现内核安全加固的技术手段。根据GCC编译器的整体结构及优化过程,确定了在GCC后端的优化过程作为执行内核加固的时期。(2)设计了基于GCC编译器插件的内核安全加固方法。针对内核安全威胁的严重性,提出了采用控制流边界检查和栈完整性检查的设计方法,达到有效防护漏洞攻击,加固内核的目的。特别地,针对控制流边界检查,提出了通过将转移指令的目标地址与用户空间和内核空间的边界值比较,判断转移指令的目标地址在合法的范围内的方法。针对栈完整性检查,提出通过函数调用前加入检测字节,在函数返回前验证检测字节,判断栈中返回地址完整性的方法。(3)实现了基于GCC编译器插件的内核安全加固方法。利用GCC编译器插件技术实现了控制流边界检查和栈完整性检查的设计方法。在Linux操作系统下,使用C语言编写融入安全检查功能的GCC插件,加以编译后生成共享库并加载到GCC编译器中使之生效。在此基础上,利用嵌入安全检查功能插件的GCC编译器重新编译内核,从而实现内核加固。对安全加固后的内核原型系统进行功能测试和微/宏观性能测试,结果表明该内核加固系统能有效防护漏洞,并且相对于其它的防护系统性能开销较小。