Appscan工作原理詳解
阿新 • • 發佈:2019-01-13
AppScan,即 AppScan standard edition。其安裝在 Windows 作業系統上,可以對網站等 Web 應用進行自動化的應用安全掃描和測試。
Rational AppScan(簡稱 AppScan)其實是一個產品家族,包括眾多的應用安全掃描產品,從開發階段的原始碼掃描的 AppScan source edition,到針對 Web 應用進行快速掃描的 AppScan standard edition,以及進行安全管理和彙總整合的 AppScan enterprise Edition 等。我們經常說的 AppScan 就是指的桌面版本的 AppScan,即 AppScan standard edition。其安裝在 Windows 作業系統上,可以對網站等 Web 應用進行自動化的應用安全掃描和測試。 AppScan 三個核心要素- 通過搜尋(爬行)發現整個 Web 應用結構
- 根據分析,傳送修改的 HTTP Request 進行攻擊嘗試(掃描規則庫)
- 通過對於 Respone 的分析驗證是否存在安全漏
- 掃描配置資訊:掃描配置資訊,如掃描的目標網站地址,錄製的登陸過程指令碼等,選擇的掃描設定等都儲存在 Scan 檔案中。
- 所有訪問到頁面資訊:針對每個發現的頁面,即使沒有進行測試,在探索過程也會訪問該頁面並紀錄 http request/response 資訊;所以如果探索的頁面訪問的時候返回的頁面內容比較多,頁面比較大,那麼即使只做了探索根本沒有掃描,整個 Scan 檔案也會很大。
- 測試階段,記錄測試成功的測試變體和頁面訪問資訊:針對每個頁面都會發送多次測試(測試變體),每次測試都會有 Request/response 資訊,這些資訊如果測試通過,即發現了一個安全問題,則會把該測試變體對應得 request/response 都會紀錄下來,儲存在 .scan 檔案中;由於 AppScan 的掃描測試用例庫全面,對於每種安全威脅漏洞,都會發送多個安全測試變體(Variant)進行測試,比如對於 XSS 問題,AppScan 傳送了 100 個變體,其中 30 個執行失敗,70 個變體執行成功,則會紀錄 70 次執行成功的具體變體資訊,以及每個變體對應的 Request/Response 資訊。這就是一個很大的資料量。這些資訊儲存以後,就可以在不連線在網站的情況下進行結果分析,快速顯示當時測試的頁面快照等。
大型網站技術特點分析 AppScan 掃描的物件是網站等 Web 應用,而網站規模的大小和使用的技術,都需要針對性的進行掃描設定,我們遇到的很多問題,都是在掃描規模比較大的網站時候遇到的,如一個網站頁面數目超過 2000 個,需要執行的掃描用例是 50,000 個,在掃描這樣的網站時候,預設情況下 AppScan 的掃描 scan 檔案可能超過 100M 了,掃描效率就可能比較慢,需要長時間的掃描執行時間。 下面,我們就來分析大型網站中存在的一些可能影響 AppScan 掃描的技術特點。 網站頁面多,頁面引數多,則 AppScan 需要傳送的測試用例多 什麼叫大型網站,顧名思義,網站規模大,提供內容多;具體說是頁面很多,內容很全。比如 www.sina.com.cn,比如 http://music.10086.cn/,網站中都有多個頻道,包括上萬個頁面。而且除了頁面多,可能還有一個特點 --- 頁面引數多,即要填寫的地方多,和使用者的互動多;比如一個網站如果都是靜態頁面(.html、.jpg 等),沒有讓使用者輸入的地方,那麼可以利用,可以作為攻擊點的地方也就不多。如果頁面到處都是有輸入有查詢,要求使用者來參與的,你輸入的越多,可能洩露的資訊也越多,可能被別人利用的攻擊點也就越多,所以和頁面引數也是有關係的。 AppScan 產生測試用例的時候,也是根據每個引數來產生的,簡單說,如果一個引數,對應了 200 個安全攻擊測試用例,那麼一個登陸介面至少就對應 400 個了,為什麼?登陸介面至少有使用者名稱(username)和密碼(password)兩個欄位吧?每個欄位 200 個攻擊用例。 這個簡單吧,還可以更復雜:如果遇到下面的兩個地址,那要掃描多少次呢? http://www.Test.com/focus/satisfy/file.jsp?id=1 http://www.Test.com/focus/satisfy/file.jsp?id=2 上面的兩個地址有類似的,“?”號以前的 URL 地址完全一樣,“?”號後面帶的引數不同,這種可以認為是重複頁面,那麼對於重複頁面,是否要重複測試呢? 這取決於“冗餘路徑設定”,預設的是最多測試 5 次;即,這種型別 URL 出現的前 5 次,那麼就是要測試 1000 個攻擊用例了。 如果再繼續修改下:遇到下面的 URL 呢 http://www.Test.com/focus/satisfy/file.jsp?id=&Item=open http://www.Test.com/focus/satisfy/file.jsp?id=2&Item=close 每個 URL 裡面都有 2 個引數,測試的次數就更多了。想象下,如果這個網頁裡面的引數如果是 10 個,或者更多的呢?比如很多網站提交註冊資訊的時候,要填寫的欄位就很多,要進行的安全測試用例也就隨之不斷增加… 這是網站規模的影響,還有一個問題,就出在“每個引數,傳送 200 個安全測試用例”這個假設上。這個假設的前提來源於哪裡?來源於我們選擇的掃描規則庫。即你關心那些安全威脅,這個需要在測試策略裡面選擇。同樣來參照防毒軟體,你會用防毒軟體來查詢一些專用的病毒嗎,比如 CIH、木馬;應用安全掃描也是一樣的道理,如果有明確的安全指標或者安全規則範圍,那麼就選擇之。這些可能來源於企業的規範,來源於政府的法律法規。就要根據你的理解,在這裡選擇。 在實際工作中,我們也很難在最開始的階段,就把掃描規範制定下來,按照專案經理們的口頭禪“漸進明細”,“滾動式規劃”,在實踐中,更多時候也是摸著石頭過河,選擇了一個掃描策略,然後根據結果分析,看是否需要調整,不斷優化。比如選擇預設的“預設值”掃描策略,對網站進行掃描,發現其“敏感資訊”裡面會去檢查頁面上是否含有 Email 地址,是否含有信用卡號碼等,如果我們覺得這些資訊,顯示在頁面上是正常的業務需要(比如這樣的連結:<a href="mailto:[email protected]">有問題請聯絡 [email protected]</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 的掃描受到如下因素的影響:
- 網站規模(頁面個數,頁面引數)
- 掃描策略的選擇
- 掃描設定
- 選擇合適的,最小化的掃描規則
- 分解掃描任務,把一個大的掃描任務分解為多個小的掃描任務
- 根據頁面特點,設定可以過濾的類似頁面(冗餘頁面)