首页 / 专利库 / 软件 / 模型驱动体系结构 / 一种安全操作系统强制访问控制机制的实施方法

一种安全操作系统强制访问控制机制的实施方法

阅读:994发布:2020-06-13

专利汇可以提供一种安全操作系统强制访问控制机制的实施方法专利检索,专利查询,专利分析的服务。并且一种安全 操作系统 强制 访问 控制机制的实施方法,属安全操作系统设计和实现领域。其主体是安全体系结构和访问控制流程。安全体系结构给出了操作系统为支持强制访问控制机制,在设计上的层次划分和模 块 之间的依赖关系,在实施方法中,由下到上分为四个层次:即驱动层、 内核 层、系统层和应用层,并包括:强制访问控制执行模块、标记管理模块、管理信息处理模块,安全初始化模块以及存储介质加密保护模块。强制访问控制流程给出了在安全操作系统中实施强制访问控制在时序、过程上先后关系。 支撑 模型、数据结构和钩子函数给出了实现的具体细节。强制访问控制机制是高安全等级操作系统必备的安全功能,该方法可广泛地应用于高安全等级操作系统的设计上。,下面是一种安全操作系统强制访问控制机制的实施方法专利的具体信息内容。

1.本专利权利要求主要包括安全体系结构、强制访问控制流程和强制访问控制支撑模型三项:
1.安全体系结构的划分
强制访问控制机制是安全Linux操作系统的重要部分,整个系统主要包括:
强制访问控制执行模、标记管理模块、管理信息处理模块、安全初始化模块以及存储介质加密保护模块,模块的关系在附图1,以下是各个模块的关系。
1)强制访问控制执行模块:强制访问控制执行模块在系统调用接口位置截取系统执行流程,并顺序执行以下功能:
●调用标记管理模块完成系统中主客体的标识和强制访问控制验证工作。
●根据标记管理模块返回的函数调用结果,对系统调用行为进行裁决。
●根据裁决的结果,提取该次行为的审计信息,并将其发送到管理信息处理模块。
●对被裁决为非法访问的行为,进行返回处理,并返回系统错误信息给应用子系统。
2)标记管理模块:标记管理模块在系统内核层执行,完成如下一些安全功能:
●根据管理信息处理模块提供的强制访问控制包,建立内核用户安全列表、客体安全列表和特权安全列表。
●在系统执行创建新主体(fork,exec)和创建新客体(open,create)的操作时,从安全列表中查找对应的安全标记,并与主体/客体绑定。
●在系统执行访问时,根据强制访问控制执行模块提供的主体/客体标记,对访问是否符合强制访问控制进行判决,如果判决允许,则返回允许结果给强制访问控制执行模块。
●对不符合强制访问控制的访问,判断主体是否具有该客体的执行特权,如符合该特权,则返回特权允许信息给强制访问控制执行模块,否则返回禁止访问结果。
3)管理信息处理模块:管理信息处理模块处理与安全管理相关的信息收发、筛选,包括强制访问控制模块的接收和审计模块的发送,具体功能如下:
●接收安全管理中心发送的下拉安全管理策略数据包,检查其可信性,即完整性,而后将其解密后发送给标记管理模块。
●接收强制访问控制处理模块中获取的审计信息,对其进行分类筛选,并根据其优先级次序将审计信息发送给审计子系统。
●对需要完整性验证的客体访问操作,当标记管理模块返回不确定结果时,强制访问控制执行模块向管理信息处理模块发送对应审计信息,由管理信息处理模块的完整性验证进程执行完整性验证功能,并将结果向标记管理模块发送,然后通知强制访问控制执行模块。
●对网络访问控制行为,当标记管理模块返回不确定结果时,强制访问控制执行模块向管理信息处理模块发送对应审计信息或执行完整性验证功能,管理信息处理模块据此组织可信接入申请数据包,并向对应的安全节点子系统发送,而后获取对应节点的可信接入应答数据包,返回可信接入确认数据包,然后通知强制访问控制执行模块。
4)安全初始化模块:安全初始化模块完成功能如下:
●系统从启动到正常运行过程中基于完整性度量的可信链建立,包括TPCM模块对BIOS的完整性检查,BIOS对可信引导程序的完整性检查,可信引导程序对可信初始系统的完整性检查,可信初始系统对运行环境的完整性检查。
●在系统引导过程中,执行系统用户开机检查功能,为系统的启动分配初始主体信息。
5)存储介质加密保护模块:存储介质加密保护模块对文件系统向存储介质的读写操作执行文件粒度的加密保护功能,防止绕过系统TCB机制对存储介质的直接访问行为导致泄密事故。
注:其具体划分参加说明书附图1。
2.强制访问控制实施流程
系统在初始化过程中,安全管理中心需要对系统中的所有主体和客体实施身份管理、标记管理、授权管理和策略管理。身份管理是确定系统中的所有合法用户的身份、工作密钥、证书等与安全相关的内容。标记管理是根据业务系统的需要,结合客体资源的重要程度,确定系统中所有客体资源的安全级,生成全局客体标记列表,同时根据用户在业务系统中的权限和色确定主体的安全标记,生成全局主体标记列表。授权管理是根据系统需求和安全状况,授予用户访问客体资源能的权限,生成强制访问控制列表和特权列表。策略管理则是根据节点系统的需求,生成和执行主体相关的策略,包括强制访问控制策略、级别改变检查策略等,供节点系统执行。除此之外,系统审计员需要通过安全管理中心制定系统审计策略,实施系统的审计管理。
系统初始化完成后,用户便可以请求访问系统资源,该请求将被强制访问控制模块截获。强制访问控制模块从用户请求中取出访问控制相关的主体、客体、操作三要素信息,然后查询全局主/客体列表,得到主/客体的标记信息。进而依据强制访问控制策略对该请求实施策略符合性检查。如果该请求符合系统强制访问控制策略,则系统将允许该主体执行资源访问。否则,系统将进行级别改变审核,即依据级别改变检查策略,判断发出该请求的主体是否有特权访问该客体。如果上述检查通过,系统同样允许该主体执行资源访问,否则,该请求将被系统拒绝执行。
系统强制访问控制机制在执行强制访问控制过程中,需要根据系统审计员制定的审计策略,对用户的请求及安全决策结果进行审计,并且将生成的审计信息发送到审计服务器存储,供审计员管理。
注:其具体流程参加说明书附图2。
3.强制访问控制的支撑模型:二元多级安全模型
强制访问控制机制应该建立在形式化的安全模型之上。经典的BLP模型是一个最早提出的防止敏感信息泄漏的机密性安全模型,而Biba模型是一个防止信息被非法的篡改和破坏的完整性模型。在当前复杂的计算环境下,在防止信息泄漏的基础上应该防止信息被非授权的修改,即在保护敏感信息机密性的同时保护信息的完整性,因此需要一个兼顾信息机密性和完整性的二元多级安全模型。
以下是在实现安全操作系统时,所采用的安全策略模型的形式化描述:
定义1主体、客体及操作:S为主体的集合,O为客体的集合,而A={r,w,a,e}表示主体对于客体访问方式的集合,其中r为读访问,w为写访问,a为追加写访问,e为执行访问。
定义2机密性等级集合:LC为机密性等级集合,其中Cf为正整数保密级函数集合,cm>cn表示保密级cm大于保密级cn。Kc={k1,k2,....,kn}为非等级机密性范畴,表示k1包含于k2。定义LC上的满足偏序特性的“支配”关系≥,设l1=(c1,k1)∈Lc,l2=(c2,k2)∈Lc,l1≥l2当且仅当c1≥c2,
定义3完整性等级集合:LI为完整性等级集合,其中If为正整数完整级函数集合,im>in表示完整级im大于完整级in。Ki={k1,k2,....,kn}为非等级完整性范畴,表示k1包含于k2,设定义LI上的满足偏序特性的“支配”关系≥,l1=(c1,k1)∈Li,l2=(c2,k2)∈Li,l1≥l2当且仅当i1≥i2,
定义4系统状态:系统状态v,集合V中的元素v∈V={B×M×F×I×H}为一个系统状态,其中:
当前存取集B:对于b=(s×o×a)∈B,s∈S,o∈O,a∈A表示主体s以a的方式对于客体o进行访问;
存取控制矩阵M:M={M是矩阵|mij∈M是主体si对于客体oj的访问权限集合};
机密级等级函数F:是由三个分量组成,即f={fs,fc,fo},fs为主体最大机密级函数,fs(s)∈Lc表示主体最大机密级;fc为主体当前机密级函数,fc(s)∈Lc为主体当前机密级;fo为客体机密级函数,fo(s)∈Lc为客体机密级。
完整级等级函数I:是由三个分量组成,I={Is,Ic,Io},Is为主体最大完整级函数,Is(s)∈Li表示主体最大完整级;Lc为主体当前完整级函数,Ic(s)∈Li为主体当前完整级;Io为客体完整级函数,Io(s)∈Li为客体完整级。
客体间的层次结构H:H={h|h∈P(O)o∩属性1∩属性2}。
属性1:oiO,ojO,(oiojH(oi)H(oj)=φ);
属性2:!{o1,o2,o3,......ow}O[r(1rwor+1H(or))(ow+1o1)]
规则1:扩展自主安全
一个状态v=(b×m×f×i×h)满足可信自主安全,当且仅当
规则2:扩展简单安全
一个状态v=(b×m×f×i×h)对于主体集S,s∈S满足可信扩展简单安全,当且仅当(s,o,x)b
a)x=e;
b)x=r,并且fs(s)≥fo(o);
c)x=a,并且Is(s)≥Io(o);
d)x=w,并且fs(s)≥fo(o),Is(s)≥Io(o);
规则3:扩展读安全
一个状态v=(b×m×f×i×h)对于非可信主体Sut,s∈Sut满足扩展读安全,当且仅当(s,o,r)b
a)fc(s)≥fo(o),Ic(s)≤Io(o);
b)fc(s)≥fo(o),Ic(s)>Io(o),if s∈St;
c)fc(s)<fo(o),Ic(s)≤Io(o),if s∈St;
规则4:扩展追加写安全
一个状态v=(b×m×f×i×h)对于非可信主体Sut,s∈Sut满足扩展读安全,当且仅当(s,o,a)b
a)fc(s)≤fo(o),Ic(s)≥Io(o),if s∈St;
b)fc(s)>fo(o),Ic(s)≥Io(o),if s∈St;
c)fc(s)≤fo(o),Ic(s)<Io(o),if s∈St;
规则5:扩展写安全
一个状态v=(b×m×f×i×h)对于非可信主体Sut满足扩展写安全,当且仅当
a)fc(s)=fo(o),Ic(s)=Io(o);
b)fc(s)=fo(o),Ic(s)<Io(o),if s∈St;
c)fc(s)=fo(o),Ic(s)>Io(o),if s∈St;
d)fc(s)>fo(o),Ic(s)=Io(o),if s∈St;
e)fc(s)<fo(o),Ic(s)=Io(o),if s∈St。

