在測試過程中,對我們軟件產(chǎn)品的安全性考慮了多少?我們應(yīng)該如何評估一個軟件的安全性?
因為這個軟件涉及到客戶的重要商業(yè)信息,所以用戶關(guān)心的核心問題總是圍繞著“這個軟件安全嗎?”。設(shè)計導(dǎo)致的安全漏洞和實現(xiàn)導(dǎo)致的安全漏洞都會對用戶產(chǎn)生巨大的影響。任務(wù)是確保軟件能夠滿足客戶在安全性方面的期望。
什么是軟件安全測試
(1)什么是軟件安全
軟件安全屬于軟件領(lǐng)域的一個重要子領(lǐng)域。在以前的單機時代,安全問題是操作系統(tǒng)容易感染病毒,單機應(yīng)用軟件的安全問題并不突出。然而,自互聯(lián)網(wǎng)普及以來,軟件安全問題日益突出,使得軟件安全測試的重要性上升到前所未有的高度。
軟件安全一般分為兩個層次,即應(yīng)用級安全和操作系統(tǒng)級安全。應(yīng)用級安全,包括對數(shù)據(jù)或業(yè)務(wù)功能的訪問,在預(yù)期的安全情況下,運營商只能訪問應(yīng)用的特定功能和有限數(shù)據(jù)。操作系統(tǒng)級別的安全性是為了確保只有對系統(tǒng)平臺具有訪問權(quán)限的用戶才能訪問它,包括登錄或遠程訪問系統(tǒng)。
本文討論的軟件安全主要是應(yīng)用層的安全,包括兩個層次:①應(yīng)用程序本身的安全。一般來說,應(yīng)用程序的安全問題主要是由軟件漏洞引起的,可能是設(shè)計缺陷或編程問題,甚至是開發(fā)者預(yù)留的后門。(2)應(yīng)用的數(shù)據(jù)安全,包括數(shù)據(jù)存儲安全和數(shù)據(jù)傳輸安全。
(2)軟件安全性測試
一般來說,對于安全性要求較低的軟件,其安全性測試可以和單元測試、集成測試、系統(tǒng)測試混合進行。但是,對安全性要求較高的軟件,在被銷毀之前,必須進行測試,以防止和識別軟件的安全問題。
安全測試是指驗證應(yīng)用程序的安全級別和識別潛在安全缺陷的過程。應(yīng)用級安全測試的主要目的是找出軟件程序設(shè)計中的隱患,檢查應(yīng)用程序防止非法入侵的能力。根據(jù)不同的安全指標,測試策略也不同。注意:安全測試并不證明應(yīng)用程序最終是安全的,而是用于驗證已建立策略的有效性,這些策略是基于威脅分析階段所做的假設(shè)而選擇的。例如,在防止未經(jīng)授權(quán)的內(nèi)部或外部用戶訪問或破壞時,測試應(yīng)用軟件的操作。
軟件安全測試過程
(1)安全測試方法
安全測試有很多測試方法。目前,主要的安全檢測方法有:
①靜態(tài)代碼安全測試:主要通過掃描源代碼,根據(jù)程序中的數(shù)據(jù)流、控制流、語義等信息,與其特有的軟件安全規(guī)則庫進行匹配,找出代碼中潛在的安全漏洞。靜態(tài)源代碼安全測試是一種非常有用的方法,可以在編碼階段找出所有存在潛在安全風險的代碼,讓開發(fā)人員可以在早期解決潛在的安全問題。正因為如此,靜態(tài)代碼測試比測試更適合早期的代碼開發(fā)。
②動態(tài)貫入試驗:貫入試驗也是一種常見的安全試驗方法。就是利用自動化工具或人工方法模擬黑客的輸入,測試應(yīng)用系統(tǒng)的攻擊性,找出運行時存在的安全漏洞。這個測試的特點是真實有效。一般發(fā)現(xiàn)的問題都是正確的,嚴重的。但是滲透測試的一個致命缺點是模擬測試數(shù)據(jù)只能到達有限的測試點,覆蓋率很低。
③程序數(shù)據(jù)掃描。在一個安全性要求高的軟件中,數(shù)據(jù)在運行過程中不能被破壞,否則會導(dǎo)致緩沖區(qū)溢出攻擊。數(shù)據(jù)掃描的手段通常是內(nèi)存測試,可以發(fā)現(xiàn)緩沖區(qū)溢出等很多其他測試方法很難發(fā)現(xiàn)的漏洞。比如在軟件運行時掃描內(nèi)存信息,看有沒有導(dǎo)致隱患的信息,當然這需要專門的工具進行驗證,很難手動完成。
(2)逆向安全測試過程
大多數(shù)軟件安全測試都是按照缺陷空之間的逆向設(shè)計原則進行的,即提前檢查可能存在安全隱患的地方,然后針對這些隱患進行測試。因此,逆向測試過程從缺陷空開始,建立缺陷威脅模型,通過威脅模型找到入侵點,掃描入侵點尋找已知漏洞。好處是我們可以分析軟件中已知的缺陷,避免已知的缺陷,但是對于未知的攻擊手段和方法卻無能為力。
①建立缺陷威脅模型。缺陷威脅模型的建立主要從已知的安全漏洞入手,檢查軟件中是否存在已知的漏洞。構(gòu)建威脅模型時,需要確定軟件涉及哪些專業(yè)領(lǐng)域,然后根據(jù)每個專業(yè)領(lǐng)域遇到的攻擊手段來構(gòu)建模型。
②搜索掃描入侵點。檢查威脅模型中的哪些缺陷可能出現(xiàn)在該軟件中,然后將可能的威脅納入入侵點矩陣進行管理。如果有成熟的漏洞掃描工具,直接使用漏洞掃描工具進行掃描,然后將發(fā)現(xiàn)的可疑問題帶入入侵點矩陣進行管理。
③入侵矩陣驗證測試。入侵矩陣創(chuàng)建后,可以針對入侵矩陣的具體項目設(shè)計相應(yīng)的測試用例,然后進行測試和驗證。
(3)前瞻性安全測試流程
為了避免逆向設(shè)計原理帶來的測試不徹底性,需要一種正向測試方法對軟件進行完全測試,使被測軟件能夠防范未知的攻擊手段和方法。
①先在試驗箱空上做標記。識別測試空之間的所有變量數(shù)據(jù)。由于安全測試的高成本,識別外部輸入層很重要。例如,在需求分析、概要設(shè)計、詳細設(shè)計和編碼階段,應(yīng)識別測試空,并建立測試空之間的跟蹤矩陣。
②準確定義設(shè)計空。重點考察需求中的設(shè)計空之間是否有明確的定義,以及需求中涉及的數(shù)據(jù)是否都標識了其合法的價值范圍。這一步最需要注意的是精度這個詞,設(shè)計空要根據(jù)安全原則精確定義。
③識別安全隱患。根據(jù)試驗空和設(shè)計空之間以及它們之間的轉(zhuǎn)換規(guī)則,識別出哪些試驗空和哪些轉(zhuǎn)換規(guī)則可能存在安全隱患。例如,測試空越復(fù)雜,即測試之間的劃分空越復(fù)雜,或者數(shù)據(jù)組合越多變,就越不安全。還有,轉(zhuǎn)換規(guī)則越復(fù)雜,出現(xiàn)問題的可能性越大,是安全隱患。
④建立并驗證入侵矩陣。安全風險識別后,可以根據(jù)識別出的安全風險建立入侵矩陣。列出安全隱患,識別具有安全隱患的可變數(shù)據(jù),識別安全隱患的等級。對于那些具有高安全風險的可變數(shù)據(jù),必須進行詳細的測試用例設(shè)計。
(4)正向測試和反向測試的區(qū)別
正向測試過程是基于測試空來發(fā)現(xiàn)缺陷和漏洞,而反向測試過程是基于已知缺陷空來發(fā)現(xiàn)軟件中是否會出現(xiàn)相同的缺陷和漏洞,兩者各有利弊。反向測試流程的一個主要優(yōu)點是成本低,只要驗證已知可能存在的缺陷即可,缺點是測試不完善,測試空無法完全覆蓋,無法發(fā)現(xiàn)未知的攻擊手段。正向測試流程的優(yōu)點是測試充分,但是工作量比較大。因此,安全性要求低的軟件可以按照逆向測試流程進行測試,安全性要求高的軟件應(yīng)以正向測試流程為主,逆向測試流程為輔。
常見的軟件安全缺陷和漏洞
軟件安全有很多方面,主要的安全問題是由軟件本身的漏洞造成的。以下是一些常見的軟件安全缺陷和漏洞。
(1)緩沖區(qū)溢出
緩沖區(qū)溢出已經(jīng)成為軟件安全的頭號公敵,許多實際的安全問題都與它有關(guān)。緩沖區(qū)溢出通常有兩個原因。
①檢查設(shè)計空之間的轉(zhuǎn)換規(guī)則。也就是說,由于缺乏可測量數(shù)據(jù)的驗證,非法數(shù)據(jù)不會在外部輸入層檢出并被丟棄。非法數(shù)據(jù)進入接口層和實現(xiàn)層后,超出了接口層和實現(xiàn)層對應(yīng)的test 空或design 空之間的范圍,造成溢出。
②局部試驗空與設(shè)計空之間存在不足。合法數(shù)據(jù)進入時,由于程序?qū)崿F(xiàn)層對應(yīng)的test 空或design 空之間的不足,導(dǎo)致程序在處理過程中溢出。
(2)加密弱點
這些加密弱點是不安全的:
(1)使用不安全的加密算法。加密算法不夠強大,有些加密算法甚至可以用窮舉法破解。
②加密數(shù)據(jù)時,密碼是用偽隨機算法生成的,但生成偽隨機數(shù)的方法存在缺陷,使得密碼容易被破解。
③認證算法存在缺陷。
④客戶端和服務(wù)器的時鐘不同步,給攻擊者足夠的時間破解密碼或修改數(shù)據(jù)。
⑤加密數(shù)據(jù)沒有簽名,攻擊者可以篡改數(shù)據(jù)。因此,在測試加密時,我們必須測試這些可能的加密弱點。
(3)錯誤處理
通常,錯誤處理會向用戶返回一些信息,返回的錯誤信息可能被惡意用戶用來攻擊。通過分析返回的錯誤信息,惡意用戶可以知道下一步該做什么來使攻擊成功。如果在錯誤處理中使用了一些不正確的函數(shù),將會使用錯誤處理過程。錯誤處理屬于異??罩g的處理問題,異??罩g的處理要盡量簡單。這個問題可以用這個原理來設(shè)計避免。然而,錯誤處理經(jīng)常涉及可用性問題。如果錯誤處理的提示信息太簡單,用戶可能會很困惑,不知道下一步該怎么做。因此,在考慮錯誤處理的安全性時,需要權(quán)衡其易用性。
(4)權(quán)力過大
如果授予過多的權(quán)限,可能會導(dǎo)致只有普通用戶權(quán)限的惡意用戶利用過多的權(quán)限進行危害安全的操作。例如,如果對可操作的內(nèi)容沒有限制,用戶可以訪問規(guī)定范圍之外的其他資源。在進行安全測試時,需要測試應(yīng)用程序是否使用了過多的權(quán)限,重點分析各種情況下應(yīng)該有的權(quán)限,然后檢查實際中是否超出了給定的權(quán)限。從本質(zhì)上來說,權(quán)限過大的問題屬于設(shè)計空之間權(quán)限過大的問題,需要在設(shè)計過程中對設(shè)計空進行控制,避免設(shè)計空之間權(quán)限過大而導(dǎo)致權(quán)限過大的問題。
關(guān)于安全檢測的建議
很多軟件安全測試的經(jīng)驗告訴我們,做好軟件安全測試的必要條件是:第一,充分了解軟件安全漏洞;第二,評估安全風險;第三,擁有高效的軟件安全測試技術(shù)和工具。
(1)充分了解軟件安全漏洞
評價一個軟件系統(tǒng)的安全程度,需要從設(shè)計、實現(xiàn)和部署三個環(huán)節(jié)入手。讓我們首先看看通用標準是如何評估軟件系統(tǒng)安全性的。第一步是確定軟件產(chǎn)品對應(yīng)的保護配置文件(PP)。工藝程序為一類軟件產(chǎn)品定義了一個安全特征模板。比如數(shù)據(jù)庫的PP,防火墻的PP等。然后根據(jù)PP提出了具體的安全功能要求,如實現(xiàn)用戶身份認證。最后,確定安全對象以及如何滿足相應(yīng)的安全功能要求。因此,一個安全軟件的三個環(huán)節(jié)都不會出錯。
(2)安全性試驗的評價
安全測試后,軟件能否達到預(yù)期的安全級別?這是安全測試人員最關(guān)心的問題,因此有必要在測試后建立一個安全評估機制。一般從以下兩個方面來評價。①安全缺陷數(shù)據(jù)評估。如果你在軟件中發(fā)現(xiàn)更多的安全缺陷和漏洞,你可能會留下更多的缺陷。在進行這種評估時,需要建立基線數(shù)據(jù)作為參考,否則,如果沒有評估的基礎(chǔ),就無法得出正確的結(jié)論。②脆弱性植入評價。漏洞植入法與可靠性測試中的故障插入測試相同,只是在軟件中插入了一些具有安全隱患的問題。采用漏洞植入方法時,首先由不參與安全測試的特定人員在軟件中植入一定數(shù)量的漏洞,最后在測試后,發(fā)現(xiàn)有多少植入的漏洞,從而評估軟件的安全測試是否充分。
(3)采用安全檢測技術(shù)和工具
可以使用具有特定功能的專業(yè)安全掃描軟件來發(fā)現(xiàn)潛在的漏洞,已經(jīng)發(fā)生的缺陷可以包含在缺陷庫中,然后通過自動化測試方法使用自動化缺陷庫進行轟炸測試。比如用一些可以模擬各種攻擊的軟件進行測試。
安全測試用于驗證軟件中集成的保護機制在實踐中是否能夠保護系統(tǒng)免受非法入侵。正如一句流行的諺語所說,軟件系統(tǒng)的安全性當然必須能夠抵御正面攻擊,但也必須能夠抵御側(cè)面和背面攻擊。
Testin Cloud送你一波超級福利!
Testin價值5000元的專屬測試包(含自動測試120分鐘,遠程實機調(diào)試120分鐘,每天免費1次標準兼容性測試,每天免費1次安全性測試);
前51測試產(chǎn)品總監(jiān)陳濟總結(jié)了16年測試工作的精髓——“軟件測試入門必讀”課程。
如何獲得利益?
登錄或注冊您的Testin賬戶進行企業(yè)認證,認證后自動獲得福利套餐。請在證明上蓋章->:http://www.testin.cn
1.《軟件安全 如何做好軟件安全測試》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點,與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《軟件安全 如何做好軟件安全測試》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/jiaoyu/1210528.html