宮云戰(zhàn):軟件源代碼安全性測試在區(qū)塊鏈領(lǐng)域的應(yīng)用

軟件源代碼測試是指基于給定的源代碼缺陷模式、對源代碼進(jìn)行測試,以檢查源代碼中是否有相關(guān)缺陷。

在剛剛結(jié)束的2019第四屆中國網(wǎng)絡(luò)信息安全峰會(huì)上,國家互聯(lián)網(wǎng)應(yīng)急中心、區(qū)塊鏈安全技術(shù)檢測中心顧問專家宮云戰(zhàn)教授帶來了題為“軟件源代碼安全性測試在區(qū)塊鏈領(lǐng)域的應(yīng)用”主題分享,以下是宮云戰(zhàn)在峰會(huì)現(xiàn)場的演講內(nèi)容實(shí)錄,未經(jīng)整理。

國家互聯(lián)網(wǎng)應(yīng)急中心、區(qū)塊鏈安全技術(shù)檢測中心顧問專家宮云戰(zhàn)教授

大家好,我是北京郵電大學(xué)的老師,今天給大家報(bào)告一下我們的成果。區(qū)塊鏈?zhǔn)俏覀兤渲械囊徊糠?,?yán)格說我本人不是搞安全的,從上世紀(jì)80年代開始,我在科學(xué)院念書的時(shí)候,當(dāng)年我們最早把可信計(jì)算引到中國來,容錯(cuò)計(jì)算專業(yè)委員會(huì)以可靠計(jì)算為主,因?yàn)樾畔踩@些年產(chǎn)生的矛盾突出,我記得當(dāng)年是上世紀(jì)90年代斯坦福大學(xué)四個(gè)教授,四個(gè)老教授平均年齡差不多得90歲寫了一篇文章是可信計(jì)算的內(nèi)容,可信計(jì)算包括五個(gè)方面,國內(nèi)有很多不同的看法。第一是可靠,第二是可用,可靠性,安全性可能是最重要的兩個(gè)概念,我本人搞可靠性研究,是軟件的可靠性。

我們這幾年做系統(tǒng)的過程中,跟美國相關(guān)單位交流,我們做的可靠也屬于安全的一部分,但是對咱們通常說的安全有點(diǎn)不太一樣,當(dāng)年國家自然科學(xué)基金委員會(huì)搞了有史以來最大的題目就是可信計(jì)算的題目,科技部也搞了一個(gè)1.5億的項(xiàng)目都是關(guān)于可信計(jì)算的,國內(nèi)對可信計(jì)算的概念也討論了很多時(shí)間,我認(rèn)為到現(xiàn)在為止大家比較公認(rèn)就是四個(gè)斯坦福教授文章,從方法,從背景還比較有權(quán)威性。

我今天報(bào)告一下我們做的東西,以這個(gè)為前提最后談一下我們區(qū)塊鏈測試的結(jié)果。

分這么幾個(gè)方面,第一個(gè)關(guān)于源代碼測試的原理和概念,我團(tuán)隊(duì)是做源代碼測試的,我做了大概得20年,源代碼測試從90年代中期我們的神舟一號做軟件開始,我一直是學(xué)測試的,神舟一號的源代碼開始,當(dāng)年的航天部組織我們在北京懂一點(diǎn)兒的人一起參與這個(gè)項(xiàng)目,這時(shí)候就開始了這方面的研究。

軟件的源代碼測試肯定是基于軟件的源代碼學(xué)習(xí)模式,首先定義一下源代碼缺陷什么樣,然后對源代碼進(jìn)行測試,測試方法可以是五花八門,各種各樣,以及源代碼是否有相關(guān)的缺陷。源代碼技術(shù)發(fā)展很早,最早從上世紀(jì)70年代在英國利物浦大學(xué)有一個(gè)教授做相關(guān)的東西,這是一個(gè)雛形。2000年左右出現(xiàn)了很多產(chǎn)品,大概是2001年,2002年,我們和美國有些合作,特點(diǎn)是檢測效率比較高,自動(dòng)化程度比較高,比較好學(xué),也是軟件測試的主流方法,特別是美國是必須要用的,國內(nèi)這兩年我們也在推這個(gè)事,有幾家單位做相關(guān)的工具和研究,現(xiàn)在還局限在一些特殊的領(lǐng)域,大部分國內(nèi)還沒引起足夠的重視。

