基于Rust语言的安全性增强模型开发方法及系统技术方案

技术编号:38320889 阅读:10 留言:0更新日期:2023-07-29 09:02
本发明专利技术公开了一种基于Rust语言的安全性增强模型开发方法及系统,通过等价功能替代设计:针对访问或修改可变静态变量和union字段两类不安全操作,静态分析不安全原因,使用标准库函数和/或接口对两类不安全操作进行替换;内部不安全封装设计:对于无法直接进行替换的不安全操作,在不安全代码暴露为不安全之前,将无法直接进行替换的不安全操作正确的封装在内部不安全函数中;增加ACSL形式化规约设计:将ACSL形式化规约设计用于封装得到的内部不安全函数中,为内部不安全封装函数增加类ACSL规约验证,提供生命周期支持和限制不安全状态范围集合。本发明专利技术降低形式化验证的复杂性,提升Rust操作系统安全性。提升Rust操作系统安全性。提升Rust操作系统安全性。

【技术实现步骤摘要】
基于Rust语言的安全性增强模型开发方法及系统


[0001]本专利技术涉及计算机操作系统
,尤其公开了一种基于Rust语言的安全性增强模型开发方法及系统。

技术介绍

[0002]传统系统级编程语言存在内存和并发安全问题,而多数内存安全的编程语言存在明显的运行时开销,导致运行效率下降。Rust语言通过其特有的安全特性(所有权和生命周期),从本质上避免了许多严重的内存错误和并发错误。并且Rust所编译的二进制代码近似于C代码的执行效率。因此,Rust成为近些年最受欢迎的安全编程语言,常被用来构建操作系统和浏览器等基础软件。然而,现有的Rust编写的项目仍被发现存在不少严重的软件缺陷。例如RustSec Advisory数据库已经公布了数百个Rust漏洞,包括rulex漏洞、static

type

map未维护等问题。Rust语言中的不安全因素成为Rust开发的基础软件(如操作系统)安全性提升的瓶颈。
[0003]首先,Rust系统级项目存在缺陷的主要原因是包含不安全代码,编译器无法对这些代码安全性进行保证。具体而言,Rust包含两类编程语言:Safe Rust和Unsafe Rust。使用Safe Rust可以编写出高性能安全的应用程序和库,是Rust项目中的主要组成部分。Unsafe Rust使用“unsafe”关键字绕过一些安全检查,执行Safe Rust难以实现的一些操作,主要包括五种功能:(1)解引用裸指针;(2)调用不安全函数或方法;(3)访问或修改可变静态变量;(4)实现不安全trait;(5)按字段访问union。由于Rust语言独特的安全机制(生命周期和所有权特性),完全基于Safe Rust编写的程序可以避免内存错误,Unsafe Rust的使用是导致系统缺陷的主要原因。然而,从实际系统设计过程的角度而言,Unsafe Rust代码在实现的过程中是不可避免。Unsafe Rust的不可回避性与系统安全性形成冲突,造成基于Rust语言开发的操作系统安全性保障困难。因此,消除或减少Unsafe Rust的使用是提升系统安全性的重点。
[0004]其次,Rust系统中大部分缺陷来源于Unsafe Rust代码,但Safe Rust和Unsafe Rust的交互也会加剧Rust系统的不安全。Rust中许多内存安全问题是由于对生命周期的错误理解和使用造成的,如内存生命周期(MLC)错误。当Unsafe Rust与Safe Rust交互时,显著增加了生命周期分析和使用的复杂性,更容易引发系统缺陷。从Rust语言设计本质而言,Rust仅使用“unsafe”关键字对Safe Rust和Unsafe Rust进行区分,并没有对安全和不安全操作进行隔离。由于Unsafe Rust操作的不可避免性,从而Unsafe Rust和Safe Rust的交互不可避免,其带来的安全性问题也不可避免。因此,有效地降低Unsafe Rust和Safe Rust的交互也是提升系统安全性的关键。
[0005]最后,为了提高Rust语言开发的软件的安全性,可以采用形式化的方法对系统进行验证。形式化通过数学的方法,来证明系统中不存在某个缺陷,从而完全消除不安全代码的不安全性。由于操作系统需要验证的不安全代码量庞大、边界宽阔,并且内核代码之间的依赖性强,导致形式化验证状态空间爆炸,并且高度依赖工程师的能力,存在验证的开销
高、效率较低的问题。因此,形式化的方法通常只能完成对Rust系统一部分子集的验证,无法保证整个系统的安全性。对于其他Rust系统测试方案,可以看成静态分析和动态检测两类组成。然而,由于Rust发展年限短等因素,现有的缺陷检测方案都存在一定不足。比如,模糊测试准确率依赖于分支覆盖率,存在复杂性高、用例程序的构造复杂等问题;静态分析只能对特定问题分析,并且存在假阴性和假阳性问题。
[0006]总的来说,现有的Rust语言的方法并不能有效、安全和轻松地解决安全问题。降低不安全的使用并减少安全代码和不安全代码之间的交互,是降低形式化验证复杂性的关键。
[0007]从Rust系统不安全存在因素的角度出发,最小化不安全代码、降低不安全代码和安全代码的交互,从而降低形式化验证的复杂性是提高Rust系统的安全性关键。因此,基于Rust开发的操作系统安全性保证最大的挑战是需要降低Unsafe Rust本身以及与Safe Rust交互带来的不安全性。这就要求操作系统设计时满足:1)消除或减少不安全代码的使用;2)最大限度地减少安全代码与不安全代码之间的非计划交互。因此,需要设计一个新的结构以灵活的方式减少不安全代码的使用,并有效地对安全和不安全代码进行隔离。为了提升操作系统开发效率,并且满足安全性和扩展性方面的需求,新结构最好能同时具备下列特点:1)功能等价的替换。使用功能等价的操作来对不安全代码进行替换,从本质上直接降低Unsafe Rust的使用。2)内部不安全性的封装。对于无法避免的不安全操作,将其封装到一个安全结构的内部,从而降低不安全作用范围和与安全代码的交互,间接的Unsafe Rust的不安全性。3)形式化规约。使用形式化规约来限制不安全的状态空间集合,从而降低Unsafe Rust的不安全性,以及形式化验证的复杂性。
[0008]事实上,这样的设计有助于降低系统的不安全代码的范围,和与安全代码交互带来的不安全性。由于代码量和内核代码之间依赖性是导致形式化验证复杂性的主要原因,因此随着不安全代码量和交互程度的减少,形式化验证的复杂性也会降低,为设计一个真正安全的操作系统提供可能性。这样一个新的结构模型有别于现有的结构,需要设计一个新的安全性增强模型。
[0009]因此,现有Rust系统存在的诸多不安全性因素,是目前亟待解决的技术问题。

