基于Linux操作系统的软件权限控制系统及方法转让专利

申请号 : CN202111615380.6

文献号 : CN114003941B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 徐建徐叶马桂才杨诏钧魏立峰韩光姬一文

申请人 : 麒麟软件有限公司

摘要 :

基于Linux操作系统的软件权限控制系统及方法,用户空间包括可视化授权程序模块及可视化安全策略管理工具,分别用于将用户的授权选择结果写入内核空间及显示当前操作系统安装的所有软件包及其权限,并向内核空间下发软件授权策略规则;内核空间包括安全子系统hooks函数模块、安全文件系统模块、内核策略管理模块及安全域转换模块,安全子系统hooks函数模块用于基于唯一身份标识及用户设置的策略规则对每个软件包进行权限审核及安全域转换;安全域转换模块用于提供安全域转换接口;安全文件系统模块用于接收用户的授权选择结果;内核策略管理模块用于接收软件授权策略规则。本发明操作简单、维护成本低、对用户友好、性能开销小。

权利要求 :

1.基于Linux操作系统的软件权限控制系统,包括用户空间及内核空间,其特征在于:所述用户空间包括可视化授权程序模块及可视化安全策略管理工具,其中,可视化授权程序模块用于向用户提供可视化的动态授权界面,并将用户的授权选择结果写入内核空间;

可视化安全策略管理工具用于显示当前操作系统安装的所有软件包及其权限,并向内核空间下发软件授权策略规则;

所述内核空间包括安全子系统hooks函数模块、安全文件系统模块、内核策略管理模块及安全域转换模块,其中,

安全子系统hooks函数模块与用户空间的可视化授权程序模块连接,用于在程序运行过程中遇到权限申请时,通过内核调用核外可视化授权程序模块引导用户选择授权策略;

并用于基于应用程序中每个软件包的唯一身份标识及用户设置的策略规则对每个软件包进行权限审核及安全域转换;

安全域转换模块与安全子系统hooks函数模块连接,用于提供安全域转换接口;

安全文件系统模块与内核策略管理模块及用户空间的可视化授权程序模块连接,用于从可视化授权程序模块中接收用户的授权选择结果,并将其写入内核策略管理模块中;

内核策略管理模块同时与用户空间的可视化安全策略管理工具连接,用于从可视化安全策略管理工具中接收软件授权策略规则;

安全文件系统模块同时与安全子系统hooks函数模块连接,用于在安全子系统hooks函数模块通过内核调用核外可视化授权程序模块引导用户选择授权策略时,通过安全文件系统模块向用户传递数据。

2.如权利要求1所述的基于Linux操作系统的软件权限控制系统,其特征在于:软件包的唯一身份标识包括主体安全标签及客体安全标签,其中,主体安全标签仅包括主体软件标识,或同时包括主体软件标识及主体解释器标识;

客体安全标签包括客体软件标识、客体解释器标识、设备类型标识及特殊文件标识;或包括客体软件标识、设备类型标识及特殊文件标识;

其中,主体软件标识及客体软件标识为对软件进行权限控制的唯一标识;主体解释器标识及客体解释器标识用于在一般性安全域转换规则无法适用的场景下提供正确的安全域转换规则。

3.如权利要求2所述的基于Linux操作系统的软件权限控制系统,其特征在于:安全域转换模块提供三种安全域转换规则:一般性安全域转换规则,用于在进程的主体安全标签中没有包含解释器标识情况下适用;

通用解释器安全域转换规则,用于在进程的主体安全标签中包含通用解释器标识情况下适用;

特殊解释器安全域转换规则,用于在进程的主体安全标签中包含特殊解释器标识情况下适用。

4.如权利要求2所述的基于Linux操作系统的软件权限控制系统,其特征在于:软件包的权限包括:

执行权限,确定用户是否有权限运行相应软件;

联网权限,确定相应软件在运行过程中是否有连接互联网的权限;

设备访问权限,确定相应软件在运行过程中是否有访问某种设备的权限;

文件操作权限,确定相应软件在运行过程中是否有操作某个特殊文件或者目录的权限。

5.如权利要求1所述的基于Linux操作系统的软件权限控制系统,其特征在于:安全文件系统模块同时与用户空间的可视化安全策略管理工具连接,供可视化安全策略管理工具通过安全文件系统模块获取或设置内核空间安全子系统的各功能状态。

6.如权利要求1所述的基于Linux操作系统的软件权限控制系统,其特征在于:安全子系统hooks函数模块同时与内核空间的应用软件内核进程连接,用于在应用软件内核进程需要进行权限审核时,提供钩子函数对应用软件进行权限审核,允许或拒绝应用软件内核进程获取相关的权限。