這是目前軟件測試普通采用的一種辦法,一些IT企業(yè)把這個(gè)方法作為企業(yè)核心競爭力之一,這句話是IBM的高層給我講的,作為他們企業(yè)的軟件核心競爭力之一。

我們看背景,我們說軟件測試,這個(gè)圖是軟件測試的理論基礎(chǔ),或者是工業(yè)化基礎(chǔ),卡內(nèi)基梅隆好多年前做過一個(gè)實(shí)驗(yàn),一般的軟件工程師平均十行就會(huì)犯一個(gè)錯(cuò)誤,每千行有一百個(gè)缺陷,訓(xùn)練之后平均可以減少一倍,每千行可以達(dá)到50個(gè)缺陷,這是我們做軟件措施,我們這個(gè)行業(yè)在工業(yè)化的基礎(chǔ)。NASA是全世界軟件可靠性最高的單位,20年前我接觸他們的工程師給我說,他們要經(jīng)過30次的測試,非常嚴(yán)格。中國的軟件為什么很難走出市場,為什么成不了氣候,有很多其他的原因,我也在工信部,科技部講過好多次,質(zhì)量是我們重要的原因之一,我們的數(shù)據(jù)庫都有,但沒有什么市場。中國的基礎(chǔ)軟件,2015年只有15個(gè)億左右,占整個(gè)中國市場規(guī)模的3%左右,非常少,而且大部分都是部隊(duì)買的。

我看了一下咱們的數(shù)據(jù),我大體算了一下,如果說CMM1產(chǎn)生的軟件可以達(dá)到0.05,CMM5可以達(dá)到0.99。

我們說軟件要經(jīng)過很多步的測試,我把軟件測試分了四大類,以發(fā)現(xiàn)軟件BUG為目標(biāo)的測試也有很多的方法,包括需求,包括設(shè)計(jì),包括代碼測試,包括性能測試,變異測試等等,很多測試我在美國產(chǎn)的軟件里是必須要做的,美國在一九九幾年就設(shè)定了這些標(biāo)準(zhǔn),而且很多是強(qiáng)制性標(biāo)準(zhǔn)。我們國家的軟件到目前為止,國家標(biāo)準(zhǔn)沒有一個(gè)是強(qiáng)制性的,軍隊(duì)有幾個(gè),就國家來看沒有一個(gè)是強(qiáng)制性標(biāo)準(zhǔn),沒有強(qiáng)制性標(biāo)準(zhǔn)大家就可測可不測??梢晕覀冮_鑒定會(huì)的時(shí)候,軟件測試是必須要拿著東西來的,你做個(gè)代碼測試,你把缺陷報(bào)告拿來,設(shè)計(jì)報(bào)告也要拿來。