技术实现思路

[0010]本专利技术提供了一种基于Rust语言的安全性增强模型开发方法及系统,旨在解决现有Rust系统存在的诸多不安全性因素的技术问题。
[0011]本专利技术的一方面涉及一种基于Rust语言的安全性增强模型开发方法,包括以下步骤:等价功能替代设计:依据事先设置的第一原则,针对访问或修改可变静态变量和union字段两类不安全操作,静态分析不安全原因,使用标准库函数和/或接口对两类不安全操作进行替换;内部不安全封装设计:依据事先设置的第二原则,对于无法直接进行替换的不安全操作,在不安全代码暴露为不安全之前,将无法直接进行替换的不安全操作正确的封装在内部不安全函数中;增加ACSL形式化规约设计:依据事先设置的第三原则,将ACSL形式化规约设计用
于封装得到的内部不安全函数中,为内部不安全封装函数增加类ACSL规约验证,提供生命周期支持和限制不安全状态范围集合。
[0012]进一步地,等价功能替代设计的步骤包括:可变静态变量类型的替代:使用Rust中的智能指针Mutex来替代可变静态变量的使用;同时编译器对智能指针Mutex运行借用检测,若识别到操作违反借用规则进行使用且系统在编译的时候,则本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于Rust语言的安全性增强模型开发方法,其特征在于,包括以下步骤:等价功能替代设计:依据事先设置的第一原则,针对访问或修改可变静态变量和union字段两类不安全操作,静态分析不安全原因,使用标准库函数和/或接口对两类不安全操作进行替换;内部不安全封装设计:依据事先设置的第二原则,对于无法直接进行替换的不安全操作,在不安全代码暴露为不安全之前,将所述无法直接进行替换的不安全操作正确的封装在内部不安全函数中;增加ACSL形式化规约设计:依据事先设置的第三原则,将ACSL形式化规约设计用于封装得到的内部不安全函数中,为内部不安全封装函数增加类ACSL规约验证,提供生命周期支持和限制不安全状态范围集合。2.如权利要求1所述的基于Rust语言的安全性增强模型开发方法,其特征在于,所述等价功能替代设计的步骤包括:可变静态变量类型的替代:使用Rust中的智能指针Mutex来替代可变静态变量的使用;同时编译器对智能指针Mutex运行借用检测,若识别到操作违反借用规则进行使用且系统在编译的时候,则可通过;若识别到操作违反借用规则进行使用且系统在运行时,则会panic并退出;union类型的替代:使用基于自动化特征检测和替代的方法来对union中的操作进行优化;通过检测union的使用,利用struct关键字来对union类型进行替换。3.如权利要求1所述的基于Rust语言的安全性增强模型开发方法,其特征在于,所述内部不安全封装设计的步骤包括:解引用裸指针的封装:通过调整不安全代码的架构,使用内部不安全函数对解引用裸指针的功能进行封装,把unsafe关键字包裹的解引用裸指针功能块转化为调度安全的库函数,在库函数内部使用内部不安全函数进行解引用裸指针的操作;不安全函数和trait的封装:对unsafe函数和trait进行封装优化设计,依据内部不安全性原理,调整unsafe函数块中不安全范围,使用内部不安全块进行替代。4.如权利要求1所述的基于Rust语言的安全性增强模型开发方法,其特征在于,所述增加ACSL形式化规约设计的步骤包括:解引用裸指针:使用

static来显式标注裸指针的生命周期;使用断言对程序运行到此处的状态进行约束,在解引用裸指针前插入断言,对程序执行到此次的内存合法性进行判断,若识到断言代码正确时,则判断运行在断言前的代码是合格的代码;不安全函数和trait:为封装后的不安全函数增加适当的前置和后置条件来注释函数;在函数被调用前,使用断言来检测当前调用环境所提供的状态是否满足要求;在前置条件满足的情况下,同样使用断言来检测后置条件注明函数返回状态。5.如权利要求1所述的基于Rust语言的安全性增强模型开发方法,其特征在于,所述第一原则为功能等效替代原则,用于对于有限类的不安全操作,首先使用功能等价的安全Rust功能进行替代;所述第二原则为内部不安全封装原理,用于对于不可避免并且不能被替代的不安全操作,使用内部不安全性对其进行封装;所述第三原则为增加类ACSL形式化验证原则,用于利用ACSL形式化规约思想对封装的内部不安全函数中的不安全状态集合进行限制。
6.一种基于Rust语言的安全性增强模型开发系统,其特征在于,包括:等价功能替...

【专利技术属性】
技术研发人员:董攀江仁霜黄辰林丁滟蹇松雷谭郁松李宝任怡王晓川张建锋谭霜罗军
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1