一種基于滲透性測試的Web漏洞掃描系統設計與實現
CNCERT/CC 2006年的工作報告中顯示,隨著互聯網的快速發展,我國公共互聯網用戶數量已超過1.37億。在網絡發展的同時,互聯網作為一個運行系統和一個社會公共環境,所面對的和隱藏的安全威脅也越來越復雜,越來越嚴重。報告顯示,2006年CNCERT/CC接收國內26 476件非掃描類網絡安全事件報告中有24 477件是由于Web引起的。從2003年~2006年中國Web攻擊事件統計中不難發現,通過Web漏洞進行攻擊事件正在逐年迅速的增長。通過Web漏洞進行攻擊成了網絡漏洞攻擊的主要方式與手段。
國內外的許多學術機構、企業和標準化組織在Web漏洞探測方面做了大量的工作。Web漏洞探測系統日趨成熟,當前,比較成熟的漏洞掃描工具有Whisker及Nikto和Nessus。但由于安全產品特殊應用需求以及各個組織的工具自身的技術與安全防護問題,使得這些產品不能很好地被推廣或普及。對具體項目需求,設計并實現一個Web漏洞掃描系統是非常必要的。
1 Web漏洞掃描原理
Web漏洞掃描方法主要有兩類:信息獲取和模擬攻擊。信息獲取就是通過與目標主機TCP/IP的Http服務端口發送連接請求,記錄目標主機的應答。通過目標主機應答信息中狀態碼和返回數據與Http協議相關狀態碼和預定義返回信息做匹配,如果匹配條件則視為漏洞存在。模擬攻擊就是通過使用模擬黑客攻擊的方法,對目標主機Web系統進行攻擊性的安全漏洞掃描,比如認證與授權攻擊、支持文件攻擊、包含文件攻擊、SQL注入攻擊和利用編碼技術攻擊等對目標系統可能存在的已知漏洞進行逐項進行檢查,從而發現系統的漏洞。遠程字典攻擊也是漏洞掃描中模擬攻擊的一種,其原理與其他攻擊相差較大,若攻擊成功,可以直接得到登陸目標主機系統的用戶名和口令。
Web漏洞掃描原理就是利用上面的掃描方法,通過分析掃描返回信息,來判斷在目標系統上與測試代碼相關的漏洞是否存在或者相關文件是否可以在某種程度上得以改進,然后把結果反饋給用戶端(即瀏覽端),并給出相關的改進意見。
2 Web漏洞掃描系統設計與實現
Web漏洞掃描系統設計的基本要求是能夠找到Web應用程序的錯誤以及檢測Web服務器以及CGI的安全性,其中也包括認證機制、邏輯錯誤、無意泄露Web內容以及其環境信息以及傳統的二進制應用漏洞(例:緩沖區溢出等)。同時要求漏洞掃描功能能夠更新及時。本系統結合國內外其他Web漏洞掃描系統設計思想的優點,采用Browser/Server/Database(瀏覽器/服務器/數據庫)和模塊化的軟件開發思路,通過滲透性檢測的方法對目標系統進行掃描。
2.1 系統總體結構設計
本文設計開發的是一個B/S模式的Web漏洞掃描系統。它包括客戶端及服務端兩個部分,運行環境為Linux系統。首先:使用B/S結構使得用戶的操作不再與系統平臺相關,同時使得客戶操作更方便、直觀。其次,系統把漏洞掃描檢測部分從整個系統中分離出來,使用專門的文件庫進行存放(稱為插件)。如果發現新的漏洞并找到了新的檢測方法,只要在相關文件夾中增加一個相應的新的攻擊腳本記錄,即可以實現對漏洞的滲透性測試,同時也實現了及時的升級功能。最后,系統從多個角度來提高漏洞掃描系統的掃描速度以及減少在用客戶端與服務端之間的信息傳輸量,以提高系統的運行效率。其總體結構設計如圖1所示。

圖1中給出了漏洞掃描系統模型的系統結構圖。該漏洞檢測系統主要分成四部分:
(1)主控程序。采用多線程處理方式,它接收多個客戶端提交的用戶指令后,再次利用多線程技術調用相關的插件腳本,利用滲透性測試對目標系統進行檢測,并將結果和進程信息傳回客戶端顯示并保存在客戶端本地,以方便用戶查看詳細信息。
(2)客戶端,即控制平臺。B/S結構比傳統的C/S結構優越的地方在于方便性和與平臺無關性,用戶通過Web瀏覽器設定掃描參數,提交給服務器端,控制服務器端進行掃描工作。同時,對服務器返回的各種檢測結果進行相應的顯示、匯總和保存。
(3)插件系統。它保存現在已知各種漏洞檢測方法的插件,合理安排插件之間的執行順序,使掃描按既定的順序進行,以加快掃描速度提高掃描的效率與準確性。
(4)數據庫,即探測數據庫,是系統的核心。它保存已知各類Web漏洞的滲透性的探測數據即攻擊代碼或信息獲取代碼,比如SQL注入攻擊、跨站點腳本攻擊、會話攻擊或輸入驗證編碼信息等,逐條給目標發送探測數據,通過把返回信息與預先設定的“返回信息”和狀態碼進行匹配,進而獲得目標返回系統的健壯信息。
在規劃系統體系組成部分的基礎上,如何把這些組成模塊有機地集成為一個系統也是設計本系統的重點。我們要求服務器端同時處理多用戶的連接,因此首先要進行多線程處理。在進行單用戶處理中,當用戶登陸時,檢測服務器對用戶的用戶名和密碼進行認證,判斷用戶是否具有使用權限。用戶認證通過后,檢測服務器給客戶端發送可使用的基本檢測信息。客戶端接收到服務器的這些信息后,根據具體的使用要求選擇和填寫各種檢測腳本要求的參數,或使用默認參數,然后返回給服務器端。服務器端建立新的進程,開始一個新的漏洞檢測任務,對目標系統進行掃描。
2.2客戶端的實現
網絡的發展要求在任何地點進行登陸并進行掃描工作,并且漏洞檢測參數繁多、設置掃描參數具有很高的復雜性,所以選擇現在流行的Web頁面作為客戶端。這樣就可以在世界的任何地點,任何環境使用客戶端,用簡單的圖形化界面進行參數設定和系統的控制工作。
客戶端在認證通過后,開始接收服務器發送過來的各種待設定的參數及相關信息以供用戶選擇。用戶根據相關幫助信息及自己相關的要求設定參數,同時設定目標系統的IP地址(或主機名)和端口號等參數。根據客戶端的參數設定,服務端建立掃描任務,對目標系統進行檢測掃描。
檢測過程中,客戶可以自行設定是否實時顯示服務端掃描狀態信息及結果信息,以及在客戶端是否保存相關信息,便于用戶對掃描任務進行實時的控制,從而制定相應的安全策略。
評論