一种操作系统地址空间随机化分配系统及方法

文档序号:6548698阅读:176来源:国知局
一种操作系统地址空间随机化分配系统及方法
【专利摘要】一种操作系统地址空间随机化分配系统及方法,涉及信息安全领域,提高地址空间随机化分配范围,从而提高操作系统随机化的安全性。操作系统地址空间随机化分配系统,包括用户空间层和内核空间层。所述用户空间层包括:用户空间可执行程序局部随机化管理策略生成/解析器、全局随机化管理策略模块、随机事件采集模块。所述内核空间层包括:可执行程序加载模块、虚拟文件系统管理模块、管理策略解析模块、随机化因子生成模块、地址空间随机化分配模块。操作系统地址空间随机化分配方法,用于操作系统地址空间随机化分配系统。所述分配系统及方法同样适用于目前国产龙芯处理器平台。
【专利说明】一种操作系统地址空间随机化分配系统及方法
【技术领域】
[0001]本发明涉及信息安全领域,特别涉及一种操作系统地址空间随机化分配系统及方法。
【背景技术】
[0002]计算机是信息存储和处理的基础设施,然而基于设计复杂性和实现的成本因素考虑,用于存储和处理信息的计算机并不安全。引起计算机不安全的主要因素包括:①缺乏专门为安全需求而设计的硬件操作系统从设计之初就没有考虑安全机制;③计算机语言天生的缺陷,如C语言所引入的缓冲区溢出安全隐患。这些因素的存在会给计算机系统带来不同层次的安全漏洞,给恶意软件留下可乘之机。如目前恶意软件猖獗,网络攻击不断,存储和处理信息的IT基础设施或多或少地受到病毒感染和攻击,计算机的安全运行和存储在其中的数据安全必然受到威胁。
[0003]计算机安全的威胁主要来源于缓冲区溢出漏洞,内存管理的安全性是计算机安全的核心,这是因为大部分的安全漏洞与内存管理相关。如广泛流行的拒绝服务攻击(DoS)、敏感数据窃取和获取超级用户权限等攻击的深层原因都与系统缺乏安全的内存管理相关。从CVE2012Linux内核漏洞数据库来看,80%漏洞与堆栈缓冲区溢出、恶意代码执行、空指针引用、内存崩溃、指针和函数参数安全检查缺失有关。再者广泛使用的C语言并不是安全的计算机语言,对象的长度不做安全检查,并且大量使用指针,同时指针的不正确使用会给代码带来安全隐患。Linux操作系统大部分代码由C语言完成,与其他应用程序一样,同样存在缓冲区溢出安全隐患。目前缓冲区溢出漏洞依然是威胁计算机安全的第一威胁。从CVE2012Linux内核漏洞数据库来看,由缓冲区溢出直接引发的漏洞就占30%,其他形式的漏洞大部分也是由缓冲区溢出引发。缓冲区溢出漏洞攻击通过局部变量缓冲区溢出覆盖栈帧的返回地址,篡改栈帧内容植入恶意代码(如壳代码(shellcode))并使之运行。近年来计算机安全引起广泛重视,开始设计和实现有一定安全功能的硬件和软件设施。硬件技术如处理器支持不可执行的NX位和相应的页表管理机制;软件技术如编译器增加防范缓冲区溢出的堆栈保护(StackGuard)等技术。这两项技术能比较有效防范和阻止利用缓冲区溢出漏洞植入恶意代码并使之执行的攻击。然而安全技术与黑客漏洞利用攻击是相互博弈的过程,出现了缓冲区溢出的变种攻击。返回库函数(return-to-libc)攻击是缓冲区溢出的变种攻击的典型代表,它不需要在栈中植入恶意代码和在栈中执行,所以NX技术和编译器的栈保护技术对它是无效的。程序一般都会链接C函数库,即libc。return-to-libc缓冲区溢出攻击不需要在函数栈区植入代码,只需修改栈帧返回地址的内容,使其指向不安全的系统库函数。如Iibc中系统(system)函数只需要给它一个参数就可以执行外部代码,例如“/bin/sh”,攻击者利用库函数的漏洞进行攻击。return-to-libc的成功率依赖于系统地址空间的固定分配,漏洞利用者能比较容易地猜测出目标系统的库函数入口地址,从而能有效地实施return-to-libc攻击。如果系统放弃原有的地址空间固定分配方式,而采用地址空间随机化分配策略,能有效阻止return-to-libc攻击,因为系统随机映射库函数的地址空间提高了攻击者探测库函数的地址的难度,在64位系统中几乎探测不出,能有效防范该类缓冲区变种攻击。
[0004]目前,x86通用平台的windows和Linux操作系统也支持地址空间随机化分配功能。但现有的地址空间随机化分配方式存在比较多的问题,如:①目前的随机化分配范围比较有限,10几位的随机范围,攻击者采用暴力猜测办法容易猜测出随机化分配后的地址空间分布情况。②随机数产生算法只与时钟相关,不够安全。目前系统的随机化分配的随机数产生算法依赖于系统的库函数(random函数),而该函数的算法是根据系统的时钟值来产生随机数,攻击者若获取目标系统的时钟值就容易猜测出目标应用的地址空间随机化分配后的布局而实施return-to-libc攻击。③不够灵活,系统要么选择开启地址空间随机化分配功能,即系统所有进程都采取随机化分配方式,要么关闭该功能,用户不能根据应用的安全需求自主选择开启和关闭随机化分配功能;地址空间包括:栈地址空间、堆地址空间和内存映射(_ap)地址空间,目前的随机化分配方式也不能根据具体的安全需求独立配置这三个地址空间是否采取随机化分配方式。④目前国产龙芯处理器平台的Linux操作系统还缺乏功能完善的地址空间随机化分配功能的支持。

【发明内容】

