一种授权体系、构成方法及针对给定系统的安全评测方法与流程

文档序号:23651313发布日期:2021-01-15 13:47阅读:96来源:国知局
一种授权体系、构成方法及针对给定系统的安全评测方法与流程

本申请涉及信息技术领域,特别涉及一种完全消除了ddcas的操作系统授权体系及其构成方法,以及以此构成方法为参照标准对给定操作系统授权体系的安全评测方法,以及根据评测结果改造给定操作系统授权体系使其有能力抵御超越授权攻击的解决方案。



背景技术:

现阶段没有针对计算机攻击进行明确的定义,基于现代的cpu架构和操作系统架构,无法完全杜绝针对操作系统成功实施超越授权攻击的现象。

攻击者可以转变超越授权的状态,进行诸如以下操作:

1、超越授权读取用户数据(包括内存和外设的数据)。

2、超越授权写入(包括篡改、删除)用户数据。

3、超越授权执行系统调用。

4、超越授权执行应用程序。



技术实现要素:

针对超越授权攻击层出不穷的问题,本发明提供了一种消除直接转变授权状态的缺陷的授权体系,并在此基础上,进一步公开了授权体系的构成方法、以构成方法为参照标准的一种对给定授权体系的安全评测方法和一种改造给定授权体系以使其有能力抵御超越授权攻击的解决方案。

一种消除直接转变授权状态的缺陷的授权体系,其特征在于:

所述授权体系包括:授权基础层、授权提供层和授权检查层;

所述授权基础层,包括:剥夺用户程序访问其他用户资源的能力,同时用户程序和内核之间只能依赖提供的双向专用通道进行转移和数据传递,以此形成用户程序对内核提供的访问能力的依赖;

所述授权提供层,包括:依赖提供的功能受限、使用可控的原子授权操作;

所述授权检查层,包括:提供符合授权规则的授权检查程序,并且,用户必须接受所述检查程序进行授权检查,无法改变授权相关要素。

所述转变授权状态是指攻击者从只能访问授权体系允许其访问的授权资源的状态,转变为随时有能力访问授权体系禁止其访问的授权资源的状态;

所述直接转变授权状态的缺陷简称为ddcas;

所述可直接转变授权状态的缺陷就是直接转变授权状态的必要条件;

进一步的,确保用户只能依赖所述原子授权操作进行访问,无法改变授权相关要素。

所述超越授权攻击是指:攻击者未经授权体系允许,访问禁止其访问的操作系统授权资源。

特别的,在本发明中,转变授权状态也可称为改变授权状态,相应的,所述直接转变授权状态的缺陷也可称为直接改变授权状态的缺陷。

特别的,所述授权体系可用于操作系统,成为一种操作系统授权体系。

进一步的,为解决针对操作系统超越授权攻击层出不穷的技术问题,针对操作系统,特别是现代操作系统,本发明公开一种完全消除了ddcas的操作系统授权体系a1,

进一步的,所述授权体系a1的构成方法b1,

进一步的,以构成方法b1为参照标准公开一种对给定授权体系的安全评测方法c1,

进一步的,根据安全评测结果公开一种改造给定授权体系使其有能力抵御一切超越授权攻击的解决方案d1。

所述操作系统授权体系a1,进一步包括:

所述授权体系包括:授权基础层、授权提供层和授权检查层;

所述授权基础层,包括:完全剥夺了用户程序访问其他用户资源的能力,同时用户程序和内核之间只能依赖提供的双向专用通道进行转移和数据传递,以此形成用户程序对内核提供的访问能力的完全依赖;

所述授权提供层,包括:提供的功能受限、使用可控的原子授权操作,并且,确保用户只能依赖所述原子授权操作进行访问,无法改变授权相关要素;

所述授权检查层,包括:提供符合授权规则的授权检查程序,并且,用户必须接受所述检查程序进行授权检查,无法改变授权相关要素。

所述原子授权操作是指内核为一类授权对象提供的一项配套授权操作。

所述构成方法b1,进一步包括:

针对操作系统的超越授权攻击,将操作系统授权体系划分为三个层,分别是:授权基础层、授权提供层和授权检查层,其中如果授权基础层构成内容无效,后面两层构成内容也都会无效,而授权提供层构成内容无效,授权检查层构成内容也会无效。

所述无效是指该层存在可直接转变授权状态的缺陷。

所述授权基础层的构成方法,进一步包括:剥夺用户程序访问其他用户资源的全部能力的实现方法b1-1,提供双向专用通道,迫使用户只能依赖此通道,在用户程序和内核之间进行转移和数据传递的实现方法b1-2;

进一步的,所述剥夺用户程序访问其他用户资源的能力,是指剥夺用户程序访问超出自身代码、数据之外的所有主机、外设资源的能力。

所述的实现方案b1-1,进一步包括:剥夺用户程序访问超出自身代码、数据之外主机资源的能力的实现方案b1-1-1,和/或,剥夺用户程序访问外设资源的能力的实现方案b1-1-2,

所述的实现方案b1-1-1,进一步包括:

步骤1:通过软件设计为不同用户程序以及内核程序在主机中设置隔离区域,通过增设的处理器装置认定隔离区域边界,确保隔离区域之间彼此不能互访;

优选的,所述主机包括cpu、内存;

优选的:把不同用户程序和内核程序分别置于独立的线性地址空间中,同时更改指令集架构中所有涉及特权级转换的指令或硬件机制;

优选的,所述更改是指:当需要改变内核态、用户态时,硬件同时自动切换一级页表基地址存储装置的值,确保切换正确;

所述更改的目的是当需要改变内核态、用户态时,硬件同时自动切换一级页表基地址存储装置的值,确保切换正确,以此利用线性地址空间有自然的寻址边界的属性,将不同的进程和内核置于不同的线性地址空间,从而导致置于任何一个线性地址空间的程序均无法写出有效的超出其所在线性地址空间的寻址指令,利用线性地址空间的隔离和封闭特性剥夺了用户程序在线性地址空间层面直接访问其他用户程序的能力;

优选的:在内核中建立隔离区域,增设处理器装置认定隔离区域边界,在一个隔离区域对应的线性地址空间中只能有一种特权级;以此确保内核程序无法任意转移到用户程序,再由用户程序以内核特权级转移到内核去执行,剥夺了用户程序在线性地址空间层面直接访问其他用户程序的能力,

优选的:基于硬件提供的分页机制,利用分页机制的正确映射保证与线性地址空间的逻辑一致,

和/或,

步骤2:通过增设的处理器装置,确保用户程序只能执行用户特权的指令且没有能力更改指令执行权限,

优选的:基于特权指令剥夺用户程序在自身所属区域另行建造可能影响其他用户程序的数据结构和相关的访问能力,使用户程序只能在低特权区域执行非特权指令,无法再造类似内核的功能,和/或,

步骤3:对步骤1和步骤2所涉及计算机硬件实现设计进行验证,确保其实现设计与功能设计一致,优选的:验证方式为形式化验证,和/或,

步骤4:对步骤1和步骤2所涉及计算机软件实现设计进行验证,确保其运行时执行结果与功能设计一致,优选的:验证方式为形式化验证,和/或,

步骤5:在内核中建立隔离区域并预留端口,增设处理器装置认定隔离区域边界和端口,将步骤1和步骤2所涉及的数据结构和专用程序置于隔离区域中,通过装置确保隔离区域内外只能通过端口交互,其余一律禁止,以此实现它们在运行时不会随意转移、数据不会被破坏,时刻与软件设计要求保持一致,和/或,

步骤6:制作专用源代码扫描工具对内核源代码进行扫描,确保除设计者指定之外,不能拥有步骤1和步骤2所涉及处理器装置设置指令,和/或,

步骤7;建立专用内存区域,增设处理器装置认定该区域,将内存页面使用属性信息及相关设置程序置于其中,避免外部干扰破坏,确保内存页面使用与设计保持一致,从而进一步确保步骤1和步骤2涉及程序不被破坏。

所述的实现方案b1-1-2,进一步包括:

步骤1:通过软件设计为内核程序设置专用的外设访问隔离区域,通过增设的处理器装置认定隔离区域边界,确保用户程序没有能力访问该区域,和/或,

步骤2:通过增设的处理器装置控制用户程序外设访问能力,确保用户程序在自己的隔离区域中,没有能力进行外设访问,和/或,

步骤3:通过增设的处理器装置控制用户程序指令执行能力,确保用户程序没有能力设置步骤1和步骤2所涉及软硬件设置,和/或,

步骤4:对步骤1、步骤2和步骤3所涉及计算机硬件实现设计进行验证,确保其实现设计与功能设计一致,优选的:验证方式为形式化验证,和/或,

步骤5:对对步骤1、步骤2和步骤3所涉及计算机软件实现设计进行验证,确保其运行时执行结果与功能设计一致,优选的:验证方式为形式化验证,和/或,

步骤6:在内核中建立隔离区域并预留端口,增设处理器装置认定隔离区域边界和端口,将对步骤1、步骤2和步骤3所涉及的数据结构和专用程序置于隔离区域中,通过装置确保隔离区域内外只能通过端口交互,其余一律禁止,以此实现它们在运行时不会随意转移、数据不会被破坏,时刻与软件设计要求保持一致,和/或,

步骤7:制作专用源代码扫描工具对内核源代码进行扫描,确保除设计者指定之外,不能拥有步骤1、步骤2和步骤3所涉及处理器装置设置指令,和/或,

步骤8;建立专用内存区域,增设处理器装置认定该区域,将内存页面使用属性信息及相关设置程序置于其中,避免外部干扰破坏,确保内存页面使用与设计保持一致,从而进一步确保步骤1、步骤2和步骤3涉及程序不被破坏。

所述的实现方法b1-2,进一步包括:

步骤1:根据用户需求通过软件设计用户程序与内核程序之间的交互通道,通过增设处理器装置认定双向专用通道,以此迫使用户程序只能通过通道与内核之间相互转移和数据传递,而且用户程序只能根据软件设计对通道的使用进行选择,和/或,

步骤2:增设处理器装置,确保用户程序没有能力对通道的设置进行更改,优选的:用户程序无法更改通道的入口,和/或,

步骤3:对步骤1和步骤2所涉及计算机硬件实现设计进行验证,确保其实现设计与功能设计一致,优选的:验证方式为形式化验证,和/或,

步骤4:对步骤1和步骤2所涉及计算机软件实现设计进行验证,确保其运行时执行结果与功能设计一致,优选的:验证方式为形式化验证,和/或,

步骤5:在内核中建立隔离区域并预留端口,增设处理器装置认定隔离区域边界和端口,将步骤1和步骤2所涉及的数据结构和专用程序置于隔离区域中,通过装置确保隔离区域内外只能通过端口交互,其余一律禁止,以此实现它们在运行时不会随意转移、数据不会被破坏,时刻与软件设计要求保持一致,和/或,

步骤6:制作专用源代码扫描工具对内核源代码进行扫描,确保除设计者指定之外,不能拥有步骤1和步骤2所涉及处理器装置设置指令,和/或,

步骤7;建立专用内存区域,增设处理器装置认定该区域,将内存页面使用属性信息及相关设置程序置于其中,避免外部干扰破坏,确保内存页面使用与设计保持一致,从而进一步确保步骤1和步骤2涉及程序不被破坏。

所述授权提供层的构成方法,进一步包括:提供功能受限、使用可控的原子授权操作,具体包括:确保提供的原子授权操作软件设计要符合授权规则的实现方案b1-3,和/或,确保提供的原子授权操作运行时不能改变授权相关要素中任何一个的实现方案b1-4。

所述授权相关要素构成,优选的:包括用户要素、授权操作要素、授权操作对象要素这三个要素。所有与授权相关的操作都围绕授权相关要素展开。

所述原子授权操作(简称aao)是指内核为一类授权对象提供的一项配套授权操作。例如,对普通文件的读操作。进一步的,所述原子授权操作的功能逻辑在程序上体现为对应的执行序拓扑结构(简称tseo)。

所述实现方案b1-3,进一步包括:确保提供的原子授权操作中不存在设计者未知的违反授权规则的设计的实现方案b1-3-1,和/或,确保在已知的原子授权操作中所有软件设计都符合授权规则的实现方案b1-3-2,

优选的:只用用户真实id信息作为授权检查时判断用户要素的唯一依据,确保用户身份和他对应的被允许访问的授权信息始终保持一致;

进一步的,当用户确实需要访问在正常情况下禁止其访问的其他用户资源时,可以用委托方式访问授权资源,以此避免由于用户临时提升权限而扩大访问范围。

所述委托访问授权资源,进一步包括:用户以进程间通信的方式,向其他用户进程提出访问其授权资源的申请,由其他用户进程判断申请是否合法,如合法则访问授权资源并将结果返回给提出申请的用户,否则把错误信息返回。

所述的实现方案b1-3-1,进一步包括:消除原子授权操作代码中隐藏的代码及执行序分支的实现方案b1-3-1-1,和/或,消除合法引入的外源代码中隐藏的违反授权规则及破坏授权基础的代码所造成危害的实现方案b1-3-1-2。

所述的实现方案b1-3-1-1,进一步包括:制作专用源代码扫描工具,用以扫描提供原子授权操作代码中隐藏的代码及执行序分支,并予以消除。

所述的实现方案b1-3-1-2,进一步包括:为合法引入的外源代码(如驱动),在内核中建立隔离区域及区域端口,增设处理器装置认定区域边界及端口,迫使其只能通过端口与外界交互,其余交互处理器报异常,以此确保既不影响合成原子授权操作,又可以有效的排斥不符合端口匹配规则的非法操作及传递非法参数。同时,制作专用扫描工具,用以扫描外源代码中隐藏的可以涉及授权基础层增设处理器装置的指令以及用于外设访问的指令或用于与外设建立映射关系的指令,并予以清除,避免其内部直接破坏授权基础。

所述实现方案b1-4,进一步包括:消除导致运行时原子授权操作之间相互转移的最大因素实现方案b1-4-1,和/或,保护原子授权操作代码运行时不被破坏的实现方案b1-4-2,和/或,运行时阻止原子授权操作之间相互转移的实现方案b1-4-3,和/或,运行时防止原子授权操作边界改变的实现方案b1-4-4,和/或,运行时保护内存及外设中授权数据的实现方案b1-4-5。

所述实现方案b1-4-1,进一步包括:建立专用内存区域,增设处理器硬件认定内存区域以及控制该内存区域的指令读写能力,用以保存函数、中断返回地址,指令指针的原件确保正确使用,从而消除导致运行时原子授权操作之间相互转移的最大因素。

所述原件是指:符合设计原意的数值;进一步的,是指函数调用、中断产生时根据由编译器设定或指令集结构设定的返回地址值,以及由设计者设定的指令指针值。

所述实现方案b1-4-2,进一步包括:建立专用内存区域,增设处理器装置认定该区域,将内存页面使用属性信息及相关设置程序置于其中,避免外部干扰破坏,确保内存页面使用与设计保持一致,从而进一步确保原子授权操作代码不被破坏。

所述实现方案b1-4-3,进一步包括:建立内存隔离区域,增设处理器装置认定该区域,运行时原子授权操作之间相互转移时,处理器报异常,以此避免该转移。

所述实现方案b1-4-4,进一步包括:针对所有与构建原子授权操作边界相关的组内钩子和条件分支设置边界添加检查逻辑,根据原子授权操作原意信息和当前选择的钩子或条件数据做比对,如果运行时突破了原子授权操作边界便加以阻止。

所述组内钩子,进一步包括:操作系统通常将功能相关的钩子组成一组,如果一个钩子属于某一组,我们称之为组内钩子,反之称之为组外钩子。

所述实现方案b1-4-5,进一步包括:为内存中授权数据、程序,以及外设访问程序,建立内存隔离区域及区域端口,增设处理器装置认定该区域及端口,由装置确保内外只能通过端口交互,其余交互报异常;针对外设访问程序所在隔离区域,增加装置功能,确保只有该区域能进行外设访问,其余位置都不能访问外设,以此确保对外设的访问与设计一致;同时由于访问授权数据已处于逻辑起点,运行时只能通过其自身正确性来确保与设计一致,为此需要通过验证来确保其运行时与设计一致,不会改变授权相关要素,优选的,验证方法采用形式化验证。

所述授权检查层的构成方法,进一步包括:确保授权检查程序自身正确的实现方案b1-5,和/或,确保授权检查在运行时不会改变授权相关要素的实现方案b1-6。

所述实现方案b1-5,进一步包括:由于授权检查程序已处于逻辑起点,运行时只能通过其自身正确性来确保与设计一致,为此不仅要确保其内容设计符合授权规则,还需要通过验证来确保其运行时与设计一致,不会改变授权相关要素,优选的,验证方法采用形式化验证。

所述实现方案b1-6,进一步包括:确保授权检查程序运行时不被破坏的实现方案b1-6-1,和/或,确保授权检查在运行时不被避开的实现方案b1-6-2,和/或,确保授权检查结果在运行时不会被改变的实现方案b1-6-3。

所述实现方案b1-6-1,进一步包括:为授权检查所需当前用户信息、当前用户对应授权资源信息以及授权检查代码。建立内存隔离空间和端口,增设处理器装置认定该空间和端口,迫使外界在运行时只能通过端口与之交互,其余交互方式处理器报异常,同时在系统启动的过程中,先加载授权检查程序中的代码及数据,确保与功能程序不同源,避免受到它的影响和破坏。

所述实现方案b1-6-2,进一步包括:为原子授权操作建立隔离区域及区域端口,增设处理器装置认定区域及端口,并迫使区域间转移及数据访问必须经过端口,只要在端口处设立授权检查,确保授权检查无法被避开。

所述实现方案b1-6-3,进一步包括:建立隔离区域及区域端口,增设处理器硬件认定区域及端口,把所有需要面对选择授权相关要素的程序,都存储在隔离区域中,并在端口处都设置授权检查,对于所有违背授权操作的选择,发现并进入异常处理流程。

所述方案b1-6-3确保运行时授权检查结果不会改变。

所述安全评测方法c1,进一步包括:

将给定操作系统授权体系构成分为三层,分别是给定操作系统授权体系的授权基础层、授权提供层和授权检查层,并采用方法c2,找出各层所有可直接改变授权状态的缺陷。

所述改变授权状态是指攻击者从只能访问授权体系允许其访问的授权资源的状态,转变为随时有能力访问授权体系禁止其访问的授权资源的状态。

所述可直接转变授权状态的缺陷简称为ddcas。

所述可直接转变授权状态的缺陷就是直接转变授权状态的必要条件。

所述给定操作系统授权体系的授权基础层,进一步包括:剥夺用户程序访问超出自身代码、数据之外主机资源的能力的构成内容h1,和/或,剥夺用户程序访问外设资源的能力的构成内容h2,和/或,由系统调用及返回用户空间的方式构成的双向专用通道h3。

所述h1,进一步包括:通过线性地址空间和分页剥夺用户程序访问其他用户程序的能力的构成内容h4,和/或,通过特权级、分页和特权指令剥夺用户程序访问内核的能力的构成内容h5。

所述h4,进一步包括:

s1、利用线性地址空间有自然的寻址边界的属性,操作系统将不同的进程置于不同的线性地址空间,从而导致置于任何一个线性地址空间的程序均无法写出有效的超出其所在线性地址空间的寻址指令;

s2、基于硬件提供的分页机制,利用分页机制的正确映射保证与线性地址空间的逻辑一致。

所述s1利用线性地址空间的隔离和封闭特性剥夺了用户程序在线性地址空间层面直接访问其他用户程序的能力;

但是,由于给定操作系统把用户程序和为所有用户程序服务的内核程序置于同一线性地址空间,由于内核程序可以影响其它用户,所以剥夺用户程序访问其他用户进程的能力就需要进一步剥夺用户程序访问内核的能力。

所述h5,进一步包括:

s3、基于特权级、分页机制把用户程序和内核程序置于线性地址空间中互不相交的区域,使用户程序不能直接访问内核区域的数据、用户程序与内核程序不能相互直接转移;

s4、基于特权指令剥夺用户程序在自己的区域另行建造有效的可能影响其他用户程序的数据结构和相关的访问能力,使用户程序只能在低特权区域执行非特权指令,无法再造类似内核的功能。

所述h5利用特权级、分页机制,实现了切断用户程序直接访问内核数据及用户程序与内核程序直接互访的可能,剥夺了用户程序访问内核的能力。

所述h2,进一步包括:将访问外设的特权级设置为0,意味着用户程序中即使存在访问外设的程序也不能被有效执行,访问外设的特权级信息,用户程序没有能力设置,而用于与外设数据交互的地址段设置在内核区域,用户程序被特权机制隔离无法访问;

所述h2的目的就是使得操作系统能够借助对访问外设特权的控制,剥夺用户程序访问外设的能力。

在现有硬件体系下,访问外设需要执行特定io指令或通过对固定地址段进行读写访问。

所述h3,进一步包括:基于硬件提供的快速系统调用或中断门操作系统开辟用户程序进入内核的专用通道,用户程序只有执行sysenter指令才能进入内核,执行sysexit从内核返回;快速系统调用进入内核后的地址记录在msr寄存器组中;只有特权指令才能设置msr,用户程序没有能力设置这个地址,只能被动接受;这个地址通往系统调用的入口,用户程序只能通过这个入口使用操作系统提供的系统调用访问内核、外设。

由于剥夺了用户程序访问自身程序之外的主机、外设资源的能力,使得用户程序正常运行所需要的访问内核、外设也无法进行,只能依赖现代操作系统的专门为用户程序提供的能力受限、使用受控的访问内核、外设的能力——系统调用,权力由此形成。

所述给定操作系统授权体系的授权提供层,进一步包括:提供的功能受限、使用可控的原子授权操作。

所述原子授权操作(简称aao)是指内核为一类授权对象提供的一项配套授权操作。例如,对普通文件的读操作。进一步的,所述原子授权操作的功能逻辑在程序上体现为对应的执行序拓扑结构(简称tseo)。

具体的,有别于现有操作系统,基于所述授权体系的操作系统,操作系统内核提供若干个独立、可控的aao,所有aao都是操作系统内核提供实现代码,访问能力及范围都受内核的逻辑限制。考虑使用方便,内核设计者将aao分类集约成有限个独立的系统调用。系统调用中的每个aao功能确定、访问对象确定。相互独立的原子授权操作除了模块化设计的好处之外,更重要的是一个aao可以对应一个独立的授权操作,为授权检查奠定基础。

因为系统调用入口是所有系统调用共用,所有用户都要使用系统调用,有些系统调用只允许root用户使用,有些系统调用所有用户都可以使用但是数据对象不能随意访问,需要通过控制访问来区分。因此,还需要设置授权检查层。具体的,操作系统通常通过授权检查进行授权访问控制。

所述给定操作系统授权体系的授权检查层是指通过授权检查进行访问控制。

进一步包括:为了进行访问控制,提供被依赖的aao;通过比较预先保存的授权相关要素信息,检查判断用户申请的访问是否符合授权以决定是否允许其执行。

所述方法c2,进一步包括:以完全剥夺了用户程序一切可能访问其他用户资源的能力,和/或,用户程序只能依赖双向专用通道与内核之间相互转移和传递数据为标准,衡量给定操作系统授权基础层所述内容,将其中不符合标准的设计内容识别出来,认定为该层全部ddcas1的方法g1,和/或,以不能改变计算机使用者每次通过操作系统访问计算机资源固有的三个要素,用户要素、授权操作要素、授权操作对象要素中任何一个为标准,衡量给定操作系统授权提供层所述内容,将其中不符合标准的设计内容识别出来,认定为该层全部ddcas2的方法g2,和/或,以不能改变计算机使用者每次通过操作系统访问计算机资源固有的授权相关要素中任何一个为标准,衡量给定操作系统授权检查层所述内容,将其中不符合标准的设计内容识别出来,认定为该层全部ddcas3的方法g3。

所述方法g1,进一步包括:针对给定操作系统授权基础层,以完全剥夺了用户程序一切可能访问其他用户资源的能力,和/或,使用户只能依赖双向专用通道与内核之间相互转移和传递数据为标准,衡量该层所述内容中,软件设计,和/或,指令集架构规定,将不符合标准的设计和规定,认定为该层ddcas4的方法g4,和/或,针对给定操作系统授权基础层,以硬件电路实现设计要与指令集架构规定一致为标准,衡量该层所述内容中硬件电路实现设计,将不符合标准的电路实现设计,认定为该层ddcas5的方法g5,和/或,针对给定操作系统授权基础层,以运行时执行结果要与软件设计一致为标准,衡量该层所述内容中运行时执行结果,将不符合标准的运行时执行结果,认定为该层ddcas6的方法g6。

所述方法g4,进一步包括:以页特权级设计需要与特权级设计初衷相一致为标准,衡量页特权级设计方案,和/或,以用户访问外设控制的软件设计要与禁止用户程序直接访问外设的要求相一致为标准,衡量用户访问外设控制的软件设计;

所述衡量页特权级设计方案的结果包括:认定允许不同特权级之间指令直接相互转移、低特权指令访问高特权数据为ddcas4-1;

所述衡量用户访问外设控制的软件设计的结果包括:认定允许恢复用户程序直接访问外设能力为ddcas4-2;

所述特权级设计初衷是指禁止不同特权级之间指令直接相互转移、禁止低特权指令访问高特权数据,指令集架构允许多个不同段特权级重合在一个线性地址空间上。但现有技术中,一个线性地址只能对应一个分页特权级,当不同特权级的段重合时,实际允许从内核代码区直接转移到应用程序代码区并以内核特权执行,还允许以内核特权执行的应用程序直接转移到内核代码区执行,等价于实际恢复了应用程序直接访问内核的能力,直接改变了授权状态。

优选的,所述ddcas4-2具体包括:操作系统提供了允许root用户程序设置访问外设所需特权级这一类的系统调用,等价于允许用户特权级程序直接访问外设,与剥夺用户程序直接访问外设能力的设计思想不一致,一旦被攻击利用,应用程序就可不经内核直接访问外设,改变了授权状态。

所述方法g5,进一步包括:以硬件电路实现设计要与指令集架构规定一致为标准,衡量给定操作系统授权基础层所述内容中硬件电路实现设计;

所述硬件电路实现设计的相关内容包括:与线性地址访问控制信息相关存储装置、寄存器专用访问指令、线性地址寻址电路,和/或,段、页特权级涉及相关访问规则电路、特权指令以及与段特权级访问控制信息相关存储装置、专用访问指令及相关访问规则电路,和/或,线性地址、特权级都要映射到物理地址,涉及与分页机制相关硬件,和/或,指令集架构设置了访问外设的io指令、mmio、与访问外设特权信息相关的专用存储装置,并规定了设置及访问规则,和/或,双向专用通道涉及进出内核专用指令及转移目标地址相关存储装置;

所述衡量给定操作系统授权基础层所述内容中硬件电路实现设计的结果包括:由于这部分硬件使用极其频繁,指令集架构层面问题很容易被设计者、使用者发现并纠正,所以ddcas只可能是电路中隐藏很深的、正常使用很难触及到的、可控的与指令集架构不一致的实现设计,此类ddcas被认定为ddcas5。

优选的,通过方法g5发现熔断漏洞,进一步包括:发现cpu流水线乱序执行的电路设计允许用户程序访问高特权级数据的指令可以在特定阶段将内核数据从内存中读出,这明显违背指令集架构中低特权级指令不能访问高特权级数据的规定,可以直接破坏剥夺效果,转变授权状态。

所述方法g6,进一步包括:以运行时对给定操作系统授权基础层相关控制数据的访问要与该层软件设计的访问一致为标准,衡量运行时对相关数据访问,和/或,以运行时只能通过软件设计中安排的专用指令来设置确保给定操作系统授权基础层内容生效的专用寄存器为标准,衡量源代码程序;

所述衡量运行时对相关数据访问的结果包括:认定允许运行时对用于维护剥夺效果的数据结构与源代码逻辑不一致的访问是ddcas6-1;

所述衡量源代码程序的结果包括:认定内核中允许隐藏设置控制寄存器的指令是ddcas6-2。

优选的,所述ddcas6-1包括:在运行时平坦的环境中,这些维护剥夺效果的数据结构可能受到与软件设计访问程序不一致的访问,这些数据结构一旦被改写就会破坏授权体系的实现基础,可直接转变授权状态,现有的设计没有阻止这类访问的机制。

优选的,所述ddcas6-2包括:一旦被执行可能导致关键的控制访问的数据结构被取代,破坏剥夺效果,改变授权状态。如果攻击者将保存在内核栈中的iopl值改为3,系统调用返回后,访问外设的特权级就被设置为3,即允许用户程序直接访问外设,恢复对其访问外设能力的剥夺效果。

所述方法g2,进一步包括:针对给定操作系统授权提供层,以提供的原子授权操作软件设计要符合授权规则为标准,衡量提供的原子授权操作源代码是否存在不符合授权规则的内容,认定给定操作系统授权提供层的ddcas7的方法g7,和/或,针对给定操作系统授权提供层,以运行时不能改变授权相关要素中任何一个为标准,衡量运行时是否允许改变授权相关要素,认定给定操作系统授权提供层ddcas8的方法g8;

所述方法g7,进一步包括:针对给定操作系统授权提供层,以提供的原子授权操作软件设计要符合授权规则为标准,衡量提供的源代码中是否存在设计者未知的源代码的方法g9,和/或,针对给定操作系统授权提供层,以提供的原子授权操作软件设计要符合授权规则为标准,衡量设计者提供的已知源代码中是否存在违背授权规则的设计的方法g10。

所述衡量提供的源代码中是否存在设计者未知的源代码的结果包括:发现其中允许存在设计者未知的源代码,与授权规则不符合,被认定为ddcas9;

所述衡量设计者提供的已知源代码中是否存在违背授权规则的设计的结果包括:发现设计者已知的源代码中允许存在,被认定为ddcas10。

优选的,所述ddcas10,进一步是指:同权机制允许当前用户进程加载并执行其他用户程序时,与提供程序的用户拥有同等的访问授权,等效于改变了当前进程的用户,改变了授权状态,而且使改变授权状态合法化。正常情况下之所以没有发生超越授权,是因为用户程序用逻辑制约了改变授权状态之后访问授权资源的范围,而逻辑的不变性仅靠可执行文件只读以及运行时的执行序拓扑结构的稳定性来维护,已有的攻击案例证明这些并不绝对可靠,一旦这个制约被打破,攻击者可以直接扩大访问范围,获取超越授权的结果。特别需要指出的是,由于同权使改变授权状态合法化,导致授权检查无法判断用户身份信息是由同权获取的还是非法获取的,从理论上给授权检查的正确性带来瑕疵,当同权机制被攻击利用时,无法做出正确的判断并拦截。

所述方法g9,进一步包括:以设计者不允许提供的源代码中隐藏违反授权规则的代码或执行序分支为标准,衡量设计者提供的源代码,和/或,以设计者不允许外源代码中隐藏违反授权规则的代码或执行序分支为标准,衡量外源代码;

所述衡量设计者提供的源代码的结果包括:提供的原子授权操作中,不论是有意还是无意为之,都不可能公开允许源代码中存在隐藏违反授权规则的代码或执行序分支,因为设计者提供的源代码要符合授权规则,它们显然与授权规则无关,攻击者一旦在运行时将其激活,就会直接改变授权状态,隐藏的代码或执行序分支被认定为ddcas9-1;

所述衡量外源代码的结果包括:设计者允许合法引入的外源代码(如驱动)与内核代码合成原子授权操作,协助完成确定的授权访问,但由于它的内容往往不是由内核设计者提供(如厂家提供),设计者只预留接口和它对接,并不知道其内部是否存在不符合授权规则的逻辑,如果存在,攻击者一旦在运行时将其激活,就会直接改变授权状态,隐藏在外源代码中违反授权规则的代码或执行序分支被认定为ddcas9-2。

所述方法g8,进一步包括:以运行时执行结果不能改变授权操作要素为标准,衡量运行时是否允许改变指令的执行序拓扑结构,和/或,以运行时执行结果不能改变授权操作要素为标准,衡量运行时是否允许原子授权操作之间转移,和/或,以运行时执行结果不能改变授权操作要素为标准,衡量运行时是否允许改变原子授权操作边界,和/或,以运行时执行结果不能改变授权操作对象要素为标准,衡量运行时是否允许与授权数据匹配的原子授权操作之外操作对其进行访问;

所述衡量运行时是否允许改变指令的执行序拓扑结构的结果包括:为防止改变指令的执行序拓扑结构,内核通常将指令所在的内存设置为只读,以保护原子授权操作代码不被改写,但在运行时平坦的内核环境下,任何可能的对页表信息的访问都不会被阻拦,一旦被更改后续的程序就有能力写入超越授权的代码,直接转变授权状态,所以允许改变指令的执行序拓扑结构这类ddcas被认定为ddcas8-0;

所述衡量运行时是否允许原子授权操作之间转移的结果包括:发现虽然系统调用的原子授权操作之间存在明确的逻辑边界,但在运行时平坦的内核环境下,原子授权操作边界之间转移不会受到阻拦,一旦发生转移就会破坏与原子授权操作边界的一致性,等价于扩大的授权操作的功能,直接转变授权状态,所以允许原子授权操作之间转移这类ddcas被认定为ddcas8-1;

所述衡量运行时是否允许改变原子授权操作边界的结果包括:发现源代码逻辑中有些原子授权操作共用代码,内核通过组内钩子或通过条件分支来构建它们之间的边界,却没有设置针对它们的变化进行边界检查的逻辑,如果运行时选择超出原子授权操作边界也不会受到阻拦,直接转变授权状态,所以允许改变原子授权操作边界这类ddcas被认定为ddcas8-2;

所述衡量运行时是否允许与授权数据匹配的原子授权操作之外操作对其进行访问的结果包括:发现在现有软件体系和指令集架构规则下,运行时存在多种类型的与源代码逻辑不一致的访问设计缺陷,授权操作对象一部分存在于内存中,另一部分存在于外设中,存在于内存中的授权数据既包括用户的数据,又包括影响授权操作访问状态的数据,平坦的内核环境不会阻拦任何对授权操作对象的访问,这种访问直接转变授权状态,所以允许与授权数据匹配的原子授权操作之外操作对其进行访问这类ddcas被认定为ddcas8-3。

所述方法g3,进一步包括:针对给定操作系统授权检查层,以授权检查自身逻辑要符合授权规则且运行时不能改变授权相关要素任何一个为标准,衡量设计者是否遵循此标准提供了保障机制的方法,和/或,针对授权检查层,以运行时执行结果不能改变授权相关要素中任何一个为标准,衡量运行时是否允许改变授权相关要素的方法g11。

所述衡量设计者是否遵循此标准提供了保障机制的方法包括:认定授权检查代码是检查判断是否符合授权、保证授权正确性的逻辑起点,没有其他的逻辑来保证它的逻辑的正确性,只能依靠其自身的逻辑正确,一旦其中隐含可控的设计瑕疵,就可能放过超越授权的访问,攻击者可以利用它直接转变授权状态。而现有授权检查代码没有提出更高的逻辑正确性要求,允许存在不符合授权规则的内容以及允许运行时改变授权相关要素,被认定为ddcas3-1。

所述方法g11,进一步包括:针对给定操作系统授权检查层,以运行时授权信息及授权检查程序不能被破坏为标准,衡量授权信息及授权检查程序包括授权检查代码、当前用户信息及授权信息在运行时是否存在完善的保护机制,和/或,针对给定操作系统授权检查层,以运行时授权检查不能被避开为标准,衡量运行时能否避开授权检查程序,和/或,针对给定操作系统授权检查层,以运行时授权检查结果一致性为标准,衡量运行时授权检查结果是否始终与授权检查程序检查结果一致。

所述衡量授权信息及授权检查程序包括授权检查代码、当前用户信息及授权信息在运行时是否存在完善的保护机制的结果包括:发现内核源代码虽然并不存在原子授权操作干扰、破坏授权检查程序的逻辑,但在运行时平坦的内核环境,不会阻拦功能代码对授权检查代码、数据的访问,可改变授权信息及授权检查逻辑,直接导致授权检查失效,改变授权相关要素,转变授权状态。所以,运行时允许改变授权信息及授权检查程序,被认定为ddcas11-1;