说明书全文

(一)技术领域

强制访问控制机制的实施方法属于安全操作系统设计与实现领域,是信息安全的核心技术之一。

(二)背景技术

操作系统是应用软件同系统硬件接口,其目标足高效地、最大限度地、合理地使用计算机资源。而安全操作系统是增强安全机制与功能,保障计算资源使用的保密性,完整性和可用性。如果没有安全操作系统的支持,数据库就不可能具有存取控制的安全可用性,就不可能有网络系统的安全性,也不可能有应用软件信息处理的安全性。因此,安全操作系统是整个信息系统安全的基础,缺少安全操作系统的保护,整个系统的安全就如同建立在沙滩上的堡垒。

许多经典文献指出,当前主流操作系统的不安全的主要原因也是由于缺少强制访问控制机制。强制访问控制机制是安全操作操作系统的重要的安全功能之一,是否具备该功能,也是高安全等级操作系统和低安全等级操作系统重要区别之一。在GB17859-1999《计算机信息系统安全保护等级划分准则》中,要求符合第三级安全标记保护级要求的系统具有强制访问控制功能,并且强制访问控制的实施需要提供有关强制访问控制模型、数据标记、以及主体和客体非形式化描述。更近一步,在第四级结构化保护级的系统中,要求可信计算基建立在一个形式化模型之上,并且强制访问控制的范围扩到系统中所有的主体和客体。GB/T20271-2006《信息安全技术操作系统安全技术要求》是国内最新的安全操作系统国家标准,其采用了ISO/IEC15408-1999《信息技术安全技术信息技术安全评估通用准则》中安全功能要求和安全保证要求的思想对于安全操作系统等级进行了划分,其对于强制访问控制从策略,功能,范围,粒度和环境五个方面对于强制访问控制进行了一般性的规定,并描述了可使用的安全策略模型,包括:保密性多级安全模型,完整性多级安全模型以及基于色的访问控制模型。

