- 相關推薦
測試軟件安全的方法
測試軟件安全的方法【1】
摘要:科學技術不斷更新、發展,使得計算機的軟件有了越來越廣泛的應用范圍。
然而軟件的安全問題也變得越來越重要,安全是軟件在它的一個軟件生命周期中最最重要的環節之一,我們只有解決好軟件的安全問題才能促使軟件更好的發展。
該文主要介紹了軟件測試的注意事項和測試軟件安全的方法。
關鍵詞:軟件;安全;測試;方法
Abstract: With the development of science and technology, the computer software has been applied more and more range.
But the security of software is becoming more and more important, safety is one of the most important link in a software cycle life. Only when we solve software security issues well we can urge software better development. This paper mainly introduces attentions and methods of the software testing.
Key words: software; security; testing; methods
軟件的安全測試的目的是為了保證軟件能夠滿足與軟件預期的設計要求相符合的安全系數,和平常的軟件缺陷不同的是,計算機的軟件安全測試檢測的是軟件不應該做什么,而軟件缺陷是軟件應該做什么沒有做到。
檢測軟件的安全性能我們可以分成安全功能和漏洞兩個方面來進行檢測。
功能的測試是為了驗證計算機的軟件安全功能能不能達到安全所需要的要求。
檢測軟件的安全功能會涉及到比較廣的內容和方面,大致包含授權、機密、安全管理以及訪問的控制等。
[1]安全漏洞的檢測主要是針對軟件存在的缺陷有哪些可能以及這些缺陷可能會引起的軟件使用過程中發生危險。
就軟件安全檢測工作本身而言研究檢測軟件安全方法具有很高的價值和意義,軟件安全的測試方法的研究是保障計算機軟件安全重要的保障之一。
軟件的安全檢測作為開發過程中重要的環節之一,主要的目的就是要發現軟件存在的漏洞,通過對程序進行執行、檢查,從而有效的發現、解決、更正軟件存在的潛在風險和問題。
[2]我們就目前應用在計算機軟件的安全檢測技術情況而言,我們通常使用的軟件安全測試方法大致可以分為手工檢測以及靜態、動態檢測等數種方法。
1計算機軟件安全檢測是應注意的問題
我們在檢測軟件的安全性的時候要特別的注意一些問題:首先我們要從實際出發,根據所要檢測計算機軟件的自身特點以及安全性的要求進行綜合的分析判斷,在這些基礎上科學的選擇最適合此軟件的安全檢測方法,安全檢測方案的制定貴在實事求是的合理選擇。
其次,我們在檢測軟件安全的時候要注意好身邊的人員的分配,最好進行多元化的配置,因為在檢測軟件安全的過程我們要配備的不僅僅是軟件的安全分析員,還要找一些熟悉那個軟件系統的、以及設計這個軟件系統的設計人員,讓他們一同加入軟件的安全測試中去,多領域配合會使得軟件的安全檢測更全面更有效。
[3]最后,我們要注意在檢測軟件安全的時候,要積極的認真的分析需求級、系統級以及代碼級,在適當那個的時候比如規模大的軟件,我們還應該分析軟件的結構設計。
計算機軟件的安全檢測過程是系統化的,我們不能用簡單的方法來解決,我們要向全面的檢測出系統所有的安全問題就要選擇合理的檢測方法,安排配置好檢測人員。
2軟件安全漏洞檢測方法
2.1手工分析
現在絕大多數的安全研究員采用的依然是最古老的最傳統的手工分析方法。
手工分析方法如果運用在開源軟件上,這種方法一般通過Source Insight這樣的源碼閱讀工具來進行源碼的查詢和檢索。
例如我們分析C語言或者C++的程序,最簡單的辦法是首先審查軟件系統中的gets、strcpy等輸入命令有沒有存在危險的函數調用,接著需要審核的就是庫函數以及軟件中的循環。
[4]對于閉源軟件來說,他們和開源不同,閉源的源代碼獲得比較的困難,所以我們要使用必要的反匯編以及調試器,我們利用反匯編來得到軟件的匯編代碼,在這個代碼的基礎上再來分析軟件的安全性,閉源軟件的手工分析難度比源代碼閱讀要高得多,這就會造成理解源程序以及程序的逆向工程分析困難。
總之不論是用什么手工分析方法,我們都要求我們的安全分析員能夠深入的了解軟件安全漏洞原理,對軟件結構和功能的掌握也是必不可少的。
用手工分析的方法來檢測軟件的安全性能,軟件開發員即使精通檢測軟件安全漏洞技術,手工撿漏仍然非常的費時耗力。
可是現在還沒有完全自動化的檢測軟件安全的技術,而且機器的檢測最終還需要我們去驗證,因此人工參與是一個必須的也是不可或缺的過程,在確認靜態分析結果、分析動態程序數據的構造等操作的時候我們也少不了手工分析。
2.2動態測試
軟件的動態測試的目的是檢驗軟件運行過程中的動態行為以及結果的正確性。
現在,動態測試成為了軟件安全測試主要的方法之一。
這個測試需要執行程序的來完成測試需要,動態分析在運行程序以后可以得到一次或者多次的信息,然后工作人員根據得到的信息檢測特定的漏洞,進而完成安全分析。
最常見的動態測試是程序的測試以及剖析,動態測試對程序的測試結果非常的準確,因為動態測試沒有抽象化處理程序,在程序的執行過程中是哪條路被執行了,計算得出的數據是多少,程序運行時使用的內存、執行的時間等都可以很明確的知道。
可是動態測試的結果不完整,因為程序的執行的一個情況無法代表程序還可能會執行的其他情況。
也就是如果輸入的一個數據集無法保證程序能夠執行完所有可能的路徑,程序一次甚至多次執行還是可能會有一些安全的問題無法被發現軟件,可是這些漏洞是真實存在的,我們要做好動態測試就是要設計好分支和狀態覆蓋測試。
2.3靜態測試
我們在安全檢查的時候還有一種效率比較高的軟件安全分析方法就是靜態測試,它的應用越來越受到人們的重視。
只要用戶給出抽象語義,靜態測試技術就可以自動的發現軟件所有可能執行的狀態,以及狀態下的軟件屬性。
軟件的靜態測試分析速度快、自動化程度高,在實際的應用中我們也發現靜態測試和動態相比效率更高,而且找到缺陷的速度也快不少。
雖然軟件的靜態分析有可能會發生漏報、誤報可是到目前為止和其他的安全測試方法比起來靜態測試最實用、有效的方法。
靜態測試使用靜態分析技術,直接分析程序的源代碼,通過詞法分析、語法分析和靜態語義分析,檢測程序中潛在的安全漏洞。
現在,主要有類型推斷、數據流以及約束分析三種靜態分析方法。
2.3.1類型推斷
我們知道我們分析運算符作用的對象、賦值,實際參數的傳遞時,或多或少都會存在一些類型合適不合適的情況。
我們所說的類型推斷屬于處理過程,它的目的是保證進行對象的每個操作的數目和類型都是正確、合理的,確保操作有效。
類型推斷可以檢查類型錯誤,選擇合適的操作,根據情況確定必要的類型轉換。
這種方法簡單、高效,對快速的檢測軟件的安全性非常的適合。
我們在檢查操作系統內核權限、遇到程序中字符串格式化漏洞和內核中不安全的指針使用的安全檢測的時候采用類型推斷方法檢測。
2.3.2數據流分析
在編譯的時候我們可以使用數據流分析技術,這種技術可以收集程序代碼中的語義信息,然后用代數的方式對它進行編譯,從而確定變量定義以及變量的使用。
我們可以用數據流分析來優化編譯、調試、驗證、并行、測試、向量化程序的環境因素。
在安全檢測中數據流分析有非常廣泛的應用,我們用數據流分析可以檢測程序軟件中的數組的越界等多種類型的安全漏洞。
2.3.3約束分析
約束分析分為約束產生、約束求解兩個步驟,約束分析的第一步是利用約束規則建立分析狀態和變量類型的約束,第二步是求解這些約束系統。
約束系統分為三種形式:等式、集合以及混合。
約束項之間僅僅存在等式關系的是等式約束,集合約束是把程序變量看作值集,混合約束系統由部分等式約束和部分集合約束組成。
在安全檢測中我們使用約束分析來測試軟件的安全性能也是比較廣泛的。
例如我們利用集合約束的方法來測試程序中緩沖區是不是存在溢出漏洞。
以上三種靜態檢測方法各有各的利弊,通過對各自的比較我們可以看出,檢測能力強但是速度慢的是約束分析,這種分析方法檢測軟件安全比較適合;檢測強速度較快的是數據流分析,這種方法最適合的是要求考慮控制流信息并且變量之間的操作簡單的問題;最檢測能力弱檢測速度快的是類型推斷,這種方法最適合的問題是與控制流無關、屬性域有限的安全屬性。
2.4偵聽技術
我們所說的偵聽技術有的也叫做網絡監聽,這種方法可以獲取網絡傳輸的信息,獲取的信息并非發給自己的。
在測試軟件的安全性時網絡偵聽技術是常用手段,這種方法可有效診斷、管理網絡問題,可以很好的檢查軟件網絡安全存在的威脅。
我們現在最常用的網絡是一個廣播型的網絡,我們可以從該網中的任何的一臺計算機都可以偵聽到這個網段所有的數據傳輸包。
我們可以利用這種技術對軟件進行安全性檢測,防止軟件泄露一些重要的數據,我們可以利用工具或者是自己編的小程序復制我們偵聽到的數據包并把他們存儲下來,然后我們就可以通過得到的這些信息數據來分析網絡、軟件的安全。
我們最好把偵聽放在路由器、網關、防火墻、交換機等設備的地方,由于這些地方流過的信息包多,所以這里的監聽效果最好。
我們經常使用的網絡偵聽經典程序有Snoop等,一般來說偵聽程序還不能做到把偵聽到的數據包馬上進行分解分析,這些軟件一般是先進行不停地存儲,然后慢慢再進行分析,這樣可以防止數據包的遺漏。
3總結
從上面的介紹和論述中我們可以看出,軟件的安全是計算機信息安全最重要的組成部分之一,安全性測試的重要性越來越得到軟件開發以及測試人員的認可。
現在軟件安全的檢測辦法有很多,我們主要了解介紹了比較傳統但是不可缺少的手動分析方法,還有動態分析和靜態分析,通過對程序的執行來檢測軟件的安全,還有偵聽技術,保證網絡和軟件的安全使用,保證軟件的重要數據不被泄露。
但是我們現在的測試軟件安全的方法還不夠的系統全面,還或多或少的存在著這樣那樣的問題,這些還需要我們進一步的去研究。
在接下來,我們要深入的研究軟件的授權等安全功能建模與測試技術,把安全測試方法形式化,研究模糊測試、故障注入以及基于屬性的安全測試方法還有很多新的軟件安全測試技術等著我們去深入的研究開發,我相信,通過我們的努力,我們一定能夠開發出更好的軟件安全測試技術,讓軟件的安全性能得到保障。
參考文獻:
[1]黎連業,王華,李淑春.軟件測試與測試技術[M].北京:清華大學出版社,2009(5):24.
[2]羅國慶.實用軟件測試方法與應用[M].北京:電子工業出版社,2007:129-130.
[3]陳璇.淺談關于軟件安全性測試方法研究[J].電腦知識與技術,2009(3):78.
[4]黎連業,王華,李淑春.軟件測試與測試技術[M].北京:清華大學出版社,2009:45-48.
軟件安全性測試方法研究【2】
摘 要為了提高軟件研發的安全性,需要對軟件的安全性進行測試,筆者根據軟件安全測試的主要內容及特征,總結出了相關的軟件安全測試的方法,為提高軟件質量及安全性提供借鑒。
【關鍵詞】軟件 安全測試 方法 研究
軟件安全性是指在其運行的過程中,采用相關的技術方法將可能發生的風險控制在可以接受的范圍內,避免系統發生不能接受的風險,提高軟件系統的安全性能。
雖然作為系統不會直接威脅到人們的生命財產安全,但是一旦人工操作失誤也會造成危機。
例如,在運用航天軟件時,一旦飛機比預期的高度低,航天軟件就要及時發送警告,避免飛機下墜。
對軟件的安全性進行分析測試,及時發現和排除錯誤,減少損失。
目前國內的安全軟件測試針對性不強,缺乏測試依據,需要改進。
1 軟件安全性測試的特點和分類
對軟件進行安全測試就是看其安全特性是否和設計時要求的效果一致,包含對軟件的功能測試,驗證測試及滲透測試。
軟件安全測試有其獨特性,安全性的缺陷和普通的軟件缺陷不同,安全方面出現漏洞會使很多的用戶受到損失,注重強調軟件不應該做什么而不是強調讓軟件做什么,強調的是其否定需求,比如說,未經允許用戶沒有權利訪問數據。
軟件安全測試可以分為兩類,安全功能測試(Security Functional Testing)和安全漏洞測試(Security Vulnerability Testing),前者主要從軟件功能角度出發,根據安全功能的要求測試軟件的安全性是否達標,軟件的功能要求主要有軟件的完整性、機密性、不可否認性及隱私保護等等;后者相關的漏洞測試主要站在攻擊者的層面上看,主要目標是發現軟件的安全漏洞,主要的安全漏洞包括,軟件在操作、設計、運行方面是否有漏洞或者缺陷。
因為一旦漏洞被攻擊者利用,必然使軟件處于危險狀態,所以,安全漏洞測試就是辨識軟件的缺陷及漏洞。
2 軟件測試的方法
2.1 靜態測試
在測試軟件的代碼時,并不真實運行被測試的軟件,靜態測試還經常被應用于軟件文檔測試,比如,可以檢測或者驗證文檔,對系統軟件設計的文檔或者軟件代碼的檢查。
2.2 動態測試
和靜態測試不同的就是需要在檢測時實際運行軟件,通過運行檢測軟件的運行情況及動態的行為。
所以,在進行動態測試時,一定要運行被測試的軟件,真正輸入數據進行驗證檢測。
2.3 功能測試
功能測試時建立在刺痛或者程序的功能上,測試的人員無需知道程序的運行過程,重點關注軟件程序的功能是否符合標準、規格。
2.4 結構測試
結構測試要求測試工作人員了解程序軟件的內部結構和邏輯過程,重點關注軟件生成的代碼,可以忽略功能測試,不關注功能是否匹配。
3 安全性測試的主要方法
3.1 形式化安全測試
形式化安全測試就是通過建立數學模型,運用形式規范的語言,供給軟件的說明。
可以將這種測試方法氛圍兩類,
3.1.1 定理證明
就是把相關的軟件程序轉變為邏輯公式,運用之前的理論及規則證實程序的合法性。
3.1.2 模型檢測
在描述軟件行為方面使用S代表狀態遷移系統,在描述軟件執行必須滿足的性質方面用計算樹邏輯F代表,然后對S這一過程進行自動搜索,找到不能滿足F這一公式的狀態的方式發現軟件漏洞。
NASA的一個實驗室叫JPL曾經進行過形式化安全測試,通過建立形式化模型,比如,狀態機,對軟件進行形式化安全測試就是通過搜索狀態空間,尋找路徑使其達到違背規約的不安全狀態,模型不斷增大,逐漸變得復雜,狀態空間也不斷增長,JPL研發了一種方式避免狀態爆炸。
3.2 建立在模型基礎上的安全功能測試
通過對軟件的行為和機構建模,再將測試模型生成測試軟件,一般會用到的測試模型有UML模型、有限狀態機及馬爾可夫鏈等等。
Mark Blackburn、Robert Busser研發了安全功能測試,就是通過利用SCRModeling建模,運用表單的形式建立安全功能行為模型,把相應的表單模型轉化為說明模型,運用T-VEC生成向量,包括輸入和輸出變量,研發測試驅動模式,再將測試向量輸入測試驅動模式,運行測試模式。
通過這種安全功能測試,能夠有效測試軟件的安全性,但是它只適用于安全功能建模能力達到一定的程度,例如,對授權、訪問控制等進行軟件應用進行測試。
3.3 語法測試
這種測試方法是用來檢測軟件對各種輸入情況的反應,檢測軟件的功能接口的語法生成測試輸入。
接口的類型有很多,例如,命令行、環境變量等等,接口需要已經規定了所要求輸入的語法,這一語法對輸入的數據的格式及類型進行了定義。
測試的一般過程就是辨識接口的語法形式,據此生成測試用例,執行測試。
測試時正確、錯誤及畸形的語法都應該包括在測試范圍內,檢測軟件的處理情況及缺陷,語法測試和故障注入技術相結合效果會更好。
3.4 模糊測試
在發現軟件的安全漏洞方面,模糊測試是一種很重要的方法,它是通過將隨機的不完善的數據插入到程序中,觀測軟件程序是否能夠接受胡亂的數據輸入,模糊測試一般是不符合邏輯的,通過產生雜亂的數據供給程序來達到測試的目的,通過這種間接的測試方法可以可以檢測出來正常邏輯思維難以發現的安全漏洞。
4 結語
軟件安全測試時軟件研發過程中的重要環節,通過發現軟件之星時的故障和缺陷,及時更正,避免造成更大的破壞,軟件測試的最理想效果就是使用較少的測試用例實現較大的安全測試。
在進行軟件安全測試前,要針對所要測試軟件的類型,制定測試方案,分析測試結果,整理測試資料,查找漏洞。
出了筆者探討的上述安全測試方法之外,還有建立在故障注入基礎上的安全性測試方法,基于屬性的安全測試方法等。
在未來,Web服務軟件發展迅速,怎樣針對Web服務進行安全測試是需要研究的新課題。
參考文獻
[1]陸璐,王柏勇.軟件自動化測試技術[M].北京:清華大學出版社,2006.
[2]郭群.軟件測試設計技術[J].電腦知識與技術,2007(17).
[3]游歷貞,郭宇春,李純喜.AJAX引擎的原理和應用[J].微計算機信息,2006(22):2-3.
[4]黃愛明.國內軟件測試現狀及對策研究[J].中國管理信息化,2007(02).
軟件安全測試的原則【3】
摘要:軟件安全性是一個廣泛而復雜的主題,要避免因安全性缺陷問題受各種可能類型的攻擊是不切實際的。
本文從軟件安全測試需要考慮的問題,來探討軟件安全測試原則,通過遵循這些原則避免許多常見的安全性測試問題出現。
關鍵詞:軟件安全;測試;原則
軟件安全性是一個廣泛而復雜的主題,每一個新的軟件總可能有完全不符合所有已知模式的新型安全性缺陷出現。
要避免因安全性缺陷問題受各種可能類型的攻擊是不切實際的。
在軟件安全測試時,運用一組好的原則來避免不安全的軟件上市、避免不安全軟件受攻擊,就顯得十分重要。
一、軟件安全性測試基本概念
軟件安全性測試包括程序、網絡、數據庫安全性測試。
根據系統安全指標不同測試策略也不同。
1.用戶程序安全的測試要考慮問題包括:①明確區分系統中不同用戶權限;②系統中會不會出現用戶沖突;③系統會不會因用戶的權限的改變造成混亂;④用戶登陸密碼是否是可見、可復制;⑤是否可以通過絕對途徑登陸系統(拷貝用戶登陸后的鏈接直接進入系統);⑥用戶推出系統后是否刪除了所有鑒權標記,是否可以使用后退鍵而不通過輸入口令進入系統。
2.系統網絡安全的測試要考慮問題包括:①測試采取的防護措施是否正確裝配好,有關系統的補丁是否打上;② 模擬非授權攻擊,看防護系統是否堅固;③采用成熟的網絡漏洞檢查工具檢查系統相關漏洞;④ 采用各種木馬檢查工具檢查系統木馬情況;⑤ 采用各種防外掛工具檢查系統各組程序的客外掛漏洞。
3.數據庫安全考慮問題:①系統數據是否機密(比如對銀行系統,這一點就特別重要,一般的網站就沒有太高要求);② 系統數據的完整性; ③系統數據可管理性; ④系統數據的獨立性;⑤系統數據可備份和恢復能力(數據備份是否完整,可否恢復,恢復是否可以完整)。
二、根據軟件安全測試需要考慮的問題
1.保護了最薄弱的環節
攻擊者往往設法攻擊最易攻擊的環節,這對于您來說可能并不奇怪。
即便他們在您系統各部分上花費相同的精力,他們也更可能在系統最需要改進的部分中發現問題。
這一直覺是廣泛適用的,因此我們的安全性測試應側重于測試最薄弱的部分。
如果執行一個好的風險分析,進行一次最薄弱環節的安全測試,標識出您覺得是系統最薄弱的組件應該非常容易,消除最嚴重的風險,是軟件安全測試的重要環節。
2.是否具有縱深防御的能力
縱深防御背后的思想是:使用多重防御策略來測試軟件,以至少有一層防御將會阻止完全的黑客破壞。
“保護最薄弱環節”的原則適用于組件具有不重疊的安全性功能。
當涉及到冗余的安全性措施時,所提供的整體保護比任意單個組件提供的保護要強得多,縱深防御能力的測試是軟件安全測試應遵循的原則。
3.是否有保護故障的措施
大量的例子出現在數字世界。
經常因為需要支持不安全的舊版軟件而出現問題。
例如,比方說,該軟件的原始版本十分“天真”,完全沒有使用加密。
現在該軟件想修正這一問題,但已建立了廣大的用戶基礎。
此外,該軟件已部署了許多或許在長時間內都不會升級的服務器。
更新更聰明的客戶機和服務器需要同未使用新協議更新的較舊的客戶機進行互操作。
該軟件希望強迫老用戶升級,沒有指望老用戶會占用戶基礎中如此大的一部分,以致于無論如何這將真的很麻煩。
怎么辦呢?讓客戶機和服務器檢查它從對方收到的第一條消息,然后從中確定發生了什么事情。
如果我們在同一段舊的軟件“交談”,那么我們就不執行加密。
遺憾的是,老謀深算的黑客可以在數據經過網絡時,通過篡改數據來迫使兩臺新客戶機都認為對方是舊客戶機。
更糟的是,在有了支持完全(雙向)向后兼容性的同時仍無法消除該問題。
對這一問題的一種較好解決方案是從開始就采用強制升級方案進行設計;使客戶機檢測到服務器不再支持它。
如果客戶機可以安全地檢索到補丁,它就升級。
否則,它告訴用戶他們必須手工獲得一個新的副本。
但是從一開始就應準備使用這一解決方案,就會得罪早期用戶。
測試采取的防護措施是否正確裝配好,有關系統的補丁是否打上就十分的重要。
4.最小特權
最小特權原則規定:確定只授予執行操作所必需的最少訪問權,并且對于該訪問權只準許使用所需的最少時間。
當軟件給出了某些部分的訪問權時,一般會出現濫用與那個訪問權相關的特權的風險。
例如,我們假設您出去度假并把您家的鑰匙給了您的朋友,好讓他來喂養您的寵物、收集郵件等等。
盡管您可能信任那位朋友,但總是存在這樣的可能:您的朋友未經您同意就在您的房子里開派對或發生其它您不喜歡的事情。
一位程序員可能希望訪問某種數據對象,但只需要從該對象上進行讀。
不過,不管出于什么原因,通常該程序員實際需要的不僅是必需的特權。
通常,該程序員是在試圖使編程更容易一些。
如果軟件設置的訪問權結構不是“完全訪問或根本不準訪問”,那么最小特權原則會非常有效。
5.分隔
分隔背后的基本思想是如果我們將系統分成盡可能多的獨立單元,那么我們可以將對系統可能造成損害的量降到最低。
通常,如果攻擊者利用了代碼中的緩沖區溢出,對磁盤進行原始寫并胡亂修改內核所在內存中的任何數據。
沒有保護機制能阻止他這樣做。
因此,系統進行適度的分隔顯得十分重要,軟件要能直接支持本地磁盤上永遠不能被擦去的日志文件,這意味著直到
攻擊者闖入時,才不能保持精確的審計信息。
適度使用的分隔,將利于系統的管理,但是對每一個功能都進行分隔,那么系統將很難管理。
三、安全性測試的主要目的是查找軟件自身程序設計中存在的安全隱患,并檢查應用程序對非法侵入的防范能力, 根據安全指標不同測試策略也不同,如果遵循相同的原則,去證明軟件的安全性,將有利于軟件安全測試的工作規范的進行,有利于軟件安全測試工作的發展。
參考文獻:
[1]《Windows漏洞攻擊與安全防范 計算機與網絡安全實用叢書》 蔡毅 周繼軍 彭海龍
[2]《軟件安全-使安全成為軟件開發必需的部分》(美)麥克勞
[3]《軟件安全開發生命周期》 Michael Howard
【測試軟件安全的方法】相關文章:
軟件測試方法概述10-26
軟件測試方法有哪些10-26
軟件測試中綜合測試的基本方法10-26
軟件安全性測試技術10-05
計算軟件的安全檢測方法10-05
軟件測試簡歷10-06
軟件測試實習報告11-25
軟件測試的實習報告05-19
軟件測試學習總結11-23