所述衡量运行时能否避开授权检查程序的结果包括:发现内核源代码在操作授权数据之前设置授权检查,在授权检查之前并不存在避开授权检查的逻辑,所以必定经过授权检查。但在运行时,可能形成绕过授权检查的执行序拓扑结构,此外,指令的访问也可能超出设计范围。由于原子授权操作为多用户共用,具备访问其他用户数据的能力,只能依靠授权检查来隔离不符合授权的访问。一旦形成避开授权检查,就可访问授权数据,直接获得超越授权的结果。所以,运行时允许避开授权检查,被认定为ddcas11-2,

所述衡量运行时授权检查结果是否始终与授权检查程序检查结果一致的结果包括:发现内核源代码逻辑只在第一次面对用户进程提交的使用系统调用时进行授权检查,后续的逻辑自然延续执行批准的授权操作,内核源代码中没有改变授权操作的逻辑,所以不需要授权检查之后再进行授权检查,但在运行时,由于执行序拓扑结构存在不稳定因素,程序存在超出设计范围的可能,这些都会导致后续的操作与授权检查不一致,特别是在多用户数据交汇处(如普通文件的缓冲区),可能出现访问与授权检查不一致的用户数据,改变了授权状态,直接获得超越授权的结果。所以,运行时允许授权检查结果被改变被认定为ddcas11-3。

既然ddcas是直接转变授权状态的必要条件,如果能够把ddcas集合全部消除,就可以确保其软件设计和指令集架构规定符合授权规则、软件运行时不更改授权相关要素、硬件电路实现与指令集架构规定保持一致,从而确保即使在攻击条件下,用户执行授权操作的结果,与给定的授权规则保持一致。

因此,本发明进一步公开了一种根据安全评测结果改造给定授权体系使其有能力抵御一切超越授权攻击的解决方案d1。

所述解决方案d1,进一步包括:具体包括:消除授权体系中ddcas的方法d2,和/或,彻底消除ddcas集合以形成安全授权体系的方法d3。

所述方法d2,进一步包括:通过硬件电路一致性验证消除ddcas的方法e1,和/或,通过专用源代码扫描工具消除ddcas的方法e2,和/或,通过代码授权一致性验证确保授权体系中处于逻辑起点位置的程序符合授权规则且运行时不能改变授权相关要素的方法e3,和/或,通过内存安全单元消除ddcas的方法e4,和/或,通过安全保护链确保被保护目标安全性以及消除ddcas的方法e5。

所述内存安全单元可以简称为msu。

授权体系是硬软件联合构成的,由于软件运行在硬件基础之上,所以先要确保硬件与授权相关的电路设计严格符合指令集架构规定,这是构建整个安全授权体系的基础。为解决上述问题,需要引入方法e1。

所述方法e1,进一步包括:对于验证目标明确的只涉及授权基础层相关内容的相关硬件电路设计,采用形式化验证的方法对电路设计进行验证,以验证其是否符合指令集架构设计,对于不符合的部分,则修改其与指令集架构规定不相符的设计,以确保与授权相关电路实现与指令集架构完全相符。

所述方法e2,进一步包括:在确保与授权相关硬件设计符合指令集架构规则的基础上,先通过专用源代码扫描工具,把软件设计中隐藏特权指令、隐藏代码和隐藏执行序挖掘出来并清除掉。

优选的,所述方法e2进一步包括:所述专用源代码扫描工具依据特权指令有专有的操作码,隐藏代码及执行序分支在正常使用时不会被执行的特征进行设计。

这些隐藏的功能往往是破坏授权规则的,而且不是原设计应有的部分,所以消除这些隐藏部分不会对正常功能有任何影响。所述专用源代码扫描工具,将所有特权指令都标注出来,由于特权指令的使用极少,很容易判断是否为隐藏。专用源代码扫描工具还可以在被测试的程序执行标准测试集时标记、记录没有被执行过的代码、执行序拓扑结构,除异常处理程序外就是隐藏部分,可以将其彻底清除干净,为后续消除ddcas奠定基础。

所述隐藏特权指令包括:操作一级页表基址存储装置、io访问所需特权级信息存储装置的指令。

基于所述方法e1、e2、e4、e5的联合作用,在新授权体系中,内核中的绝大多数程序都不需要形式化验证,它们是否转变授权状态,可以通过程序逻辑来检查,但极个别程序,已经处于授权访问控制的逻辑起点,如授权检查程序、内核授权数据的访问程序、外设数据访问程序等,它们自身的正确性已经无法再通过逻辑检查来确保,只能通过形式化验证的方式来确保。形式化验证的方式不适用于确保庞大复杂的程序逻辑,因为可能的组合极大,实际测试成本过高,但处于逻辑原点的程序,逻辑简单,功能单一,通过形式化验证可以有效确保其设计与设计原意一致。

所述方法e3,进一步包括:对已经处于授权访问控制的逻辑起点的程序,通过形式化验证的方式来确保其符合授权规则且运行时不能改变授权相关要素任何一个为标准。

所述处于授权访问控制的逻辑原点的程序包括:用于设置授权基础层相关控制数据的专用程序,是确保用户程序依赖原子授权操作和授权检查的基础,无法通过检查和验证逻辑保证;授权检查程序自身处于授权检查逻辑起点;内存授权数据访问和外设数据最终访问的专用程序是授权操作的最后步骤,不能依赖检查逻辑来保证其正确性。它们的共同特点都是运行时只能依靠自身的正确性来保证与源代码授权逻辑一致,由于它们数量有限、功能单一、且都在msu的保护之中,所以形式化验证的目标明确。

所述方法e4,进一步包括:内存安全单元(msu),通过增加cpu的访问控制设计,在同一特权级内存中,由cpu认定独立的内存区域,认定内存区域设置的端口,这样的内存区域就是msu,msu在线性地址空间没有交集。当前msu的边界信息由cpu的专用存储器保存,跨越边界的访问被认为是非法操作,由cpu报出异常,msu边界和端口完全由硬件控制,确保msu机制在任何时刻都有效。现有指令只被允许访问当前msu之内的数据,禁止其访问其它msu中的数据,否则产生异常;只允许现有体系下的指令转移到本msu中执行,禁止其转移到其它msu中执行,否则产生异常。msu间转移必须用专用指令,通过msu端口且端口必须匹配才能转移到其它msu执行,否则产生异常。msu可以设置在其中禁止执行的指令,如果其中隐藏的禁止指令执行,报硬件异常。

msu设计可以有效拦截指令跨越msu边界转移的能力、以及拦截跨越msu访问数据的能力,同时提供msu端口,使msu中程序与外部交互,无法避开设计者提供的端口。不难发现,msu可以消除其内部代码通过关联外部代码形成与设计不一致的执行序拓扑结构的可能性,可以约束其内部数据访问范围的扩大。

所述方法e5,进一步包括:将被保护对象置于msu硬件装置中,通过只读等属性信息保护对象,再通过msu确保属性信息、msu自身控制信息不被破坏,进一步的,msu边界、端口都是通过cpu硬件认定的,不可能被破坏,由此形成完整的安全保护链。

所述解决方案d3,进一步包括:为消除授权体系各层ddcas进行预处理的方法f1,和/或,消除授权基础层ddcas的方法f2,和/或,消除授权提供层的ddcas的方法f3,和/或,消除授权检查层ddcas的方法f4,和/或,安全辅助措施的方法f5。

所述方法f1,进一步包括:确保给定操作系统授权基础层相关的硬件电路与指令集架构规定保持一致的方法f1-1,和/或,为给定操作系统各层功能实现增设硬件装置的方法f1-2,和/或,消除隐藏在给定操作系统各层中各类非法指令、代码、执行序分支的方法f1-3。

所述方法f1-1,进一步包括:通过方法e1,对与前述给定操作系统授权基础层相关的硬件电路进行硬件一致性验证,以电路运行在任何阶段都应与指令集架构规定保持一致为标准,就能够发现隐藏于其中的ddcas5,将其全部消除,和/或,

优选的:针对熔断漏洞,我们更改硬件电路设计,取消了低特权指令先将高特权数据读出内存再做特权级判断处理的设计,代之以先做特权级判断,与特权级规则不一致的立即报异常,确保用户程序任何时刻都无法访问内核数据,确保与指令集架构规定保持一致。以此类推,就可以消除电路实现设计中不符合指令集架构规定的ddcas5。

所述方法f1-2,进一步包括:为了支持用户程序和内核程序分立于不同线性地址空间的方案,需要更改指令集架构中所有涉及特权级转换的指令或硬件机制,使其能自动切换一级页表基地址存储装置的值,和/或,

msu包括安全装置和保障装置,安全装置需要增设当前msu边界地址寄存器、中断服务程序专用msu边界地址寄存器、msu之间专用的转移指令、当前msu属性寄存器、当前msu栈底寄存器,保障装置需要增设中转msu入口地址寄存器、中转msu专用的向外部转移指令,和/或,

为了保护函数调用返回地址,和/或,中断返回地址,和/或,钩子,需要使处理器认定特殊只读存储区,并增设特定指令,确保只有所述特定指令能够写入/清除该存储区内容,其它指令都不可以。

所述方法f1-3,进一步包括:通过方法e2,采用专用源代码扫描工具,扫描内核代码中用于设置授权基础层相关的控制寄存器的指令,除设计者指定之外,其余这类指令的存在都有能力取代原设计,必须将其全部清除,以此消除ddcas6-2,和/或,

通过方法e2,利用扫描隐藏代码和隐藏执行序分支的专用工具查找源代码中隐藏代码和隐藏执行序分支,在专用工具的监控下执行授权规则标准测试集,就可以找到标准测试集并未执行到的代码和执行序分支,排除异常处理程序,其余就是隐藏代码和隐藏执行序分支,这些隐藏代码和隐藏执行序完全不符合授权规则,甚至都不是原设计的一部分,必须将其彻底清除,而且清除工作不会给操作系统的正常运行带来任何不好的影响,以此消除ddcas9-1。

所述方法f2,进一步包括:消除ddcas隔离不同用户程序内核程序使其不能相互转移或传递数据的方法f2-1,和/或,消除ddcas使用户程序不能合法的设置访问外设的特权的方法f2-2,和/或,消除ddcas保护给定操作系统授权基础层相关控制数据及程序不被破坏的方法f2-3,和/或,消除ddcas确保给定操作系统授权基础层剥夺设置以及双向专用通道设置不被更改或取代的方法f2-4。

所述方法f2-1,进一步包括:利用线性地址空间的天然约束力,把用户程序和内核程序分别置于独立的线性地址空间,同时改造硬件,目的是当需要改变内核态、用户态时,硬件同时自动切换一级页表基地址存储装置的值,确保切换正确,以此消除ddcas4-1,

进一步的,此消除ddcas4-1的方法达成的效果是:在事实上消除同一线性地址空间不同特权级共存,而且使不同特权空间中程序无法在线性层面直接转移,

和/或,

通过方法e4,利用msu分别封装内核中所有程序,在一个msu对应的线性地址空间中只能有一种特权级,以此消除ddcas4-1,

利用方法e4消除ddcas4-1的方法达成的效果是:相当于在线性地址层面废除了不同特权级重叠。而且这样封装,msu中内核程序无法突破边界转移到用户程序,也就更不存在用户程序转移到内核了

和/或,

所述方法f2-2,进一步包括:废除内核提供给用户程序可恢复直接访问外设能力的系统调用,可以根据需求增设系统调用,确保剥夺的实现设计与彻底剥夺用户程序直接访问外设能力这一要求一致,以此消除ddcas4-2。

所述方法f2-3,进一步包括:通过方法e4,利用msu封装与授权基础层相关的数据结构和专用程序,利用msu能够拦截跨非法边界转移、非法访问数据的能力,确保它们在运行时不会随意转移、数据不会被破坏,时刻与软件设计要求保持一致,以此消除ddcas6-1;

优选的:保存在内核栈中的访问外设所需特权信息,用msu封装,在msu的保护下不会被攻击者更改,确保对用户程序直接访问外设能力的剥夺总是有效。

所述方法f2-4,进一步包括:通过方法e4,利用msu可以设置禁止执行指令的特点,将设计者指定之外的所有msu都设置为禁止执行用于设置授权基础层相关的控制寄存器的指令,以此消除ddcas6-2。

所述方法f3,进一步包括:消除ddcas确保合法引入的外源代码即便有超越授权的设计也无法形成超越授权的结果的方法f3-1,和/或,消除ddcas确保设计者提供代码中不存在违反授权规则的设计的方法f3-2,和/或,消除ddcas阻止原子授权操作之间运行时非法转移的方法f3-3,和/或,消除ddcas阻止原子授权操作在运行时更改边界的方法f3-4,和/或,消除ddcas内存、外设中授权数据不被非法访问的方法f3-5。

所述方法f3-1,进一步包括:通过方法e4将合法引入的外源代码封装进独立的msu中,利用msu可以禁止执行约定指令的特点,禁止执行可以导致恢复“剥夺”的特殊指令,使其无法恢复“剥夺”;

利用msu对跨边界转移、数据访问的拦截特性,拦截一切可能造成与原子授权操作边界和授权数据访问的不一致的访问,使其无法突破原子授权操作的边界;

利用msu只能通过匹配端口向其他msu转移的特性,使其与操作系统程序封装的msu端口对接,确保其只能通过端口与外部进行交互,即不影响合成原子授权操作,又可以有效的排斥不符合端口匹配规则的非法操作及传递非法参数。确保运行时正常的原子授权操作与设计原意保持一致,

总之,使其即使有超越授权的设计也无法形成超越授权的结果,以此消除ddcas9-2。

所述方法f3-2,进一步包括:废除现有同权机制,把所有由同权引入的身份信息全部清除,只用用户真实id信息作为授权检查时判断用户要素的唯一依据,确保授权体系的实现设计完全符合授权规则,从设计层面彻底消除通过转变身份实现改变授权状态的可能,同时,用委托访问授权资源代替同权访问授权资源,

优选的:如用户a的进程需要访问用户b某文件,首先由用户a以进程间通信的方式发送自己的uid、文件名等申请信息给用户b的进程,用户b进程程序检查申请,如允许,则替用户a打开文件并将结果同样以进程间通信形式反馈给用户a,以此对同权访问等效替代。如用户b尚未登录,系统会将用户a申请转达给root用户,由root用户临时创建用户b的进程完成工作,由于root用户有权力访问所有授权资源,所以完成此工作完全符合授权规则。不难发现,用户a在整个访问过程中没有机会改变身份为用户b,无法转变授权状态,此以消除ddcas10。

所述方法f3-3,进一步包括:通过方法e4,利用msu封装原子授权操作,利用msu拦截不经端口的跨边界转移的特性,阻止原子授权操作之间的非法转移,应用程序无法借此增加执行序拓扑结构,也就无法因此改变授权状态,确保运行时与源代码层面的原子授权操作边界一致,此以消除ddcas8-1。

所述方法f3-4,进一步包括:在原子授权操作的起始位置,增设确认原子授权操作原意的逻辑,并增设cpu装置存储原意信息,同时,针对所有与构建原子授权操作边界相关的组内钩子和条件分支设置边界检查逻辑,根据原意信息和当前选择的钩子或条件数据做比对,如果符合,则放行,如果两者不符,说明运行时突破了原子授权操作边界,进入异常处理流程,应用程序无法突破由组内钩子和条件分支构成的边界,也就无法转变授权状态,确保运行时与源代码的原子授权操作边界一致,此以消除ddcas8-2。

所述方法f3-5,进一步包括:通过方法e4,建立内存数据终端msu保护内存中的授权数据,以及影响原子授权操作访问状态的数据,利用msu拦截跨边界数据访问的特性,拦截除匹配的原子授权操作外的其它内核程序的访问能力,确保运行时对内存授权数据访问的一致性。同时把最终对授权数据直接操作的极少数代码一并封装在内存数据终端msu中,并在端口处设置授权检查。所有对授权数据的访问只能通过msu端口间接进行不能直接访问,彻底杜绝了类似通过溢出一步到位直接访问授权数据的超越授权行为,确保运行时原子授权操作对授权数据访问的一致性,和/或,建立io终端msu保护外设中数据,具体方法与建立内存终端msu的差异是要在cpu中增设io指令执行控制装置,其余一致,确保io指令只能在io终端msu中执行,mmio映射只设置在io终端msu中,确保运行时访问外设数据的一致性,此以消除ddcas8-3。

所述特殊指令包括设置控制寄存器的指令、io指令等。

所述方法f4,进一步包括:消除ddcas确保授权检查所需用户信息、授权信息以及授权检查代码在运行时不被破坏的方法f4-1,和/或,消除ddcas确保授权检查不可被避开的方法f4-2,和/或,消除ddcas确保授权检查结果不被更改的方法f4-3。

所述方法f4-1,进一步包括:通过方法e4,建立授权检查msu,把授权检查所需用户信息、授权信息以及授权检查代码封装在此msu中,利用msu拦截跨边界转移、数据访问的特性,拦截其它程序破坏授权检查程序的代码、数据以及转移到它内部执行的能力,同时设立msu端口,合法的对授权信息进行添、删、改操作必须通过msu端口提交申请,经授权检查msu审核通过后由内部程序独立完成,其他功能msu无法干预。在系统启动的过程中,先加载授权检查msu中的代码及数据,确保与功能msu不同源,从而排除一切对授权检查程序可能的干扰、破坏因素,确保授权检查程序在运行时的逻辑与源代码逻辑始终保持一致,使应用程序在任何条件下都没有能力在运行时破坏授权检查程序,无法转变授权状态,以此消除ddcas11-1,和/或,

所述方法f4-2,进一步包括:通过方法e4,利用msu封装原子授权操作,因为跨msu边界的指令转移和访问数据必须经过端口,只要在msu端口处设立授权检查,就可确保授权检查无法被避开,无法由此改变授权状态,以此消除ddcas11-2,和/或,