当前,大多数商业公司和研究机构都是基于Linux内核(Kernel)来开发安全操作系统的,并设计和实现强制访问控制机制,因为Linux是一个开放源码(Open Source)的操作系统,研究者可以深入到内核,拥有更大的自主阅读和修改权限。而通常所采用的方法为修改Kernel中进程管理,文件系统等模中关键的系统调用,在其中插入相应的钩子函数,来实施某种特定的安全策略。尽管这种方法能够完成强制访问控制功能,但是这样做比较困难。一是这种方法对于系统开发人员素质要求较高,必须深入到内核,读懂关键的系统调用,这是一件困难的工作;二是,这种方法工作量较大,内核中系统调用需要修改的地方较多,较为琐碎,容易产生混乱,影响开发速度和进程。

随着对于安全操作系统研究的不断深入以及对于开发出高安全等级操作系统迫切需求,研究者提出了一个基于Linux内核通用访问控制框架LSM(Linux Security Module),它为开发者提供了一个较低的技术开发槛,本专利给出了如何利用该框架进行安全操作系统中强制访问机制的设计与开发的技术路线。

(三)发明内容

高安全等级操作系统中通常具有强制访问控制机制,根据全局的访问控制策略进行主体对于客体的访问授权是强制访问控制最显著的特征。