[0005]本发明要解决的技术问题是提供一种操作系统地址空间随机化分配系统及方法,提高地址空间随机化分配范围,从而提高操作系统随机化的安全性。
[0006]为了解决上述问题,本发明提供了一种操作系统地址空间随机化分配系统,包括用户空间层和内核空间层,
[0007]所述用户空间层包括:用户空间可执行程序局部随机化管理策略生成/解析器、全局随机化管理策略模块、随机事件采集模块;
[0008]所述内核空间层包括:可执行程序加载模块、虚拟文件系统管理模块、管理策略解析模块、随机化因子生成模块、地址空间随机化分配模块;
[0009]所述用户空间可执行程序局部随机化管理策略生成/解析器用于:针对可执行程序或动态库生成局部随机化管理策略并将所述局部随机化管理策略以可执行文件形式或动态库文件形式输出至所述可执行程序加载模块;以及对所述局部随机化管理策略进行解析以向用户报告针对所述可执行程序或动态库的局部随机化管理策略;
[0010]所述全局随机化管理策略模块用于:保存全局随机化管理策略,其中所述全局随机化管理策略包括:全局地址空间随机化分配强制策略、全局栈空间随机化分配策略、全局堆空间随机化分配策略以及全局内存映射随机化分配策略;以及在用户配置情况下供用户从中选择全局随机化管理策略以输出至所述虚拟文件系统管理模块;
[0011]所述随机事件采集模块用于:采集包括以下内容的随机事件数据:用户随机输入的键盘值和鼠标值、所述操作系统的当前中断次数和所述操作系统的当前网络交换数据量;以及将所述随机事件数据提供给随机化因子生成模块;
[0012]所述可执行程序加载模块用于:对来自所述用户空间可执行程序局部随机化管理策略生成/解析器的以所述可执行文件或动态库文件形式的所述局部随机化管理策略进行分析,并且加载所述可执行文件或动态库文件且将所述局部随机化管理策略输出至所述管理策略解析模块;[0013]所述虚拟文件系统管理模块:注册有虚拟文件系统,其中所述虚拟文件系统待装载来自全局随机化管理策略模块的全局随机化管理策略,并且具有全局随机化管理策略默认配置;用于对虚拟文件系统进行解析以获取最终全局随机化管理策略,使得在所述用户配置的情况下将所述虚拟文件系统中所装载的全局随机化管理策略作为所述最终全局随机化管理策略输出至所述管理策略解析模块,而在无用户配置的情况下将所述全局随机化管理策略默认配置作为所述最终全局随机化管理策略输出至所述管理策略解析模块;
[0014]所述管理策略解析模块用于:对来自所述可执行程序加载模块的所述局部随机化管理策略和来自所述虚拟文件系统管理模块的所述最终全局随机化管理策略进行解析以生成最终随机化运行策略,并将所述最终随机化运行策略输出至所述地址空间随机化分配模块;
[0015]所述随机化因子生成模块用于:根据来自所述随机事件采集模块的所述随机事件数据生成随机化修正值,根据所述随机化修正值和所述操作系统的系统库函数来生成随机数,并对所述随机数执行230模运算来获得随机化因子,以用于在所述地址空间随机化分配模块执行地址空间随机化分配时调整地址空间的固定分配地址,并将所述随机化因子输出至所述地址空间随机化分配模块;以及
[0016]所述地址空间随机化分配模块用于:根据来自所述管理策略解析模块的所述最终随机化运行策略和来自所述随机化因子生成模块的所述随机化因子来执行所述地址空间随机化分配,使得所述地址空间具有随机化地址。
[0017]进一步地,所述可执行文件或动态库文件中具有用于存放所述局部随机化管理策略的程序段头。
[0018]进一步地,所述可执行程序加载模块用于对来自所述用户空间可执行程序局部随机化管理策略生成/解析器的以所述可执行文件或动态库文件形式的所述局部随机化管理策略进行分析包括:
[0019]所述可执行程序加载模块对所述可执行文件或动态库文件中的程序段头进行解析以提取出所述局部随机化管理策略。
[0020]进一步地,所述局部随机化管理策略包括:局部栈空间随机化分配策略、局部堆空间随机化分配策略以及局部内存映射空间随机化分配策略。
[0021]进一步地,所述管理策略解析模块通过如下步骤对所述局部随机化管理策略和所述最终全局随机化管理策略进行解析以生成最终随机化运行策略:
[0022]全局强制判断步骤:判断所述全局地址空间随机化分配强制策略是否开启,如果是,则使所述操作系统的所有进程都实施栈空间随机化分配、堆空间随机化分配以及内存映射空间随机化分配,否则进入全局栈判断步骤、全局堆判断步骤以及全局内存映射判断步骤;
[0023]全局栈判断步骤:判断所述全局栈空间随机化分配策略是否开启,如果是,则进入局部栈判断步骤,否则使栈空间正常分配;
[0024]局部栈判断步骤:判断所述局部栈空间随机化分配策略是否开启,如果是,则使与所述可执行文件或动态库文件对应的栈空间实施随机化分配,否则使栈空间正常分配;
[0025]全局堆判断步骤:判断所述全局堆空间随机化分配策略是否开启,如果是,则进入局部堆判断步骤,否则使堆空间正常分配;[0026]局部堆判断步骤:判断所述局部堆空间随机化分配策略是否开启,如果是,则使与所述可执行文件或动态库文件对应的堆空间实施随机化分配,否则使堆空间正常分配;
[0027]全局内存映射判断步骤:判断所述全局内存映射空间随机化分配策略是否开启,如果是,则进入局部内存映射判断步骤,否则使内存映射空间正常分配;以及
[0028]局部内存映射判断步骤:判断所述局部内存映射空间随机化分配策略是否开启,如果是,则使与所述可执行文件或动态库文件对应的内存映射空间实施随机化分配,否则使内存映射空间正常分配。
[0029]进一步地,所述全局随机化管理策略默认配置是:开启或关闭所述全局栈空间随机化分配策略、开启或关闭所述全局堆空间随机化分配策略以及开启或关闭所述全局内存映射空间随机化分配策略。
[0030]进一步地,所述全局随机化管理策略默认配置是:开启所述全局栈空间随机化分配策略、开启所述全局堆空间随机化分配策略以及开启所述全局内存映射空间随机化分配策略。
[0031]进一步地,所述栈空间随机化地址=固定分配地址-随机化因子;以及
[0032]所述堆空间随机化地址和所述内存映射空间随机化地址分别=固定分配地址+随机化因子。
[0033]进一步地,所述操作系统是Linux操作系统。
[0034]进一步地,所述可执行程序采用elf格式。
[0035]进一步地,所述虚拟文件系统采用proc格式。
[0036]为了解决上述问题,提高了一种操作系统地址空间随机化分配方法,用于上述操作系统地址空间随机化分配系统,其中所述分配系统包括用户空间层和内核空间层,
[0037]所述用户空间层包括:用户空间可执行程序局部随机化管理策略生成/解析器、全局随机化管理策略模块、随机事件采集模块;以及
[0038]所述内核空间层包括:可执行程序加载模块、虚拟文件系统管理模块、管理策略解析模块、随机化因子生成模块、地址空间随机化分配模块;
[0039]所述分配方法包括:
[0040]所述用户空间可执行程序局部随机化管理策略生成/解析器:针对可执行程序或动态库生成局部随机化管理策略并将所述局部随机化管理策略以可执行文件形式或动态库文件形式输出至所述可执行程序加载模块;以及对所述局部随机化管理策略进行解析以向用户报告针对所述可执行程序或动态库的局部随机化管理策略;
[0041]所述全局随机化管理策略模块:保存全局随机化管理策略,其中所述全局随机化管理策略包括:全局地址空间随机化分配强制策略、全局栈空间随机化分配策略、全局堆空间随机化分配策略以及全局内存映射随机化分配策略;以及在用户配置情况下供用户从中选择全局随机化管理策略以输出至所述虚拟文件系统管理模块;
[0042]所述随机事件采集模块:采集包括以下内容的随机事件数据:用户随机输入的键盘值和鼠标值、所述操作系统的当前中断次数和所述操作系统的当前网络交换数据量;以及将所述随机事件数据提供给随机化因子生成模块;所述可执行程序加载模块:对来自所述用户空间可执行程序局部随机化管理策略生成/解析器的以所述可执行文件或动态库文件形式的所述局部随机化管理策略进行分析,并且加载所述可执行文件或动态库文件且将所述局部随机化管理策略输出至所述管理策略解析模块;
[0043]所述虚拟文件系统管理模块:对注册在其中的虚拟文件系统进行解析以获取最终全局随机化管理策略,使得在所述用户配置的情况下将所述虚拟文件系统中所装载的全局随机化管理策略作为所述最终全局随机化管理策略输出至所述管理策略解析模块,而在无用户配置的情况下将所述全局随机化管理策略默认配置作为所述最终全局随机化管理策略输出至所述管理策略解析模块,其中所述虚拟文件系统待装载来自全局随机化管理策略模块的全局随机化管理策略,并且具有全局随机化管理策略默认配置;
[0044]所述管理策略解析模块:对来自所述可执行程序加载模块的所述局部随机化管理策略和来自所述虚拟文件系统管理模块的所述最终全局随机化管理策略进行解析以生成最终随机化运行策略,并将所述最终随机化运行策略输出至所述地址空间随机化分配模块;
[0045]所述随机化因子生成模块:根据来自所述随机事件采集模块的所述随机事件数据生成随机化修正值,根据所述随机化修正值和所述操作系统的系统库函数来生成随机数,以用于在所述地址空间随机化分配模块执行地址空间随机化分配时调整地址空间的固定分配地址,并将所述随机化因子输出至所述地址空间随机化分配模块;以及
[0046]所述地址空间随机化分配模块:根据来自所述管理策略解析模块的所述最终随机化运行策略和来自所述随机化因子生成模块的所述随机化因子来执行所述地址空间随机化分配,使得所述地址空间具有随机化地址。
[0047]本发明的操作系统地址空间随机化分配系统及方法提供了 30位范围的地址空间随机化分配,采取了随机化效果更好更安全的随机数产生方式,同时提供了可灵活配置的随机化分配策略。由于采用的实现办法与架构无关,本发明既可以用于x86通用Linux平台,也可以用于国产龙芯处理器平台的Linux操作系统,从而为国产龙芯处理器平台的Linux操作系统提供功能完善的地址空间随机化分配功能。通过本发明能有效防范return-to-libc的缓冲区溢出变种攻击,提高通用Linux操作系统的安全。
【专利附图】