所述方法f4-3,进一步包括:通过方法e4,在运行时层面,授权原子操作从操作起始到完成操作,在所有需要面对选择授权相关要素的操作阶段,都需要分别封装在msu中,并在msu端口处都设置授权检查。所有违背授权规则的选择,其操作结果必定从端口传递出来,在第一时间就会被端口处设立的授权检查程序发现,并进入异常处理流程,确保运行时授权检查与源代码逻辑保持一致,应用程序无法借此改变授权状态,以此消除ddcas11-3。

所述方法f5,进一步包括:确保处于逻辑起点的程序绝对正确符合设计原意的方法f5-1,和/或,消除导致原子授权操作边界与设计层面不一致最为突出的因素的方法f5-2,和/或,通过安全保护链确保页面内容不被非法更改的方法f5-3。

所述方法f5-1,进一步包括:通过方法e3,确保给定操作系统授权基础层用户控制剥夺效果和双向专用通道设置的程序,与原设计保持一致,和/或,确保给定操作系统授权提供层,访问内存、外设授权数据的专用程序符合授权规则,在运行时不能更改授权相关要素,和/或,确保给定操作系统授权检查层,授权检查程序,符合授权规则且运行时不能改变授权相关要素。

所述方法f5-2,进一步包括:消除所述导致原子授权操作边界与设计层面不一致最为突出的因素,具体包括:在内存中设立独立的返回地址信息保存区域,并设置为只读,以保护函数返回地址。增加处理器硬件新指令,只有新指令才能写入/清除返回地址,普通指令不能写,否则处理器报异常。同时更改编译器,在函数调用时,用特定指令写入/清除返回地址。在函数返回时,采用保存的返回地址。这样即便函数返回地址被破坏,也可以用该区域中保存的副本复原,此方法也可用于中断返回地址的保护,这样的独立存储区域还可以用于保存设计者指定的指令指针,以免其被破坏,同时在函数指针使用位置添加判断逻辑,对选择组外函数指针操作做异常处理。

所述方法f5-3,进一步包括:通过方法e4,利用msu基于硬件对跨边界访问数据的拦截能力,确保内核中所有特定代码所在页面只读等属性不会被更改,确保源代码逻辑内容在运行时不会被更改,与设计层面保持一致,以此消除ddcas8-0。

所述所有特定代码包括与剥夺、专用通道相关的专用代码、原子授权操作相关代码、逻辑原点位置相关代码这些与授权相关的代码。

通过上述技术方案,可以达到如下技术效果:

任何超越授权攻击要想成功,都必须利用授权体系中至少一个ddcas,从而摆脱设计者提供的受控访问能力,转变授权状态。而我们的解决方案完全不关注哪里存在通常意义上的漏洞,以何种途径实施攻击,当然更不会去针对具体的漏洞打补丁,而是在“确保用户只能依赖操作系统提供的受控能力行使授权”这一理论的指导下,一劳永逸的把有限的ddcas全部消除,攻击者没有ddcas可以利用,只能依赖提供的被控制的受限能力行使授权,就无法转变授权状态,也就无法获得超越授权攻击的结果。

ddcas既存在于软件中,也存在于硬件中,因此新授权体系的设计既包括对软件的改造,也包含对硬件的改造。

安全解决方案消除ddcas的目的,只是使用户无法摆脱对提供受控能力的依赖,从始至终都不影响操作系统和用户程序的正常功能,能被新授权体系拦截的访问,只可能是超越授权的访问,正常的授权访问不会改变授权状态则不会被拦截,完全不会干扰功能方面的设计原意,这使得新授权体系在确保抵御超越授权攻击的同时,最大限度的兼容了现有操作系统和用户程序的功能实现。同时,由于安全解决方案只涉及访问控制,这部分内容的体量和正常功能内容相比占比极低,而且关系耦合度很低,使得安全解决方案不会影响正常功能内容的整体执行效率。

这些优势最大限度的降低了新授权体系的开发成本,且非常有利于对软件生态环境的兼容,拓展了应用市场。

附图说明

附图1:安全测评方法与ddcas对应关系图

附图2:解决方案与ddcas对应关系图

具体实施方式

实施例1:

所述操作系统授权体系a1,进一步包括:

所述授权体系包括:授权基础层、授权提供层和授权检查层;

所述授权基础层,包括:完全剥夺了用户程序访问其他用户资源的能力,同时用户程序和内核之间只能依赖提供的双向专用通道进行转移和数据传递,以此形成用户程序对内核提供的访问能力的完全依赖;

所述授权提供层,包括:用户只能依赖提供的功能受限、使用可控的原子授权操作进行访问,无法改变授权相关要素;

所述授权检查层,包括:用户必须接受提供的符合授权规则的授权检查程序进行授权检查,无法改变授权相关要素。

实施例2:所述构成方法b1的具体实施方式

具体的,针对所述授权体系,其构成方法b1的具体实施方式,进一步包括:

划出一个边界清晰的攻击种类——针对操作系统的超越授权攻击,其标准为:攻击者未经授权体系允许,访问禁止其访问的操作系统授权资源,

在此前提下,将操作系统授权体系划分为三个层,分别是:授权基础层、授权提供层和授权检查层,其中如果授权基础层构成内容无效,后面两层构成内容也都会无效,而授权提供层构成内容无效,授权检查层构成内容也会无效。

所述无效是指该层存在可直接转变授权状态的缺陷。

所述授权基础层的构成方法的具体实施方式,进一步包括:剥夺用户程序访问其他用户资源的全部能力的实现方法b1-1的具体实施方式,提供双向专用通道,迫使用户只能依赖此通道,在用户程序和内核之间进行转移和数据传递的实现方法b1-2的具体实施方式;

进一步的,所述剥夺用户程序访问其他用户资源的能力,是指剥夺用户程序访问超出自身代码、数据之外的所有主机、外设资源的能力。

所述的实现方案b1-1的具体实施方式,进一步包括:剥夺用户程序访问超出自身代码、数据之外主机资源的能力的实现方案b1-1-1的具体实施方式,和/或,剥夺用户程序访问外设资源的能力的实现方案b1-1-2的具体实施方式,

所述的实现方案b1-1-1的具体实施方式,进一步包括:

步骤1:通过软件设计为不同用户程序以及内核程序在主机中设置隔离区域,通过增设的处理器装置认定隔离区域边界,确保隔离区域之间彼此不能互访,

优选的:把不同用户程序和内核程序分别置于独立的线性地址空间中,同时更改指令集架构中所有涉及特权级转换的指令或硬件机制,目的是当需要改变内核态、用户态时,硬件同时自动切换一级页表基地址存储装置的值,确保切换正确,以此利用线性地址空间有自然的寻址边界的属性,将不同的进程和内核置于不同的线性地址空间,从而导致置于任何一个线性地址空间的程序均无法写出有效的超出其所在线性地址空间的寻址指令,利用线性地址空间的隔离和封闭特性剥夺了用户程序在线性地址空间层面直接访问其他用户程序的能力,

优选的:在内核中建立隔离区域,增设处理器装置认定隔离区域边界,在一个隔离区域对应的线性地址空间中只能有一种特权级,以此确保内核程序无法任意转移到用户程序,再由用户程序以内核特权级转移到内核去执行,剥夺了用户程序在线性地址空间层面直接访问其他用户程序的能力,

优选的:基于硬件提供的分页机制,利用分页机制的正确映射保证与线性地址空间的逻辑一致,

和/或,

步骤2:通过增设的处理器装置,确保用户程序只能执行用户特权的指令且没有能力更改指令执行权限,

优选的:基于特权指令剥夺用户程序在自己的区域另行建造可能影响其他用户程序的数据结构和相关的访问能力,使用户程序只能在低特权区域执行非特权指令,无法再造类似内核的功能,和/或,

步骤3:对步骤1和步骤2所涉及计算机硬件实现设计进行验证,确保其实现设计与功能设计一致,优选的:验证方式为形式化验证,和/或,

步骤4:对步骤1和步骤2所涉及计算机软件实现设计进行验证,确保其运行时执行结果与功能设计一致,优选的:验证方式为形式化验证,和/或,

步骤5:在内核中建立隔离区域并预留端口,增设处理器装置认定隔离区域边界和端口,将步骤1和步骤2所涉及的数据结构和专用程序置于隔离区域中,通过装置确保隔离区域内外只能通过端口交互,其余一律禁止,以此实现它们在运行时不会随意转移、数据不会被破坏,时刻与软件设计要求保持一致,和/或,

步骤6:制作专用源代码扫描工具对内核源代码进行扫描,确保除设计者指定之外,不能拥有步骤1和步骤2所涉及处理器装置设置指令,和/或,

步骤7;建立专用内存区域,增设处理器装置认定该区域,将内存页面使用属性信息及相关设置程序置于其中,避免外部干扰破坏,确保内存页面使用与设计保持一致,从而进一步确保步骤1和步骤2涉及程序不被破坏。

所述的实现方案b1-1-2的具体实施方式,进一步包括:

步骤1:通过软件设计为内核程序设置专用的外设访问隔离区域,通过增设的处理器装置认定隔离区域边界,确保用户程序没有能力访问该区域,和/或,

步骤2:通过增设的处理器装置控制用户程序外设访问能力,确保用户程序在自己的隔离区域中,没有能力进行外设访问,和/或,

步骤3:通过增设的处理器装置控制用户程序指令执行能力,确保用户程序没有能力设置步骤1和步骤2所涉及软硬件设置,和/或,

步骤4:对步骤1、步骤2和步骤3所涉及计算机硬件实现设计进行验证,确保其实现设计与功能设计一致,优选的:验证方式为形式化验证,和/或,

步骤5:对对步骤1、步骤2和步骤3所涉及计算机软件实现设计进行验证,确保其运行时执行结果与功能设计一致,优选的:验证方式为形式化验证,和/或,

步骤6:在内核中建立隔离区域并预留端口,增设处理器装置认定隔离区域边界和端口,将对步骤1、步骤2和步骤3所涉及的数据结构和专用程序置于隔离区域中,通过装置确保隔离区域内外只能通过端口交互,其余一律禁止,以此实现它们在运行时不会随意转移、数据不会被破坏,时刻与软件设计要求保持一致,和/或,

步骤7:制作专用源代码扫描工具对内核源代码进行扫描,确保除设计者指定之外,不能拥有步骤1、步骤2和步骤3所涉及处理器装置设置指令,和/或,

步骤8;建立专用内存区域,增设处理器装置认定该区域,将内存页面使用属性信息及相关设置程序置于其中,避免外部干扰破坏,确保内存页面使用与设计保持一致,从而进一步确保步骤1、步骤2和步骤3涉及程序不被破坏。

所述的实现方法b1-2的具体实施方式,进一步包括:

步骤1:根据用户需求通过软件设计用户程序与内核程序之间的交互通道,通过增设处理器装置认定双向专用通道,以此迫使用户程序只能通过通道与内核之间相互转移和数据传递,而且用户程序只能根据软件设计对通道的使用进行选择,和/或,

步骤2:增设处理器装置,确保用户程序没有能力对通道的设置进行更改,优选的:用户程序无法更改通道的入口,和/或,

步骤3:对步骤1和步骤2所涉及计算机硬件实现设计进行验证,确保其实现设计与功能设计一致,优选的:验证方式为形式化验证,和/或,

步骤4:对步骤1和步骤2所涉及计算机软件实现设计进行验证,确保其运行时执行结果与功能设计一致,优选的:验证方式为形式化验证,和/或,

步骤5:在内核中建立隔离区域并预留端口,增设处理器装置认定隔离区域边界和端口,将步骤1和步骤2所涉及的数据结构和专用程序置于隔离区域中,通过装置确保隔离区域内外只能通过端口交互,其余一律禁止,以此实现它们在运行时不会随意转移、数据不会被破坏,时刻与软件设计要求保持一致,和/或,

步骤6:制作专用源代码扫描工具对内核源代码进行扫描,确保除设计者指定之外,不能拥有步骤1和步骤2所涉及处理器装置设置指令,和/或,

步骤7;建立专用内存区域,增设处理器装置认定该区域,将内存页面使用属性信息及相关设置程序置于其中,避免外部干扰破坏,确保内存页面使用与设计保持一致,从而进一步确保步骤1和步骤2涉及程序不被破坏。

所述授权提供层的构成方法的具体实施方式,进一步包括:提供功能受限、使用可控的原子授权操作,具体包括:确保提供的原子授权操作软件设计要符合授权规则的实现方案b1-3的具体实施方式,和/或,确保提供的原子授权操作运行时不能改变授权相关要素中任何一个的实现方案b1-4的具体实施方式。

所述实现方案b1-3的具体实施方式,进一步包括:确保提供的原子授权操作中不存在设计者未知的违反授权规则的设计的实现方案b1-3-1的具体实施方式,和/或,确保在已知的原子授权操作中所有软件设计都符合授权规则的实现方案b1-3-2的具体实施方式,

优选的:只用用户真实id信息作为授权检查时判断用户要素的唯一依据,确保用户身份和他对应的被允许访问的授权信息始终保持一致,同时,当用户确实需要访问在正常情况下禁止其访问的其他用户资源时,可以用委托方式访问授权资源,以此避免由于用户临时提升权限而扩大访问范围。

所述委托访问授权资源,进一步包括:用户以进程间通信的方式,向其他用户进程提出访问其授权资源的申请,由其他用户进程判断申请是否合法,如合法则访问授权资源并将结果返回给提出申请的用户,否则把错误信息返回。

所述的实现方案b1-3-1的具体实施方式,进一步包括:消除原子授权操作代码中隐藏的代码及执行序分支的实现方案b1-3-1-1的具体实施方式,和/或,消除合法引入的外源代码中隐藏的违反授权规则及破坏授权基础的代码所造成危害的实现方案b1-3-1-2的具体实施方式。

所述的实现方案b1-3-1-1的具体实施方式,进一步包括:制作专用源代码扫描工具,用以扫描提供原子授权操作代码中隐藏的代码及执行序分支,并予以消除。

所述的实现方案b1-3-1-2的具体实施方式,进一步包括:为合法引入的外源代码(如驱动),在内核中建立隔离区域及区域端口,增设处理器装置认定区域边界及端口,迫使其只能通过端口与外界交互,其余交互处理器报异常,以此确保既不影响合成原子授权操作,又可以有效的排斥不符合端口匹配规则的非法操作及传递非法参数。同时,制作专用扫面工具,用以扫描外源代码中隐藏的可以设计授权基础层增设处理器装置的指令以及用于外设访问的指令或用于与外设建立映射关系的指令,并予以清除,避免其内部直接破坏授权基础。

所述实现方案b1-4的具体实施方式,进一步包括:消除导致运行时原子授权操作之间相互转移的最大因素实现方案b1-4-1的具体实施方式,和/或,保护原子授权操作代码运行时不被破坏的实现方案b1-4-2的具体实施方式,和/或,运行时阻止原子授权操作之间相互转移的实现方案b1-4-3的具体实施方式,和/或,运行时防止原子授权操作边界改变的实现方案b1-4-4的具体实施方式,和/或,运行时保护内存及外设中授权数据的实现方案b1-4-5的具体实施方式。

所述实现方案b1-4-1的具体实施方式,进一步包括:建立专用内存区域,增设处理器硬件认定内存区域以及控制该内存区域的指令读写能力,用以保存函数、中断返回地址,指令指针的原件确保正确使用,从而消除导致运行时原子授权操作之间相互转移的最大因素。

所述实现方案b1-4-2的具体实施方式,进一步包括:建立专用内存区域,增设处理器装置认定该区域,将内存页面使用属性信息及相关设置程序置于其中,避免外部干扰破坏,确保内存页面使用与设计保持一致,从而进一步确保原子授权操作代码不被破坏。

所述实现方案b1-4-3的具体实施方式,进一步包括:建立内存隔离区域,增设处理器装置认定该区域,运行时原子授权操作之间相互转移时,处理器报异常,以此避免该转移。

所述实现方案b1-4-4的具体实施方式,进一步包括:针对所有与构建原子授权操作边界相关的组内钩子和条件分支设置边界添加检查逻辑,根据原子授权操作原意信息和当前选择的钩子或条件数据做比对,如果运行时突破了原子授权操作边界便加以阻止。

所述组内钩子,进一步包括:操作系统通常将功能相关的钩子组成一组,如果一个钩子属于某一组,我们称之为组内钩子,反之称之为组外钩子。

所述功能相关的钩子,进一步包括:例如linux2.6.18操作系统中处理ext3文件系统事务的一组钩子就是功能相关的钩子,如下:

所述实现方案b1-4-5的具体实施方式,进一步包括:为内存中授权数据、程序,以及外设访问程序,建立内存隔离区域及区域端口,增设处理器装置认定该区域及端口,由装置确保内外只能通过端口交互,其余交互报异常;针对外设访问程序所在隔离区域,增加装置功能,确保只有该区域能进行外设访问,其余位置都不能访问外设,以此确保对外设的访问与设计一致;同时由于访问授权数据已处于逻辑起点,运行时只能通过其自身正确性来确保与设计一致,为此需要通过验证来确保其运行时与设计一致,不会改变授权相关要素,优选的,验证方法采用形式化验证。

所述授权检查层的构成方法的具体实施方式,进一步包括:确保授权检查程序自身正确的实现方案b1-5的具体实施方式,和/或,确保授权检查在运行时不会改变授权相关要素的实现方案b1-6的具体实施方式。

所述实现方案b1-5的具体实施方式,进一步包括:由于授权检查程序已处于逻辑起点,运行时只能通过其自身正确性来确保与设计一致,为此不仅要确保其内容设计符合授权规则,还需要通过验证来确保其运行时与设计一致,不会改变授权相关要素,优选的,验证方法采用形式化验证。

所述实现方案b1-6的具体实施方式,进一步包括:确保授权检查程序运行时不被破坏的实现方案b1-6-1的具体实施方式,和/或,确保授权检查在运行时不被避开的实现方案b1-6-2的具体实施方式,和/或,确保授权检查结果在运行时不会被改变的实现方案b1-6-3的具体实施方式。

