近來(lái),在我負(fù)責(zé)的公司某軟件產(chǎn)品的最后測(cè)試工作,常常被問(wèn)到這樣一個(gè)問(wèn)題:在做測(cè)試過(guò)程中,我們的軟件產(chǎn)品在安全性方面考慮了多少?應(yīng)該如何測(cè)評(píng)一個(gè)軟件到底有多安全?
這個(gè)軟件因?yàn)樯婕翱蛻羯虡I(yè)上重要的信息資料,因此用戶關(guān)心的核心問(wèn)題始終圍繞“這個(gè)軟件安全嗎”。一個(gè)由于設(shè)計(jì)導(dǎo)致的安全漏洞和一個(gè)由于實(shí)現(xiàn)導(dǎo)致的安全漏洞,對(duì)用戶的最終影響都是巨大的。我的任務(wù)就是確保這個(gè)軟件在安全性方面能滿足客戶期望。
一、什么是軟件安全性測(cè)試
(1)什么是軟件安全
軟件安全屬于軟件領(lǐng)域里一個(gè)重要的子領(lǐng)域。在以前的單機(jī)時(shí)代,安全問(wèn)題主要是操作系統(tǒng)容易感染病毒,單機(jī)應(yīng)用程序軟件安全問(wèn)題并不突出。但是自從互聯(lián)網(wǎng)普及后,軟件安全問(wèn)題愈加顯加突顯,使得軟件安全性測(cè)試的重要性上升到一個(gè)前所未有的高度。
軟件安全一般分為兩個(gè)層次,即應(yīng)用程序級(jí)別的安全性和操作系統(tǒng)級(jí)別的安全性。應(yīng)用程序級(jí)別的安全性,包括對(duì)數(shù)據(jù)或業(yè)務(wù)功能的訪問(wèn),在預(yù)期的安全性情況下,操作者只能訪問(wèn)應(yīng)用程序的特定功能、有限的數(shù)據(jù)等。操作系統(tǒng)級(jí)別的安全性是確保只有具備系統(tǒng)平臺(tái)訪問(wèn)權(quán)限的用戶才能訪問(wèn),包括對(duì)系統(tǒng)的登錄或遠(yuǎn)程訪問(wèn)。
本文所講的軟件安全主要是應(yīng)用程序?qū)拥陌踩▋蓚€(gè)層面:①是應(yīng)用程序本身的安全性。一般來(lái)說(shuō),應(yīng)用程序的安全問(wèn)題主要是由軟件漏洞導(dǎo)致的,這些漏洞可以是設(shè)計(jì)上的缺陷或是編程上的問(wèn)題,甚至是開發(fā)人員預(yù)留的后門。②是應(yīng)用程序的數(shù)據(jù)安全,包括數(shù)據(jù)存儲(chǔ)安全和數(shù)據(jù)傳輸安全兩個(gè)方面。
(2)軟件安全性測(cè)試
一般來(lái)說(shuō),對(duì)安全性要求不高的軟件,其安全性測(cè)試可以混在單元測(cè)試、集成測(cè)試、系統(tǒng)測(cè)試?yán)镆黄鹱?。但?duì)安全性有較高需求的軟件,則必須做專門的安全性測(cè)試,以便在破壞之前預(yù)防并識(shí)別軟件的安全問(wèn)題。
安全性測(cè)試(Security Testing)是指有關(guān)驗(yàn)證應(yīng)用程序的安全等級(jí)和識(shí)別潛在安全性缺陷的過(guò)程。應(yīng)用程序級(jí)安全測(cè)試的主要目的是查找軟件自身程序設(shè)計(jì)中存在的安全隱患,并檢查應(yīng)用程序?qū)Ψ欠ㄇ秩氲姆婪赌芰Γ?根據(jù)安全指標(biāo)不同測(cè)試策略也不同。注意:安全性測(cè)試并不最終證明應(yīng)用程序是安全的,而是用于驗(yàn)證所設(shè)立策略的有效性,這些對(duì)策是基于威脅分析階段所做的假設(shè)而選擇的。例如,測(cè)試應(yīng)用軟件在防止非授權(quán)的內(nèi)部或外部用戶的訪問(wèn)或故意破壞等情況時(shí)的運(yùn)作。
二、軟件安全性測(cè)試過(guò)程
(1)安全性測(cè)試方法
有許多的測(cè)試手段可以進(jìn)行安全性測(cè)試,目前主要安全測(cè)試方法有:
①靜態(tài)的代碼安全測(cè)試:主要通過(guò)對(duì)源代碼進(jìn)行安全掃描,根據(jù)程序中數(shù)據(jù)流、控制流、語(yǔ)義等信息與其特有軟件安全規(guī)則庫(kù)進(jìn)行匹對(duì),從中找出代碼中潛在的安全漏洞。靜態(tài)的源代碼安全測(cè)試是非常有用的方法,它可以在編碼階段找出所有可能存在安全風(fēng)險(xiǎn)的代碼,這樣開發(fā)人員可以在早期解決潛在的安全問(wèn)題。而正因?yàn)槿绱?,靜態(tài)代碼測(cè)試比較適用于早期的代碼開發(fā)階段,而不是測(cè)試階段。
②動(dòng)態(tài)的滲透測(cè)試:滲透測(cè)試也是常用的安全測(cè)試方法。是使用自動(dòng)化工具或者人工的方法模擬黑客的輸入,對(duì)應(yīng)用系統(tǒng)進(jìn)行攻擊性測(cè)試,從中找出運(yùn)行時(shí)刻所存在的安全漏洞。這種測(cè)試的特點(diǎn)就是真實(shí)有效,一般找出來(lái)的問(wèn)題都是正確的,也是較為嚴(yán)重的。但滲透測(cè)試一個(gè)致命的缺點(diǎn)是模擬的測(cè)試數(shù)據(jù)只能到達(dá)有限的測(cè)試點(diǎn),覆蓋率很低。
③程序數(shù)據(jù)掃描。一個(gè)有高安全性需求的軟件,在運(yùn)行過(guò)程中數(shù)據(jù)是不能遭到破壞的,否則就會(huì)導(dǎo)致緩沖區(qū)溢出類型的攻擊。數(shù)據(jù)掃描的手段通常是進(jìn)行內(nèi)存測(cè)試,內(nèi)存測(cè)試可以發(fā)現(xiàn)許多諸如緩沖區(qū)溢出之類的漏洞,而這類漏洞使用除此之外的測(cè)試手段都難以發(fā)現(xiàn)。例如,對(duì)軟件運(yùn)行時(shí)的內(nèi)存信息進(jìn)行掃描,看是否存在一些導(dǎo)致隱患的信息,當(dāng)然