安全性測試是安全的軟件生命周期中一個重要的環節。
進行安全測試需要精湛的攻擊技術、敏銳的黑客思維和豐富的開發經驗。這些測試人員往往被稱作tiger team、ethic hacker、penetration tester或者pen-tester。大型的軟件公司一般都有自己的產品安全部專職負責軟件的安全測試,有時也會雇傭來自于安全咨詢公司的安全專家實施攻擊測試。
一次安全性測試實際上就是一輪多角度、全方位的攻擊。由于系統安全所特有的“木桶效應”,測試的全面性對安全測試人員的要求更高,他們不能像攻擊者那樣止步于一個漏洞,而是要搶在攻擊者之前盡可能多地找到產品中的“所有”漏洞,以減少產品遭到攻擊的可能性。與攻擊者比起來,安全測試人員也有一定優勢,就是他們能夠獲得更多的技術支持,比如來自開發團隊的技術文檔等。
如果軟件生命周期中沒有安排安全性測試環節,也不用擔心這些漏洞發現不了——攻擊者會為您的產品做這類測試,只是測試的結果和攻擊代碼可能會直接向全世界公布出來,用0day曝光的方式毀掉公司的聲譽。
普通的功能性測試的主要目的是“確保軟件能夠完成預先設計的功能”;而安全性測試的主要目的是“確保軟件不會去完成沒有預先設計的功能”。
安全性測試非常靈活,需要像黑客一樣思考,有時甚至需要一點靈感,因此沒有固定的步驟可以遵循。這里給出一些通用的思路和方法,希望這些歸納出的攻擊思路能夠拋磚引玉,啟發您設計出恰當的測試方案。
。1)畸形的文件結構:畸形的word文檔結構、畸形的mp3文件結構等都可能觸發軟件中的漏洞。file fuzz是測試這類漏洞的好方法。
。2)畸形的數據包:軟件中存在客戶端和服務器端的時候,往往會遵守一定的協議進行通信。程序員在實現時往往會假定用戶總是使用官方的軟件,數據結構總是遵守預先設計的格式。試著自己實現一個偽造的客戶端,更改協議中的一些約定,向服務器發送畸形的數據包,也許能發現不少問題;反之,客戶端在受到“出乎意料”的服務器端的數據包時,也可能遇到問題。
。3)用戶輸入的驗證:所有的用戶輸入都應該進行限制,如長字符串的截斷、轉義字符的過濾等。在web應用中應該格外注意sql注入和xss注入問題,sql命令、空格、引號等敏感字符都需要得到恰當的處理。
。4)驗證資源之間的依賴關系:程序員往往會假設某個dll文件是存在的,某個注冊表項的值符合一定格式等。當這些依賴關系無法滿足時,軟件往往會做出意想不到的事情。例如,我曾遇到過某些軟件把身份驗證函數放在一個dll文件中,當程序找不到這個文件時,身份驗證過程將被跳過!
。5)偽造程序輸入和輸出時使用的文件:包括dll文件、配置文件、數據文件、臨時文件等。檢查程序在使用這些外部的資源時是否采取了恰當的文件校驗機制。
。6)古怪的路徑表達方式:有時軟件會禁止訪問某種資源,程序員在實現這種功能時可能會簡單地禁用該資源所在的路徑不被訪問。但是,windows的路徑表示方式多種多樣,很容易漏掉一些路徑。例如,表17-3-1列出了一些對windows xp下計算器程序訪問的路徑表達方式。
表17-3-1 windows xp下計算器程序訪問的路徑訪問windows xp下計算器程序的不同方式說明
c:\windows\system32\calc.exe普通的絕對路徑
c:/windows/system32/calc.exeunix路徑格式
\\?\c:\windows\system32\calc.exe通過瀏覽器或run訪問
file://c:\windows\system32\calc.exe通過瀏覽器或run訪問
%windir%\system32\calc.exe通過環境變量訪問
\\127.0.0.1\c$\windows\system32\calc.exe需要共享c盤
c:\windows\..\windows\.\system32\calc.exe路徑回溯
c:\windows\.\system32\calc.exe路徑回溯
在使用了utf-8編碼之后的url路徑更加五花八門,在做安全測試時應該確認被禁止使用的資源能夠徹底被禁用。
。7)異常處理:確保系統的異常能夠得到恰當的處理。
本貼來自天極網群樂社區--http://q.yesky.com/group/review-18169609.html
文章來源于領測軟件測試網 http://www.kjueaiud.com/