所述实现方案b1-6-1的具体实施方式,进一步包括:为授权检查所需用户信息、授权信息以及授权检查代码,建立内存隔离空间和端口,增设处理器装置认定该空间和端口,迫使外界在运行时只能通过端口与之交互,其余交互方式处理器报异常,同时在系统启动的过程中,先加载把授权检查程序中的代码及数据,确保与功能程序不同源,避免受到它的影响和破坏。

所述实现方案b1-6-2的具体实施方式,进一步包括:为原子授权操作建立隔离区域及区域端口,增设处理器装置认定区域及端口,并迫使区域间转移及数据访问必须经过端口,只要在端口处设立授权检查,就可确保授权检查无法被避开。

所述实现方案b1-6-3的具体实施方式,进一步包括:建立隔离区域及区域端口,增设处理器硬件认定区域及端口,把所有需要面对选择授权相关要素的程序,都存储在隔离区域中,并在端口处都设置授权检查,所有违背授权规则的选择,其操作结果必定从端口传递出来,在第一时间就会被端口处设立的授权检查程序发现,并进入异常处理流程,确保运行时授权检查结果不会改变。

实施例3:在linux操作系统、在80x80体系下,所述安全评测方法c1的具体实施方式:

所述安全评测方法c1的具体实施方式,进一步包括:

将给定操作系统授权体系构成分为三层,分别是给定操作系统授权体系的授权基础层、授权提供层和授权检查层,并采用方法c2的具体实施方式,找出各层所有可直接改变授权状态的缺陷。

所述改变授权状态是指攻击者从只能访问授权体系允许其访问的授权资源的状态,转变为随时有能力访问授权体系禁止其访问的授权资源的状态。

所述可直接转变授权状态的缺陷简称为ddcas。

所述可直接转变授权状态的缺陷就是直接转变授权状态的必要条件。

所述给定操作系统授权体系的授权基础层的具体实施方式,进一步包括:剥夺用户程序访问超出自身代码、数据之外主机资源的能力的构成内容h1,和/或,剥夺用户程序访问外设资源的能力的构成内容h2,和/或,由系统调用及返回用户空间的方式构成的双向专用通道h3。

所述h1,进一步包括:通过线性地址空间和分页剥夺用户程序访问其他用户程序的能力的构成内容h4,和/或,通过特权级、分页和特权指令剥夺用户程序访问内核的能力的构成内容h5。

所述h4,进一步包括:

s1、利用线性地址空间有自然的寻址边界的属性,操作系统将不同的进程置于不同的线性地址空间,从而导致置于任何一个线性地址空间的程序均无法写出有效的超出其所在线性地址空间的寻址指令;

s2、基于硬件提供的分页机制,利用分页机制的正确映射保证与线性地址空间的逻辑一致。

所述s1利用线性地址空间的隔离和封闭特性剥夺了用户程序在线性地址空间层面直接访问其他用户程序的能力;

但是,由于给定操作系统把用户程序和为所有用户程序服务的内核程序置于同一线性地址空间,由于内核程序可以影响其它用户,所以剥夺用户程序访问其他用户进程的能力就需要进一步剥夺用户程序访问内核的能力。

所述h5,进一步包括:

s3、基于特权级、分页机制把用户程序和内核程序置于线性地址空间中互不相交的区域,使用户程序不能直接访问内核区域的数据、用户程序与内核程序不能相互直接转移;

s4、基于特权指令剥夺用户程序在自己的区域另行建造有效的可能影响其他用户程序的数据结构和相关的访问能力,使用户程序只能在低特权区域执行非特权指令,无法再造类似内核的功能。

所述h5利用特权级、分页机制,实现了切断用户程序直接访问内核数据及用户程序与内核程序直接互访的可能,剥夺了用户程序访问内核的能力。

所述h2,进一步包括:将访问外设的特权级设置为0,意味着用户程序中即使写了访问外设的程序也不能被有效执行,访问外设的特权级信息,用户程序没有能力设置,而用于与外设数据交互的地址段设置在内核区域,用户程序被特权机制隔离无法访问;

所述h2的目的就是使得操作系统能够借助对访问外设特权的控制,剥夺用户程序访问外设的能力。

在现有硬件体系下,访问外设需要执行特定io指令或通过对固定地址段进行读写访问。

所述h3,进一步包括:基于硬件提供的快速系统调用或中断门操作系统开辟用户程序进入内核的专用通道,用户程序只有执行sysenter指令才能进入内核,执行sysexit从内核返回;快速系统调用进入内核后的地址记录在msr寄存器组中;只有特权指令才能设置msr,用户程序没有能力设置这个地址,只能被动接受;这个地址通往系统调用的入口,用户程序只能通过这个入口使用操作系统提供的系统调用访问内核、外设。

由于剥夺了用户程序访问自身程序之外的主机、外设资源的能力,使得用户程序正常运行所需要的访问内核、外设也无法进行,只能依赖现代操作系统的专门为用户程序提供的能力受限、使用受控的访问内核、外设的能力——系统调用,权力由此形成。

所述给定操作系统授权体系的授权提供层的具体实施方式,进一步包括:提供的功能受限、使用可控的原子授权操作。

所述原子授权操作(简称aao)是指内核为一类授权对象提供的一项配套授权操作。例如,对普通文件的读操作。进一步的,所述原子授权操作的功能逻辑在程序上体现为对应的执行序拓扑结构(简称tseo)。

具体的,对于操作系统实现来说,操作系统内核提供若干个独立、可控的aao,所有aao都是操作系统内核提供实现代码,访问能力及范围都受内核的逻辑限制。考虑使用方便,内核设计者将aao分类集约成有限个独立的系统调用。系统调用中的每个aao功能确定、访问对象确定。相互独立的原子授权操作除了模块化设计的好处之外,更重要的是一个aao可以对应一个独立的授权操作,为授权检查奠定基础。

因为系统调用入口是所有系统调用共用,所有用户都要使用系统调用,有些系统调用只允许root用户使用,有些系统调用所有用户都可以使用但是数据对象不能随意访问,需要通过控制访问来区分。因此,还需要设置授权检查层。具体的,操作系统通常通过授权检查进行授权访问控制。

所述给定操作系统授权体系的授权检查层的具体实施方式是指通过授权检查进行访问控制。

进一步包括:为了进行访问控制,提供被依赖的aao;通过比较预先保存的授权相关要素信息,检查判断用户申请的访问是否符合授权以决定是否允许其执行。

所述方法c2的具体实施方式,进一步包括:以完全剥夺了用户程序一切可能访问其他用户资源的能力,和/或,用户程序只能依赖双向专用通道与内核之间相互转移和传递数据为标准,衡量给定操作系统授权基础层所述内容,将其中不符合标准的设计内容识别出来,认定为该层全部ddcas1的方法g1的具体实施方式,和/或,以不能改变计算机使用者每次通过操作系统访问计算机资源固有的三个要素,用户要素、授权操作要素、授权操作对象要素中任何一个为标准,衡量给定操作系统授权提供层所述内容,将其中不符合标准的设计内容识别出来,认定为该层全部ddcas2的方法g2的具体实施方式,和/或,以不能改变计算机使用者每次通过操作系统访问计算机资源固有的授权相关要素中任何一个为标准,衡量给定操作系统授权检查层所述内容,将其中不符合标准的设计内容识别出来,认定为该层全部ddcas3的方法g3的具体实施方式。

所述方法g1的具体实施方式,进一步包括:针对给定操作系统授权基础层,以完全剥夺了用户程序一切可能访问其他用户资源的能力,和/或,使用户只能依赖双向专用通道与内核之间相互转移和传递数据为标准,衡量该层所述内容中,软件设计,和/或,指令集架构规定,将不符合标准的设计和规定,认定为该层ddcas4的方法g4的具体实施方式,和/或,针对给定操作系统授权基础层,以硬件电路实现设计要与指令集架构规定一致为标准,衡量该层所述内容中硬件电路实现设计,将不符合标准的电路实现设计,认定为该层ddcas5的方法g5的具体实施方式,和/或,针对给定操作系统授权基础层,以运行时执行结果要与软件设计一致为标准,衡量该层所述内容中运行时执行结果,将不符合标准的运行时执行结果,认定为该层ddcas6的方法g6的具体实施方式。

所述方法g4的具体实施方式,进一步包括:以页特权级设计需要与特权级设计初衷相一致为标准,衡量页特权级设计方案,和/或,以用户访问外设控制的软件设计要与禁止用户程序直接访问外设的要求相一致为标准,衡量用户访问外设控制的软件设计;

所述衡量页特权级设计方案的结果包括:认定允许不同特权级之间指令直接相互转移、低特权指令访问高特权数据为ddcas4-1;

所述衡量用户访问外设控制的软件设计的结果包括:认定允许恢复用户程序直接访问外设能力为ddcas4-2;

所述特权级设计初衷是指禁止不同特权级之间指令直接相互转移、禁止低特权指令访问高特权数据,指令集架构允许多个不同段特权级重合在一个线性地址空间上。但现有技术中,一个线性地址只能对应一个分页特权级,当不同特权级的段重合时,实际允许从内核代码区直接转移到应用程序代码区并以内核特权执行,还允许以内核特权执行的应用程序直接转移到内核代码区执行,等价于实际恢复了应用程序直接访问内核的能力,直接改变了授权状态。

优选的,所述ddcas4-2具体包括:操作系统提供了允许root用户程序设置访问外设所需特权级这一类的系统调用,等价于允许用户特权级程序直接访问外设,与剥夺用户程序直接访问外设能力的设计思想不一致,一旦被攻击利用,应用程序就可不经内核直接访问外设,改变了授权状态。

所述方法g5的具体实施方式,进一步包括:以硬件电路实现设计要与指令集架构规定一致为标准,衡量给定操作系统授权基础层所述内容中硬件电路实现设计;

所述硬件电路实现设计的相关内容包括:与线性地址访问控制信息相关存储装置、寄存器专用访问指令、线性地址寻址电路,和/或,段、页特权级涉及相关访问规则电路、特权指令以及与段特权级访问控制信息相关存储装置、专用访问指令及相关访问规则电路,和/或,线性地址、特权级都要映射到物理地址,涉及与分页机制相关硬件,和/或,指令集架构设置了访问外设的io指令、mmio、与访问外设特权信息相关的专用存储装置,并规定了设置及访问规则,和/或,双向专用通道涉及进出内核专用指令及转移目标地址相关存储装置;

所述衡量给定操作系统授权基础层所述内容中硬件电路实现设计的结果包括:由于这部分硬件使用极其频繁,指令集架构层面问题很容易被设计者、使用者发现并纠正,所以ddcas只可能是电路中隐藏很深的、正常使用很难触及到的、可控的与指令集架构不一致的实现设计,此类ddcas被认定为ddcas5。

优选的,通过方法g5发现熔断漏洞,进一步包括:发现cpu流水线乱序执行的电路设计允许用户程序访问高特权级数据的指令可以在特定阶段将内核数据从内存中读出,这明显违背指令集架构中低特权级指令不能访问高特权级数据的规定,可以直接破坏剥夺效果,转变授权状态。

所述方法g6的具体实施方式,进一步包括:以运行时对给定操作系统授权基础层相关控制数据的访问要与该层软件设计的访问一致为标准,衡量运行时对相关数据访问,和/或,以运行时只能通过软件设计中安排的专用指令来设置确保给定操作系统授权基础层内容生效的专用寄存器为标准,衡量源代码程序;

所述衡量运行时对相关数据访问的结果包括:认定允许运行时对用于维护剥夺效果的数据结构与源代码逻辑不一致的访问是ddcas6-1;

所述衡量源代码程序的结果包括:认定内核中允许隐藏设置控制寄存器的指令是ddcas6-2。

优选的,所述ddcas6-1包括:在运行时平坦的环境中,这些维护剥夺效果的数据结构可能受到与软件设计访问程序不一致的访问,这些数据结构一旦被改写就会破坏授权体系的实现基础,可直接转变授权状态,现有的设计没有阻止这类访问的机制。

优选的,所述ddcas6-2包括:一旦被执行可能导致关键的控制访问的数据结构被取代,破坏剥夺效果,改变授权状态。如果攻击者将保存在内核栈中的iopl值改为3,系统调用返回后,访问外设的特权级就被设置为3,即允许用户程序直接访问外设,恢复对其访问外设能力的剥夺效果。

所述方法g2的具体实施方式,进一步包括:针对给定操作系统授权提供层,以提供的原子授权操作软件设计要符合授权规则为标准,衡量提供的原子授权操作源代码是否存在不符合授权规则的内容,认定给定操作系统授权提供层的ddcas7的方法g7的具体实施方式,和/或,针对给定操作系统授权提供层,以运行时不能改变授权相关要素中任何一个为标准,衡量运行时是否允许改变授权相关要素,认定给定操作系统授权提供层ddcas8的方法g8的具体实施方式;

所述方法g7的具体实施方式,进一步包括:针对给定操作系统授权提供层,以提供的原子授权操作软件设计要符合授权规则为标准,衡量提供的源代码中是否存在设计者未知的源代码的方法g9的具体实施方式,和/或,针对给定操作系统授权提供层,以提供的原子授权操作软件设计要符合授权规则为标准,衡量设计者提供的已知源代码中是否存在违背授权规则的设计的方法g10的具体实施方式。

所述衡量提供的源代码中是否存在设计者未知的源代码的结果包括:发现其中允许存在设计者未知的源代码,与授权规则不符合,被认定为ddcas9;

所述衡量设计者提供的已知源代码中是否存在违背授权规则的设计的结果包括:发现设计者已知的源代码中允许存在,被认定为ddcas10。

优选的,所述ddcas10,进一步包括:同权机制允许当前用户进程加载并执行其他用户程序时,与提供程序的用户拥有同等的访问授权,等效于改变了当前进程的用户,改变了授权状态,而且使改变授权状态合法化。正常情况下之所以没有发生超越授权,是因为用户程序用逻辑制约了改变授权状态之后访问授权资源的范围,而逻辑的不变性仅靠可执行文件只读以及运行时的执行序拓扑结构的稳定性来维护,已有的攻击案例证明这些并不绝对可靠,一旦这个制约被打破,攻击者可以直接扩大访问范围,获取超越授权的结果。特别需要指出的是,由于同权使改变授权状态合法化,导致授权检查无法判断用户身份信息是由同权获取的还是非法获取的,从理论上给授权检查的正确性带来瑕疵,当同权机制被攻击利用时,无法做出正确的判断并拦截。

所述方法g9的具体实施方式,进一步包括:以设计者不允许提供的源代码中隐藏违反授权规则的代码或执行序分支为标准,衡量设计者提供的源代码,和/或,以设计者不允许外源代码中隐藏违反授权规则的代码或执行序分支为标准,衡量外源代码;

所述衡量设计者提供的源代码的结果包括:提供的原子授权操作中,不论是有意还是无意为之,都不可能公开允许源代码中存在隐藏违反授权规则的代码或执行序分支,因为设计者提供的源代码要符合授权规则,它们显然与授权规则无关,攻击者一旦在运行时将其激活,就会直接改变授权状态,隐藏的代码或执行序分支被认定为ddcas9-1;

所述衡量外源代码的结果包括:设计者允许合法引入的外源代码(如驱动)与内核代码合成原子授权操作,协助完成确定的授权访问,但由于它的内容往往不是由内核设计者提供(如厂家提供),设计者只预留接口和它对接,并不知道其内部是否存在不符合授权规则的逻辑,如果存在,攻击者一旦在运行时将其激活,就会直接改变授权状态,隐藏在外源代码中违反授权规则的代码或执行序分支被认定为ddcas9-2。

所述方法g8的具体实施方式,进一步包括:以运行时执行结果不能改变授权操作要素为标准,衡量运行时是否允许改变指令的执行序拓扑结构,和/或,以运行时执行结果不能改变授权操作要素为标准,衡量运行时是否允许原子授权操作之间转移,和/或,以运行时执行结果不能改变授权操作要素为标准,衡量运行时是否允许改变原子授权操作边界,和/或,以运行时执行结果不能改变授权操作对象要素为标准,衡量运行时是否允许与授权数据匹配的原子授权操作之外操作对其进行访问;

所述衡量运行时是否允许改变指令的执行序拓扑结构的结果包括:为防止改变指令的执行序拓扑结构,内核通常将指令所在的内存设置为只读,以保护原子授权操作代码不被改写,但在运行时平坦的内核环境下,任何可能的对页表信息的访问都不会被阻拦,一旦被更改后续的程序就有能力写入超越授权的代码,直接转变授权状态,所以允许改变指令的执行序拓扑结构这类ddcas被认定为ddcas8-0;

所述衡量运行时是否允许原子授权操作之间转移的结果包括:发现虽然系统调用的原子授权操作之间存在明确的逻辑边界,但在运行时平坦的内核环境下,原子授权操作边界之间转移不会受到阻拦,一旦发生转移就会破坏与原子授权操作边界的一致性,等价于扩大的授权操作的功能,直接转变授权状态,所以允许原子授权操作之间转移这类ddcas被认定为ddcas8-1;

所述衡量运行时是否允许改变原子授权操作边界的结果包括:发现源代码逻辑中有些原子授权操作共用代码,内核通过组内钩子或通过条件分支来构建它们之间的边界,却没有设置针对它们的变化进行边界检查的逻辑,如果运行时选择超出原子授权操作边界也不会受到阻拦,直接转变授权状态,所以允许改变原子授权操作边界这类ddcas被认定为ddcas8-2;

所述衡量运行时是否允许与授权数据匹配的原子授权操作之外操作对其进行访问的结果包括:发现在现有软件体系和指令集架构规则下,运行时存在多种类型的与源代码逻辑不一致的访问设计缺陷,授权操作对象一部分存在于内存中,另一部分存在于外设中,存在于内存中的授权数据既包括用户的数据,又包括影响授权操作访问状态的数据,平坦的内核环境不会阻拦任何对授权操作对象的访问,这种访问直接转变授权状态,所以允许与授权数据匹配的原子授权操作之外操作对其进行访问这类ddcas被认定为ddcas8-3。

所述方法g3的具体实施方式,进一步包括:针对给定操作系统授权检查层,以授权检查自身逻辑要符合授权规则且运行时不能改变授权相关要素任何一个为标准,衡量设计者是否遵循此标准提供了保障机制的方法,和/或,针对授权检查层,以运行时执行结果不能改变授权相关要素中任何一个为标准,衡量运行时是否允许改变授权相关要素的方法g11的具体实施方式。