本发明从四个方面:即安全体系结构、流程、支撑模型以及关键钩子和数据结构对于强制访问控制机制在安全操作系统中的实施方法进行了说明。这为构造大型、复杂、安全的应用信息系统提供了保障,并在电子商务、电子政务和电子金融等信息系统中有着广泛而重要的应用。

作为后续讨论的基础,首先明确几个重要的概念。

3.1几个基本概念

安全操作系统(Security Operating System):能对所管理的数据与资源提供适当的保护级、有效地控制硬件与软件的操作系统。就安全操作系统的形成方式而言,一种是从系统开始设计时就充分考虑到系统的安全性的安全设计方式。另一种是基于一个通用的操作系统,专门进行安全性改进或增强的安全增强方式。安全操作系统在开发完成后,在正式投入使用之前,都要求通过相应的安全性测评。

操作系统安全性(Security of Operating System):操作系统具有或应具有的安全功能,比如存储保护、运行保护、标识与鉴别、访问控制、安全审计。

可信计算基(Trusted Computing Base):简称TCB,是计算机系统内保护装置的总体,包括硬件、软件、固件和负责执行安全策略的组合体。它建立了一个基本的保护环境并提供了一个可信计算系统所要求的附加用户服务。

安全策略(Security Policy):对TCB中资源进行管理、保护和分配的一组规则。简单的说,就是用户对于安全需要的描述。一个TCB中可以有一个或多个安全策略。

安全模型(Security Model):用形式化方法来描述如何实现系统的机密性、完整性和可用性等安全要求。

主体(Subject):是这样的一种实体,它引起信息在客体之间的流动。通常,这些实体是指人、进程或设备等。

客体(Object):系统中被动的主体行为承担者。对一个客体的访问隐含着对其所含信息的访问,客体的类型有记录、程序块、页面、段、文件、目录等。

访问控制(Access Control):限制已授权的用户、程序、进程、或计算机网络中其它系统访问本系统资源的过程。

强制访问控制(Mandatory Access Control):用于将系统中的信息分密级和类进行管理,以保证每个用户只能够访问那些被标明可以由他访问的信息的一种访问约束机制。

自主访问控制(Discretionary Access Control):用来决定一个用户是否有权限访问此客体的一种访问约束机制,而该客体的所有者可以按照自己意愿指定系统中其它用户对此客体访问的权限。

敏感标记(Sensitivity Label):用以表示主体或客体安全级别并描述客体数据敏感性的一组信息。在可信计算基中把敏感标记作为强制访问控制决策的依据。

LSM(Linux Security Module):是Linux系统中一个灵活的、通用的访问控制框架,通过提供一系列关于程序执行(Program Execution)、文件系统(FileSystem)、节点(Inode)、文件(File)、进程(Task)、进程问通信(IPC)等方面的钩子函数接口,而由用户重写相应的安全策略。

3.2安全体系结构

开发安全操作系统首先要确定其安全体系结构,通常它包括以下几个方面的关键内容:

1)详细描述了系统中安全相关的所有方面;这包括系统可能提供的所有安全服务以及保护系统安全的所有安全措施,描述方式可以采用自然语言也可以用形式化语言;

2)提出了指导设计的基本原理;根据系统设计的要求以及工程设计的理论和方法,明确系统设计的各个方面的基本原则;

