如何更有效使用 Rational AppScan 掃描大型網站,第 1 部分: 工做原理及技術分析

近來看到AppScan的技術介紹,感受不錯,與同行分享。php

Rational AppScan(簡稱 AppScan)實際上是一個產品家族,包括衆多的應用安全掃描產品,從開發階段的源代碼掃描的 AppScan source edition,到針對 Web 應用進行快速掃描的 AppScan standard edition,以及進行安全管理和彙總整合的 AppScan enterprise Edition 等。咱們常常說的 AppScan 就是指的桌面版本的 AppScan,即 AppScan standard edition。其安裝在 Windows 操做系統上,能夠對網站等 Web 應用進行自動化的應用安全掃描和測試。安全

來張 AppScan 的截圖,用圖表說話,更明確。服務器

圖 1. AppScan 標準版界ide

請注意右上角,單擊「掃描」下面的小三角,能夠出現以下的三個選型「繼續徹底掃描」、「繼續僅探索」、「繼續僅測試」,有木有?什麼意思?理解了這個地方,就理解了 AppScan 的工做原理,咱們慢慢展開:測試

尚未正式開始安全測試以前,因此先無論「繼續」,直接來討論「徹底掃描」,「僅探索」,「僅測試」三個名詞:優化

AppScan 三個核心要素網站

AppScan 是對網站等 Web 應用進行安全***來檢查網站是否存在安全漏洞;既然是***,須要有明確的***對象吧,好比北約如今的對象就是卡扎菲上校還有他的軍隊。對網站來講,一個網站存在的頁面,可能成千上萬。每一個頁面也均可能存在多個字段(參數),好比一個登錄界面,至少要輸入用戶名和密碼吧,這就是一個頁面存在兩個字段,你提交了用戶名密碼等登錄信息,網站總要有地方接受而且檢查是否正確吧,這就可能存在一個新的檢查頁面。這裏的每一個頁面的每一個參數均可能存在安全漏洞,全部都是被***對象,都須要來檢查url

這就存在一個問題,咱們來負責來檢查一個網站的安全性,這個網站有多少個頁面,有多少個參數,頁面之間如何跳轉,咱們可能並不明確,如何知道這些信息?看起來很複雜,盤根錯節;那就更須要找到那個線索,提綱挈領;想想,訪問一個網站的時候,咱們須要知道的最重要的信息是哪一個?網站主頁地址吧?從網站地址開始,不少其餘頻道,其餘頁面均可以連接過去,對不對,那麼可不能夠有種技術,告訴了它網站的入口地址,而後它「順藤摸瓜」,找出其餘的網頁和頁面參數?OK,這就是「爬蟲」技術,具體說,是「網站爬蟲」,其利用了網頁的請求都是用 http 協議發送的,發送和返回的內容都是統一的語言 HTML,那麼對 HTML 語言進行分析,找到裏面的參數和連接,紀錄並繼續發送之,最終,找到了這個網站的衆多的頁面和目錄。這個能力 AppScan 就提供了,這裏的術語叫「探索」,explorer,就是去發現,去分析,瞭解未知的,並記錄之。spa

在使用 AppScan 的時候,要配置的第一個就是要檢查的網站的地址,配置了之後,AppScan 就會利用「探索」技術去發現這個網站存在多少個目錄,多少個頁面,頁面中有哪些參數等,簡單說,瞭解了你的網站的結構。操作系統

「探索」瞭解了,測試的目標和範圍就大體肯定了,而後呢,利用「軍火庫」,發送×××,進行安全***,這個過程就是「測試」;針對發現的每一個頁面的每一個參數,進行安全檢查,檢查的彈藥就來自 AppScan 的掃描規則庫,其相似殺毒軟件的病毒庫,具體能夠檢查的安全***類型都在裏面作好了,咱們去使用便可。

那麼什麼是「徹底測試呢」,徹底測試就是把上面的兩個步驟整合起來,「探索」+「測試」;在安全測試過程當中,能夠先只進行探索,不進行測試,目的是瞭解被測的網站結構,評估範圍;而後選擇「繼續僅測試」,只對前面探索過的頁面進行測試,不對新發現的頁面進行測試。「徹底測試」就是把兩個步驟結合在一塊兒,一邊探索,一邊測試。

AppScan 工做原理小結以下:

  • 經過搜索(爬行)發現整個 Web 應用結構
  • 根據分析,發送修改的 HTTP Request 進行***嘗試(掃描規則庫)
  • 經過對於 Respone 的分析驗證是否存在安全漏洞


圖 2. AppScan 掃描原理:掃描規則庫 + 爬行 + 測
 

 

 

步驟 1:探索(又叫爬行,爬網)


圖 3. 探索(爬網,爬行)
 

 

步驟 2:測試(針對找到的頁面,生成測試,進行安全***)


圖 4. 針對探索發現的頁面和參數,進行安全測試

 

 

因此,簡言之,AppScan 的核心是提供一個掃描規則庫,而後利用自動化的「探索」技術獲得衆多的頁面和頁面參數,進而對這些頁面和頁面參數進行安全性測試。「掃描規則庫」,「探索」,「測試」就構成了 AppScan 的核心三要素。而在安全掃描過程當中,如何進行優化,就要結合這三個要素,看哪些部分須要優化,應該如何優化。

AppScan 結果文件