所述衡量设计者是否遵循此标准提供了保障机制的方法包括:认定授权检查代码是检查判断是否符合授权、保证授权正确性的逻辑起点,没有其他的逻辑来保证它的逻辑的正确性,只能依靠其自身的逻辑正确,一旦其中隐含可控的设计瑕疵,就可能放过超越授权的访问,攻击者可以利用它直接转变授权状态。而现有授权检查代码没有提出更高的逻辑正确性要求,允许存在不符合授权规则的内容以及允许运行时改变授权相关要素,被认定为ddcas3-1。

所述方法g11的具体实施方式,进一步包括:针对给定操作系统授权检查层,以运行时授权信息及授权检查程序不能被破坏为标准,衡量授权信息及授权检查程序包括授权检查代码、当前用户信息及授权信息在运行时是否存在完善的保护机制,和/或,针对给定操作系统授权检查层,以运行时授权检查不能被避开为标准,衡量运行时能否避开授权检查程序,和/或,针对给定操作系统授权检查层,以运行时授权检查结果一致性为标准,衡量运行时授权检查结果是否始终与授权检查程序检查结果一致。

所述衡量授权信息及授权检查程序包括授权检查代码、当前用户信息及授权信息在运行时是否存在完善的保护机制的结果包括:发现内核源代码虽然并不存在原子授权操作干扰、破坏授权检查程序的逻辑,但在运行时平坦的内核环境,不会阻拦功能代码对授权检查代码、数据的访问,可改变授权信息及授权检查逻辑,直接导致授权检查失效,改变授权相关要素,转变授权状态。所以,运行时允许改变授权信息及授权检查程序,被认定为ddcas11-1;

所述衡量运行时能否避开授权检查程序的结果包括:发现内核源代码在操作授权数据之前设置授权检查,在授权检查之前并不存在避开授权检查的逻辑,所以必定经过授权检查。但在运行时,可能形成绕过授权检查的执行序拓扑结构,此外,指令的访问也可能超出设计范围。由于原子授权操作为多用户共用,具备访问其他用户数据的能力,只能依靠授权检查来隔离不符合授权的访问。一旦形成避开授权检查,就可访问授权数据,直接获得超越授权的结果。所以,运行时允许避开授权检查,被认定为ddcas11-2,

所述衡量运行时授权检查结果是否始终与授权检查程序检查结果一致的结果包括:发现内核源代码逻辑只在第一次面对用户进程提交的使用系统调用时进行授权检查,后续的逻辑自然延续执行批准的授权操作,内核源代码中没有改变授权操作的逻辑,所以不需要授权检查之后再进行授权检查,但在运行时,由于执行序拓扑结构存在不稳定因素,程序存在超出设计范围的可能,这些都会导致后续的操作与授权检查不一致,特别是在多用户数据交汇处(如普通文件的缓冲区),可能出现访问与授权检查不一致的用户数据,改变了授权状态,直接获得超越授权的结果。所以,运行时允许授权检查结果被改变被认定为ddcas11-3。

既然ddcas是直接转变授权状态的必要条件,如果能够把ddcas集合全部消除,就可以确保其软件设计和指令集架构规定符合授权规则、软件运行时不更改授权相关要素、硬件电路实现与指令集架构规定保持一致,从而确保即使在攻击条件下,用户执行授权操作的结果,与给定的授权规则保持一致。

实施例4:在linux操作系统下、在80x80体系下或risc-v体系下,所消除授权体系中ddcas的方法d2的具体实施方式:

所述方法d2的具体实施方式,进一步包括:通过硬件电路一致性验证消除ddcas的方法e1的具体实施方式,和/或,通过专用源代码扫描工具消除ddcas的方法e2的具体实施方式,和/或,通过代码授权一致性验证确保授权体系中处于逻辑起点位置的程序符合授权规则且运行时不能改变授权相关要素的方法e3的具体实施方式,和/或,通过内存安全单元消除ddcas的方法e4的具体实施方式,和/或,通过安全保护链确保被保护目标安全性以及消除ddcas的方法e5的具体实施方式。

所述内存安全单元可以简称为msu。

授权体系是硬软件联合构成的,由于软件运行在硬件基础之上,所以先要确保硬件与授权相关的电路设计严格符合指令集架构规定,这是构建整个安全授权体系的基础。为解决上述问题,需要引入方法e1。

所述方法e1的具体实施方式,进一步包括:对于验证目标明确的只涉及授权基础层相关内容的相关硬件电路设计,采用形式化验证的方法对电路设计进行验证,以验证其是否符合指令集架构设计,对于不符合的部分,则修改其与指令集架构规定不相符的设计,以确保与授权相关电路实现与指令集架构完全相符。

所述方法e2的具体实施方式,进一步包括:在确保与授权相关硬件设计符合指令集架构规则的基础上,先通过专用源代码扫描工具,把软件设计中隐藏特权指令、隐藏代码和隐藏执行序挖掘出来并清除掉。

优选的,所述方法e2进一步包括:所述专用源代码扫描工具依据特权指令有专有的操作码,隐藏代码及执行序分支在正常使用时不会被执行的特征进行设计。

这些隐藏的功能往往是破坏授权规则的,而且不是原设计应有的部分,所以消除这些隐藏部分不会对正常功能有任何影响。所述专用源代码扫描工具,将所有特权指令都标注出来,由于特权指令的使用极少,很容易判断是否为隐藏。专用源代码扫描工具还可以在被测试的程序执行标准测试集时标记、记录没有被执行过的代码、执行序拓扑结构,除异常处理程序外就是隐藏部分,可以将其彻底清除干净,为后续消除ddcas奠定基础。

所述隐藏特权指令包括:操作一级页表基址存储装置、io访问所需特权级信息存储装置的指令。

基于所述方法e1、e2、e4、e5的联合作用,在新授权体系中,内核中的绝大多数程序都不需要形式化验证,它们是否转变授权状态,可以通过程序逻辑来检查,但极个别程序,已经处于授权访问控制的逻辑起点,如授权检查程序、内核授权数据的访问程序、外设数据访问程序等,它们自身的正确性已经无法再通过逻辑检查来确保,只能通过形式化验证的方式来确保。形式化验证的方式不适用于确保庞大复杂的程序逻辑,因为可能的组合极大,实际测试成本过高,但处于逻辑原点的程序,逻辑简单,功能单一,通过形式化验证可以有效确保其设计与设计原意一致。

所述方法e3的具体实施方式,进一步包括:对已经处于授权访问控制的逻辑起点的程序,通过形式化验证的方式来确保其符合授权规则且运行时不能改变授权相关要素任何一个为标准。

所述处于授权访问控制的逻辑原点的程序包括:用于设置授权基础层相关控制数据的专用程序,是确保用户程序依赖原子授权操作和授权检查的基础,无法通过检查和验证逻辑保证;授权检查程序自身处于授权检查逻辑起点;内存授权数据访问和外设数据最终访问的专用程序是授权操作的最后步骤,不能依赖检查逻辑来保证其正确性。它们的共同特点都是运行时只能依靠自身的正确性来保证与源代码授权逻辑一致,由于它们数量有限、功能单一、且都在msu的保护之中,所以形式化验证的目标明确。

所述方法e4的具体实施方式,进一步包括:内存安全单元(msu),通过增加cpu的访问控制设计,在同一特权级内存中,由cpu认定独立的内存区域,认定内存区域设置的端口,这样的内存区域就是msu,msu在线性地址空间没有交集。当前msu的边界信息由cpu的专用存储器保存,跨越边界的访问被认为是非法操作,由cpu报出异常,msu边界和端口完全由硬件控制,确保msu机制在任何时刻都有效。现有指令只被允许访问当前msu之内的数据,禁止其访问其它msu中的数据,否则产生异常;只允许现有体系下的指令转移到本msu中执行,禁止其转移到其它msu中执行,否则产生异常。msu间转移必须用专用指令,通过msu端口且端口必须匹配才能转移到其它msu执行,否则产生异常。msu可以设置在其中禁止执行的指令,如果其中隐藏的禁止指令执行,报硬件异常。

msu设计可以有效拦截指令跨越msu边界转移的能力、以及拦截跨越msu访问数据的能力,同时提供msu端口,使msu中程序与外部交互,无法避开设计者提供的端口。不难发现,msu可以消除其内部代码通过关联外部代码形成与设计不一致的执行序拓扑结构的可能性,可以约束其内部数据访问范围的扩大。

一种现有体系下通过软件指令进行访问控制的msu制作方法及针对该方法的访问控制应用方式:

s-c-a1内存系统装置的制作,具体包括:

s-c-a1-1制作msu信息记录单元:

建立以下数据:

当前msu的id;msu控制对照表;端口匹配表;指向msu控制对照表的指针变量;指向端口匹配表的指针变量;用以记录msu栈底地址值的变量。

所述msu控制对照表的信息包括:所有msu的信息,具体包括:msu的id号、msu的边界信息、属性信息、端口信息、生效/失效信息。优选的,还包括msu所属用户类型信息,msu所属用户标识信息。

所述msu边界信息,包括:指令区边界信息、全局数据区边界信息、堆区边界信息。

所述msu端口信息包括:msu的出口信息和msu的入口信;

所述msu的出口信息,包括:其所属的msu的id、出口号、出口地址值;

所述msu的入口信息,包括:其所属的msu的id、入口号、入口地址值;

所述端口匹配表,包括:一对有msu间调用关系的出口和入口。

在每个msu的数据区,设置:指向msu控制对照表的指针变量;指向端口匹配表的指针变量;记录msu栈底地址值的变量。

在每个msu数据区的线性地址空间中,以页对齐的方式预留一段空间,空间大小为页大小的整数倍,将控制对照表设置于其中,其它数据不存入其中。

s-c-a1-2制作访问控制单元

在本制作方法中:msu访问控制逻辑靠软件指令进行控制,具体包括:

●获取当前msu栈底地址值:

添加指令的逻辑是:在msu间调用的参数传递指令前,获取栈顶地址值,并将此地址值压入栈中,此地址值作为目标msu的栈底地址值;调用进目标msu后,在其指令的起始位置,获取栈中传递的上述地址值,保存到用于记录当前msu栈底地址值的变量中。

●添加检查指令用以判定数据访问是否超出msu边界:

由于对于非指针变量,可以在编译阶段明确访问地址,所以一种优选的方案是,运行时不再对它们进行边界判断,只需对数据指针进行边界检查,具体方式:在访问数据指针对应的指令之前,添加判断逻辑,来进行访问的边界检查,具体包括:

步骤s-c-a1-2-a1:如果访问的最终目标地址处于当前msu的全局数据区,或堆区,或处于栈区中当前msu对应的区域内,跳转到步骤2,否则跳转到步骤3;

步骤s-c-a1-2-a2:执行数据访问指令,跳转到步骤4;

步骤s-c-a1-2-a3:进入异常处理流程;

步骤s-c-a1-2-a4:执行下一条指令

●添加检查指令用以判断msu内间接转移指令的目标地址是否超出msu边界:

由于对于msu内的直接转移指令,可以在编译阶段明确转移目标地址,所以一种优选的方案是,运行时不再对它们进行边界判断,只需对msu内间接转移指令的目标地址进行边界检查,具体方式:在msu内间接转移指令之前,添加判断逻辑,来进行访问的边界检查,具体包括:

步骤s-c-a1-2-b1:如果访问的最终目标地址处于当前msu的指令区内,跳转到步骤2,否则跳转到步骤3;

步骤s-c-a1-2-b2:执行msu内间接转移指令,跳转到步骤4;

步骤s-c-a1-2-b3:进入异常处理流程;

步骤s-c-a1-2-b4:执行下一条指令

●msu属性匹配检查:

根据编译器和链接器,将msu间调用指令所在地址信息和目标地址信息予以记载,并体现到检查指令中。

根据msu间调用指令的目标地址值和所有msu的边界信息,确定目标msu,并进一步用当前msu的属性和目标msu的属性做比对,如果属性匹配符合发明内容中记载的msu属性匹配规则,再进行端口匹配检查,否则,进入异常处理流程。

●msu端口匹配检查:

端口检查的目的是:检查当前msu调用、返回是否与预期的msu间调用、返回一致,防止改变msu间执行序。具体方式是:1,在msu间调用前,检查当前调用指令的地址值与目标地址是否记录在端口匹配表中。2,在msu间返回时,一个返回指令,可能对应多个合法的返回地址,如果进行出入口的匹配检查,可能导致执行效率降低,一种优选的方案是:在返回时,仅检查返回指令是否为合法的出口。

在msu间调用指令前添加逻辑如下:

通过msu间调用指令所在地址值,在端口匹配表中找到相应的出口,通过此出口,确定其匹配的入口;再判断msu间调用指令目标地址值,是否与该入口地址值一致,如果一致,允许msu间调用指令执行,否则,进入异常处理流程。

在msu间返回指令前添加逻辑如下:通过msu间返回指令所在地址值,在当msu控制对照表中找相应的出口,如果能够找到,说明这是一个合法的出口,允许msu问返回指令执行,否则,进入异常处理流程。

●对msu中非转移指令和内部直接转移指令的检查:

对于非转移指令,可通过编译确定其在所属msu的区域范围内;对于内部直接转移指令,也可在编译阶段确保其目标地址在msu的区域范围内。通过将指令区所在页面设置为只读,可保证指令在运行时不会被更改,为了提高执行效率,一种优选的方案是:依靠编译阶段保证其正确性,在运行时阶段不再对其进行检查。

●对io指令的检查:

从语法树生成汇编指令时,在所有指定的io指令前增加判断逻辑:判断当前msu的类型是否为io指令类型的msu,如是,可继续执行,如不是,则报出异常。

不论io指令是高级代码生成还是直接嵌入的汇编,都需进行此操作,确保可执行程序中所有的io指令前都包含此检查逻辑。

所述io指令为直接对外设进行读写的特殊指令,不同体系的cpu的io指令各不相同,以实际为准,如intel体系下in、out指令。

s-c-a2运行时阶段对msu信息的比对:

通过执行可执行程序中用于msu访问控制逻辑的指令,来实现对msu的访问控制。具体指令参见本实施例中“内存系统装置的制作”。

针对该种内存系统装置制作方式的访问控制应用方式,包括:

s-c-b1编译包含msu的源程序,具体包括:

s-c-b1-1、提取msu信息,具体包括:

s-c-b1-1-1:编写、编译包含msu信息的源程序:

●一种增设语法规则的方式表达msu信息

增设语法规则,使编程阶段完成准确保留程序设计中msu信息,为了兼容性,本规则在c语言的基础上,增设如下语法规则:

其中msu类型代表msu的属性:common_msu代表普通msu、check_msu代表检查msu、terminal_msu代表终端msu、nothing_msu代表空端口msu、share_msu代表共享数据msu。当msu类型为空端口msu时,不需要定义函数的访问标识符。

msu名代表msu的标识信息;一对{}里面的数据和函数,从属于同一个msu。

由inner这个访问标识符标识的函数为msu空端口函数;

由port这个访问标识符标识的函数为msu端口函数;

生效/失效位,记录着msu是否可用,1代表生效,0代表失效。

共享数据msu中只允许定义数据。

指针区域类型:data标识的指针为全局数据区指针;stack标识的指针为栈区指针;heap标识的指针为堆区指针;如果指针定义前不添加指针区域类型标识符,则默认指针为全局数据区指针。

通过增设语法规则实现的一个案例程序是:

编译器通过增设语法规则,在编译阶段对msu访问进行控制:

编译器通过增设语法规则,识别出程序中保留的msu信息,把信息保存在语法树上。供后续步骤使用。

s-c-b1-1-2:内存布局及编址方式

把属于同一msu的指令和数据,以页对齐的形式,分别密排链接,指令保存在指令区、数据保存在数据区。所有msu在同一线性地址空间内,以同一个基址进行统一编址。

s-c-b1-1-3:提取并保存msu信息:

在编译链接阶段,为每个msu建立以下数据,存储在msu的数据区:

当前msu的id;msu控制对照表;端口匹配表;指向msu控制对照表的指针变量;指向端口匹配表的指针变量;用以记录msu栈底地址值的变量。

所述当前msu的id,保存当前msu正在运行的msu的id值,用以在msu控制对照表中找到当前正在运行的msu的信息。

所述msu控制对照表的信息包括:所有msu的信息,具体包括:msu的id号、msu的边界信息、属性信息、端口信息、生效/失效信息。优选的,还包括msu所属用户类型信息,msu所属用户标识信息。表中:

所述msu的id号,通过语法树中保存的不同msu名生成;

所述msu边界信息,包括:指令区边界信息、全局数据区边界信息、堆区边界信息。对于指令区边界信息、全局数据区边界信息,可以通过统计编译生成的指令和全局数据占用空间大小来确定。对于堆区边界信息,由于编译时无法确定需要建立的堆区大小,可以在对照表中先预留表项,等到运行时需要堆区的时候再临时添加信息;

所述msu属性信息,可以根据语法树中记录的msu类型信息来设定;

所述msu端口信息包括:msu的出口信息和msu的入口信;

所述msu的出口信息,包括:其所属的msu的id、出口号、出口地址值;其中出口号为每一个出口的唯一编号,出口地址值为msu间调用/返回指令所在地址值;

所述msu的入口信息,包括:其所属的msu的id、入口号、入口地址值;其中入口号为每一个入口的唯一编号,入口地址值为msu间调用指令的下一条指令地址值,以及端口函数的第一条指令的地址值;

所述生效/失效信息,通过语法树节点中记录的生效/失效标记设置。

所述端口匹配表,为本msu调用其它msu的调用关系集合。其中一个表项,包括:一对有msu间调用关系的出口和入口。

所述指向msu控制对照表的指针变量,用于在检查指令中,访问msu控制对照表。

所述指向端口匹配表的指针变量,用于在检查指令中,访问端口匹配表。

所述用以记录msu栈底地址值的变量,用于在检查指令中,控制当前msu的栈区访问边界。此变量的初始值为对应特权级的栈的栈底地址值。