3)在一定的抽象层次上描述各个安全相关模块之间的关系。这可以用逻辑关系图表达。这在抽象层次上按满足安全需求的方式描述了系统关键元素之间的关系;

4)提出了开发过程中的基本框架及对应于该框架的层次结构;显然,安全体系结构在整个开发过程中了扮演了指导者的角色,确立它的中心地位,所有开发者在开发前需要对于安全体系必须达成共识,并在开发过程中自觉服从于安全体系结构。

说明书的中强制访问控制机制是项目Linux高安全等级操作系统的重要安全功能之一,整个安全操作系统系统由下到上分为四个层次:即驱动层,内核层,系统层和应用层,其主要包括:强制访问控制执行模块、标记管理模块、管理信息处理模块,安全初始化模块以及存储介质加密保护模块,整个系统的模块结构划分以及模块之间的关系见图1(见说明书附图1),图1是Linux安全操作系统中模块划分图,系统的强制访问控制功能主要是由强制访问控制执行模块,标记管理模块以及管理信息处理模块共同完成的。

下面分别描述各模块的功能:

1.强制访问控制执行模块:强制访问控制执行模块在系统调用接口位置截取系统执行流程,并顺序执行以下功能:

●调用标记管理模块完成系统中主客体的标识和强制访问控制验证工作。

●根据标记管理模块返回的函数调用结果,对系统调用行为进行裁决。

●根据裁决的结果,提取该次行为的审计信息,并将其发送到管理信息处理模块。

●对被裁决为非法访问的行为,进行返回处理,并返回系统错误信息给应用子系统。

2.标记管理模块:标记管理模块在系统内核层执行,完成如下一些安全功能:

●根据管理信息处理模块提供的强制访问控制包,建立内核用户安全列表、客体安全列表和特权安全列表。

●在系统执行创建新主体(fork,exec)和创建新客体(open,create)的操作时,从安全列表中查找对应的安全标记,并与主体/客体绑定。

●在系统执行访问时,根据强制访问控制执行模块提供的主体/客体标记,对访问是否符合强制访问控制进行判决,如果判决允许,则返回允许结果给强制访问控制执行模块。

●对不符合强制访问控制的访问,判断主体是否具有该客体的执行特权,如符合该特权,则返回特权允许信息给强制访问控制执行模块,否则返回禁止访问结果。

3.管理信息处理模块:管理信息处理模块处理与安全管理相关的信息收发、筛选,包括强制访问控制模块的接收和审计模块的发送,具体功能如下:

●接收安全管理中心发送的下拉安全管理策略数据包,检查其可信性,即完整性,而后将其解密后发送给标记管理模块。

●接收强制访问控制处理模块中获取的审计信息,对其进行分类筛选,并根据其优先级次序将审计信息发送给审计子系统。

●对需要完整性验证的客体访问操作,当标记管理模块返回不确定结果时,强制访问控制执行模块向管理信息处理模块发送对应审计信息,由管理信息处理模块的完整性验证进程执行完整性验证功能,并将结果向标记管理模块发送,然后通知强制访问控制执行模块。

●对网络访问控制行为,当标记管理模块返回不确定结果时,强制访问控制执行模块向管理信息处理模块发送对应审计信息或执行完整性验证功能,管理信息处理模块据此组织可信接入申请数据包,并向对应的安全节点子系统发送,而后获取对应节点的可信接入应答数据包,返回可信接入确认数据包,然后通知强制访问控制执行模块。

4.安全初始化模块:安全初始化模块完成功能如下:

●系统从启动到正常运行过程中基于完整性度量的可信链建立,包括TPCM模块对BIOS的完整性检查,BIOS对可信引导程序的完整性检查,可信引导程序对可信初始系统的完整性检查,可信初始系统对运行环境的完整性检查。

●在系统引导过程中,执行系统用户开机检查功能,为系统的启动分配初始主体信息。

5.存储介质加密保护模块:存储介质加密保护模块对文件系统向存储介质的读写操作执行文件粒度的加密保护功能,防止绕过系统TCB机制对存储介质的直接访问行为导致泄密事故。

3.3强制访问控制流程