7.如权利要求6所述的基于Linux操作系统的软件权限控制系统,其特征在于:应用软件内核进程与应用软件用户空间连接,用于供应用软件用户空间程序在实现包括但不限于进程启动、网络连接、文件访问及设备访问功能时提供系统调用的接口。

8.一种软件权限控制方法,其特征在于,包括如下步骤:步骤S1:程序启动,内核策略管理模块接收可视化安全策略管理工具下发的软件授权策略规则;

步骤S2:应用程序启动过程中,安全子系统hooks函数模块中的安全域初始化相关钩子函数读取可执行文件客体安全标签,并根据安全域转换规则完成客体安全标签向主体安全标签转换的动作;

步骤S3:在应用程序的内核空间判断某程序需要询问权限时,安全子系统hooks函数模块通过内核调用核外可视化授权程序模块引导用户选择授权策略,安全文件系统模块将可视化授权程序模块获取的用户对于运行中的软件包所设置的策略规则下发给内核策略管理模块;

步骤S4:内核策略管理模块将软件授权策略规则、每个软件包的唯一身份标识以及与唯一身份标识对应的用户设置的策略规则存储在访问向量缓存中;

步骤S5:安全子系统hooks函数模块调取内核策略管理模块接口进行相关权限审核,调用安全域转换模块接口实现安全域转换;

所述步骤S2中,主体安全标签仅包括主体软件标识,或同时包括主体软件标识及主体解释器标识;

客体安全标签包括客体软件标识、客体解释器标识、设备类型标识及特殊文件标识;或包括客体软件标识、设备类型标识及特殊文件标识;

其中,主体软件标识及客体软件标识为对软件进行权限控制的唯一标识;主体解释器标识及客体解释器标识用于在一般性安全域转换规则无法适用的场景下提供正确的安全域转换规则;

安全域转换规则通过下述三种转换规则完成客体安全标签向主体安全标签转换的动作:

一般性安全域转换规则,用于在进程的主体安全标签中没有包含解释器标识情况下适用;

通用解释器安全域转换规则,用于在进程的主体安全标签中包含通用解释器标识情况下适用;

特殊解释器安全域转换规则,用于在进程的主体安全标签中包含特殊解释器标识情况下适用。

说明书 :

基于Linux操作系统的软件权限控制系统及方法

技术领域

[0001] 本发明涉及Linux操作系统基础安全领域,具体涉及一种软件权限控制系统的底层安全实现方法及系统。

背景技术

