基于Rust語(yǔ)言的安全性增強(qiáng)模型開(kāi)發(fā)方法及系統(tǒng)
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及計(jì)算機(jī)操作系統(tǒng)技術(shù)領(lǐng)域,尤其公開(kāi)了一種基于Rust語(yǔ)言的安全性增強(qiáng)模型開(kāi)發(fā)方法及系統(tǒng)。
背景技術(shù)
[0002] 傳統(tǒng)系統(tǒng)級(jí)編程語(yǔ)言存在內(nèi)存和并發(fā)安全問(wèn)題,而多數(shù)內(nèi)存安全的編程語(yǔ)言存在明顯的運(yùn)行時(shí)開(kāi)銷,導(dǎo)致運(yùn)行效率下降。Rust語(yǔ)言通過(guò)其特有的安全特性(所有權(quán)和生命周期),從本質(zhì)上避免了許多嚴(yán)重的內(nèi)存錯(cuò)誤和并發(fā)錯(cuò)誤。并且Rust所編譯的二進(jìn)制代碼近似于C代碼的執(zhí)行效率。因此,Rust成為近些年最受歡迎的安全編程語(yǔ)言,常被用來(lái)構(gòu)建操作系統(tǒng)和瀏覽器等基礎(chǔ)軟件。然而,現(xiàn)有的Rust編寫的項(xiàng)目仍被發(fā)現(xiàn)存在不少嚴(yán)重的軟件缺陷。例如RustSec?Advisory數(shù)據(jù)庫(kù)已經(jīng)公布了數(shù)百個(gè)Rust漏洞,包括rulex漏洞、static?type?map未維護(hù)等問(wèn)題。Rust語(yǔ)言中的不安全因素成為Rust開(kāi)發(fā)的基礎(chǔ)軟件(如操作系統(tǒng))安全性提升的瓶頸。
[0003] 首先,Rust系統(tǒng)級(jí)項(xiàng)目存在缺陷的主要原因是包含不安全代碼,編譯器無(wú)法對(duì)這些代碼安全性進(jìn)行保證。具體而言,Rust包含兩類編程語(yǔ)言:Safe?Rust和Unsafe?Rust。使用Safe?Rust可以編寫出高性能安全的應(yīng)用程序和庫(kù),是Rust項(xiàng)目中的主要組成部分。
Unsafe?Rust使用“unsafe”關(guān)鍵字繞過(guò)一些安全檢查,執(zhí)行Safe?Rust難以實(shí)現(xiàn)的一些操作,主要包括五種功能:(1)解引用裸指針;(2)調(diào)用不安全函數(shù)或方法;(3)訪問(wèn)或修改可變靜態(tài)變量;(4)實(shí)現(xiàn)不安全trait;(5)按字段訪問(wèn)union。由于Rust語(yǔ)言獨(dú)特的安全機(jī)制(生命周期和所有權(quán)特性),完全基于Safe?Rust編寫的程序可以避免內(nèi)存錯(cuò)誤,Unsafe?Rust的使用是導(dǎo)致系統(tǒng)缺陷的主要原因。然而,從實(shí)際系統(tǒng)設(shè)計(jì)過(guò)程的角度而言,Unsafe?Rust代碼在實(shí)現(xiàn)的過(guò)程中是不可避免。Unsafe?Rust的不可回避性與系統(tǒng)安全性形成沖突,造成基于Rust語(yǔ)言開(kāi)發(fā)的操作系統(tǒng)安全性保障困難。因此,消除或減少Unsafe?Rust的使用是提升系統(tǒng)安全性的重點(diǎn)。
[0004] 其次,Rust系統(tǒng)中大部分缺陷來(lái)源于Unsafe?Rust代碼,但Safe?Rust和Unsafe?Rust的交互也會(huì)加劇Rust系統(tǒng)的不安全。Rust中許多內(nèi)存安全問(wèn)題是由于對(duì)生命周期的錯(cuò)誤理解和使用造成的,如內(nèi)存生命周期(MLC)錯(cuò)誤。當(dāng)Unsafe?Rust與Safe?Rust交互時(shí),顯著增加了生命周期分析和使用的復(fù)雜性,更容易引發(fā)系統(tǒng)缺陷。從Rust語(yǔ)言設(shè)計(jì)本質(zhì)而言,Rust僅使用“unsafe”關(guān)鍵字對(duì)Safe?Rust和Unsafe?Rust進(jìn)行區(qū)分,并沒(méi)有對(duì)安全和不安全操作進(jìn)行隔離。由于Unsafe?Rust操作的不可避免性,從而Unsafe?Rust和Safe?Rust的交互不可避免,其帶來(lái)的安全性問(wèn)題也不可避免。因此,有效地降低Unsafe?Rust和Safe?Rust的交互也是提升系統(tǒng)安全性的關(guān)鍵。
[0005] 最后,為了提高Rust語(yǔ)言開(kāi)發(fā)的軟件的安全性,可以采用形式化的方法對(duì)系統(tǒng)進(jìn)行驗(yàn)證。形式化通過(guò)數(shù)學(xué)的方法,來(lái)證明系統(tǒng)中不存在某個(gè)缺陷,從而完全消除不安全代碼的不安全性。由于操作系統(tǒng)需要驗(yàn)證的不安全代碼量龐大、邊界寬闊,并且內(nèi)核代碼之間的依賴性強(qiáng),導(dǎo)致形式化驗(yàn)證狀態(tài)空間爆炸,并且高度依賴工程師的能力,存在驗(yàn)證的開(kāi)銷高、效率較低的問(wèn)題。因此,形式化的方法通常只能完成對(duì)Rust系統(tǒng)一部分子集的驗(yàn)證,無(wú)法保證整個(gè)系統(tǒng)的安全性。對(duì)于其他Rust系統(tǒng)測(cè)試方案,可以看成靜態(tài)分析和動(dòng)態(tài)檢測(cè)兩類組成。然而,由于Rust發(fā)展年限短等因素,現(xiàn)有的缺陷檢測(cè)方案都存在一定不足。比如,模糊測(cè)試準(zhǔn)確率依賴于分支覆蓋率,存在復(fù)雜性高、用例程序的構(gòu)造復(fù)雜等問(wèn)題;靜態(tài)分析只能對(duì)特定問(wèn)題分析,并且存在假陰性和假陽(yáng)性問(wèn)題。
[0006] 總的來(lái)說(shuō),現(xiàn)有的Rust語(yǔ)言的方法并不能有效、安全和輕松地解決安全問(wèn)題。降低不安全的使用并減少安全代碼和不安全代碼之間的交互,是降低形式化驗(yàn)證復(fù)雜性的關(guān)鍵。