在每个msu数据区的线性地址空间中,以页对齐的方式预留一段空间,空间大小为页大小的整数倍,将控制对照表设置于其中,其它数据不可存入其中,并保存到可执行文件内。

s-c-b1-2限定msu语法访问规则:

编译器分析语法树中记载的信息,对不符合msu访问规则的代码不予生成可执行程序,如符合,进入后续的生成汇编代码、链接的流程。

s-c-b1-3生成与msu访问相关的指令:

生成的msu间调用访问转移指令为:call目标地址值。msu间调用时,不允许通过call指令进行间接转移。

生成的msu间返回访问转移指令为:ret。

访问本msu全局数据、堆数据的指令与访问栈数据的指令一致。

s-c-b2运行时阶段对msu信息的处理

创建进程时,为每个msu申请独立的页面,用以加载上述用于边界访问控制的数据,根据进程的用户id、用户角色类型,设置msu属性中的msu所属用户标识信息、msu所属用户类型信息,页面中不能存在其它内容,为了保证数据的安全,一种优选的方案是:加载后将页面设置为只读,在需要修改这些数据时,关闭只读,修改完成后,再重新设置为只读。

创建进程时,由操作系统为进程分配栈区域,一种优选的方案是:栈的大小被设置为实际适用的大小,而非整个线性地址空间的大小,代表栈的共享数据msu的边界设置为与栈的边界相同。

如果操作系统加载程序时,msu的内存分配布局,与编译链接时,确定的用于边界访问控制的数据不同,则需将该数据改为与实际相符。

msu中程序执行时,如果需要申请/释放堆空间,则通过专用系统调用进入内核,由内核中专用程序为其申请/释放堆空间,并相应修改msu控制对照表中堆区域边界值。

msu中程序执行时,如果需要添加/删除msu,则通过专用系统调用进入内核,由内核中专用程序为其添加/删除msu,并修改相应用于边界访问控制的数据。

在risc-v体系下,msu的具体实施方式,进一步包括一种安全装置,和/或,以及与之匹配的保障装置的具体实施方式s1:

所述实施方式s1的特征为:在risc-v体系下,内存区域边界信息由内存地址值构成,第一类指令执行和中断/异常产生分别转移至不同中转区域,并通过专用存储设施记录安全装置所需信息和保障装置所需的状态数据,本实施例优选的存储设施为:专用寄存器。

安全装置的实施方式:

s-a-a1、设置记录确保安全装置有效所需信息的专用寄存器组,用以记录各类内存区域边界信息、中断现场信息、跨区域所需特定地址信息、安全装置开启/关闭标识信息

处理器在运行过程中需动态获得一些数据以保证安全装置的正常运行,因此添加一些寄存器供处理器使用。在精简指令集rsic-v中,有4096个预设控制状态寄存器供使用,我们选择其中的一些作为增设的控制状态寄存器。为了与rsic兼容,除了满足其寄存器的编码规则与使用规范外,还为寄存器增添一种属性,即,与安全装置相关性,所述相关性是指:如果寄存器与安全装置相关,则对该寄存器的访问属性增加内容为:只有“当前模式安全装置失效”或“当前模式安全装置生效且当前处于中转区域”时,可访问,否则访问报异常;如果寄存器与安全装置不相关,则按照rsic-v现有规则对寄存器进行访问。

增设寄存器:csr_emsur(32/64位)

访问属性:r/w:可读写;privilege:s;standard/not:非标准;与安全装置相关性:相关

功能描述:用来标识不同模式下安全装置是否生效。

寄存器中各个位信息含义:

0位(表示u模式下是否开启安全装置):

为0,表示关闭

为1,表示开启

1位:(表示s模式下是否开启安全装置)

为0,表示关闭

为1,表示开启

增设寄存器:csr_cmsattr(32/64位)

访问属性:r/w:可读写;privilege:u;standard/not:非标准;与安全装置相关性:相关

功能描述:用来标识当前是否检查指令边界

寄存器中各个位信息含义:

0位(是否检查指令边界标识位):

为0,表示需要检查

为1,表示不需要检查

增设寄存器:csr_cmslside(32/64位)

访问属性:r/w:可读写;privilege:u;standard/not:非标准;与安全装置相关性:相关

功能描述:用来保存连续内存区域低端地址值。

增设寄存器:csr_cmshside(32/64位)

访问属性:r/w:可读写;privilege:u;standard/not:非标准;与安全装置相关性:相关

功能描述:用来保存连续内存区域高端地址值。

增设寄存器:csr_cmsebp(32/64位)

访问属性:r/w:可读写;privilege:u;standard/not:非标准;与安全装置相关性:相关

功能描述:用来保存栈区域高端地址值。

增设寄存器:csr_cmsesp(32/64位)

访问属性:r/w:可读写;privilege:u;standard/not:非标准;与安全装置相关性:相关

功能描述:用来保存栈区域低端地址值。

增设寄存器:csr_cbmsebp(32/64位)

访问属性:r/w:可读写;privilege:u;standard/not:非标准;与安全装置相关性:相关

功能描述:用来保存其它种类数据所在连续内存区域高端地址值。

增设寄存器:csr_cbmsesp(32/64位)

访问属性:r/w:可读写;privilege:u;standard/not:非标准;与安全装置相关性:相关

功能描述:用来保存其它种类数据所在连续内存区域低端地址值。

增设寄存器:csr_mschaddr(32/64位)

访问属性:r/w:可读写;privilege:s;standard/not:非标准;与安全装置相关性:相关

功能描述:用来保存第一类指令转移目标地址值。

增设寄存器:csr_utmslside(32/64位)

访问属性:r/w:可读写;privilege:u;standard/not:非标准;与安全装置相关性:相关

功能描述:中断或异常在u模式下产生时,用来临时保存csr_cmslside寄存器数值。

增设寄存器:csr_utmshside(32/64位)

访问属性:r/w:可读写;privilege:u;standard/not:非标准;与安全装置相关性:相关

功能描述:中断或异常在u模式下产生时,用来临时保存csr_cmshside寄存器数值。

增设寄存器:csr_utmsattr(32/64位)

访问属性:r/w:可读写;privilege:u;standard/not:非标准;与安全装置相关性:相关

功能描述:中断或异常在u模式下产生时,用来临时保存csr_cmsattr寄存器数值。

增设寄存器:csr_stmslside(32/64位)

访问属性:r/w:可读写;privilege:s;standard/not:非标准;与安全装置相关性:相关

功能描述:中断或异常在s模式下产生时,用来临时保存csr_cmslside寄存器数值。

增设寄存器:csr_stmshside(32/64位)

访问属性:r/w:可读写;privilege:s;standard/not:非标准;与安全装置相关性:相关

功能描述:中断或异常在s模式下产生时,用来临时保存csr_cmshside寄存器数值。

增设寄存器:csr_stmsattr(32/64位)

访问属性:r/w:可读写;privilege:u;standard/not:非标准;与安全装置相关性:相关

功能描述:中断或异常在s模式下产生时,用来临时保存csr_cmsattr寄存器数值。

增设寄存器:csr_smsirladdr(32/64位)

访问属性:r/w:可读写;privilege:s;standard/not:非标准;与安全装置相关性:相关

功能描述:用来保存s模式下中断服务程序内存区域低端地址值。

增设寄存器:csr_smsirhaddr(32/64位)

访问属性:r/w:可读写;privilege:s;standard/not:非标准;与安全装置相关性:相关

功能描述:用来保存s模式下中断服务程序内存区域高端地址值。

增设寄存器:csr_umsirladdr(32/64位)

访问属性:r/w:可读写;privilege:u;standard/not:非标准;与安全装置相关性:相关

功能描述:用来保存u模式下中断服务程序内存区域低端地址值。

增设寄存器:csr_umsirhaddr(32/64位)

访问属性:r/w:可读写;privilege:u;standard/not:非标准;与安全装置相关性:相关

功能描述:用来保存u模式下中断服务程序内存区域高端地址值。

s-a-a2、在安全装置中增加检查待执行的指令的地址是否跨边界的功能

只有在当前模式开启安全装置,且当前需要进行指令边界检查时,进行边界检查,即检查当前程序计数器中数值是否处于处理器认定的内存区域范围内,如果不超出范围,允许执行,否则报异常。具体包括:

只有在csr_emsur寄存器(如果当前s模式,1位,如果当前u模式,0位)为1,且csr_cmsattr寄存器0位为0,的情况下,进行边界检查,检查内容是:如果pc小于csr_cmslside寄存器中数值或大于等于csr_cmshside寄存器中数值,报异常,否则正常执行。

检查时机:优选的,处理器通过tlb(translationlookasidebuffer)识别到本次处理指令地址值与上次处理的指令地址值不属同一页面时或每次使用程序计数器的值时校验其合法性,二者选一。

优选的:进行边界检查时,安全机制开启/关闭检查、csr_cmsattr寄存器属性位检查、比较高端地址和低端地址的动作,可以通过增加流水线功能的方式同时进行,以此达到不增加流水线中指令执行周期,进而不降低流水线整体执行效率的目的。

s-a-a3、在安全装置中增加检查数据访问是否跨边界的功能

只有在当前模式开启安全装置的情况下,对访问普通数据区域的特定指令,进行边界检查,即检查数据访问目标地址是否处于普通数据区域内,如果不超出范围,允许执行,否则报异常,具体包括:

增加load、store指令功能:

增加功能为:

只有在csr_emsur寄存器(如果当前s模式,1位,如果当前u模式,0位)为1的情况下,进行边界检查,检查内容是:如果数据访问内存地址值小于csr_cmslside寄存器中数值或大于等于csr_cmshside寄存器中数值,报异常,否则正常执行。

只有在当前模式开启安全装置的情况下,对访问栈区域的特定指令,进行边界检查,即检查数据访问目标地址是否处于栈区域内,如果不超出范围,允许执行,否则报异常,具体包括:

增加sload、sstore指令:

格式和功能与risc-v现有体系下load、store指令一致。

增加功能为:

只有在csr_emsur寄存器(如果当前s模式,1位,如果当前u模式,0位)为1的情况下,进行边界检查,检查内容是:如果访问内存地址值小于csr_cmsesp寄存器中数值或大于等于csr_cmsebp寄存器中数值,报异常,否则正常执行。csr_emsur寄存器为0时执行,报异常。

只有在当前模式开启安全装置的情况下,对访问其它种类数据所在区域的特定指令,进行边界检查,即检查数据访问目标地址是否处于其它种类数据所在区域内,如果不超出范围,允许执行,否则报异常,具体包括:

增加bload、bstore指令:

格式和功能与risc-v现有体系下load、store指令一致。

增加功能为:

只有在csr_emsur寄存器(如果当前s模式,1位,如果当前u模式,0位)为1的情况下,进行边界检查,检查内容是:如果访问内存地址值小于csr_cbmsesp寄存器中数值或大于等于csr_cbmsebp寄存器中数值,报异常,否则正常执行。csr_emsur寄存器为0时执行,报异常。

优选的:进行边界检查时,安全装置开启/关闭检查、比较高端地址和低端地址的动作,可以通过增加流水线功能的方式同时进行,以此达到不增加流水线中指令执行周期,进而不降低流水线整体执行效率的目的。

s-a-a4、在安全装置中增加第一类指令,发起跨区域的转移动作及设置确保安全装置有效所需信息:

采用优选方案,开启安全装置前提下,第一类指令可执行,不切换边界值,并标识中转区域中不做指令边界检查,保存下一条指令地址,并将程序计数器的值设置为中转代码的首地址。具体包括:

指令格式:jalrmsurars

功能:

只有在当前模式开启安全装置前提下,即只有在csr_emsur寄存器(如果当前s模式,1位,如果当前u模式,0位)为1,指令可执行,否则报异常;指令执行时,将csr_cmsattr寄存器0位置1,用pc+4设置rd,rd默认为x1,即ra,用csr_mschaddr寄存器中数值设置pc。rs用来指定目标地址值。

s-a-a5、在安全装置中增加第二类指令,完成到目标区域的转移及设置确保安全装置有效所需信息:

采用优选方案,开启安全装置前提下,第二类指令可执行,不切换边界值,并标识从中转区域转移到外部区域后,做指令边界检查,执行转移到的中转区域向外的转移。具体包括:

指令格式:jalrchmsurars

功能:

只有在当前模式开启安全装置前提下,即只有在csr_emsur寄存器(如果当前s模式,1位,如果当前u模式,0位)为1,指令可执行,否则报异常;指令执行时,将csr_cmsattr寄存器0位置0,用rs寄存器中数值设置pc。

优选的,rs中保存b指令中指定的目标地址值。

s-a-a6、在安全装置中增加中断/异常产生时的功能,保存确保安全装置有效的现场信息及设置确保安全装置有效所需信息:

将中断/异常发生时,将确保安全装置有效所需现场信息,保存进安全装置中相应的专用寄存器,优选的,还要保存中断/异常发生时是否需要检查指令边界标识信息;将装置中专用边界寄存器的值,设置为中断/异常转移中转区域的边界信息;转移至中断服务程序的入口地址;其余操作与现有中断、异常的处理一致。具体包括:

中断或异常产生时:

如果当前模式为u,则检查中断委托到的模式:

如果委托到u模式,则检查u模式下是否打开安全装置,即检查csr_emsur寄存器0位是否为1,如果为1,用csr_utmsattr寄存器保存csr_cmsattr寄存器的数值,把csr_cmsattr寄存器0位置1,分别用csr_utmslside、csr_utmshside寄存器保存csr_cmslside、csr_cmshside寄存器的数值,之后分别用csr_umsirladdr、csr_umsirhaddr这两个寄存器的值设置csr_cmslside、csr_cmshside寄存器,最后沿用risc-v现有规则转移至中断服务程序入口地址;

如果委托到s模式,则检查s模式下是否打开安全装置,即检查csr_emsur寄存器1位是否为1,如果为1,则用csr_stmsattr寄存器保存csr_cmsattr寄存器的数值,把csr_cmsattr寄存器0位置1,分别用csr_stmslside、csr_stmshside寄存器保存csr_cmslside、csr_cmshside寄存器的数值,之后分别用csr_smsirladdr、csr_smsirhaddr这两个寄存器的值设置csr_cmslside、csr_cmshside寄存器,最后沿用risc-v现有规则转移至中断服务程序入口地址;

如果当前模式为s,且委托到的模式是s或u,则检查s模式是否打开安全装置,即检查csr_emsur寄存器1位是否为1,如果为1,则用csr_stmsattr寄存器保存csr_cmsattr寄存器的数值,把csr_cmsattr寄存器0位置1,分别用csr_stmslside、csr_stmshside寄存器保存csr_cmslside、csr_cmshside寄存器的数值,之后分别用csr_smsirladdr、csr_smsirhaddr这两个寄存器的值设置csr_cmslside、csr_cmshside寄存器,最后沿用risc-v现有规则转移至中断服务程序入口地址。

s-a-a7、在安全装置中增加中断返回时的功能,恢复确保安全装置有效的现场信息:

处理器根据专用寄存器中保存现场信息,恢复确保安全装置有效所需中断/异常现场信息到相应的专用寄存器,优选的,还要恢复中断/异常发生时是否需要检查指令边界标识信息。具体包括:

在当前模式打开安全装置的前提下,即在csr_emsur寄存器(如果当前s模式,1位,如果当前u模式,0位)为1的前提下,指令执行时,如果当前模式为s,则用csr_stmsattr寄存器数值设置csr_cmsattr寄存器的数值,用csr_stmslside、csr_stmshside寄存器恢复csr_cmslside、csr_cmshside寄存器的数值;如果当前模式为u,则用csr_utmsattr寄存器数值设置csr_cmsattr寄存器的数值,用csr_utmslside、csr_utmshside寄存器恢复csr_cmslside、csr_cmshside寄存器的数值。

保障装置的实施方式:

s-a-a8、设置记录保障装置所需的状态数据的专用寄存器组,记录当前是否处于中转区域:

沿用安全装置的寄存器:csr_cmsattr(32/64位)

访问属性:r/w:可读写;privilege:u;standard/not:非标准;与保障装置相关性:相关

功能描述:用来标识当前是否处于第一类指令转移到的中转区域,是否处于中断/异常产生转移到的中转区域。

寄存器中各个位信息含义:

0位(当前是否处于中转区域标志位):

为0,表示当前不处于中转区域

为1,表示当前处于中转区域

1位(当前处于中转区域种类标志位):

为0,表示当前处于第一类指令转移到的中转区域

为1,表示处于中断/异常产生转移到的中转区域

特别的:安全装置和保障装置共用csr_cmsattr寄存器,这是因为,安全装置中规定,只有在中转区域中不进行指令边界检查;保障装置也通过当前是否处于中转区域,来限制是否能访问与安全装置相关寄存器,以及是否能执行合法的跨区域转移执行,这样,csr_cmsattr寄存器0位,用同样的数值,既可以标识当前是否不需要指令检查,又可以标识当前是否处于中转区域,两者并不冲突。

s-a-a9、识别需要保障的寄存器的方式:

为了方便的识别到控制状态寄存器是否与安全装置相关,具体的处理方式为:

第一种:

在““种::可读写;privilege:s;standard/not:非标准”这一属性组合所对应的64个预设寄存器空间的某一空余的连续编址位置处,放置“预设寄:可读写;privilege:s;standard/not:非标准”非对应的与安全装置相关的控制状态寄存器;

硬件设备识别控制状态寄存器的时,只要判断是否处于特定的连续编址范围内,就可以分辨出与安全装置相关的控制状态寄存器。

第二种:

和第一种相比,为了更简化判断逻辑,把与安全装置相关控制状态寄存器的编址位置从高地址往低地址连续排列,如(0位到5位:从111111往低地址排),这样只要识别5位为1,就可以识别出它与安全装置相关。

s-a-a10、访问专用寄存器时增加访问控制的功能:

沿用并增加risc-v体系下csrr、csrw、csrwi指令功能,具体实现方式包括:

处理器通过增设寄存器中记录信息,来履行相关性规则,以及risc-v中现有控制状态寄存器访问规则:只有“当前模式安全装置关闭”或“当前模式安全装置开启且当前处于中转区域时,才可通过csrr、csrw、csrwi指令访问与安全装置相关的寄存器,否则访问报异常,即,只有在csr_emsur寄存器(如果当前s模式,1位,如果当前u模式,0位)为0,或者,csr_emsur寄存器(如果当前s模式,1位,如果当前u模式,0位)为1且csr_cmsattr寄存器0位为1,的情况下,才能通过csrr、csrw、csrwi指令访问相关寄存器;

特别的:如果当前模式为m,默认安全装置失效。

s-a-a11、允许及限制访问安全装置和保障装置的专用寄存器以及执行跨区域转移执行和专用寄存器访问指令的条件:

允许在关闭安全装置时设置安全装置和保障装置的专用寄存器,具体包括:在csr_emsur寄存器(如果当前s模式,1位,如果当前u模式,0位)为0的情况下,允许设置。

允许第一类指令、第二类指令、中断/异常、中断返回、专用寄存器访问指令,设置安全装置和保障装置的专用寄存器,具体包括:jalrmsu指令执行时以及中断/异常产生时,将csr_cmsattr寄存器0位置1;jalrchmsu指令执行时,用rd寄存器中数值设置csr_cmsattr寄存器,rd默认为x1,即ra,优选的,如果目标区域为非中转区域,ra寄存器0位置0,1位置0,如果目标区域为中断/异常转移中转区域,ra寄存器0位置1,1位置1;中断返回时,恢复csr_cmsattr寄存器数值;允许通过csrr、csrw、csrwi指令访问增设寄存器。

允许中断/异常保存中断现场的安全装置和保障装置的专用寄存器中信息,具体包括:保存的增设寄存器信息与安全装置和保障装置中保存增设寄存器信息一致。

其余情况下不得改写安全装置和保障装置的专用寄存器,具体包括:在安全装置开启的前提下,如果处于非中转区域,不允许设置与安全装置和保障装置相关的寄存器,即,在csr_emsur寄存器(如果当前s模式,1位,如果当前u模式,0位)为1的情况下,如果csr_cmsattr寄存器0位为0,不允许设置相关寄存器。

在第一类指令执行转移到的中转区域中,不允许执行第一类指令;允许执行第二类指令;允许执行专用寄存器访问指令,不允许执行中断返回指令,具体包括:在安全装置开启的前提下,即在csr_emsur寄存器(如果当前s模式,1位,如果当前u模式,0位)为1的情况下,如果csr_cmsattr寄存器0位为1,1位为0,不允许执行jalrmsu指令,允许执行jalrchmsu指令,允许执行csrr、csrw、csrwi指令,不允许执行中断返回指令;

在中断/异常产生转移到的中转区域中,不允许执行第二类指令;允许执行第一类指令;允许执行专用寄存器访问指令,允许执行中断返回指令,具体包括;在安全装置开启的前提下,即在csr_emsur寄存器(如果当前s模式,1位,如果当前u模式,0位)为1的情况下,如果csr_cmsattr寄存器0位为1,1位为1,不允许执行jalrchmsu指令,允许执行jalrmsu指令,允许执行csrr、csrw、csrwi指令,允许执行中断返回指令;

在非中转区域中,允许执行第一类指令,不允许执行第二类指令,不允许执行专用寄存器访问指令,不允许执行中断返回指令,具体包括:在安全装置开启的前提下,即,在csr_emsur寄存器(如果当前s模式,1位,如果当前u模式,0位)为1的情况下,如果csr_cmsattr寄存器0位为0,允许执行jalrmsu指令,不允许执行jalrchmsu指令,不允许执行csrr、csrw、csrwi指令,不允许执行中断返回指令。

所述方法e5的具体实施方式,进一步包括:将被保护对象置于msu硬件装置中,通过只读等属性信息保护对象,再通过msu确保属性信息、msu自身控制信息不被破坏,进一步的,msu边界、端口都是通过cpu硬件认定的,不可能被破坏,由此形成完整的安全保护链。

实施例5:在linux操作系统下、在80x80体系下,所述彻底消除ddcas集合以形成安全授权体系的方法d3的具体实施方式:

所述解决方案d3的具体实施方式,进一步包括:为消除授权体系各层ddcas进行预处理的方法f1的具体实施方式,和/或,消除授权基础层ddcas的方法f2的具体实施方式,和/或,消除授权提供层的ddcas的方法f3的具体实施方式,和/或,消除授权检查层ddcas的方法f4的具体实施方式,和/或,安全辅助措施的方法f5的具体实施方式。

所述方法f1的具体实施方式,进一步包括:确保给定操作系统授权基础层相关的硬件电路与指令集架构规定保持一致的方法f1-1的具体实施方式,和/或,为给定操作系统各层功能实现增设硬件装置的方法f1-2的具体实施方式,和/或,消除隐藏在给定操作系统各层中各类非法指令、代码、执行序分支的方法f1-3的具体实施方式。

所述方法f1-1的具体实施方式,进一步包括:通过方法e1,对与前述给定操作系统授权基础层相关的硬件电路进行硬件一致性验证,以电路运行在任何阶段都应与指令集架构规定保持一致为标准,就能够发现隐藏于其中的ddcas5,将其全部消除,和/或,

优选的:针对熔断漏洞,我们更改硬件电路设计,取消了低特权指令先将高特权数据读出内存再做特权级判断处理的设计,代之以先做特权级判断,与特权级规则不一致的立即报异常,确保用户程序任何时刻都无法访问内核数据,确保与指令集架构规定保持一致。以此类推,就可以消除电路实现设计中不符合指令集架构规定的ddcas5。

所述方法f1-2的具体实施方式,进一步包括:为了支持用户程序和内核程序分立于不同线性地址空间的方案,需要更改指令集架构中所有涉及特权级转换的指令或硬件机制,使其能自动切换一级页表基地址存储装置的值,和/或,

msu包括安全装置和保障装置,安全装置需要增设当前msu边界地址寄存器、中断服务程序专用msu边界地址寄存器、msu之间专用的转移指令、当前msu属性寄存器、当前msu栈底寄存器,保障装置需要增设中转msu入口地址寄存器、中转msu专用的向外部转移指令,和/或,

为了保护函数调用返回地址,和/或,中断返回地址,和/或,钩子,需要使处理器认定特殊只读存储区,并增设特定指令,确保只有所述特定指令能够写入/清除该存储区内容,其它指令都不可以。

所述方法f1-3的具体实施方式,进一步包括:通过方法e2,采用专用源代码扫描工具,扫描内核代码中用于设置授权基础层相关的控制寄存器的指令,除设计者指定之外,其余这类指令的存在都有能力取代原设计,必须将其全部清除,以此消除ddcas6-2,和/或,

通过方法e2的具体实施方式,利用扫描隐藏代码和隐藏执行序分支的专用工具查找源代码中隐藏代码和隐藏执行序分支,在专用工具的监控下执行授权规则标准测试集,就可以找到标准测试集并未执行到的代码和执行序分支,排除异常处理程序,其余就是隐藏代码和隐藏执行序分支,这些隐藏代码和隐藏执行序完全不符合授权规则,甚至都不是原设计的一部分,必须将其彻底清除,而且清除工作不会给操作系统的正常运行带来任何不好的影响,以此消除ddcas9-1。

所述方法f2的具体实施方式,进一步包括:消除ddcas隔离不同用户程序内核程序使其不能相互转移或传递数据的方法f2-1的具体实施方式,和/或,消除ddcas使用户程序不能合法的设置访问外设的特权的方法f2-2的具体实施方式,和/或,消除ddcas保护给定操作系统授权基础层相关控制数据及程序不被破坏的方法f2-3的具体实施方式,和/或,消除ddcas确保给定操作系统授权基础层剥夺设置以及双向专用通道设置不被更改或取代的方法f2-4的具体实施方式。

所述方法f2-1的具体实施方式,进一步包括:利用线性地址空间的天然约束力,把用户程序和内核程序分别置于独立的线性地址空间,同时改造硬件,目的是当需要改变内核态、用户态时,硬件同时自动切换一级页表基地址存储装置的值,确保切换正确,以此消除ddcas4-1,

进一步的,此消除ddcas4-1的方法达成的效果是:在事实上消除同一线性地址空间不同特权级共存,而且使不同特权空间中程序无法在线性层面直接转移,

和/或,

通过方法e4,利用msu分别封装内核中所有程序,在一个msu对应的线性地址空间中只能有一种特权级,以此消除ddcas4-1,

利用方法e4消除ddcas4-1的方法达成的效果是:相当于在线性地址层面废除了不同特权级重叠。而且这样封装,msu中内核程序无法突破边界转移到用户程序,也就更不存在用户程序转移到内核了

和/或,

所述方法f2-2的具体实施方式,进一步包括:废除内核提供给用户程序可恢复直接访问外设能力的系统调用,可以根据需求增设系统调用,确保剥夺的实现设计与彻底剥夺用户程序直接访问外设能力这一要求一致,以此消除ddcas4-2。

所述方法f2-3的具体实施方式,进一步包括:通过方法e4,利用msu封装与授权基础层相关的数据结构和专用程序,利用msu能够拦截跨非法边界转移、非法访问数据的能力,确保它们在运行时不会随意转移、数据不会被破坏,时刻与软件设计要求保持一致,以此消除ddcas6-1;

优选的:保存在内核栈中的访问外设所需特权信息,用msu封装,在msu的保护下不会被攻击者更改,确保对用户程序直接访问外设能力的剥夺总是有效。

所述方法f2-4的具体实施方式,进一步包括:通过方法e4,利用msu可以设置禁止执行指令的特点,将设计者指定之外的所有msu都设置为禁止执行用于设置授权基础层相关的控制寄存器的指令,以此消除ddcas6-2。

所述方法f3的具体实施方式,进一步包括:消除ddcas确保合法引入的外源代码即便有超越授权的设计也无法形成超越授权的结果的方法f3-1的具体实施方式,和/或,消除ddcas确保设计者提供代码中不存在违反授权规则的设计的方法f3-2的具体实施方式,和/或,消除ddcas阻止原子授权操作之间运行时非法转移的方法f3-3的具体实施方式,和/或,消除ddcas阻止原子授权操作在运行时更改边界的方法f3-4的具体实施方式,和/或,消除ddcas内存、外设中授权数据不被非法访问的方法f3-5的具体实施方式。

所述方法f3-1的具体实施方式,进一步包括:通过方法e4将合法引入的外源代码封装进独立的msu中,利用msu可以禁止执行约定指令的特点,禁止执行可以导致恢复“剥夺”的特殊指令,使其无法恢复“剥夺”;

利用msu对跨边界转移、数据访问的拦截特性,拦截一切可能造成与原子授权操作边界和授权数据访问的不一致的访问,使其无法突破原子授权操作的边界;

利用msu只能通过匹配端口向其他msu转移的特性,使其与操作系统程序封装的msu端口对接,确保其只能通过端口与外部进行交互,即不影响合成原子授权操作,又可以有效的排斥不符合端口匹配规则的非法操作及传递非法参数。确保运行时正常的原子授权操作与设计原意保持一致,

总之,使其即使有超越授权的设计也无法形成超越授权的结果,以此消除ddcas9-2。

所述方法f3-2的具体实施方式,进一步包括:废除现有同权机制,把所有由同权引入的身份信息全部清除,只用用户真实id信息作为授权检查时判断用户要素的唯一依据,确保授权体系的实现设计完全符合授权规则,从设计层面彻底消除通过转变身份实现改变授权状态的可能,同时,用委托访问授权资源代替同权访问授权资源,

优选的:如用户a的进程需要访问用户b某文件,首先由用户a以进程间通信的方式发送自己的uid、文件名等申请信息给用户b的进程,用户b进程程序检查申请,如允许,则替用户a打开文件并将结果同样以进程间通信形式反馈给用户a,以此对同权访问等效替代。如用户b尚未登录,系统会将用户a申请转达给root用户,由root用户临时创建用户b的进程完成工作,由于root用户有权力访问所有授权资源,所以完成此工作完全符合授权规则。不难发现,用户a在整个访问过程中没有机会改变身份为用户b,无法转变授权状态,此以消除ddcas10。

所述方法f3-3的具体实施方式,进一步包括:通过方法e4,利用msu封装原子授权操作,利用msu拦截不经端口的跨边界转移的特性,阻止原子授权操作之间的非法转移,应用程序无法借此增加执行序拓扑结构,也就无法因此改变授权状态,确保运行时与源代码层面的原子授权操作边界一致,此以消除ddcas8-1。

所述方法f3-4的具体实施方式,进一步包括:在原子授权操作的起始位置,增设确认原子授权操作原意的逻辑,并增设cpu装置存储原意信息,同时,针对所有与构建原子授权操作边界相关的组内钩子和条件分支设置边界检查逻辑,根据原意信息和当前选择的钩子或条件数据做比对,如果符合,则放行,如果两者不符,说明运行时突破了原子授权操作边界,进入异常处理流程,应用程序无法突破由组内钩子和条件分支构成的边界,也就无法转变授权状态,确保运行时与源代码的原子授权操作边界一致,此以消除ddcas8-2。

所述方法f3-5的具体实施方式,进一步包括:通过方法e4,建立内存数据终端msu保护内存中的授权数据,以及影响原子授权操作访问状态的数据,利用msu拦截跨边界数据访问的特性,拦截除匹配的原子授权操作外的其它内核程序的访问能力,确保运行时对内存授权数据访问的一致性。同时把最终对授权数据直接操作的极少数代码一并封装在内存数据终端msu中,并在端口处设置授权检查。所有对授权数据的访问只能通过msu端口间接进行不能直接访问,彻底杜绝了类似通过溢出一步到位直接访问授权数据的超越授权行为,确保运行时原子授权操作对授权数据访问的一致性,和/或,建立io终端msu保护外设中数据,具体方法与建立内存终端msu的差异是要在cpu中增设io指令执行控制装置,其余一致,确保io指令只能在io终端msu中执行,mmio映射只设置在io终端msu中,确保运行时访问外设数据的一致性,此以消除ddcas8-3。

所述特殊指令包括设置控制寄存器的指令、io指令等。

所述方法f4的具体实施方式,进一步包括:消除ddcas确保授权检查所需用户信息、授权信息以及授权检查代码在运行时不被破坏的方法f4-1的具体实施方式,和/或,消除ddcas确保授权检查不可被避开的方法f4-2的具体实施方式,和/或,消除ddcas确保授权检查结果不被更改的方法f4-3的具体实施方式。

所述方法f4-1的具体实施方式,进一步包括:通过方法e4,建立授权检查msu,把授权检查所需用户信息、授权信息以及授权检查代码封装在此msu中,利用msu拦截跨边界转移、数据访问的特性,拦截其它程序破坏授权检查程序的代码、数据以及转移到它内部执行的能力,同时设立msu端口,合法的对授权信息进行添、删、改操作必须通过msu端口提交申请,经授权检查msu审核通过后由内部程序独立完成,其他功能msu无法干预。在系统启动的过程中,先加载授权检查msu中的代码及数据,确保与功能msu不同源,从而排除一切对授权检查程序可能的干扰、破坏因素,确保授权检查程序在运行时的逻辑与源代码逻辑始终保持一致,使应用程序在任何条件下都没有能力在运行时破坏授权检查程序,无法转变授权状态,以此消除ddcas11-1,和/或,

所述方法f4-2的具体实施方式,进一步包括:通过方法e4,利用msu封装原子授权操作,因为跨msu边界的指令转移和访问数据必须经过端口,只要在msu端口处设立授权检查,就可确保授权检查无法被避开,无法由此改变授权状态,以此消除ddcas11-2,和/或,

所述方法f4-3的具体实施方式,进一步包括:通过方法e4,在运行时层面,授权原子操作从操作起始到完成操作,在所有需要面对选择授权相关要素的操作阶段,都需要分别封装在msu中,并在msu端口处都设置授权检查。所有违背授权规则的选择,其操作结果必定从端口传递出来,在第一时间就会被端口处设立的授权检查程序发现,并进入异常处理流程,确保运行时授权检查与源代码逻辑保持一致,应用程序无法借此改变授权状态,以此消除ddcas11-3。

所述方法f5的具体实施方式,进一步包括:确保处于逻辑起点的程序绝对正确符合设计原意的方法f5-1的具体实施方式,和/或,消除导致原子授权操作边界与设计层面不一致最为突出的因素的方法f5-2的具体实施方式,和/或,通过安全保护链确保页面内容不被非法更改的方法f5-3的具体实施方式。

所述方法f5-1的具体实施方式,进一步包括:通过方法e3,确保给定操作系统授权基础层用户控制剥夺效果和双向专用通道设置的程序,与原设计保持一致,和/或,确保给定操作系统授权提供层,访问内存、外设授权数据的专用程序符合授权规则,在运行时不能更改授权相关要素,和/或,确保给定操作系统授权检查层,授权检查程序,符合授权规则且运行时不能改变授权相关要素。

所述方法f5-2的具体实施方式,进一步包括:消除所述导致原子授权操作边界与设计层面不一致最为突出的因素,具体包括:在内存中设立独立的返回地址信息保存区域,并设置为只读,以保护函数返回地址。增加处理器硬件新指令,只有新指令才能写入/清除返回地址,普通指令不能写,否则处理器报异常。同时更改编译器,在函数调用时,用特定指令写入/清除返回地址。在函数返回时,采用保存的返回地址。这样即便函数返回地址被破坏,也可以用该区域中保存的副本复原,此方法也可用于中断返回地址的保护,这样的独立存储区域还可以用于保存设计者指定的指令指针,以免其被破坏,同时在函数指针使用位置添加判断逻辑,对选择组外函数指针操作做异常处理。

所述方法f5-3的具体实施方式,进一步包括:通过方法e4,利用msu基于硬件对跨边界访问数据的拦截能力,确保内核中所有特定代码所在页面只读等属性不会被更改,确保源代码逻辑内容在运行时不会被更改,与设计层面保持一致,以此消除ddcas8-0。

所述所有特定代码包括与剥夺、专用通道相关的专用代码、原子授权操作相关代码、逻辑原点位置相关代码这些与授权相关的代码。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1