[0002] 随着信息技术的发展,个人数据隐私的重要性越来得到大家的重视,操作系统的安全技术也越来越得到大家的重视和关注,传统的DAC访问控制已经不再能够满足普通用
户的需求,因为在这种安全权限系统的保护下,一旦root权限被非法获取,相当于获取了系
统的一切权限和隐私数据。因此越来越多的桌面操作系统会给用户提供基于MAC和RBAC的
安全权限控制系统,比如selinux,但是由于其本身设计的初衷是面向专业的安全部门和技
术人员的,并不是普通用户,其策略配置复杂,技术门槛高,维护成本高,对普通用户不友好
等特点,限制了selinux在普通用户中的推广和使用。
[0003] 在Linux操作系统基础安全领域,最常用的软件权限控制方案是selinux,selinux是使用Linux LSM安全框架实现的安全子系统,它是一种强制访问控制系统(MAC:
Mandatory Access Control),同时也是一种基于角色的访问控制系统(RBAC:Role‑Based 
Access Control)。它通过制定用户,角色,类型三者相关的策略,可以对程序行为进行非常
精确的权限控制。selinux主要由内核空间的安全策略管理器,安全文件系统,访问向量缓
存,hooks函数,以及用户空间的客体管理器,安全工具等模块组成。selinux不允许默认的
安全策略,它通过使用安全工具对系统中的每一个程序及其相关文件制定安全策略,没有
相关安全标签的文件是不允许被执行或访问的。它制定的所有策略被安全工具编译成二进
制策略文件,在系统启动时被加载进内核的安全策略管理器中。软件运行过程中在内核中
触发hooks函数,在hooks函数中审核软件权限,从而实现了对软件的权限控制。
[0004] 然而,已有的selinux技术存在如下不足:
[0005] 1、专业化设计,不适合普通用户
[0006] selinux是为安全部门和运维技术人员设计的安全系统,其设计初衷就没有考虑到普通用户的使用体验。例如我们来看selinux其中的一条安全策略:allow afs_
fsserver_t afs_logfile_t:file { append create getattr ioctl link lock map 
open read rename setattr unlink write }。仅在这一条策略中对afs_logfile_t文件类
型的操作权限就使用了十三种之多。这些操作权限对于普通用户来说很难直观地理解(比
如ioctl lock map link unlink等),而是需要精通Linux操作系统的技术人员才能完全理
解其内涵,才能设计出合适的权限控制策略。
[0007] 2、操作复杂,维护成本高
[0008] selinux的策略制定过程复杂。它针对一个软件包的不同文件都有不同的类型定义和策略规则,再加上复杂的安全域转换规则,多样的操作权限控制等,导致selinux的策
略规则极其繁复。例如在selinux的strict策略下,策略规则总数约为10万条,这么庞大的
规则配置总量,甚至连专业的linux服务器运维人员也很难完全掌握。令普通用户望而却
步。图1详细列举了一个实际使用的selinux的strict策略规则摘要,主要数据列举如下:
418种权限,1024种分类,4229种类型,113867条allow规则,17951条Dontaudit规则,9584种
类型转换规则。而且修改这些规则中的任何一条,都需要对相关联的很多条规则进行重新
验证测试,确保权限控制没有问题,维护工作量十分巨大。
[0009] 3、用户不友好
[0010] 由于缺乏可视化的配置工具,selinux使用命令行策略配置工具,设置策略规则,然后再使用命令行策略搜索工具,搜索该规则是否正确添加,操作复杂。
[0011] 在新安装软件时,selinux的配置也很复杂。由于selinux针对每一款软件的每一个文件都需要制定合适的策略,如果用户自己开发一个新程序,或者安装一个不在selinux
默认策略中的程序,就需要自己制定新程序的策略,并使用命令行策略配置工具将其写入
策略列表中,整个过程需要用户自己操作,没有自动化的工具。
[0012] 4、系统性能开销大
[0013] 由于以下几个原因,系统在启动selinux安全子系统后性能开销明显增加:
[0014] (1)selinux使用英文单词组成的字符串命名客体标签,客体标签包含用户:角色:类型:等级,内核中需要将客体标签中用户,角色,类型,等级的英文单词转换成数据结构的
数字,加之角色和类型的数量及其庞大,导致需要建立庞大的hash表,查找效率低。
[0015] (2)selinux的策略总量太大,10万条策略规则都需要加载到内核,转换成规则列表,导致策略规则的hash表很庞大。每次权限检查时,需要从10万条策略规则的hash表中查
找相关规则,进行权限审核,查找效率很低。
[0016] (3)权限检查条件复杂:权限审核规则是根据用户,角色,类型,等级,四元共同作用的,权限审核规则输入参数较多,判断条件复杂。
[0017] (4)安全域转换复杂:安全域的上下文转换同样需要遵循策略规则的描述,由当前主体标签和当前客体标签作为输入参数,查询策略规则,决定转换后的安全域,安全域转换
规则总数在9000条左右,查找效率低。

发明内容