系统在初始化过程中,安全管理中心需要对系统中的所有主体和客体实施身份管理、标记管理、授权管理和策略管理。身份管理是确定系统中的所有合法用户的身份、工作密钥、证书等与安全相关的内容。标记管理是根据业务系统的需要,结合客体资源的重要程度,确定系统中所有客体资源的安全级,生成全局客体标记列表,同时根据用户在业务系统中的权限和角色确定主体的安全标记,生成全局主体标记列表。授权管理是根据系统需求和安全状况,授予用户访问客体资源能的权限,生成强制访问控制列表和特权列表。策略管理则是根据节点系统的需求,生成和执行主体相关的策略,包括强制访问控制策略、级别改变检查策略等,供节点系统执行。除此之外,系统审计员需要通过安全管理中心制定系统审计策略,实施系统的审计管理。

系统初始化完成后,用户便可以请求访问系统资源,该请求将被强制访问控制模块截获。强制访问控制模块从用户请求中取出访问控制相关的主体、客体、操作三要素信息,然后查询全局主/客体列表,得到主/客体的标记信息。进而依据强制访问控制策略对该请求实施策略符合性检查。如果该请求符合系统强制访问控制策略,则系统将允许该主体执行资源访问。否则,系统将进行级别改变审核,即依据级别改变检查策略,判断发出该请求的主体是否有特权访问该客体。如果上述检查通过,系统同样允许该主体执行资源访问,否则,该请求将被系统拒绝执行。

系统强制访问控制机制在执行强制访问控制过程中,需要根据系统审计员制定的审计策略,对用户的请求及安全决策结果进行审计,并且将生成的审计信息发送到审计服务器存储,供审计员管理。

图2是强制访问控制实施流程图(见说明书附图2),其给出了系统中强制访问控制执行的流程。

3.4支撑模型

强制访问控制机制应该建立在形式化的安全模型之上。经典的BLP模型是一个最早提出的防止敏感信息泄漏的机密性安全模型,而Biba模型是一个防止信息被非法的篡改和破坏的完整性模型。在当前复杂的计算环境下,在防止信息泄漏的基础上应该防止信息被非授权的修改,即在保护敏感信息机密性的同时保护信息的完整性,因此需要一个兼顾信息机密性和完整性的二元多级安全模型。

以下是在实现安全操作系统时,所采用的安全策略模型的形式化描述:

定义1主体、客体及操作:S为主体的集合,O为客体的集合,而A={r,w,a,e}表示主体对于客体访问方式的集合,其中r为读访问,w为写访问,a为追加写访问,e为执行访问。定义2机密性等级集合:LC为机密性等级集合,其中Cf为正整数保密级函数集合,cm>cn表示保密级cm大于保密级cn。Kc={k1,k2,.....,kn}为非等级机密性范畴,表示k1包含于k2。定义LC上的满足偏序特性的“支配”关系≥,设l1=(c1,k1)∈Lc,l2=(c2,k2)∈Lc,l1≥l2当且仅当c1≥c2,定义3完整性等级集合:LI为完整性等级集合,其中If为正整数完整级函数集合,im>in表示完整级im大于完整级in。Ki={k1,k2,.....,kn}为非等级完整性范畴,表示k1包含于k2,设定义LI上的满足偏序特性的“支配”关系≥,l1=(c1,k1)∈Li,l2=(c2,k2)∈Li,l1≥l2当且仅当i1≥i2,

定义4系统状态:系统状态v,集合V中的元素v∈V={B×M×F×I×H}为一个系统状态,其中:

当前存取集B:对于b=(s×o×a)∈B,s∈S,o∈O,a∈A表示主体s以a的方式对于客体o进行访问;

存取控制矩阵M:M={M是矩阵|mij∈M是主体si对于客体oj的访问权限集合};

机密级等级函数F:是由三个分量组成,即f={fs,fc,fo},fs为主体最大机密级函数,fs(s)∈Lc表示主体最大机密级;fc为主体当前机密级函数,fc(s)∈Lc为主体当前机密级;fo为客体机密级函数,fo(s)∈Lc为客体机密级。

完整级等级函数I:是由三个分量组成,I={Is,Ic,Io},Is为主体最大完整级函数,Is(s)∈Li表示主体最大完整级;Ic为主体当前完整级函数,Ic(s)∈Li为主体当前完整级;Io为客体完整级函数,Io(s)∈Li为客体完整级。

客体间的层次结构H:H={h|h∈P(O)O⌒属性1⌒属性2}。

属性1:oiO,ojO(oiojH(oi)H(oj)=φ);

属性2:!{o1,o2,o3,......ow}O[r(1rwor+1H(or))(ow+1o1)]

