网站首页  词典首页

请输入您要查询的论文:

 

标题 基于编译器插件的轻量级内核重构加固方法研究
范文

    王曼丽 翟高寿

    

    

    

    摘要:操作系统是整个计算机系统的基础,只有保证操作系统的安全性,才能确保上层软件的安全性。本文采用保护内核控制流的方法提高操作系统安全性,提出一种基于编译器插件的轻量级内核重构加固方法。该方法是在相关转移指令前动态插入控制流断言,确保执行路径在有效的内核边界内,保护程序、指令运行的位置和顺序被修改。它能有效加强用户地址空间与内核地址空间的隔离,对内核起到有效加固的作用,同时可以防止通过篡改内核关键数据结构而引发权限提升类漏洞的攻击。实验结果证明,该方法是轻量级的内核加固方法,能够防止空指针引用漏洞及相关内核权限提升类漏洞攻击。

    关键词:操作系统安全;内核加固方法;编译器插件

    中图分类号:TP314 文献标识码:A DOI:10.3969/j.issn.1003-6970.2015.03.001

    本文著录格式:王曼丽,翟高寿,基于编译器插件的轻量级内核重构加固方法研究,软件,2015,36(3):1-9

    0.引言

    随着计算机系统的广泛应用,计算机系统的安全性逐渐受到人们的重视。多数系统漏洞发生在软件系统中,而在众多的软件系统中,操作系统是整个计算机系统的基础,只有保证操作系统的安全性,才能确保上层软件的安全性。在众多操作系统中,Linux操作系统以其强大的性能和开放源码的灵活性受到广大用户的青睐,同时它的安全性也受到了广泛的关注。

    目前,提高操作系统安全性的方法有两种。第一种对内核代码的保护,通常检查内核中关键数据结构是否被篡改。第二种对内核控制流的保护,通过保护内核执行的路径,防止攻击者改变程序运行的顺序或位置。本文所提出的方法是针对第二种对内核控制流的保护,提出一种基于GCC编译器插件的轻量级内核重构加固方法,它通过在相关转移指令前动态插入控制流断言(control Flow Assertion)实现对内核执行路径的检查,确保其在内核有效的边界内,加强用户地址空间和内核地址空间的隔离,保护程序、指令的运行顺序和位置被随意修改。具体说是在间接分支执行前,动态插入轻量级的控制流断言执行检查工作,验证目标地址是否位于内核地址空间,防止恶意用户利用内核关键数据结构(函数指针、返回地址等)将执行路径重定向到用户空间,进而获得更高的权限。

    本文提出的方法可以有效防止内核权限提升漏洞,该类漏洞是指将一个权限较低、受限制的用户提升到最高权限root用户,同时对内核进行轻量级加固,提供安全检查机制加强用户与内核地址空间的隔离。该方法是轻量级、低消耗的方法,无需依赖硬件特性及虚拟机。

    1.现有攻击方法和防御方法

    1.1攻击方法

    现有权限提升漏洞的攻击方法,主要是利用内核代码的设计缺陷,通过篡改函数指针,使其指向用户空间敏感函数。从exploit-db中,可以找到这类攻击的两个例子:

    (1)基于Econet模块的内核权限提升漏洞。根据编号为CVE-2010-3849的漏洞,在Econet模块的af econet.c文件中econet sendmsg()函数中,当向远程传送地址为空时会引发空指针引用并产生内核错误日志OOPS错误信息。将该漏洞结合编号为CVE-2010-4258的漏洞在线程执行clone系统调用时,若设置相应标记值,会导致允许用户在任意地址空间写入空值。Dan Rosenberg巧妙的结合以上漏洞,精心计算出函数指针的地址,并通过清空函数指针存储地址的高8位,将函数指针指向用户空间敏感函数,由此设计出基于Econet模块的权限提升漏洞。

    (2)基于RDS协议的内核权限提升漏洞。主要根据编号为CVE-2010-3904的漏洞,该漏洞是由于发送或接受RDS信息使用的rds page cope user()函数并没有对用户提供的指针做相应的检查。这会导致向recvmsg类型的系统调用传递iovec基地址时,允许用户向任意地址空间写入任意值。利用该漏洞,计算出rds ioctl函数指针的地址,并将该函数指针值修改并指向用户空间敏感函数,由此设计出基于RDS协议的内核权限提升漏洞。

    1.2防御方法

    当前防御方法内核权限提升漏洞的方法,可分为硬件防御方法与软件防御方法两种。硬件防御手段分为两类,第一类为CPU提供的保护机制,如SMAP和SMEP。其中SMEP机制是禁止运行在内核态的进程执行用户态的代码,SMAP机制是禁止运行在内核态的进程访问用户态的数据。但这两项机制仍然存在问题,若攻击者修改内核函数指针,使其指向内核代码劫持内核控制流。第二类为虚拟机监控器机制,如SecVisor和NICKLE,其中,SecVisor采用内存虚拟化技术保证仅对已验证的代码才能在内核态执行,从而能够抵御代码注入对内核完整性的攻击。它可以使内核代码段不被修改,并且经过用户认证的代码才能在内核态运行。但是,攻击者仍可修改内核数据段上的函数指针,使函数指针指向内核的代码段劫持内核控制流,并且SecVisor开销是原生系统的20多倍。NICKLE使用内存影射技术,对可执行代码认证,通过认证后才能将其复制到影子内存。因此,对于未授权的代码在第一次执行时就会失败。影子内存包含虚拟机用户的部分主存,并且对于虚拟机用户是不可访问的。影子内存未被认证的改变能够作为执行代码运行,但不可访问影子栈。

    软件防御方法通过修改二进制代码或内核源码实现内核保护,PaX是Linux内核的补丁包,它通过使数据段内存设置为不可执行,代码段内存标记为不可写,加强系统内存的访问控制,防止不安全代码的执行。地址空间的随机分布,通过对栈、堆、动态库等线性布局的随机化,为攻击者猜测目的地址增加了难度。然而,应用PaX补丁的缺点是它将带来较大的I/O时延及性能开销。

    当前已有的防御方法防止权限提升类漏洞还是有限制的,硬件防御方法SMEP和SMAP需要特别的硬件支持,NICKLE和SecVisor需要虚拟机监视器,而且攻击者可以绕过相关防御机制达到攻击的效果。软件防御方法则会产生较大的开销和I/O实验。所以,本文提出轻量级内核重构加固方法,首先该方法是轻量级的加固方法,性能开销较小。其次,该方法通过插入控制流断言的方法动态检查执行路径是否处于内核边界内,完全能够阻止攻击者将敏感函数重定向到用户空间,有效防止内核权限提升漏洞的发生。

随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/3/16 12:04:50