[0018] 为解决已有技术存在的不足,本发明提供了基于Linux操作系统的软件权限控制系统,包括用户空间及内核空间,
[0019] 所述用户空间包括可视化授权程序模块及可视化安全策略管理工具,其中,
[0020] 可视化授权程序模块用于向用户提供可视化的动态授权界面,并将用户的授权选择结果写入内核空间;
[0021] 可视化安全策略管理工具用于显示当前操作系统安装的所有软件包及其权限,并向内核空间下发软件授权策略规则;
[0022] 所述内核空间包括安全子系统hooks函数模块、安全文件系统模块、内核策略管理模块及安全域转换模块,其中,
[0023] 安全子系统hooks函数模块与用户空间的可视化授权程序模块连接,用于在程序运行过程中遇到权限申请时,通过内核调用核外可视化授权程序模块引导用户选择授权策
略;并用于基于应用程序中每个软件包的唯一身份标识及用户设置的策略规则对每个软件
包进行权限审核及安全域转换;
[0024] 安全域转换模块与安全子系统hooks函数模块连接,用于提供安全域转换接口;
[0025] 安全文件系统模块与内核策略管理模块及用户空间的可视化授权程序模块连接,用于从可视化授权程序模块中接收用户的授权选择结果,并将其写入内核策略管理模块
中;
[0026] 内核策略管理模块同时与用户空间的可视化安全策略管理工具连接,用于从可视化安全策略管理工具中接收软件授权策略规则;
[0027] 安全文件系统模块同时与安全子系统hooks函数模块连接,用于在安全子系统hooks函数模块通过内核调用核外可视化授权程序模块引导用户选择授权策略时,通过安
全文件系统模块向用户传递数据。
[0028] 其中,软件包的唯一身份标识包括主体安全标签及客体安全标签,其中,
[0029] 主体安全标签仅包括主体软件标识,或同时包括主体软件标识及主体解释器标识;
[0030] 客体安全标签包括客体软件标识、客体解释器标识、设备类型标识及特殊文件标识;或包括客体软件标识、设备类型标识及特殊文件标识;
[0031] 其中,主体软件标识及客体软件标识为对软件进行权限控制的唯一标识;主体解释器标识及客体解释器标识用于在一般性安全域转换规则无法适用的场景下提供正确的
安全域转换规则。
[0032] 其中,安全域转换模块提供三种安全域转换规则:
[0033] 一般性安全域转换规则,用于在进程的主体安全标签中没有包含解释器标识情况下适用;
[0034] 通用解释器安全域转换规则,用于在进程的主体安全标签中包含通用解释器标识情况下适用;
[0035] 特殊解释器安全域转换规则,用于在进程的主体安全标签中包含特殊解释器标识情况下适用。
[0036] 其中,软件包的权限包括:
[0037] 执行权限,确定用户是否有权限运行相应软件;
[0038] 联网权限,确定相应软件在运行过程中是否有连接互联网的权限;
[0039] 设备访问权限,确定相应软件在运行过程中是否有访问某种设备的权限;
[0040] 文件操作权限,确定相应软件在运行过程中是否有操作某个特殊文件或者目录的权限。
[0041] 其中,安全文件系统模块同时与用户空间的可视化安全策略管理工具连接,供可视化安全策略管理工具通过安全文件系统模块获取或设置内核空间安全子系统的各功能
状态。
[0042] 其中,安全子系统hooks函数模块同时与内核空间的应用软件内核进程连接,用于在应用软件内核进程需要进行权限审核时,提供钩子函数对应用软件进行权限审核,允许
或拒绝应用软件内核进程获取相关的权限。
[0043] 其中,应用软件内核进程与应用软件用户空间连接,用于供应用软件用户空间程序在实现包括但不限于进程启动、网络连接、文件访问及设备访问功能时提供系统调用的
接口。
[0044] 本发明另外提供了一种软件权限控制方法,包括如下步骤:
[0045] 步骤S1:程序启动,内核策略管理模块接收可视化安全策略管理工具下发的软件授权策略规则;
[0046] 步骤S2:应用程序启动过程中,安全子系统hooks函数模块中的安全域初始化相关钩子函数读取可执行文件客体安全标签,并根据安全域转换规则完成客体安全标签向主体
安全标签转换的动作;
[0047] 步骤S3:在应用程序的内核空间判断某程序需要询问权限时,安全子系统hooks函数模块通过内核调用核外可视化授权程序模块引导用户选择授权策略,安全文件系统模块
将可视化授权程序模块获取的用户对于运行中的软件包所设置的策略规则下发给内核策
略管理模块;
[0048] 步骤S4:内核策略管理模块将软件授权策略规则、每个软件包的唯一身份标识以及与唯一身份标识对应的用户设置的策略规则存储在访问向量缓存中;
[0049] 步骤S5:安全子系统hooks函数模块调取内核策略管理模块接口进行相关权限审核,调用安全域转换模块接口实现安全域转换。
[0050] 本发明提供的基于Linux操作系统的软件权限控制系统及方法,操作简单、维护成本低、对用户友好、性能开销小,是一种适用于普通用户的方便、快捷的权限控制系统及方
法。

附图说明

[0051] 图1:已有技术的selinux的strict策略规则摘要。
[0052] 图2:本发明的权限控制系统的软件架构框图。

具体实施方式