這個(gè)圖是我們團(tuán)隊(duì)研究了十幾年,十五年的時(shí)間,我們一直在做這個(gè)圖象的事情,這個(gè)圖象有70個(gè)左右的專利,200個(gè)論文左右,我們的主要貢獻(xiàn)是什么呢?抽象解釋不是我提出來的,很早就有,符號執(zhí)行也不是我們提的,我們只是用。今天下午教育部讓我寫一篇文章題目就是符號執(zhí)行。我們技術(shù)團(tuán)隊(duì)有個(gè)最大的貢獻(xiàn)是中間兩個(gè),循環(huán)建模,我們知道傳統(tǒng)的循環(huán)一直都是不處理,我們有01模型或者00模型,循環(huán)一次就完了。比較大的怎么辦?里面的東西基本上不做了,我們采用人工智能建立一個(gè)統(tǒng)一的計(jì)算模型,我?guī)е鴥蓚€(gè)博士做了大概五六年,雖然現(xiàn)在不太好,但至少可以用,我們對循環(huán)建立一個(gè)計(jì)算方法使能夠得到檢測。抽象內(nèi)存建模,現(xiàn)在系統(tǒng)越來越復(fù)雜,如何從底層建立計(jì)算模型,這是我們的貢獻(xiàn),把底層原來不能做的我們都通過一個(gè)模型可以統(tǒng)一的做上去。

中間是我們這么多年一直在做的一個(gè)事情,測試基本的計(jì)算方法,下面是我們做的工具,我們大學(xué)做的東西賣出去不是很容易。

軟件的缺陷模式,最早做的時(shí)候大家都把這個(gè)當(dāng)做不倒翁,包括斯坦福大學(xué)做的,我們做的,這在網(wǎng)上都公開了,沒有什么好保密的。我們在國內(nèi)是最早做這方面的東西,和美國差不多,我們和美國交流的時(shí)候,這個(gè)概念不是我們想出來的,跟美國斯坦福交流了很多,雙方交流他們提出來,還蠻有價(jià)值的。我們基本上從1997年,1998年就做基本的研究,是國內(nèi)最早,差不多20年了,最早的單位之一。

美國沒這么叫,我們寫的書一直這么叫,我們叫軟件的缺陷模式。我們分了四大類,一個(gè)是故障模式,一旦這個(gè)故障被激活,系統(tǒng)就可能發(fā)生運(yùn)行錯(cuò)誤或者崩潰,比方說儲(chǔ)存器泄露。第二類,關(guān)于安全的模式我只是列了一部分,安全的模式比較多,最典型的是最后一個(gè),網(wǎng)站提供了一千多個(gè),我們做了一半,我們現(xiàn)在和公安部也是合作,反正有聯(lián)系,但是這個(gè)產(chǎn)品公安部我們做的還沒用過,我們的產(chǎn)品面向于第一類做的比較多一些,第二類不是很多,我們的用戶對象大多數(shù)在軍隊(duì),軍隊(duì)對這個(gè)問題目前不是特別重視,航空領(lǐng)域用的多一些。CWF網(wǎng)站我們都可以做,而且不是很困難。

第三類叫疑問代碼,疑問代碼是我們想出來的,代碼也沒有什么錯(cuò)誤,但可能隱藏著什么錯(cuò)誤。還有是規(guī)則,現(xiàn)在有很多了,一個(gè)是國際標(biāo)準(zhǔn)5369,是1999年做的標(biāo)準(zhǔn),還有歐洲的MISIR標(biāo)準(zhǔn),像咱們?nèi)A為有自己的代碼標(biāo)準(zhǔn),還有很多大企業(yè)都有標(biāo)準(zhǔn),美國的工具面向于企業(yè)開發(fā)的工具,比如說IBM有什么標(biāo)準(zhǔn),谷歌有什么標(biāo)準(zhǔn),微軟有什么標(biāo)準(zhǔn),每個(gè)企業(yè)都有自己的特點(diǎn)。

國內(nèi)也有其他的工具,我不一一介紹了,我們主要講自己的工具。coverity是斯坦福大學(xué)教授研發(fā),去年被一個(gè)大的企業(yè)收購了。klocwork在中國賣的最好。Fortify主要面對一些語法類的錯(cuò)誤,在中國賣的也不錯(cuò)。我們的工具也做了十幾年,我們也有一個(gè)自己的思想,賣了大概五六十套。

