摘 要: Web軟件安全漏洞層出不窮,攻擊手段日益變化,為分析現有的Web控件漏洞檢測方法,提出基于Fuzzing測試方法的Web控件漏洞檢測改進模型。該系統從功能上分為五大模塊進行設計和實現,并結合靜態分析與動態分析技術檢測Web ActiveX控件模型的漏洞,給出“啟發式規則”來優化測試數據生成引擎。實例測試結果表明,Web控件漏洞的Fuzzing測試模型是有效和可行的,并能妥善處理好交互性問題。
關鍵詞: Fuzzing測試;Web控件;漏洞檢測;漏洞分析
“漏洞”是計算機系統在硬件、軟件、協議的具體實現或系統安全策略上存在的安全方面的缺陷。漏洞一旦被發現,攻擊者就可使用這個漏洞獲得計算機系統的額外權限,使在未授權的情況下訪問或破壞系統[1]。Web控件漏洞數量在近幾年呈現迅速增長的趨勢,根據著名的軟件安全公司賽門鐵克關于Web控件安全漏洞的統計:2007年至2009年的檢測Web漏洞呈幾何數量級增長[2]。針對日益增多的ActiveX 控件漏洞,一方面操作系統安全工程師被動地研究新的防御機制,另一方面許多軟件安全研究人員主動地探究ActiveX 控件漏洞的發掘技術。目前常用的漏洞挖掘技術主要有Fuzzing技術、靜態分析技術、動態調試技術、補丁比較技術等[3]。
1 Fuzzing漏洞檢測模型
Fuzzing漏洞測試方法的選擇依賴不同的因素,如目標程序、需要測試的數據所采用的格式、研究者的技能等,但其步驟相對一致。故此,可以抽象其模型,圖1是Fuzzing漏洞檢測模型示意圖[4]。
首要步驟是構造有可能觸發漏洞的畸形測試數據。此模塊完成測試目標各種信息收集的功能,收集的這些信息為接下來的進一步測試服務,對Fuzzing測試能否檢測到漏洞起決定性的作用。新的測試數據可以用預先設定的值,也可以通過改變已有的測試數據來動態生成。
Fuzzing漏洞檢測模型的核心步驟是Fuzzing測試。一般都可設置測試模式,即指定該次測試用的是組合字段測試、等價類測試、邊界值測試等模式。也可以在后續異常分析時進行數據構造方式以及測試模式的調整,從而使測試過程更加高效。
異常監視也是Fuzzing測試中較為重要的步驟。異常監視可以使我們確切知道測試數據包或者文檔在送往Fuzzing系統測試的過程中,哪些數據包和文檔觸發了系統異常。再者,異常監視可以記錄下異常情況下的一些重要信息,如寄存器狀態、CPU狀態以及堆棧狀態等,以供下一步的異常分析做參考。
異常分析的任務是確定該次異常是否有可利用性以及是否是漏洞。因為觸發系統異常的原因繁多,不只是軟件漏洞,軟件的bug也可能導致系統崩潰。異常分析幾乎是現階段每一套Fuzzing系統的弱點,因為其涉及的人工分析工作太多,所以這一環節很難引入自動化機制。
2 傳統的Web控件漏洞檢測模型
傳統模型主要由測試前準備、測試階段、測試后報告三個階段組成。測試前準備階段包括分析Web控件屬性、分析函數及其參數、生成測試數據等;測試階段主要包括模擬用戶打開測試實例、動態異常監測和異常記錄。圖2所示為傳統的ActiveX控件漏洞檢測模型。
2.1 測試前準備階段
首先,確定目標Web ActiveX控件,即找出Web控件的CLSID。在注冊表相應的表項信息中根據控件的CLSID,確認其是否實現IObjectSafety安全接口、是否是腳本安全、是否被設置了killbit位,只有在確認控件實現了IObjectSafety安全接口、腳本安全、沒有被設置KillBit位的情況下,才繼續后續的步驟。
最后,還要分析出ActivieX控件的屬性列表、函數列表以及函數參數列表,只有明確這些列表之后,才能根據不同的漏洞有針對性地構造Fuzzing測試數據。這也是Web ActiveX控件Fuzzing漏洞測試的特殊性之一。
2.2 測試階段
在測試階段,將每個測試實例送往目標程序進行測試。在Web控件的漏洞檢測過程中,測試實例往往以htm、html、wsf、PDF等文檔格式存在,將所有的測試文檔打開,使其可以用程序模擬用戶手工點擊實現。
打開測試文檔后,IE彈出對話框提示是否加載相應的Web控件。Web控件加載、Web控件初始化、測試實例調用控件方法等過程,都可能出現異常,可以利用Windows提供的調試接口和Windows的結構化異常處理機制SEH,將Fuzzing工具作為調試器附加在IE瀏覽器之上,這樣便可以接收、處理、記錄IE的各種調試、異常事件。當異常出現時,Windows系統總會彈出錯誤提示窗口,一個較為完善的Fuzzing測試工具,必須能夠模擬用戶點擊關閉提示窗口,該功能可以用Windows提供的HOOK技術實現,在以后的研究中將更為詳細地分析和解決這個問題。
2.3 測試報告階段
在捕獲并保存服務器進程內部的異常之后,原型系統將對異常信息進行自動分析,從而智能地給出異常分析報告。該模型系統所實現的異常自動分析算法能夠有效地分析出導致異常命令、異常類型以及異常風險程度等。根據該算法生成的異常分析報告在一定程度上能減少漏洞分析人員的后期分析工作,縮短漏洞分析時間,從而提高漏洞發掘的效率。
2.4 傳統Web控件漏洞檢測模型的不足
傳統模型存在以下幾方面不足:(1)若ActiveX控件的可調用方法列表較長,這對于Fuzzing漏洞測試的工作量將大大增加,包括測試樣本數據的數量增加和測試過程的時間增加。本文應用代碼掃描分析技術解決這個問題,有效地減少了測試的工作量。(2)生成測試數據的隨機性。對此,本文采用啟發式生成測試數據的方式來解決,提高了漏洞發掘效率和自動化程度。(3)測試方法較為單一,動態分析可在代碼執行過程中查看代碼,善于發現運行時錯誤;而靜態分析通過算法檢查代碼的錯誤。傳統的模型比較著重靜態分析,很難發現復雜交互中產生的缺陷,本文采用靜態分析和動態分析結合的方式。
3 Web控件漏洞檢測模型的改進
針對Web控件漏洞檢測模型的不足,本文采用一種融合代碼掃描和Fuzzing測試的改進模型,采用靜態分析和動態分析相結合的方法,如圖3所示。改進后的模型增加了代碼掃描分析模塊、啟發式生成測試數據模塊、OllyDbg分析測試模塊等模塊。
3.1 代碼掃描分析模塊
本模塊的目的是減小測試函數列表。模塊搜索函數地址空間中的“目標字”,為測試數據的構造提供支持。另外,用IDA等反匯編工具對目標程序的二進制文件進行反匯編,若文件掃描到運用了不安全方法,則將此控件函數標記為待測試函數。
3.2 啟發式生成測試數據模塊
借鑒人工智能中的遺傳變異和啟發式算法來生成測試數據, 使測試數據更具針對性,從而提高漏洞發掘效率和自動化程度。
3.3 OLLYDBG分析測試結果模塊
利用Fuzzing進行漏洞發掘時,漏洞發掘人員往往需要第三方調試器配合才能有效地發掘軟件漏洞。本模型系統采用OLLYDBG對服務器進程進行全程監控。OLLYDBG是一個新的動態追蹤工具,它將IDA與SoftICE相結合,成為目前最強大的調試工具。
4 測試結果及分析
為了驗證本文提出的Web控件漏洞Fuzzing測試模型的可行性和有效性,選擇用戶量較大的“暴風影音”播放器進行測試(主要針對其mps.dll控件進行測試)。測試環境如下:Windows系統的Internet Explore:V7.0,測試對象:暴風影音(Stormplayer)V3.11。
4.1 枚舉ActiveX控件屬性、方法及方法參數
安裝“暴風影音V3.11”,然后用改進的Fuzzing測試模型針對暴風影音的mps.dll控件進行測試,枚舉ActiveX控件的屬性、方法和方法參數。
4.2 構造測試文檔
本文的Fuzzing測試模型,在枚舉出來的屬性和方法的參數列表中,右擊任意一個屬性或方法,便可生成對應的測試數據。模型以VB腳本文檔形式生成測試文檔,便于wscript.exe的直接調用。下面代碼是暴風影音mps.dll控件的導出函數OnBeforeVideoDownload()的Fuzzing測試文檔之一。
<?XML version='1.0' standalone='yes' ?>
<package><job id='DoneInVBS' debug='false' error='true'>
<object classid='clsid:6BE52E1D-E586-474F-A6E2-1A85A9B4D9FB' id='target' />
<script language='vbscript'>
'Wscript.echo typename(target)
targetFile = "C:\Program Files\StormPlayer \mps.dll"
prototype = "Sub OnBeforeVideoDownload ( ByVal URL As String )"
memberName = "OnBeforeVideoDownload"
progid="MPSLib.StormPlayer"
argCount=1
arg1=String(8212, "A")
target.OnBeforeVideoDownload arg1
</script></job></package>
4.3 漏洞測試及結果分析
構造了一系列的測試文檔之后,下面要進行漏洞測試。當ActiveX控件的屬性或方法較多時,耗時較長。于是Fuzzing測試自動化的好處便得到體現。因為能夠處理好交互性問題,所以漏洞測試過程便可做到無人值守[5]。本文的Fuzzing測試模型便能妥善處理好交互性問題。
4.3.1 異常列表
對Web ActiveX控件的某一屬性或者方法進行Fuzzing測試,用列表的方式呈現其結果,從該表中便可以方便地獲知導致異常發生的具體測試文檔、異常發生的數目等信息。圖4是暴風影音mps.dll控件的導出函數OnBeforeVideoDownload()Fuzzing測試的異常列表。
4.3.2 異常詳細報告
對異常列表中的每一項可以查看其詳細報告。利用論文提出的Fuzzing測試模型對暴風影音mps.dll控件的導出函數OnBeforeVideoDownload()進行Fuzzing測試得到測試結果異常報告。圖5是其中的一項詳細報告。從中可以方便地獲知異常發生的情況下的各種重要信息,包括異常類型、當前線程狀態、當前SEH鏈表的狀態、當前堆棧內存狀態、當前各重要寄存器內容以及當前EIP附近的指令等。
從這份詳細報告中可以看到EIP寄存器的值為“41414141”,這是構造測試文檔時所采用的經典長字符串“AAAA”的十六進制碼。充分說明了若攻擊者加入設計的輸入參數,EIP可以被劫持,從而可以引導系統去執行攻擊者設計的特殊代碼。因此可以確定mps.dll控件的導出函數OnBeforeVideoDownload()確實存在著漏洞。有經驗的測試者還可以根據異常報告中崩潰地址、崩潰時的棧空間狀態和崩潰時的棧空間狀態指令狀態等信息,進一步分析出mps.dll控件漏洞出現的具體位置。
由于Web ActiveX控件具有特殊性、變化快等特點,Web應用的安全檢測變得十分困難,而Web安全防范日益重要。本文針對Web的安全漏洞檢測的模型和算法做了一些探討,所提出的方案在解決當前Web ActiveX控件漏洞檢測問題上有所突破。未來,將進一步考慮增強測試數據的針對性,從而提高測試數據觸發漏洞的比率;搜索ActiveX各導出函數地址空間中的“特征字”,搜索調用非安全方法的ActiveX導出函數的具體實現方法[6]。
參考文獻
[1] 王雨晨.系統漏洞原理與常見攻擊方法[J].計算機工程與應用,2001,38(8):62-64.
[2] SUTTON M,GREENE A,AMINI P.Fuzzing:brute vulnerability discovery(1st ed)[M].Pearson Education,2007.
[3] 邵林,張小松,蘇恩標.一種基于Fuzzing技術的漏洞發掘新思路[J].計算機應用研究,2009,26(3):1086-1088.
[4] 吳毓書,周安民,吳少華.基于Fuzzing的ActiveX控件漏洞發掘技術[J].計算機應用,2008,28(9):2252-2254.
[5] 張美超,曾凡平,黃奕.基于漏洞庫的fuzzing測試技術[J]. 小型微型計算機系統,2011,4(4):651-655.
[6] 高峻,徐志大,李健.漏洞自動挖掘技術研究進展[J].計算機與數字工程,2009,37(1):100-105.