规则1:扩展自主安全

一个状态v=(b×m×f×i×h)满足可信自主安全,当且仅当(si,oj,x)bxMij;

规则2:扩展简单安全

一个状态v=(b×m×f×i×h)对于主体集S,s∈S满足可信扩展简单安全,当且仅当

(s,o,x)b

a)x=e;

b)x=r,并且fs(s)≥fo(o);

c)x=a,并且Is(s)≥Io(o);

d)x=w,并且fs(s)≥fo(o),Is(s)≥Io(o);

规则3:扩展读安全

一个状态v=(b×m×f×i×h)对于非可信主体Sut,s∈Sut满足扩展读安全,当且仅当

(s,o,r)b

a)fc(s)≥fo(o),Ic(s)≤Io(o);

b)fc(s)≥fo(o),Ic(s)>Io(o),if s∈St;

c)fc(s)<fo(o),Ic(s)≤Io(o),if s∈St;

规则4:扩展追加写安全

一个状态v=(b×m×f×i×h)对于非可信主体Sut,s∈Sut满足扩展读安全,当且仅当

(s,o,a)b

a)fc(s)≤fo(o),Ic(s)≥Io(o),if s∈St;

b)fc(s)>fo(o),Ic(s)≥Io(o),if s∈St;

c)fc(s)≤fo(o),Ic(s)<Io(o),if s∈St;

规则5:扩展写安全

一个状态v=(b×m×f×i×h)对于非可信主体Sut满足扩展写安全,当且仅当

a)fc(s)=fo(o),Ic(s)=Io(o);

b)fc(s)=fo(o),Ic(s)<Io(o),if s∈St;

c)fc(s)=fo(o),Ic(s)>Io(o),if s∈St;

d)fc(s)>fo(o),Ic(s)=Io(o),if s∈St;

e)fc(s)<fo(o),Ic(s)=Io(o),if s∈St;

3.5数据结构和钩子函数

//强制访问控制标记

typedef struct tagMAC_Label

{

    BYTE ConfLevel;    //保密级别

    BYTE InteLevel;   //完整级别

    BYTE SecClass[8];  //主/客体机密性范畴

    BYTE InteClass[8]; //主/客体完整性范畴

}_attribute_((packed))MAC_LABEL;

//系统主体标记数据结构

typedef struct tagSubjectLabel

{   V_String SubName;    //主体名称

    V_String GroupName;  //主体组名称

    MAC_LABEL SubLabel;  //主体强制访控标识

    BYTE SubType;        //主/客体类型

  } _attribute_((packed))SUB_LABEL;

//系统客体标记数据结构

typedef struct tagObjectLabel

{   V_String  ObjName;   //客体名称

    MAC_LABEL ObjLabel;  //客体强制访控标识

    BYTE      ObjType;   //客体类型

    DWORD     CheckSum;  //客体校验值

}_attribute_((packed))OBJ_LABEL;

强制访问判断函数:

这是我们系统中的一个关键函数,该函数的在是对于上述安全支撑策略的在编程级别的一个实现。

int label_mac_verify(SUB_LABEL*sub)_label,OBJ_LABEL*obj_label,

      BYTE mode)