下面主要報(bào)告一下我們的工具,這個(gè)工具我們做的13年,我記得是2001年開始,這個(gè)工具代碼全部是自己做的大概在一百萬行左右。目前適應(yīng)于C++和java,我們誤報(bào)率30%左右,計(jì)算的時(shí)候源代碼分析要進(jìn)行全路徑的計(jì)算,會(huì)產(chǎn)生很多漏報(bào),本來是沒計(jì)算出來,誤報(bào)本來是,你說不是。我們做了一個(gè)實(shí)驗(yàn),誤報(bào)大概10%左右,每天處理一百萬行代碼,我說的一百萬很保守。目前我們做DTSQT版還有Fortran版,2010年賣出去第一套,目前的版本是9.0,基本上我們這個(gè)產(chǎn)品在性價(jià)比上可以和上面三個(gè)工具相抗衡。

這是我們跟他們的對比,Klocwork,我們當(dāng)年想讓工信部的一個(gè)單位給我們統(tǒng)計(jì)一下,2012年的時(shí)候想把美國的三家公司叫到中國打個(gè)比賽,工信部出軟件,我們拿錢看誰測的準(zhǔn),結(jié)果美國回話說有一個(gè)沒興趣,有兩個(gè)說代理商去,中國的代理商測完美國認(rèn)不認(rèn)可,所以這個(gè)事就不了了之了,然后我們自己做了一下實(shí)驗(yàn),這個(gè)圖是C語言的代碼,這是測的結(jié)果,這個(gè)事沒有得到Klocwork的認(rèn)可,我們的數(shù)據(jù)在我們的網(wǎng)站上,我們做了大量的數(shù)據(jù),給大家報(bào)告一下。

這是給Coverity做的,我們當(dāng)年只拿了一個(gè)軟件,他也不愿意給你用,他主要是面向安全,兩家不是很交叉,這個(gè)東西也沒有什么可比性,但我們大概測出來600多,他測出來這么多,他有一個(gè)特點(diǎn)是測的比較準(zhǔn),誤報(bào)率比較低。我們也可以做得到,剛才瑞星講的怎么樣降低誤報(bào),不一樣,現(xiàn)在軍隊(duì)的要求是寧可誤報(bào)一千也不漏一個(gè),做銀行軟件庫比較大就要采取這個(gè)策略。

這是跟Fortify的比較,他和我們不是一個(gè)檔次,這兩年好像有很大的進(jìn)步,咱們國內(nèi)買了很多,價(jià)格稍微便宜一點(diǎn)兒,Coverity得一百萬,F(xiàn)ortify是針對語法類的,我們是對語義類的,我們大致做了一個(gè)比較。

這是我們測試的結(jié)果,給大家報(bào)告一下,比如說對當(dāng)時(shí)神舟7的測試結(jié)果,這個(gè)軟件是當(dāng)年用的過程中也發(fā)現(xiàn)問題,后來我們測了一下。對嫦娥2的額測試結(jié)果,嫦娥2測的數(shù)據(jù)故障量還是蠻多的,最后一行是人工確,大家簡單看一下,這是發(fā)現(xiàn)6個(gè)嚴(yán)重故障,3個(gè)非法計(jì)算等等。這是對天宮1號的測試結(jié)果,比如說第一個(gè)是一萬多行發(fā)現(xiàn)28個(gè)錯(cuò)誤,疑問代碼12個(gè)。這是對航天五院衛(wèi)星的測試結(jié)果,這次報(bào)告的結(jié)果得了單位的認(rèn)可,有單位的蓋章,我們兩家共同認(rèn)為這是一個(gè)錯(cuò)誤。

這個(gè)圖想說明什么呢?想說明目前開源軟件的現(xiàn)狀,我們對開源軟件做了一個(gè)測試,基本上Java每千行有一個(gè)到兩個(gè)缺陷左右,安全漏洞java有一個(gè)左右,這是大致的情況,目前開源軟件基本上故障率會(huì)達(dá)到一個(gè)左右,這還是不錯(cuò)的。

