◆李柳青
(中征(北京)征信有限責任公司天津分公司 天津 300072)
在互聯網廣泛普及的今天,Web 應用作為互聯網的重要組成部分,正悄無聲息的滲入我們的生活。但Web 應用在豐富我們生活的同時,也將眾多信息安全風險引入到我們身邊。因此應用安全是Web系統當前面臨的頭等大事。
確保Web 應用安全的過程就是安全攻防過程[1]。不存在絕對安全的應用,應用一經對外發布,就意味著系統風險點的形成,一旦風險被利用,就會形成系統安全漏洞。雖然防火墻、IDS、加固防護等手段層出不窮,但均無法檢測或阻止應用層的攻擊。
本文設計的應用安全測試方案旨在檢測出應用安全漏洞,極大程度確保應用安全。如圖1 所示,本方案是以安全需求評審及代碼安全審計作為前置測試,以自動化掃描及手動滲透為核心測試,以配置核查掃描為后置測試的全流程測試方案。在軟件生命周期各環節進行安全把控,提升Web 應用的質量。

圖1 應用安全測試方案
業內權威安全漏洞庫有Bugtraq,CVE。由漏洞庫維護人員對確認的漏洞及脆弱點進行統一編號,其編號是業界承認的統一標準,也是有助于避免混淆的重要方法。OWASP CHINA 組織成立OWASP TOP 10 項目,收集并處理大量反饋,整理出危害較大的應用程序安全風險,以提升開發及管理人員安全意識,并將其作為應用安全標準[2]。表1 列出常見的危害較大的安全漏洞的發生原因及防范措施。

表1 安全漏洞分析表
本方案貫穿軟件開發全過程,測試模型如圖2 所示。

圖2 應用安全測試方案模型
安全需求評審檢查點中的身份鑒別著重評審口令策略,賬號管理策略,驗證碼機制,身份認證機制;訪問控制主要審查權限控制,防止橫向及縱向越權;抗抵賴側重評審審計日志記錄的操作及內容是否足夠,日志訪問及保存方式,日志傳輸過程中的完整性保密性;敏感信息保護側重評審敏感信息的范圍完整性,傳輸及存儲方式的保密性;信息完整性側重評審簽名驗簽方式;信息保密性考慮信息加密算法及加密信息是否合理;數據備份恢復評審數據備份技術,頻次,地點及數據恢復方案。
代碼安全審計階段,使用源代碼檢測工具審查代碼,目的在于盡早發現代碼中的安全缺陷。目前主流的源碼工具有Prefast,FindBugs,Fuzz[1]。其中Prefast 是微軟研發的靜態代碼審查工具,主要功能是通過分析代碼的數據和控制信息來檢測程序中的缺陷。FindBugs 是基于Java 的靜態代碼分析工具,將字節碼與一組缺陷模式進行匹配以發現代碼缺陷,它不僅提供了靈活多樣的過濾器,而且還支持自定義檢查器。Fuzz 利用構造畸形的輸入數據引發被測試目標產生異常,從而發現相應的安全漏洞。Fuzz 是目前最有效的漏洞挖掘技術。
應用安全測試核心階段分為兩個步驟:
(1)自動化掃描及漏洞驗證階段:使用自動化工具進行漏掃,并對漏掃結果進行驗證;
(2)滲透性測試階段:依據漏洞驗證結果,修整系統威脅模型,設計測試用例,采用滲透測試工具進行測試。
在步驟1 中,運用工具進行自動化掃描的前提是構建威脅模型。構建威脅模型需要從用戶、過程、數據流、數據存儲等方面考慮。
自動化工具掃描的主流安全測試工具包括 IBM AppScan、BurpSuite、Nmap、SQLmap,WVSS 等。掃描結果的驗證是本階段的主要內容。對結果驗證以獲取漏洞點位置,手工錄入驗證漏洞是否存在。如SQL 盲注,驗證方法是在漏洞點輸入或簡單SQL 語句查看返回結果;跨站腳本攻擊漏洞的驗證方法是輸入攻擊向量后,查看源碼或直接在網頁操作,看是否能對攻擊向量進行過濾或轉義;可預測的登錄憑證通常是通過修改登錄請求報文的形式,多次碰撞提交,對比返回報文的關鍵信息。通過對漏洞逐一驗證,并修正安全模型,以此作為滲透測試的測試用例設計依據。
步驟2 中測試設計階段包括威脅風險等級評定,功能優先級確定,測試用例設計,測試工具選擇,測試執行過程。風險等級評定依據GB/T30279-2013[3]進行。確定功能優先級,主要依據功能模塊在系統中的重要程度、安全需求以及模塊遭到攻擊后對系統和用戶的影響。用例設計在威脅模型及漏洞風險值的基礎上,結合功能優先級,針對注入,跨站,身份認證,權限控制及跨站請求偽造情景進行用例設計。
用例設計完成后,需要選擇合適的工具進行滲透測試。業內常用于滲透測試的工具包括IBM AppScan、BurpSuite、SQLmap 等,前兩種用于滲透的集成平臺,SQLmap 主要用于自動檢測應用中SQL 注入漏洞的開源程序[4]。滲透執行過程中需要記錄風險點位置,測試數據,漏洞表現等信息。
配置核查掃描是安全測試后置擴展內容,旨在確保部署環境中網絡設備、服務器設備及操作系統,數據庫軟件,中間件等軟件達到安全配置基線,確保網絡安全、主機安全。配置核查自動掃描工具內置豐富的配置核查知識庫,根據系統的設備和軟件不同,可定制配置基線庫[5]。通過執行多種命令行為,獲取配置信息,并與安全基線比較,標識風險項。
通過安全需求評審,代碼安全審計,自動化掃描,滲透性測試,配置核查掃描階段,全生命周期進行安全測試的過程,以期盡可能檢測出安全測試漏洞。
本實驗選取已上線且未經過安全測試的Web 應用系統。本系統在上線前,測試設計階段耗時14 人天,測試執行耗時21 人天,共檢測缺陷253 個。上線后共報出安全測試漏洞5 個,其中,SQL 注入2個,跨站腳本1 個,失效身份認證1 個,跨站請求偽造1 個。安全測試安全需求評審耗時3 人天,代碼安全審計耗時1 人天,自動化掃描耗時1 人天,滲透性測試耗時3 人天,配置核查耗時1 人天。安全測試過程中共發現安全漏洞73 個。
經比對,實施應用安全測試導致測試時長增加25.7%,發現缺陷數的增量28.9%。據此說明實施應用安全測試是必要的,在適當增加測試時長的情況下,能有效檢測出應用安全漏洞。
本文提出了Web 應用安全測試方案,本方案通過安全需求評審及代碼安全審計的前置測試,確保安全需求分析到位,提升代碼安全質量。利用自動化掃描及滲透性測試進行核心測試,通過配置核查掃描確保設備及軟件滿足安全基線。
經實驗比對,本方案增加測試時長的百分比低于發現缺陷百分比,在增加一定測試時長的情況下,能極大程度發現安全漏洞。