{  BYTE test_mode;

   test_mode=0;

   //如果双方处于不同域,则返回自主访问控制失败

   if(sub_label->SubLabel.SecClass==

      obj_label->ObjLabel.SecClass)

      return VERIFY_DAC_FAILED;

   //如果主体保密级别不低于客体级别,主体完整级别不高于

   //客体级别,则主体可读客体.

   if(sub_label->SubLabel.ConfLevel>=

      obj_label->ObjLabel.ConfLevel)

   {

      if(sub_label->SubLabel.InteLevel<=

         obj_label->ObjLabel.InteLevel)

      {

         test_mode|=OPERATION_TYPE_READ;

      }

    }

    //如果主体保密级别不高于客体级别,主体完整级别不低于

    //客体级别,则主体可写客体.

    if(sub_label->SubLabel.ConfLevel<=

       obj_label->ObjLabel.ConfLevel)

    {

       if(sub_label->SubLabel.InteLevel>=

          obj_label->ObjLabel.InteLevel)

    {

       test_mode|=OPERATION_TYPE_WRITE;

    }

}

//如果主体保密级别不低于客体保密级别,主体完整级别不高于客体级别,

//则主体可执行客体.

if(sub_label->SubLabel.ConfLevel>=

   obj_label->ObjLabel.ConfLevel)

{

   if(sub_label->SubLabel.InteLevel<=

      obj_label->ObjLabel.InteLevel)

   {

   test_mode|=OPERATION_TYPE_EXEC;

   }

   //检查操作是否与权限一致

   if((mode&test_mode)!=mode)

     return VERIFY_MAC_FAILED;

   return VERIFY_MAC_SUCCESS;

}

下表1给出了对于系统中文件进行强制访问控制中所选取的钩子函数及说明。

  钩子函数名称 功能说明   int*inode_alloc_security(struct inode*inode) 分配一个安全结构并将指针指向inode->i_security。当初次创建inode结构时,安全结构被初始化为NULL。   void*inode_free_security(struct inode*inode) 撤销并清空inode->i_security结构。   static int os210_inode_create(struct inode  *inode.struct dentry*dentry,int mask) 创建一个普通文件时检查权限。   static int os210_inode_mkdir(struct inode  *inode,struct dentry*dentry,int mask) 设置一个新创建的目录的安全属性。   int*inode_link(struct dentry*old_dentry,  struct inode*dir,struct dentry*new_dentry) 在创建一个文件新的硬链接前检查权限。   int*inode_unlink(struct inode*dir,struct  dentry*dentry) 在删除一个文件硬链接前检查权限。   int*inode_symlink(struct inode*dir,struct  dentry*dentry,const char*old_name) 在创建一个文件的符号链接前检查权限。   int*inode_mknod(struct inode*dir,struct  dentry*dentry,int mode,dev_t dev) 检查创建一个特殊文件(或socket、fifo文件)的权限。如果mknod操作是用于一个普通文件,就会调用creat钩子,而不是这个钩子。

  钩子函数名称 功能说明   static int os210_inode_rmdir(struct inode  *inode,struct dentry*dentry) 检查删除目录的权限。   static int os210_inode_rename(struct inode  *old_inode,struct dentry*old_dentry,struct  inode*new_inode,struct dentry*new_dentry) 检查重命名一个文件或目录权限。   static int os210_inode_setattr(struct dentry  *dentry,struct iattr*iattr) 在设置文件属性前检查权限。只要文件属性发生改变(如文件被截尾,改变文件属主、改变文件模式、传送磁盘配额等),核心就会在多个位置调用notify_change。   static int os210_inode_getattr(struct vfsmount  *mnt,struct dentry*dentry) 检查是否允许读文件属性。

  钩子函数名称 功能说明   static int os210_file_permission(struct file*file,  int mask) 在访问一个打开文件之前检查文件的权限。各种读写文件的操作都会调用这个钩子。一个安全模块可以用这个钩子对读写操作进行附加的检查,例如可以使用重新生效权限来支持特权分类或策略改变。这个钩子是在真正执行读/写操作时才使用的,而inode_security_ops是在文件打开时被调用。尽管这个钩子可以被各种执行文件读写操作的系统调用用来重新验证访问权限,但是它无法解决内存映射文件的权限重新验证的问题。   int*file_alloc_security(struct file*file) 分配一个安全结构并将指针指向file->f_security。当初次创建file结构时,安全结构被初始化为NULL。   void*file_free_security(struct file*file) 撤销并清空file->f_security结构。

表1  钩子函数及功能说明

3.6优点和积极效果

3.6.1通用性好

LSM能够支持当前广泛当前使用的Linux各个内核版本,并且在更高级的Linux内核版本中为必选项目。

3.6.2灵活性好

可以根据当前的安全需求和安全策略,重写钩子函数,来实现不同的安全目标,例如,能够支持单一的机密性目标或完整性目标,或同时支持机密性和完整性目标。

3.6.3效率高

相关实验和性能测试表明,使用LSM钩子函数对于系统的开销影响不大。

3.6.3易于使用和开发

由于不是在安全操作系统内核级开发,对于开发者的门槛要求比较低,可以通过模块的形式进行挂载和卸载。

(四)具体实施方式

本发明阐述了一种安全操作系统强制访问控制机制的实施方法,它基于Linux安全模块(Linux Security Module)框架,包括4个部分:安全体系结构、强制访问控制流程、强制访问控制策略模型、关键的数据结构。通过这四个部分,就可以勾勒出一个实施强制访问控制的大体框架。该方法具有:通用性好、灵活性好,效率高和易于使用和开发的优点。

高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