同時,對於 AppScan 標準版來講,掃描的配置和結果信息都保存爲後綴名爲 Scan 文件,Scan 文件裏面主要包括的內容以下:

  1. 掃描配置信息:掃描配置信息,如掃描的目標網站地址,錄製的登錄過程腳本等,選擇的掃描設置等都保存在 Scan 文件中。
  2. 全部訪問到頁面信息:針對每一個發現的頁面,即便沒有進行測試,在探索過程也會訪問該頁面並紀錄 http request/response 信息;因此若是探索的頁面訪問的時候返回的頁面內容比較多,頁面比較大,那麼即便只作了探索根本沒有掃描,整個 Scan 文件也會很大。
  3. 測試階段,記錄測試成功的測試變體和頁面訪問信息:針對每一個頁面都會發送屢次測試(測試變體),每次測試都會有 Request/response 信息,這些信息若是測試經過,即發現了一個安全問題,則會把該測試變體對應得 request/response 都會紀錄下來,保存在 .scan 文件中;因爲 AppScan 的掃描測試用例庫全面,對於每種安全威脅漏洞,都會發送多個安全測試變體(Variant)進行測試,好比對於 XSS 問題,AppScan 發送了 100 個變體,其中 30 個執行失敗,70 個變體執行成功,則會紀錄 70 次執行成功的具體變體信息,以及每一個變體對應的 Request/Response 信息。這就是一個很大的數據量。這些信息保存之後,就能夠在不鏈接在網站的狀況下進行結果分析,快速顯示當時測試的頁面快照等。

咱們以http://demo.testfire.net/bank/customize.aspx 爲例,以下就有 74 個變體都發現了 Customize 頁面的 Lang 參數存在跨站點腳本執行(XSS)類型的安全漏洞:


圖 5. 測試變體顯
 

 

 

因此針對 AppScan 標準版來講,因爲須要保存的信息比較多,結果文件是會比較大的,最根本的方法仍是有針對性地進行掃描和測試,使用排除頁面等排除冗餘頁面,把一個大的系統分解爲多個小的掃描任務等。

好的,瞭解了 AppScan 的原理,咱們就結合原來討論下爲何掃描大型網站時候可能遇到問題了。

 

 

在實際工做中,咱們也很難在最開始的階段,就把掃描規範制定下來,按照項目經理們的口頭禪「漸進明細」,「滾動式規劃」,在實踐中,更多時候也是摸着石頭過河,選擇了一個掃描策略,而後根據結果分析,看是否須要調整,不斷優化。好比選擇默認的「缺省值」掃描策略,對網站進行掃描,發現其「敏感信息」裏面會去檢查頁面上是否含有 Email 地址,是否含有信用卡號碼等,若是咱們以爲這些信息,顯示在頁面上是正常的業務須要(好比這樣的連接:<a href="mailto:admin@www.test.com">有問題請聯繫 admin@www.test.com</a>),咱們就能夠取消掉這些規則,因此掃描規則也很大程度上影響着咱們的掃描效率。

網站採用多種混合的技術,須要不一樣的掃描設置

一些大型網站,每每是一個統一的入口,在裏面提供不一樣的內容,而這些內容可能來源於不一樣的技術。如咱們熟悉的門戶網站,裏面就有「財經」、「體育」、「娛樂」等多個頻道;每一個頻道的內容,多是採用不一樣的技術,對應不一樣的服務器。如一個網站的「論壇」頻道,就有不少相似的頁面:

 

http://www.Test.com/bbs/showthread.php?id=1

Http://www.Test.com/bbs/showthread.php?id=2

Http://www.Test.com/bbs/showthread.php?id=3


 

這裏的 showthread.php 頁面存在屢次,每次都是參數值不一樣,訪問後發現這些頁面除了文本內容外,其餘的頁面結構等都相同,則這些頁面只須要選擇幾個典型的掃描便可,沒有必要所有掃描。

而同時,在另外的一些頻道,存在另外類型的頁面: 

http://www.Test.com/default.aspx?content=inside_community.htm

http://www.Test.com/default.aspx?content=inside_press.htm

http://www.Test.com/default.aspx?content=inside_executives.htm

 

這些動態頁面,也是網址相同,參數相同,可是具備不一樣的參數值,訪問時候發現每種類型的參數值都指向了徹底不一樣的頁面,則須要每種參數值都要測試到。這種狀況常常存在跳轉頁面中。

而這兩個頻道中,第一種狀況,能夠選擇典型的頁面掃描之,而第二種狀況則須要進行徹底的掃描,每種參數值都須要考慮到。這就須要不一樣的掃描設置。

同時,可能你們也注意到了,第一種狀況下的是 php 頁面,而第二種狀況下的則是 aspx 頁面,對應不一樣的開發技術,這也可能須要不一樣的掃描設置。

因此,總結下,AppScan 的掃描受到以下因素的影響:

  • 網站規模(頁面個數,頁面參數)
  • 掃描策略的選擇
  • 掃描設置

而對於大型的網站,咱們常常須要從幾個方面來優化配置

  • 選擇合適的,最小化的掃描規則
  • 分解掃描任務,把一個大的掃描任務分解爲多個小的掃描任務
  • 根據頁面特色,設置能夠過濾的相似頁面(冗餘頁面)

     

 

 

本文同步分享在 博客「51CTO_李曉鵬」(51CTO)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索