[0053] 为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。
[0054] 基于已有技术存在的诸多问题,本发明提供了一种基于Linux操作系统的软件权限控制系统,总体思路为通过在内核层使用LSM安全子系统架构,在用户空间使用可视化的
安全策略管理工具,以提供一套简便、易用、高效的基于MAC和RBAC的权限控制方法及系统。
[0055] 本发明基于如下的构思开展:
[0056] 一、将主客体安全域简化:以软件包作为划分角色的依据,为每一个软件包分配唯一的身份标识(SID),用此身份标识做为权限审核的唯一标识。
[0057] 二、将软件授权规则简化:将系统操作权限按业务功能具象化为:执行权限、联网权限、设备访问权限、文件操作权限等用户容易理解的权限类型。用唯一标识(SID)对软件
包进行策略规则制定,大大简化了策略规则。
[0058] 三、将安全域自动转换规则:通过利用Linux特有的父子进程,进程组等特性,实现了一般性安全域转换规则,不需要在策略规则增加安全域转换规则条目。同时针对操作系
统和程序的丰富性和复杂性,通过客体标签中的解释器标识控制某些特殊场景下的安全域
转换。
[0059] 四、优化用户体验:使用可视化安全策略管理工具,使用户可以很方便的对自己的软件包进行统一授权管理,给指定的软件包增加和删除相关权限。通过在软件包安装管理
程序中添加钩子函数,可以实现新安装软件包的软件标识(SID)的自动分配和自动生成客
体标签。通过可视化授权程序,以弹出软件动态授权界面的方式,引导用户进行新安装软件
的权限状态设置。整个系统用户体验十分简便易用。
[0060] 请配合图2所示,为本发明的基于Linux操作系统的软件权限控制系统的软件架构框图:软件权限控制系统包括用户空间及内核空间,用户空间进程在进程启动、网络连接、
文件访问或设备访问等时,通过系统调用访问内核空间资源,进而在内核空间中,在获取某
种权限时,调用安全子系统hooks函数模块的钩子函数进行权限审核。用户空间包括可视化
授权程序模块及可视化安全策略管理工具,内核空间包括安全子系统hooks函数模块、安全
文件系统模块、内核策略管理模块及安全域转换模块,各模块的作用及相互之间的配合关
系详述如下。
[0061] 一、可视化安全策略管理工具
[0062] 可视化安全策略管理工具用界面展现的方式显示当前操作系统安装的所有软件包,及其对应的执行权限、联网权限、设备访问权限、文件操作权限的授权状态,用户通过简
单的界面开关选择动作,即可完成对软件包的授权或取消授权动作。可视化安全策略管理
工具通过核内外通信机制向内核策略管理模块下发软件授权策略规则。
[0063] 区别于selinux将权限精细化、专业化的设计,本发明提供的软件授权策略规则,将软件权限按业务功能具象化为如下几种:
[0064] 执行权限:用户是否有权限运行此软件。
[0065] 联网权限:此软件在运行过程中是否有连接互联网的权限。
[0066] 设备访问权限:此软件在运行过程中是否有访问某种设备的权限,根据业务功能,设备访问权限可以进一步细化为摄像头设备访问权限、麦克风设备访问权限、扬声器设备
访问权限、屏幕截图权限等等细化的功能权限。
[0067] 文件操作权限:此软件在运行过程中是否有操作某个特殊文件或者目录的权限。根据业务功能,文件操作权限也可进一步细化为,对影响系统启动和安全运行的基础软件
和基础库文件的操作权限。对用户隐私目录的操作权限等定制化的功能权限。
[0068] 本发明的一较佳实施例中,可视化安全策略管理工具采用QT实现人机交互,界面展示软件名称、软件图标、权限授权状态,用户可通过开关按钮操作,打开或者关闭某个软
件的某个权限。采用sqlite3存储软件标识及其授权策略规则,采用netlink通信机制,向内
核策略管理模块下发软件授权策略规则。
[0069] 二、可视化授权程序模块
[0070] 可视化授权程序模块的功能是提供可视化的动态授权界面,提示用户当前程序需要申请何种权限。用户可以选择拒接、允许、本次允许等选项。当内核空间的软件进程在调
用安全子系统的某个权限审核钩子函数时,发现该权限设置为询问模式,则调用用户空间
的可视化授权程序模块,提示用户进行授权选择,用户选择的结果通过安全文件系统模块
写入内核策略管理模块的访问向量缓存中,从而更新该软件的授权状态。
[0071] 本发明的一较佳实施例中,可视化授权程序模块采用QT实现人机交互界面,提供用户软件授权选择选项,采用安全文件系统作为通信手段,下发用户选择的软件授权策略
给内核策略管理模块。
[0072] 需要说明的一点是,本发明的可视化安全策略管理工具及可视化授权程序模块都用于写入软件授权策略规则,都被写入内核策略管理模块的向量缓存中,不同的是,可视化
安全策略管理工具在系统启动时主动下发软件策略,下发的策略可以是允许、阻止、询问。
可视化授权程序模块是在询问模式下,当软件运行时需要申请某权限时,由内核空间通过
可视化授权程序模块弹框提示用户需要申请某种权限,供用户选择是否授权,是被动的。
[0073] 三、内核策略管理模块
[0074] 内核策略管理模块的功能是,接受用户空间可视化安全策略管理工具下发的软件授权策略规则,接受用户通过可视化授权程序模块及安全文件系统模块设置的策略规则,
为安全子系统hooks函数模块提供审核软件授权的接口。在操作系统启动过程中,用户空间
的可视化安全策略管理工具下发用户设置的软件授权策略规则,内核策略管理模块接收数
据后,将其存储在访问向量缓存中。软件进程在运行过程中,触发安全子系统的hooks函数,
在权限审核的hooks函数中,会查询访问向量缓存,以确定该进程是否具有该项权限。
[0075] 本发明的一较佳实施例中,内核策略管理模块通过采用hash查找表构建访问向量缓存,提供软件权限审核和设置的接口,提高查询效率。
[0076] 四、安全子系统hooks函数模块
[0077] 系统第一次启动时,对整个系统中的应用程序使用软件包管理程序进行了全盘扫描,对每一个应用软件包分配了一个身份标识,并写入文件拓展属性中的安全文件标签中,
解释器标识也是在这个阶段写入的。后续用户使用过程中安装的软件包,是通过软件包管
理程序,在安装软件包的过程中,调用可视化安全策略管理工具提供的接口,分配唯一身份
标识,并写入文件的客体安全标签中。
[0078] 安全子系统hooks函数模块中注册有本发明专用安全模块,在各钩子函数中进行权限审核及安全域转换等功能。
[0079] 具体的,系统应用程序启动后,安全子系统hooks函数模块通过安全域相关函数读取安全文件标签,并根据安全域转换规则,并完成客体安全标签向主体安全标签的转换。在
安全域转换时,调用安全域转换模块接口实现安全域转换。
[0080] 标签中唯一身份标识与用户设置的权限相对应,作为对软件进行权限审核的依据。
[0081] 具体的,安全子系统hooks函数模块在应用软件内核进程需要进行权限审核的时候,调用内核策略管理模块接口获取软件包的身份标识和授权策略规则,基于钩子函数进
行相关权限审核,允许或拒绝应用软件内核进程获取相关的权限。
[0082] 安全子系统hooks函数模块同时与用户空间的可视化授权程序模块连接,用于在程序运行过程中遇到权限申请时,通过内核调用核外可视化授权程序模块引导用户选择授
权策略。
[0083] 每个软件包的唯一身份标识包括主体安全标签和客体安全标签,其中,
[0084] 客体安全标签由以下四个部分组成:
[0085] 客体软件标识、客体解释器标识、设备类型标识、特殊文件标识。
[0086] 软件标识(SID),是以软件包为基本单元,划分角色,给每一个软件包分配一个唯一标识,作为权限控制的唯一标识。
[0087] 解释器标识:在一般性安全域转换规则无法适用的特殊场景下,需要增加解释器标识,用来正确地进行安全域转换,解释标识又分为通用解释器标识和特殊解释器标识,其
详细介绍见下文安全域转换模块的相关描述。
[0088] 设备类型标识:对于特殊的设备节点文件,增加设备类型标识,软件需要相应的设备访问授权才能访问该设备节点文件。
[0089] 特殊文件标识:对于有特殊操作控制需求的文件,增加特殊文件标识,软件需要相应的特殊文件操作授权才能操作该特殊文件。
[0090] 设备类型标识和特殊文件标识是作为纯客体文件的安全标识使用的,纯客体文件和可执行程序文件有所区别:可执行程序客体文件,可以运行加载成一个主体进程,纯客体
文件不是可执行文件,不具备成为主体进程的可能。纯客体文件存在的目的就是被主体访
问。
[0091] 举个例子:图片可以被图片查看器进程访问。我们在一个图片上打上特殊文件标识,也就意味着一个软件程序需要获取这种特殊文件标识权限,才能访问这个图片,我们在
一个设备节点上打上一个设备类型标识,比如我们给一个摄像有设备节点文件打上摄像头
类型标识,那么一个软件只有获取摄影头访问权限,它才能访问这个设备节点文件。所以内
核策略管理模块,写的策略是图片查看器(对应的SID)可以查看图片这种特殊文件标识。当
图片查看器进程真正去访问一个带图片特殊文件标识的文件时,在内核的安全子系统
hooks函数模块的跟文件访问权限检查的钩子函数中,就会查询你这个SID是否具备图片查
看权限。
[0092] 主体安全标签由以下两个部分组成:主体软件标识、主体解释器标识。
[0093] 主体软件标识:表明该进程主体属于哪一个软件标识,该进程权限由主体软件标识对应的策略规则决定。
[0094] 主体解释器标识:表明该进程主体属于何种解释器类型,解释器类型的不同决定了主体安全域转换遵循不同的转换规则。
[0095] 本发明的一较佳实施例中,安全子系统hooks函数模块具体通过如下钩子函数实现相应功能:
[0096] 实现bprm_set_creds钩子函数,进行安全域上下文的转换;
[0097] 实现file_permission钩子函数,进行特殊文件操作权限审核和设备文件权限审核;
[0098] 实现mmap_file钩子函数,进行执行权限权限审核;
[0099] 实现socket_sendmsg和socket_recvmsg钩子函数,进行联网权限审核。
[0100] 五、安全域转换模块
[0101] 安全域转换模块的功能是提供安全域转换接口,供安全子系统hooks函数在需要进行安全域转换的地方调用,根据进程的主体安全标签中的解释器标识的不同,可以分为
三种不同的安全域转换规则:
[0102] (1)一般性安全域转换规则:如果一个进程的主体安全标签中的没有包含解释器标识,则该进程的安全域转换适用于一般性安全域转换规则,该转换规则通过分析进程id,
进程组id,父进程id,父进程的进程组id,进程组的父进程id,等一系列id的继承关系,形成
了一系列普遍适用的一般性安全域转换规则。
[0103] (2)通用解释器安全域转换规则:如果一个进程的主体安全标签中包含通用解释器标识,则该进程的安全域转换适用于通用解释器安全域转换规则,该规则使用当前加载
的客体可执行文件的安全标签中的软件标识,作为安全域转换后的主体软件标识。
[0104] (3)特殊解释器安全域转换规则:如果一个进程的主体安全标签中包含特殊解释器标识,则该进程的安全域转换适用于此种特殊解释器的安全域转换规则。可能有多种特
殊解释器类型,它们的安全域转换规则可能不尽相同。举例说明,虚拟机类进程主体可以归
结为一类特殊解释器标识类型,此类进程在虚拟机加载中运行的软件程序时,安全域需要
转换为该软件程序的软件标识,以便实现对该软件程序的权限控制。特殊的地方在于虚拟
机加载的程序文件路径通常是虚拟化的,并不代表其在主机系统中的真实的绝对路径(例
如在Linux操作系统虚拟化运行windows程序时,客体可执行文件的路径通常是C:/program 
files/xxx/xxx.exe,并不代表其在Linux操作系统中的真实绝对路径),所以需要通过具体
分析虚拟机路径跟主机路径的映射关系,还原出软件程序在主机中的绝对路径,从而获取
到可执行文件的客体标签,实现安全域的转换。在本发明中通过解析该进程的环境变量,从
cwd,cmdline,或者一些虚拟机专用的环境变量(例如XX_BOTTLE)中提取信息,还原可执行
文件的真实绝对路径。
[0105] 六、安全文件系统模块
[0106] 安全文件系统模块实现如下功能,安全文件系统初始化,安全文件系统文件创建,文件读写钩子函数注册。安全文件系统模块的主要作用是实现用户空间和内核空间的数据
传递。用户空间的可视化安全策略管理工具通过安全文件系统模块,可以获取内核空间安
全子系统的各功能状态,可以设置内核空间安全子系统各功能的状态。可视化授权程序模
块通过安全文件系统模块,可以将某个软件授权策略规则写入内核策略管理模块的访问向
量缓存中。
[0107] 并且,安全子系统hooks函数模块在需要用户做出授权选择时,通过call_usermodehelpere方法调用核外的可视化授权程序模块提供用户权限选择界面,但是具体
的权限申请的详细数据通过安全文件系统模块传递给可视化授权程序模块,包括授权的软
件包名称,SID,申请何种权限等信息。
[0108] 本发明的一较佳实施例中,安全文件系统模块:
[0109] 1)通过securityfs_create_file函数创建status文件。用户空间可视化安全策略管理工具通过操作status文件获取和设置安全子系统功能状态。
[0110] 2)通过securityfs_create_file函数创建auth文件,用户空间可视化授权程序通过操作auth文件将软件授权写入内核策略管理模块的访问向量缓存中。
[0111] 本发明的具体实施例中,各具体实施方式对应的相应实例举例如下:
[0112] 一、主客体安全标签的一个实例:
[0113] 本发明的主体安全标签的一个实例:软件标识、解释器标识;
[0114] 本发明的客体安全标签的一个实例:软件标识、解释器标识、设备类型标识、特殊文件标识。
[0115] 各字段的定义如下:
[0116] 软件标识:以uint32_t型整数描述软件标识,具体定义如下:0为无效值,1‑10保留为内核使用,11以上依次分配给软件程序。
[0117] 解释器标识:以uint8_t型整数描述解释器标识,具体定义如下:0为一般性程序类型,1为通用解释器类型,2为虚拟机解释器类型,3以上预留。
[0118] 设备类型标识:以uint8_t型整数描述设备类型标识。具体定义如下:0为无效值,1为摄像头设备类型,2为麦克风设备类型,3为扬声器设备类型,4为图形驱动设备类型,5为
USB存储设备类型,6以上预留。
[0119] 特殊文件标识:以uint8_t型整数描述特殊文件类型标识,具体定义如下:0为无效值,1为用户目录,2为文档目录,3为图片目录,4为音频目录,5为下载目录,6为桌面目录,7
为配置文件目录,8为系统库目录,9为系统日志目录,10为系统引导目录,11以上预留。
[0120] 二、软件权限的一个实例
[0121] 本发明的软件权限的一个实例,划分为如下几种:执行权限,联网权限,摄像头访问权限,扬声器访问权限,麦克风访问权限,图形设备访问权限,USB存储设备访问权限,用
户目录操作权限,文档目录操作权限,图片目录操作权限,音频目录操作权限,下载目录操
作权限,桌面目录操作权限,配置文件目录操作权限,系统库目录操作权限,系统日志目录
操作权限,系统引导目录操作权限。
[0122] 每个权限位由两个bit组成:00为无权限,01为有权限,10为询问用户授权,11为预留值。
[0123] 三、安全域转换模块的一个实例
[0124] 一般性安全域转换规则:
[0125] 1)当该进程的pid等于它的进程组id时,或者该进程的父进程是1时,或者该进程的父进程id等于它的进程组id的父进程id时,使用加载的可执行文件的客体安全标签中的
软件标识作为该进程的主体安全标签中的软件标识;
[0126] 2)当该进程的父进程id等于他的进程组id时,或者该进程的进程组id等于该进程的父进程的进程组id时,该进程的主体安全标签中的软件标识继承他的父进程的主体安全
标签中的软件标识。
[0127] 通用解释器安全域转换规则:如果该进程的父进程的主体安全标签中包含解释器标识,则该进程直接使用加载的可执行文件的客体安全标签中的软件标识作为主体安全标
签中的软件标识。
[0128] 虚拟机类型特殊解释器安全域转换规则:如果该进程的父进程的主体安全标签中包含虚拟机类型解释器标识,则该进程使用虚拟机运行的可执行文件的客体安全标签中的
软件标识作为主体安全标签中的软件标识。其中一种将虚拟机可执行文件路径转换为主机
系统真实绝对路径的方法如下:解析该进程的环境变量字段,查找cwd和cmdline两个环境
变量,其中cmdline的值是虚拟机中的虚拟化的可执行文件路径(例如C:/Program Files/
xxx/xxx.exe),cwd的值是主机系统中可执行文件的运行目录(/home/xxx/vm/xxx/xxx/),
使用cmdline的后缀xxx.exe,和cwd的全部或者部分路径,可以完整的还原出该可执行文件
在主机系统中的绝对路径。从而获取该可执行文件的客体标签的软件标识。
[0129] 结合上文具体实施方案不难理解,本发明对比selinux权限控制系统,显著地改善了以下几个方面:
[0130] 1、简化策略设置
[0131] 本发明的策略规则,以软件标识作为策略规则设置的唯一标识,并且将权限按照业务功能具象化为执行权限,设备操作权限,联网权限,文件操作权限几种,用户能很容易
地理解其内涵,并且很方便地设置某个软件的权限策略规则。
[0132] 本发明将安全域转换规则划分为,一般性安全域转换规则,通用解释器安全域转换规则,特殊解释器安全域转换规则。一般性安全域转换规则及通用解释器安全域转换规
则,能够作为绝大多数情况下的软件默认安全域转换规则。只有在默认安全域转换规则失
效的情况下我们会设置特殊解释器标识,设计特殊的安全域转换规则。目前特殊解释器安
全域转换规则中已经包含了虚拟机等特殊场景,因此只有在现有的特殊解释器安全域转换
规则都无效的情况下,才最终需要考虑重新设计转换规则。这大大减小了用户需要自己设
置安全域转换规则的可能性,从而简化了安全域转换规则的策略设置。
[0133] 相对于selinux的strict策略有10万条的策略规则总量,本发明的策略总量根据软件包的安装情况,总量控制在2000‑5000条左右,策略规则总数是selinux的约1/20。
[0134] 2、用户体验友好
[0135] 本发明通过用户空间的可视化安全策略管理工具来管理软件权限,展示内核安全子系统功能状态。
[0136] 本发明通过在软件包管理程序中加入钩子函数,实现了新安装软件的软件标识的自动分配工作,减少了用户手动干预。
[0137] 本发明通过可视化授权程序引导用户对新安装软件进行授权操作,用户操作简便,学习成本低。
[0138] 3、系统性能开销小
[0139] 本发明采取了如下措施,相比selinux减少了系统性能开销:
[0140] (1)简化策略规则,降低总量:本发明的策略规则总量约为selinux的1/20,并且以软件标识为唯一标识进行查找,提高了策略规则的查找效率,减少了性能开销;
[0141] (2)简化安全域转换规则:本发明采取普遍适用的一般性安全域转换规则与特殊场景下的安全域转换规则相结合的方式。在绝大多数情况下,程序采用一般性安全域转换
规则作为默认转换规则,在极少数情况下,程序需要设计特殊的安全域转换规则。这样的方
案,大幅地减少了安全域转换规则,节省了策略规则查找时间,减少了性能开销。
[0142] 虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的范围之内,相对上述实施例进行各种变动与修
改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。