IBM Security AppScan Glass Box:一種全新的漏洞掃描思想
Glass Box 是 IBM Security AppScan Standard Edition(以下簡稱 AppScan)8.5 版本以后引進(jìn)的一個新的組件,是對 AppScan 的一個比較大的改進(jìn)。Glass Box 引進(jìn)了運(yùn)行時分析的技術(shù),通過部署在服務(wù)器端的代理,在探索和測試階段搜集 Web 應(yīng)用程序信息,并進(jìn)行分析,進(jìn)而反饋給 AppScan,使 AppScan 更有針對性的進(jìn)行探索和掃描,提高了掃描的精確性,并有利于發(fā)現(xiàn)更多的漏洞。
Glass Box 并不僅僅是 AppScan 的一個新的特性,而是代表了一種全新的思想,將動態(tài)分析技術(shù)與傳統(tǒng)的 AppScan 黑盒測試技術(shù)結(jié)合起來,對 Web 應(yīng)用程序進(jìn)行代碼級別的分析,給出更精確的分析結(jié)果,從而更有效的幫助客戶保護(hù)好自己的網(wǎng)站。
前言
Glass Box 是 IBM Security AppScan Standard Edition(以下簡稱 AppScan)8.5 版本以后引進(jìn)的一個新的組件,是對 AppScan 的一個比較大的改進(jìn)。Glass Box 引進(jìn)了運(yùn)行時分析的技術(shù),通過部署在服務(wù)器端的代理,在探索和測試階段搜集 Web 應(yīng)用程序信息,并進(jìn)行分析,進(jìn)而反饋給 AppScan,使 AppScan 更有針對性的進(jìn)行探索和掃描,提高了掃描的精確性,并有利于發(fā)現(xiàn)更多的漏洞。Glass Box 并不僅僅是 AppScan 的一個新的特性,而是代表了一種全新的思想,將動態(tài)分析技術(shù)與傳統(tǒng)的 AppScan 黑盒測試技術(shù)結(jié)合起來,對 web 應(yīng)用程序進(jìn)行代碼級別的分析,給出更精確的分析結(jié)果,從而更有效的幫助客戶保護(hù)好自己的網(wǎng)站。
本文首先簡單介紹了 AppScan Glass Box 的技術(shù)架構(gòu),然后介紹了在 AppScan 8.5 中 Glass Box 在 Windows XP 下使用效果。Glass Box 支持 WebSphere、Tomcat、JBoss 等多種應(yīng)用服務(wù)器,本文選擇的 Web 服務(wù)器為大家常見的 Tomcat 7.0。
技術(shù)架構(gòu)
Glass Box 可分為客戶端和服務(wù)端。客戶端又可分為 GlassAPI 和 Glass Box 引擎服務(wù),GlassAPI 用于和服務(wù)器端通信,獲取服務(wù)端返回的問題信息;Glass Box 引擎服務(wù)基于預(yù)定義的驗證規(guī)則,對獲取到的服務(wù)端進(jìn)行分析,判斷是否存在漏洞。服務(wù)端通過代理程序搜集服務(wù)器端信息,包括 Web 應(yīng)用程序運(yùn)行時信息(根據(jù)預(yù)定義的特征匹配規(guī)則)、源代碼信息、配置文件信息、操作系統(tǒng)信息、數(shù)據(jù)庫信息和 Web 服務(wù)器信息等,并將搜集到的信息返回給客戶端。
圖 1. Glass Box 技術(shù)架構(gòu)圖
配置及使用
打開掃描配置面板,可對 Glass Box 進(jìn)行配置。點擊 Glass Box 面板中的添加按鈕,可添加 Glass Box 代理程序。
圖 2. Glass Box 代理程序定義
代理程序的用戶名和密碼分別為安裝 Glass Box 時設(shè)定的用戶名和密碼,如需要修改密碼,可運(yùn)行 AgentCredentials.bat <username> <password> ,或直接修改位于 GBootStrap\WEB-INF 目錄下的 users.xml 文件,重啟 Tomcat 后生效。用戶可添加多個 Glass Box 代理程序,但 AppScan 同一時間只能使用其中的一個。添加代理程序成功后,可對 Glass Box 進(jìn)行設(shè)置,選中"在探索階段使用 glass box ",可發(fā)現(xiàn)更多的隱藏的 URL;選中"在測試階段使用 glass box",可發(fā)現(xiàn)更多的漏洞和提供更詳細(xì)的漏洞信息。配置成功后,AppScan 右下角狀態(tài)欄將顯示"Glass box 掃描:已啟用"。
Glass Box 配置成功后,需要對 Web 應(yīng)用程序重新掃描。需要注意的是,由于 Glass Box 對 URL 的解析問題,掃描本地網(wǎng)站需要配置虛擬域名,即起始 URL 不能是“http://localhost/myproject”, 而應(yīng)該是“http://mysite/myproject”。Glass Box 目前僅支持 Java 項目。本文所選用掃描網(wǎng)站是 IBM AppScan 開發(fā)人員提供的 AltoroJ 項目。
通過對配置 Glass Box 前后的掃描結(jié)果進(jìn)行分析,我們分析一下使用 Glass Box 的三個優(yōu)勢。為方便起見,本文采用默認(rèn)的掃描配置(新建一個常規(guī)掃描,采用默認(rèn)的掃描策略,對掃描配置的各項參數(shù)不做任何修改),并且沒有對結(jié)果進(jìn)行分析,排除誤報的漏洞。每次掃描,結(jié)果可能會略有不同;若差別太大,則應(yīng)該檢查掃描配置信息,查看日志,找出問題所在。
1. 在探索階段通過檢測出代碼中不可見的參數(shù)和 cookie 信息,探索隱藏的掃描路徑,提高掃描覆蓋率。
在應(yīng)用程序中,有一些參數(shù)并未暴露給用戶,即對用戶是"不可見"的,傳統(tǒng)的 AppScan 運(yùn)行在客戶端,并不能夠檢測到這些參數(shù),更無法探索到相關(guān)的頁面。 Glass Box 運(yùn)行于探索階段全過程,預(yù)定義一些"感興趣"的方法(如 getParameter、Runtime.getRuntime().exec 等),并時刻檢測這些方法是否運(yùn)行,并進(jìn)而探索出其中的參數(shù),再根據(jù)這個參數(shù)構(gòu)造掃描路徑。
2. 在測試階段,Glass Box 可增強(qiáng) AppScan 在各種漏洞類型方面的檢測。
Glass Box 通過搜集服務(wù)端信息,可減少誤報率,增強(qiáng) AppScan 對各種漏洞類型的檢測,主要能夠增強(qiáng) AppScan 對注入攻擊、不安全的直接對象引用、安全配置錯誤和不安全的加密存儲等漏洞的檢測。通過掃描 AltoroJ 項目可以發(fā)現(xiàn),配置 Glass Box 前,共掃描出了 100 個漏洞;而配置 Glass Box 后,共掃描到了 139 個漏洞;Glass Box 增加了了大約 40% 的漏洞掃描發(fā)現(xiàn)數(shù)量。下表是按照 OWASP Top 10 漏洞分類方法,對使用 Glass Box 前后的掃描漏洞數(shù)量進(jìn)行的對比。
表 1. 使用 Glass Box 前后發(fā)現(xiàn)的漏洞數(shù)量對比
有時候,Web 開發(fā)人員會屏蔽錯誤信息,比如設(shè)置一個錯誤頁面,發(fā)生異常時直接跳轉(zhuǎn)到該頁面,AppScan 無法直接從 response 信息中判斷是否存在漏洞。Glass Box 通過預(yù)定義的方法,搜集服務(wù)器端的信息,從而判斷是否存在漏洞。
通過掃描我們發(fā)現(xiàn),未使用 Glass Box 前,AppScan 并未檢測出用戶登錄頁面的 SQL 注入漏洞(AppScan 可檢測出各種類型的漏洞,未檢測出該頁面的 SQL 注入漏洞屬于個別情況)。我們來分析一下原因。
AppScan 在測試階段,向登陸頁面發(fā)送請求,我們假定 AppScan 將 Username 和 Password 均設(shè)置為"'",服務(wù)器返回錯誤信息"Syntax error: Encountered "\'" at line 1, column 63. "。由于在 Response 中并未包含 SQL 異常信息,所以 AppScan 無法判斷是否存在 SQL 注入漏洞。
圖 3. 頁面顯示的錯誤信息
但是如果我們寫一個測試代碼,可得知當(dāng)我們輸入單引號時,服務(wù)器端確實報了 SQL 語法錯誤信息,如圖 4 所示。Glass Box 安裝在服務(wù)器端,當(dāng)它發(fā)現(xiàn)請求值為 g'[number]b,且包含了單引號的信息請求時,如果出現(xiàn) SQL 異常錯誤信息,那么 Glass Box 便判斷出該頁面存在 SQL 注入漏洞。
圖 4.SQL 異常信息
3. 在生成報告階段,可提供代碼級的調(diào)試信息和修復(fù)建議
我們以 AltoroJ 項目的登陸頁面為例,對比一下使用黑盒測試和使用 Glass Box 發(fā)現(xiàn)的漏洞的修復(fù)過程。AppScan 通過分別在 Username 和 Password 輸入框中輸入"4ppSc4n"和"A' OR '7659'='7659",發(fā)現(xiàn)了該頁面存在 SQL 注入漏洞(AppScan 中稱之為"SQL 注入的認(rèn)證旁路")。我們根據(jù)"請求 / 響應(yīng)"信息可以發(fā)現(xiàn),該漏洞存在于 doLogin 這個 servlet 中,如圖 5 所示。
圖 5.AppScan “請求 / 響應(yīng)”
我們根據(jù) WEB-IBF/web.xml 中的信息進(jìn)一步判斷出漏洞存在于 LoginServlet.java 文件中。
清單 1.web.xml 文件中的 LoginServlet 配置
<servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/doLogin</url-pattern> </servlet-mapping> <servlet> <description> </description> <display-name> LoginServlet</display-name> <servlet-name>LoginServlet</servlet-name> <servlet-class> com.ibm.rational.appscan.altoromutual.servlet.LoginServlet </servlet-class> </servlet> |
打開 LoginServlet.java 文件,我們依然很難一眼就判斷出漏洞的準(zhǔn)確位置,需要對代碼做進(jìn)一步的分析。經(jīng)過分析,找到存在漏洞的語句:
清單 2. LoginServlet.java 文件中存在漏洞的語句
if (!DBUtil.isValidUser(username, password))
然后,我們再找到 DBUtil 類中的 isValidUser 函數(shù),最終找到了存在漏洞的 sql 語句:
清單 3. 存在漏洞的 SQL 語句
ResultSet resultSet = statement.executeQuery("SELECT COUNT(*)FROM PEOPLE WHERE USER_ID
= '"+ user +"' AND PASSWORD='" + password + "'");
/* BAD - user input should always be sanitized */
雖然有時候?qū)τ诮?jīng)驗豐富的開發(fā)者來說,對于邏輯簡單程序能夠直接定位到某個 java 文件,省去一些步驟,但是大部分情況下,我們都需要一步步的去分析。而對于 Glass Box 發(fā)現(xiàn)的漏洞,則可以大大節(jié)省開發(fā)人員定位代碼漏洞的時間。Glass Box 可報告出漏洞的具體位置信息,如方法名、類名、文件名和行號等信息;并可報告運(yùn)行時信息。如圖 6 所示。
圖 6. Glass Box 問題信息
總結(jié)
黑盒測試技術(shù)由于無法獲取應(yīng)用程序的內(nèi)部信息,導(dǎo)致掃描覆蓋率偏低,且無法提供詳細(xì)的調(diào)試信息;而白盒測試技術(shù)的代價過于高昂,需要大量的人工成本,且誤報率較高。而 Glass Box 是有別于傳統(tǒng)黑盒測試和白盒測試的一種混合測試技術(shù),將有效解決這一難題,為客戶創(chuàng)造更好的價值。
posted on 2014-08-05 09:55 順其自然EVO 閱讀(657) 評論(0) 編輯 收藏 所屬分類: 安全性測試