【附图说明】
[0048]图1是本发明实施例的操作系统地址空间随机化分配系统的结构示意图;
[0049]图2是本发明实施例的操作系统地址空间随机化分配方法流程图;
[0050]图3是本发明实施例的管理策略解析模块的解析原理图;
[0051]图4是本发明实施例的随机化因子生成模块的原理图;
[0052]图5是本发明实施例的用户空间可执行程序局部随机化管理策略生成/解析器的实现过程流程图;
[0053]图6是本发明实施例的可执行程序加载模块的实现过程流程图;
[0054]图7是本发明实施例的虚拟文件系统管理模块的实现过程流程图;
[0055]图8是本发明实施例的管理策略解析模块的实现过程流程图;
[0056]图9示出了本发明实施例的地址空间随机化分配模块实现栈、堆和内存映射空间随机化分配控制流;
[0057]图10示出了本发明实施例的最终栈空间随机化分配控制流;
[0058]图11示出了本发明实施例的堆空间、bss空间和内存映射空间随机化分配控制流;
[0059]图12示出了本发明实施例的总内存映射地址空间随机化分配控制流;
[0060]图13示出了内存映射地址空间的随机化显示分配、匿名分配和堆分配控制流;
[0061]图14示出了本发明实施例的分配系统配置成全系统随机化分配策略在国产龙芯处理器平台的运行效果图;以及
[0062]图15示出了本发明实施例的分配系统配置成只实施栈地址空间随机化分配策略在国产龙芯处理器平台的运行效果图。
【具体实施方式】
[0063]为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
[0064]如图1所示,本发明实施例提供一种操作系统地址空间随机化分配系统,包括用户空间层和内核空间层,
[0065]所述用户空间层包括:用户空间可执行程序局部随机化管理策略生成/解析器1、全局随机化管理策略模块2、随机事件采集模块3 ;
[0066]所述内核空间层包括:可执行程序加载模块4、虚拟文件系统管理模块5、管理策略解析模块6、随机化因子生成模块7、地址空间随机化分配模块8 ;
[0067]所述用户空间可执行程序局部随机化管理策略生成/解析器I用于:针对可执行程序或动态库生成局部随机化管理策略并将所述局部随机化管理策略以可执行文件形式或动态库文件形式输出至所述可执行程序加载模块4 ;以及对所述局部随机化管理策略进行解析以向用户报告针对所述可执行程序或动态库的局部随机化管理策略;
[0068]所述全局随机化管理策略模块2用于:保存全局随机化管理策略,其中所述全局随机化管理策略包括:全局地址空间随机化分配强制策略、全局栈空间随机化分配策略、全局堆空间随机化分配策略以及全局内存映射随机化分配策略;以及在用户配置情况下供用户从中选择全局随机化管理策略以输出至所述虚拟文件系统管理模块5 ;
[0069]所述随机事件采集模块3用于:采集包括以下内容的随机事件数据:用户随机输入的键盘值和鼠标值、所述操作系统的当前中断次数和所述操作系统的当前网络交换数据量;以及将所述随机事件数据提供给随机化因子生成模块7 ;
[0070]所述可执行程序加载模块4用于:对来自所述用户空间可执行程序局部随机化管理策略生成/解析器的以所述可执行文件或动态库文件形式的所述局部随机化管理策略进行分析,并且加载所述可执行文件或动态库文件且将所述局部随机化管理策略输出至所述管理策略解析模块6 ;
[0071]所述虚拟文件系统管理模块5:注册有虚拟文件系统,其中所述虚拟文件系统待装载来自全局随机化管理策略模块的全局随机化管理策略,并且具有全局随机化管理策略默认配置;用于对虚拟文件系统进行解析以获取最终全局随机化管理策略,使得在所述用户配置的情况下将所述虚拟文件系统中所装载的全局随机化管理策略作为所述最终全局随机化管理策略输出至所述管理策略解析模块6,而在无用户配置的情况下将所述全局随机化管理策略默认配置作为所述最终全局随机化管理策略输出至所述管理策略解析模块6 ;
[0072]所述管理策略解析模块6用于:对来自所述可执行程序加载模块4的所述局部随机化管理策略和来自所述虚拟文件系统管理模块5的所述最终全局随机化管理策略进行解析以生成最终随机化运行策略,并将所述最终随机化运行策略输出至所述地址空间随机化分配模块8 ;
[0073] 所述随机化因子生成模块7用于:根据所述操作系统的系统库函数和来自所述随机事件采集模块3的所述随机事件数据生成随机化修正值,根据所述随机化修正值和所述操作系统的系统库函数来生成随机数,并对所述随机数执行23°模运算来获得随机化因子,以用于在所述地址空间随机化分配模块8执行地址空间随机化分配时调整地址空间的固定分配地址,并将所述随机化因子输出至所述地址空间随机化分配模块8 ;以及
[0074]所述地址空间随机化分配模块8用于:根据来自所述管理策略解析模块6的所述最终随机化运行策略和来自所述随机化因子生成模块7的所述随机化因子来执行所述地址空间随机化分配,使得所述地址空间具有随机化地址。
[0075]进一步地,所述可执行文件或动态库文件中具有用于存放所述局部随机化管理策略的程序段头。
[0076]进一步地,所述可执行程序加载模块4用于对来自所述用户空间可执行程序局部随机化管理策略生成/解析器I的以所述可执行文件或动态库文件形式的所述局部随机化管理策略进行分析包括:
[0077]所述可执行程序加载模块4对所述可执行文件或动态库文件中的程序段头进行解析以提取出所述局部随机化管理策略。
[0078]进一步地,所述局部随机化管理策略包括:局部栈空间随机化分配策略、局部堆空间随机化分配策略以及局部内存映射空间随机化分配策略。
[0079]进一步地,所述管理策略解析模块6通过如下步骤对所述局部随机化管理策略和所述最终全局随机化管理策略进行解析以生成最终随机化运行策略:
[0080]全局强制判断步骤:判断所述全局地址空间随机化分配强制策略是否开启,如果是,则使所述操作系统的所有进程都实施栈空间随机化分配、堆空间随机化分配以及内存映射空间随机化分配,否则进入全局栈判断步骤、全局堆判断步骤以及全局内存映射判断步骤;
[0081]全局栈判断步骤:判断所述全局栈空间随机化分配策略是否开启,如果是,则进入局部栈判断步骤,否则使栈空间正常分配;
[0082]局部栈判断步骤:判断所述局部栈空间随机化分配策略是否开启,如果是,则使与所述可执行文件或动态库文件对应的栈空间实施随机化分配,否则使栈空间正常分配;
[0083]全局堆判断步骤:判断所述全局堆空间随机化分配策略是否开启,如果是,则进入局部堆判断步骤,否则使堆空间正常分配;
[0084]局部堆判断步骤:判断所述局部堆空间随机化分配策略是否开启,如果是,则使与所述可执行文件或动态库文件对应的堆空间实施随机化分配,否则使堆空间正常分配;
[0085]全局内存映射判断步骤:判断所述全局内存映射空间随机化分配策略是否开启,如果是,则进入局部内存映射判断步骤,否则使内存映射空间正常分配;以及
[0086]局部内存映射判断步骤:判断所述局部内存映射空间随机化分配策略是否开启,如果是,则使与所述可执行文件或动态库文件对应的内存映射空间实施随机化分配,否则使内存映射空间正常分配。
[0087]进一步地,所述全局随机化管理策略默认配置是:开启或关闭所述全局栈空间随机化分配策略、开启或关闭所述全局堆空间随机化分配策略以及开启或关闭所述全局内存映射空间随机化分配策略。
[0088]进一步地,所述全局随机化管理策略默认配置是:开启所述全局栈空间随机化分配策略、开启所述全局堆空间随机化分配策略以及开启所述全局内存映射空间随机化分配策略。
[0089]进一步地,所述栈空间随机化地址=固定分配地址-随机化因子;以及所述堆空间随机化地址和所述内存映射空间随机化地址分别=固定分配地址+随机化因子。
[0090]进一步地,所述操作系统是Linux操作系统。
[0091]进一步地,所述可执行程序采用elf格式。
[0092]进一步地,所述虚拟文件系统采用proc格式。
[0093]如图2所示,本发明实施例提供一种操作系统地址空间随机化分配方法,用于上述操作系统地址空间随机化分配系统,其中所述分配系统包括用户空间层和内核空间层,
[0094]所述用户空间层包括:用户空间可执行程序局部随机化管理策略生成/解析器1、全局随机化管理策略模块2、随机事件采集模块3 ;以及
[0095]所述内核空间层包括:可执行程序加载模块4、虚拟文件系统管理模块5、管理策略解析模块6、随机化因子生成模块7、地址空间随机化分配模块8 ;
[0096]所述分配方法包括:
[0097]S1:所述用户空间可执行程序局部随机化管理策略生成/解析器1:针对可执行程序或动态库生成局部随机化管理策略并将所述局部随机化管理策略以可执行文件形式或动态库文件形式输出至所述可执行程序加载模块4 ;以及对所述局部随机化管理策略进行解析以向用户报告针对所述可执行程序或动态库的局部随机化管理策略;
[0098]S2:所述全局随机化管理策略模块2:保存全局随机化管理策略,其中所述全局随机化管理策略包括:全局地址空间随机化分配强制策略、全局栈空间随机化分配策略、全局堆空间随机化分配策略以及全局内存映射随机化分配策略;以及在用户配置情况下供用户从中选择全局随机化管理策略以输出至所述虚拟文件系统管理模块5 ;
[0099]S3:所述随机事件采集模块3:采集包括以下内容的随机事件数据:用户随机输入的键盘值和鼠标值、所述操作系统的当前中断次数和所述操作系统的当前网络交换数据量;以及将所述随机事件数据提供给随机化因子生成模块7 ;
[0100]S4:所述可执行程序加载模块4:对来自所述用户空间可执行程序局部随机化管理策略生成/解析器I的以所述可执行文件或动态库文件形式的所述局部随机化管理策略进行分析,并且加载所述可执行文件或动态库文件且将所述局部随机化管理策略输出至所述管理策略解析模块6 ;
[0101]S5:所述虚拟文件系统管理模块5:对注册在其中的虚拟文件系统进行解析以获取最终全局随机化管理策略,使得在所述用户配置的情况下将所述虚拟文件系统中所装载的全局随机化管理策略作为所述最终全局随机化管理策略输出至所述管理策略解析模块,而在无用户配置的情况下将所述全局随机化管理策略默认配置作为所述最终全局随机化管理策略输出至所述管理策略解析模块6,其中所述虚拟文件系统待装载来自全局随机化管理策略模块2的全局随机化管理策略,并且具有全局随机化管理策略默认配置;
[0102]S6:所述管理策略解析模块6:对来自所述可执行程序加载模块4的所述局部随机化管理策略和来自所述虚拟文件系统管理模块5的所述最终全局随机化管理策略进行解析以生成最终随机化运行策略,并将所述最终随机化运行策略输出至所述地址空间随机化分配模块8 ;
[0103]S7:所述随机化因子生成模块7:根据来自所述随机事件采集模块3的所述随机事件数据生成随机化修正值,根据所述随机化修正值和所述操作系统的系统库函数来生成随机数,并对所述随机数执行230模运算来获得随机化因子,以用于在所述地址空间随机化分配模块8执行地址空间随机化分配时调整地址空间的固定分配地址,并将所述随机化因子输出至所述地址空间随机化分配模块8 ;以及
[0104]S8:所述地址空间随机化分配模块:根据来自所述管理策略解析模块6的所述最终随机化运行策略和来自所述随机化因子生成模块7的所述随机化因子来执行所述地址空间随机化分配,使得所述地址空间具有随机化地址。
[0105]在本发明实施例中,将本发明实施例的操作系统地址空间随机化分配系统简称为Sec-Memory系统,该Sec-Memory系统包括高达30位范围的地址空间随机化分配功能以及管理并配置随机化策略功能,使得采用Sec-Memory的操作系统可以实现全系统的随机化运行,即操作系统所有进程的全部用户地址空间都处于随机化分配运行;也可以通过Sec-Memory管理系统配置实现指定任意一个或多个程序随机化运行。该系统的随机化管理配置可以细分到栈地址空间、堆地址空间和内存映射(_ap)地址空间随机化运行的独立配置。因此可以根据不同的具体安全应用场合配置不同的随机化分配策略,来适应不同的安全应用需求。另一方面,Sec-Memory系统的随机数产生算法不只依赖于系统提供的依赖于系统时钟值的系统库函数(random函数),还考虑到当前操作系统的鼠标、键盘、中断和网络状况等因素来修正随机值,提高随机数的随机质量,为采用Sec-Memory随机化分配的系统提供更安全的随机地址空间分配。
[0106]本发明实施例主要包含四个方面:(I)实现随机化范围高达30位(23° = IGbytes的地址空间范围)的随机化分配。(2)提供更复杂、更安全的随机数生成算法。(3)实现针对栈地址空间、堆地址空间和内存映射地址空间独立随机化分配。(4)提供两种地址空间随机化分配管理策略:全局随机化管理策略和局部随机化管理策略。
[0107]具体地,在本发明实施例中:
[0108]I)、在通用的Linux操作系统上实现30位地址空间范围(IGbytes)的随机化功能。该随机化功能包括:栈地址空间随机化分配、堆地址空间随机化分配和内存映射地址空间随机化分配。由于所采用的实现方法与底层的硬件平台无关,该方法同样适用于国产龙芯处理器平台的Linux操作系统。
[0109]2)、实现一个引入键盘、鼠标、中断和网络等因素生成随机化因子的随机化因子生成算法,该算法由随机化因子生成模块实现,实现原理图如图1所示。随机化因子生成算法引入键盘和鼠标的随机输入值和操作系统当前中断次数和网络交换数据的统计数的目的是为了提高随机化因子生成的质量,避免现有随机化分配的随机化因子的生成仅单一依赖于系统提供的random函数,容易被攻击者猜测出,从而提高操作系统随机化的安全性。[0110]3)、实现用户空间可执行程序局部随机化管理策略生成/解析器,在本发明实施例中,还将其称为用户空间elf格式(执行链接文件格式)可执行程序解释器,该解释器用于生成和解析elf格式可执行程序的随机化管理策略。
[0111]4)、在虚拟文件系统管理模块中实现用于管理系统全局随机化管理策略与内核交互的虚拟文件系统,该虚拟文件系统挂载在/proc/security文件系统下。
[0112]5)、在管理策略解析模块中实现可灵活配置适用于多种安全需求的随机化管理配置,如图3所示。
[0113]Sec-Memory总体功能架构如图1所示。Sec-Memory系统由用户空间层和内核空间层两部分实现组成。在用户空间层中,用户空间可执行程序局部随机化管理策略生成/解析器所生成和处理的是局部随机化管理策略,该生成/解析器主要是为用户提供为所选取的可执行程序配置相应的随机化运行策略和策略的解析,其中该可执行程序可以为elf格式的可执行程序,策略包括该elf可执行程序是否开启栈地址空间随机化分配、是否开启堆地址空间随机化分配和是否开启内存映射地址空间随机化分配随机事件采集模块用作提供给用户随机输入键盘值和鼠标值的管理界面和读取操作系统中断次数和网络交换数据量的收集器,最终将采集的数据传送给内核空间层中的随机化因子生成模块。在内核空间层中,包括5个核心模块:①可执行程序加载模块,主要功能是分析所加载的可执行文件或动态库文件所要实施的随机化运行策略和完成可执行文件或动态库文件加载,该策略是由用户空间可执行程序局部随机化管理策略生成/解析器生成的;②作为虚拟文件系统管理模块的proc文件系统管理模块,该模块实现虚拟文件系统的注册和为用户空间层提供全局随机化管理策略的配置入口 ;③管理策略解析模块,该解析模块根据局部和全局的配置策略生成最终的随机化运行策略,策略解析原理如图3的流程所示随机化因子生成模块,通过系统的random函数和基于随机事件数据所生成的随机化修正值产生最终的随机数,并利用取模运算最终生成随机化因子,原理如图4所示;⑤地址空间随机化分配模块,它是实现地址空间随机化分配的核心模块,实现栈地址空间、堆地址空间和内存映射地址空间随机化分配,并根据最终的随机化策略实施所需要的随机化功能。
[0114]本发明实施例的Sec-Memory系统构建包括以下五个部分/步骤:
[0115](一 )实现用户空间可执行程序局部随机化管理策略生成/解析器,在本发明实施例中也称为用户空间elf可执行程序随机化策略生成/解析器,该工具为用户提供局部随机化策略配置入口及局部策略解析,换言之,其主要是为用户提供策略查询功能,通过该工具用户就知道该可执行程序所采取的随机化分配策略,如需要修改策略,可以先查询之前配置的策略,然后修改。实现过程如图5所示。该实现的核心是在elf文件中增加一个程序头(program header),用来描述该可执行程序的内存安全控制策略信息,即所采取的随机化策略。局部随机化控制参数说明如下表:
[0116]表1:局部随机化策略选项和参数说明
[0117]
【权利要求】
1.一种操作系统地址空间随机化分配系统,其特征在于,包括用户空间层和内核空间层, 所述用户空间层包括:用户空间可执行程序局部随机化管理策略生成/解析器、全局随机化管理策略模块、随机事件采集模块; 所述内核空间层包括:可执行程序加载模块、虚拟文件系统管理模块、管理策略解析模块、随机化因子生成模块、地址空间随机化分配模块; 所述用户空间可执行程序局部随机化管理策略生成/解析器用于:针对可执行程序或动态库生成局部随机化管理策略并将所述局部随机化管理策略以可执行文件形式或动态库文件形式输出至所述可执行程序加载模块;以及对所述局部随机化管理策略进行解析以向用户报告针对所述可执行程序或动态库的局部随机化管理策略; 所述全局随机化管理策略模块用于:保存全局随机化管理策略,其中所述全局随机化管理策略包括:全局地址空间随机化分配强制策略、全局栈空间随机化分配策略、全局堆空间随机化分配策略以及全局内存映射随机化分配策略;以及在用户配置情况下供用户从中选择全局随机化管理策略 以输出至所述虚拟文件系统管理模块; 所述随机事件采集模块用于:采集包括以下内容的随机事件数据:用户随机输入的键盘值和鼠标值、所述操作系统的当前中断次数和所述操作系统的当前网络交换数据量;以及将所述随机事件数据提供给随机化因子生成模块; 所述可执行程序加载模块用于:对来自所述用户空间可执行程序局部随机化管理策略生成/解析器的以所述可执行文件或动态库文件形式的所述局部随机化管理策略进行分析,并且加载所述可执行文件或动态库文件且将所述局部随机化管理策略输出至所述管理策略解析模块; 所述虚拟文件系统管理模块:注册有虚拟文件系统,其中所述虚拟文件系统待装载来自全局随机化管理策略模块的全局随机化管理策略,并且具有全局随机化管理策略默认配置;用于对虚拟文件系统进行解析以获取最终全局随机化管理策略,使得在所述用户配置的情况下将所述虚拟文件系统中所装载的全局随机化管理策略作为所述最终全局随机化管理策略输出至所述管理策略解析模块,而在无用户配置的情况下将所述全局随机化管理策略默认配置作为所述最终全局随机化管理策略输出至所述管理策略解析模块; 所述管理策略解析模块用于:对来自所述可执行程序加载模块的所述局部随机化管理策略和来自所述虚拟文件系统管理模块的所述最终全局随机化管理策略进行解析以生成最终随机化运行策略,并将所述最终随机化运行策略输出至所述地址空间随机化分配模块; 所述随机化因子生成模块用于:根据来自所述随机事件采集模块的所述随机事件数据生成随机化修正值,根据所述随机化修正值和所述操作系统的系统库函数来生成随机数,并对所述随机数执行23°模运算来获得随机化因子,以用于在所述地址空间随机化分配模块执行地址空间随机化分配时调整地址空间的固定分配地址,并将所述随机化因子输出至所述地址空间随机化分配模块;以及 所述地址空间随机化分配模块用于:根据来自所述管理策略解析模块的所述最终随机化运行策略和来自所述随机化因子生成模块的所述随机化因子来执行所述地址空间随机化分配,使得所述地址空间具有随机化地址。
2.如权利要求1所述的分配系统,其特征在于,所述可执行文件或动态库文件中具有用于存放所述局部随机化管理策略的程序段头。
3.如权利要求2所述的分配系统,其特征在于,所述可执行程序加载模块用于对来自所述用户空间可执行程序局部随机化管理策略生成/解析器的以所述可执行文件或动态库文件形式的所述局部随机化管理策略进行分析包括: 所述可执行程序加载模块对所述可执行文件或动态库文件中的程序段头进行解析以提取出所述局部随机化管理策略。
4.如权利要求1、2或3所述的分配系统,其特征在于,所述局部随机化管理策略包括:局部栈空间随机化分配策略、局部堆空间随机化分配策略以及局部内存映射空间随机化分配策略。
5.如权利要求4所述的分配系统,其特征在于,所述管理策略解析模块通过如下步骤对所述局部随机化管理策略和所述最终全局随机化管理策略进行解析以生成最终随机化运行策略: 全局强制判断步骤:判断所述全局地址空间随机化分配强制策略是否开启,如果是,则使所述操作系统的所有进程都实施栈空间随机化分配、堆空间随机化分配以及内存映射空间随机化分配,否则进入全局栈判断步骤、全局堆判断步骤以及全局内存映射判断步骤; 全局栈判断步骤:判断所述全局栈空间随机化分配策略是否开启,如果是,则进入局部栈判断步骤,否则使栈空间正常分配; 局部栈判断步骤:判断所述局部栈空间随机化分配策略是否开启,如果是,则使与所述可执行文件或动态库文件对应的栈空间实施随机化分配,否则使栈空间正常分配; 全局堆判断步骤:判断所述全局堆空间随机化分配策略是否开启,如果是,则进入局部堆判断步骤,否则使堆空间正常分配; 局部堆判断步骤:判断所述局部堆空间随机化分配策略是否开启,如果是,则使与所述可执行文件或动态库文件对应的堆空间实施随机化分配,否则使堆空间正常分配; 全局内存映射判断步骤:判断所述全局内存映射空间随机化分配策略是否开启,如果是,则进入局部内存映射判断步骤,否则使内存映射空间正常分配;以及 局部内存映射判断步骤:判断所述局部内存映射空间随机化分配策略是否开启,如果是,则使与所述可执行文件或动态库文件对应的内存映射空间实施随机化分配,否则使内存映射空间正常分配。
6.如权利要求1、2、3或5所述的分配系统,其特征在于,所述全局随机化管理策略默认配置是:开启或关闭所述全局栈空间随机化分配策略、开启或关闭所述全局堆空间随机化分配策略以及开启或关闭所述全局内存映射空间随机化分配策略。
7.如权利要求6所述的分配系统,其特征在于,所述全局随机化管理策略默认配置是:开启所述全局栈空间随机化分配策略、开启所述全局堆空间随机化分配策略以及开启所述全局内存映射空间随机化分配策略。
8.如权利要求1、2、3、5或7所述的分配系统,其特征在于,所述栈空间随机化地址=固定分配地址-随机化因子;以及所述堆空间随机化地址和所述内存映射空间随机化地址分别=固定分配地址+随机化因子。
9.如权利要求8所述的分配系统,其特征在于,所述操作系统是Linux操作系统。
10.如权利要求9所述的分配系统,其特征在于,所述可执行程序采用elf格式。
11.如权利要求9或10所述的分配系统,其特征在于,所述虚拟文件系统采用proc格式。
12.—种操作系统地址空间随机化分配方法,其特征在于,用于权利要求1所述的操作系统地址空间随机化分配系统,其中所述分配系统包括用户空间层和内核空间层, 所述用户空间层包括:用户空间可执行程序局部随机化管理策略生成/解析器、全局随机化管理策略模块、随机事件采集模块;以及 所述内核空间层包括:可执行程序加载模块、虚拟文件系统管理模块、管理策略解析模块、随机化因子生成模块、地址空间随机化分配模块; 所述分配方法包括: 所述用户空间可执行程序局部随机化管理策略生成/解析器:针对可执行程序或动态库生成局部随机化管理策略并将所述局部随机化管理策略以可执行文件形式或动态库文件形式输出至所述可执行程序加载模块;以及对所述局部随机化管理策略进行解析以向用户报告针对所述可执行程序或动态库的局部随机化管理策略; 所述全局随机化管理策略模块:保存全局随机化管理策略,其中所述全局随机化管理策略包括:全局地址空间随机化分配强制策略、全局栈空间随机化分配策略、全局堆空间随机化分配策略以及全局内存映射随机化分配策略;以及在用户配置情况下供用户从中选择全局随机化管理策略以 输出至所述虚拟文件系统管理模块; 所述随机事件采集模块:采集包括以下内容的随机事件数据:用户随机输入的键盘值和鼠标值、所述操作系统的当前中断次数和所述操作系统的当前网络交换数据量;以及将所述随机事件数据提供给随机化因子生成模块; 所述可执行程序加载模块:对来自所述用户空间可执行程序局部随机化管理策略生成/解析器的以所述可执行文件或动态库文件形式的所述局部随机化管理策略进行分析,并且加载所述可执行文件或动态库文件且将所述局部随机化管理策略输出至所述管理策略解析模块; 所述虚拟文件系统管理模块:对注册在其中的虚拟文件系统进行解析以获取最终全局随机化管理策略,使得在所述用户配置的情况下将所述虚拟文件系统中所装载的全局随机化管理策略作为所述最终全局随机化管理策略输出至所述管理策略解析模块,而在无用户配置的情况下将所述全局随机化管理策略默认配置作为所述最终全局随机化管理策略输出至所述管理策略解析模块,其中所述虚拟文件系统待装载来自全局随机化管理策略模块的全局随机化管理策略,并且具有全局随机化管理策略默认配置; 所述管理策略解析模块:对来自所述可执行程序加载模块的所述局部随机化管理策略和来自所述虚拟文件系统管理模块的所述最终全局随机化管理策略进行解析以生成最终随机化运行策略,并将所述最终随机化运行策略输出至所述地址空间随机化分配模块;所述随机化因子生成模块:根据来自所述随机事件采集模块的所述随机事件数据生成随机化修正值,根据所述随机化修正值和所述操作系统的系统库函数来生成随机数,以用于在所述地址空间随机化分配模块执行地址空间随机化分配时调整地址空间的固定分配地址,并将所述随机化因子输出至所述地址空间随机化分配模块;以及 所述地址空间随机化分配模块:根据来自所述管理策略解析模块的所述最终随机化运行策略和来自所述随机化因子生成模块的所述随机化因子来执行所述地址空间随机化分配,使得所述地址空间具有随机化地址。
13.如权利要求12所述的分配方法,其特征在于,所述可执行文件或动态库文件中具有用于存放所述局部随机化管理策略的程序段头。
14.如权利要求13所述的分配方法,其特征在于,所述可执行程序加载模块用于对来自所述用户空间可执行程序局部随机化管理策略生成/解析器的以所述可执行文件或动态库文件形式的所述局部随机化管理策略进行分析包括: 所述可执行程序加载模块对所述可执行文件或动态库文件中的程序段头进行解析以提取出所述局部随机化管理策略。
15.如权利要求13或14所述的分配方法,其特征在于,所述局部随机化管理策略包括:局部栈空间随机化分配策略、局部堆空间随机化分配策略以及局部内存映射空间随机化分配策略。
16.如权利要求15所述的分配方法,其特征在于,所述管理策略解析模块通过如下步骤对所述局部随机化管理策略和所述最终全局随机化管理策略进行解析以生成最终随机化运行策略: 全局强制判断步骤:判断所述全局地址空间随机化分配强制策略是否开启,如果是,则使所述操作系统的所有进程都实施栈空间随机化分配、堆空间随机化分配以及内存映射空间随机化分配,否则进入全局栈判断步骤、全局堆判断步骤以及全局内存映射判断步骤; 全局栈判断步骤:判断所述全局栈空间随机化分配策略是否开启,如果是,则进入局部栈判断步骤,否则使栈空间正常分配; 局部栈判断步骤:判断所述局部栈空间随机化分配策略是否开启,如果是,则使与所述可执行文件或动态库文件对应的栈空间实施随机化分配,否则使栈空间正常分配; 全局堆判断步骤:判断所述全局堆空间随机化分配策略是否开启,如果是,则进入局部堆判断步骤,否则使堆空间正常分配; 局部堆判断步骤:判断所述局部堆空间随机化分配策略是否开启,如果是,则使与所述可执行文件或动态库文件对应的堆空间实施随机化分配,否则使堆空间正常分配; 全局内存映射判断步骤:判断所述全局内存映射空间随机化分配策略是否开启,如果是,则进入局部内存映射判断步骤,否则使内存映射空间正常分配;以及 局部内存映射判断步骤:判断所述局部内存映射空间随机化分配策略是否开启,如果是,则使与所述可执行文件或动态库文件对应的内存映射空间实施随机化分配,否则使内存映射空间正常分配。
17.如权利要求12、13、14或16所述的分配方法,其特征在于,所述全局随机化管理策略默认配置是:开启或关闭所述全局栈空间随机化分配策略、开启或关闭所述全局堆空间随机化分配策略以及开启或关闭所述全局内存映射空间随机化分配策略。
18.如权利要求17所述的分配方法,其特征在于,所述全局随机化管理策略默认配置是:开启所述全局栈空间随机化分配策略、开启所述全局堆空间随机化分配策略以及开启所述全局内存映射空间随机化分配策略。
19.如权利要求12、13、14、16或18所述的分配方法,其特征在于,所述栈空间随机化地址=固定分配地址-随机化因子;以及所述堆空间随机化地址和所述内存映射空间随机化地址分别=固定分配地址+随机化因子。
20.如权利要求19所述的分配方法,其特征在于,所述操作系统是Linux操作系统。
21.如权利要求20所述的分配方法,其特征在于,所述可执行程序采用elf格式。
22.如权利要求20或21所述的分配方法,其特征在于,所述虚拟文件系统采用proc格 式。
【文档编号】G06F9/44GK103995705SQ201410246004
【公开日】2014年8月20日 申请日期:2014年6月4日 优先权日:2014年6月4日
【发明者】游瑞邦, 涂碧波, 孟丹 申请人:中国科学院信息工程研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1