我測了一下安卓4.0,大家都比較熟悉,總共加起來有一千七百多萬條代碼,我們總共測出來18100多個(gè)故障,平均每千行一個(gè)左右,美國的軟件我們測了這么多,大部分都是控制在一個(gè)以內(nèi),所以美國人做軟件確實(shí)比中國要好不少,我們測的大概是102個(gè)小時(shí),我們這個(gè)數(shù)據(jù)我們網(wǎng)站里也有。

這是我的總結(jié),我們對于國產(chǎn)軟件大概測了5億行代碼左右,這是統(tǒng)計(jì)的,沒統(tǒng)計(jì)的就算了,大概每千行5-6個(gè)故障,美國的軟件測了幾千萬行,大概是一個(gè)左右。我們曾經(jīng)大概是二千零幾年的時(shí)候給美國合作,給波音公司的軟件做過測試,確實(shí)做的比較好,故障率很低。當(dāng)年我們合作的時(shí)候是我們測出來一個(gè)兩家公司共同確認(rèn),一個(gè)故障一千美元,代價(jià)還是非常大。我記得波音公司有一個(gè)軟件,沒有做過統(tǒng)計(jì),測了大概不到半年時(shí)間,波音付給那家公司三四百萬美元,波音公司的軟件非常大,這是一個(gè)軟件的情況,我們總結(jié)的軟件的情況,中國軟件的規(guī)模還是比較大的,2020年計(jì)劃達(dá)到一億,我不知道能不能做的到,但是我們的基礎(chǔ)軟件基本上是寥寥無幾,基本上可以忽略不計(jì)。這幾年發(fā)展的市場比較好一些,未來能不能完全替代美國的東西,現(xiàn)在還不好說,包括我們的芯片,包括我們的操作系統(tǒng),包括我們的數(shù)據(jù)庫,這些核心技術(shù)不掌握的話,我覺得信息安全是句空話,芯片、操作系統(tǒng)、數(shù)據(jù)庫,這個(gè)核心技術(shù)沒有的話,信息安全只能是內(nèi)部安全的問題,談不到和美國的問題,我們的操作系統(tǒng),芯片基本上都是美國的東西,這是一個(gè)非常大的問題。

從前年開始我稍微側(cè)重了一下區(qū)塊鏈,也測了幾個(gè),第一個(gè)測了一下EOS,基本上是故障有6個(gè),總共有11個(gè)故障在里面,還有疑問類,倒沒有安全類的,區(qū)塊鏈的安全大家都比較重視,這是北京的一家公司做的,做的還不錯(cuò),他們也是投入了很大的精力,基本上故障類得到13個(gè)措施,這個(gè)得到他們的確認(rèn),安全類的5個(gè),疑問類的是32個(gè),這些故障得到他們的認(rèn)可。

這個(gè)是另外一家公司,因?yàn)樯婕暗臄?shù)量比較多,我們只是測試結(jié)果,沒有進(jìn)入確認(rèn)。比如說故障49,安全類的349,疑問類的312,說明這個(gè)單位的代碼開發(fā)可能有些問題,可能新手比較多,剛畢業(yè)的學(xué)生比較多。

總而言之,目前源代碼測試,無論是可靠性測試還是安全性測試,現(xiàn)在都是一個(gè)必不可少的步驟,我今天來做這個(gè)報(bào)告,是希望引起我們在座的重視。也可能大家有人知道,有可能有人不知道源代碼測試的問題,至少目前我們知道美國的軟件現(xiàn)在在全世界是獨(dú)樹一幟,可能全世界加起來都不如美國,美國軟件的質(zhì)量也是能夠感受得到。你比如說這幾年出現(xiàn)的軟件質(zhì)量問題,系統(tǒng)安全問題,雖然咱們國內(nèi)下了很大功夫,但效果不是特別的理想。

THEEND

最新評論(評論僅代表用戶觀點(diǎn))

更多
暫無評論