(西安電子科技大學 計算機外部設備研究所, 陜西 西安 710071)
摘 要:網絡漏洞檢測系統是一種用于自動檢測目標主機或計算機系統安全漏洞的系統,它通過模擬黑客攻擊,主動對網絡系統安全性能進行檢查測試,提高網絡系統防御能力。設計并實現了一種新型的網絡安全漏洞檢測系統,介紹了整體系統結構的設計、各個功能模塊的設計以及各組成部分的設計和實現,最后強調了這一系統的優點和先進性。
關鍵詞:網絡安全; 漏洞檢測; 漏洞掃描
中圖法分類號:TP393.08文獻標識碼:A
文章編號:1001-3695(2006)08-0126-03
Design and Implementation of Vulnerability Detection System
ZOU Zhi cheng, GAO You xing, DAI Zu feng
(Research Institute of Peripherals, Xidian University, Xi’an Shanxi 710071, China)
Abstract:Vulnerability detection system is a kind of network security system which could be used to detect the security of computer and network automatically. It could take the initiative to detect the security of the system by imitating the hacker’s attack in order to improve the recovery of network. This paper designs and implements a new type of network security vulnerability detection system, and introduces its frame, each fuction module and each part in details, at last, emphasizes the merits.
Key words:Network Security; Vulnerability Detection; Vulnerability Scanning
隨著黑客入侵的日益猖獗,人們對網絡安全的重視度空前提高,網絡安全研究領域攻與防日趨激烈。在現階段,雖然人們已經成功地研制出了以硬件為主的各種防火墻、入侵檢測系統[1,5](IDS)、入侵防御系統(IPS)、防病毒網關、VPN以及物理隔離卡等高性能安全產品,并廣泛地使用,但是由于這些產品其自身存在的局限性,使得很多入侵和黑客攻擊事件不斷發生。
當然,對付各種破壞系統的企圖的理想方法是建立一個完全安全的、沒有漏洞的系統,但從實際而言,這根本不可能。美國威斯康星大學的Miller給出一份有關現今流行操作系統和應用程序的研究報告,指出軟件中不可能沒有漏洞和缺陷[2]。針對這種情況,人們設計了很多網絡漏洞檢測系統,但是由于這些已有的系統自成體系,兼容性較差。雖然現在許多系統已經采用了CVE(Common Vulnerablities and Exposure)標準作為索引漏洞的依據,但要實現大部分數據的共享是不可能的。針對這個問題,我們設計了一個更加完善的網絡漏洞掃描系統,并給與實現。
1漏洞掃描系統的設計
漏洞檢測系統設計的基本要求是能夠覆蓋當前存在的絕大部分漏洞檢測,如Windows攻擊、遠程獲得登錄權、利用SNMP獲取信息、FTP漏洞探測、防火墻漏洞探測、CGI漏洞探測、遠程越權獲取文件、遠程獲取Root權限、后門探測、NIS安全性分析、拒絕服務漏洞探測等各種漏洞的檢測。同時,要求漏洞掃描功能能夠更新及時。本系統結合國內外其他漏洞檢測系統設計思想的優點,采用Client/Server/Database(控制平臺/檢測平臺/數據庫)和模塊化的軟件開發思路,通過模擬攻擊的方法對目標系統進行檢測。系統具有可擴展性、可重用性、操作方便性等特點。
1.1整體系統結構設計
本系統克服了國內網絡漏洞掃描系統存在的不足,把漏洞掃描檢測部分從整個系統中分離出來,使用專門的數據庫進行存放(圖1),稱為腳本庫。如果發現新的漏洞并找到了檢測的方法,則只要在腳本庫中增加一個相應的新的攻擊腳本記錄,即可以實現對漏洞的模擬檢測,同時也實現了及時的升級功能。
圖1給出了漏洞檢測系統模型的系統結構圖。該漏洞檢測系統主要分成三大部分:
(1)檢測服務器端即漏洞檢測平臺,是本系統的核心。它接收客戶端提交的用戶指令后開始讀取數據庫,調用相關腳本,利用模擬攻擊的方式對目標系統進行檢測,并將檢測結果和進程信息傳回客戶端顯示。
(2)客戶端即控制平臺。用戶通過客戶端程序選擇所希望的漏洞檢測腳本、設定檢測參數、提交給服務端,控制服務端進行檢測工作。同時,對服務器返回的各種檢測結果進行相應的顯示、匯總和保存。
(3)服務器漏洞檢測腳本庫。它用于存放各種漏洞檢測的插件腳本代碼、腳本描述信息和腳本檢測出來的漏洞對應的CVE標準標號等信息,同時還保存檢測結果。
在規劃系統體系組成部分的基礎上,如何把這些組成模塊有機地集成為一個系統是設計本系統的重點。我們要求服務器端同時處理多用戶的連接,因此首先要進行多線程處理。在進行單個用戶處理中,當用戶登錄時,檢測服務器對用戶的用戶名和密碼進行認證,判斷用戶是否具有使用權限。用戶認證通過后,檢測服務器給客戶端發送可使用的基本檢測信息。客戶端接收到服務器端的這些信息后,根據具體的使用要求選擇和填寫各種檢測腳本要求的參數,或使用默認參數,然后返回給服務器端。服務器接收到這些目標信息后,判斷是否保存了這個目標檢測結果信息,如果存在,那么將結果庫中的信息讀取并返回給客戶端;如果沒有進行,那么就建立新的進程,開始一個新的漏洞檢測任務,對目標系統進行掃描。
根據本系統設計流程可以看出,本系統的設計和實現重點是檢測服務器端和通信協議,而客戶端只是作為顯示信息的用處。因此,我們把介紹的重點放在通信協議和檢測服務器端的設計上,具體的設計和實現思路介紹如下。
1.2通信協議設計
系統總體體系結構和組成模塊已經明確,由于本漏洞掃描系統使用C/S模式,因此首先對客戶端和掃描服務器端之間的通信協議進行設計。
為方便用戶的操作,我們規劃客戶端只用于對任務參數的控制,僅僅為用戶操作提供方便、清晰的漏洞參數信息,同時將操作人員的各類操作消息發送給服務器端,相應的服務器端需要將檢測結果傳送給用戶端,客戶端對結果進行顯示和保存操作,因此客戶端和服務端雙方之間的通信就必須要有一套可靠機制來保證。在此,我們借鑒同類工具Nessus的通信協議[11]設計了STP(System Transfer Protocol)用于掃描服務器端與客戶端之間的通信。該通信協議基于TCP,封裝在TCP數據包中,相當于高于傳輸層的協議,這樣能保證兩端通信的可靠性。STP的消息是一組ASCII字符串,每一個消息都由若干個域組成。其中某些域用于消息的驗證,其他域用來傳遞信息。圖2顯示了一個典型的STP會話過程。
客戶端與服務器端建立連接,確認用戶名/用戶密碼獲得服務器的使用權;客戶端確定檢測策略,再將攻擊任務的相關參數和選項通過通信協議NewAttack消息發送給服務器;服務器端調用工具開始攻擊目標,每個攻擊工具的檢測結果由DetectInfo消息傳回客戶端,每個任務結束時發回ScheduleInfo消息,告知客戶端掃描任務執行的進度;一次任務結束發回AttackEnd消息,然后服務器端休眠,等待客戶端進一步的指示;如果客戶端想執行新的掃描任務,將再發送NewAttack消息,新的檢測任務隨即開始執行;如果在掃描任務的執行過程中,服務器端接收到StopAttack消息,監測掃描立即停止,服務器端休眠,等待客戶端進一步的指示;如果客戶端發送DownSer ver消息,服務器端切斷與客戶端的連接,然后結束工作。
1.3檢測服務器端設計
因為服務器端是本系統的核心,所以服務器設計的好壞直接決定了系統的性能和功能。我們采取的策略是根據系統的功能來設計和劃分服務器的軟件模塊,而本系統服務器端具有如下功能:
(1)添加和刪除合法的客戶端用戶,同時可以對客戶端進行認證操作,以保證系統使用的安全性。
(2)向客戶端提供所有掃描腳本插件的相關信息以及各個腳本的設置參數和約定條件。
(3)接收客戶端提交的掃描任務和參數,并對目標系統進行漏洞掃描操作。
(4)保存掃描結果,并發送到客戶端進行顯示。
(5)具備升級功能和優化掃描速度的功能。
針對以上這些功能的要求,設計出的本系統服務器端的功能模塊如圖3所示。
服務端主要功能模塊的功能說明如下:
(1)主控模塊。控制各個主要模塊的調用,協調各個模塊之間的工作,此模塊的功能作用覆蓋了整個系統運行的全過程。這是本系統各個模塊之間進行協調工作的核心節點,它的功能是為各個功能模塊之間的協調提供數據和信息的交換。作為各個模塊之間的數據輸入/輸出接口,按照一定的次序,根據信息和數據的驅動,調用其他各個功能模塊的執行。
(2)認證模塊。為保證客戶端使用該系統服務器端的合法性,服務器端使用該認證模塊對客戶提交的用戶名和密碼進行認證。
(3)日志模塊。記錄服務器運行過程之間的日志。
(4)通信模塊。用于系統服務器端和客戶端進行認證、通信加密體制的協調以及分析和處理雙方傳遞的信息和消息等。按照設計的STP,一方面該模塊把客戶端設定的掃描參數、掃描目標系統等提交給服務器端;另一方面在漏洞掃描任務結束后,將服務器所掃描的目標結果提交給客戶端。
(5)檢測掃描模塊。根據用戶的要求和參數設置,從數據庫中讀取相對應的腳本插件,并且對插件的依賴性進行排序,然后解釋執行插件攻擊代碼,對目標系統通過模擬攻擊的方式進行漏洞檢測掃描。
2漏洞檢測系統的實現
2.1檢測服務端實現
由于要求允許多用戶同時使用服務器端,針對不同目標的檢測掃描任務同時進行,所以執行檢測機制就成了服務器端設計中的首要問題。根據服務器并行處理的理論,而且使用該系統的操作人員(客戶端)一般都會被控制在少數人員中,考慮到開發語言和開發環境,對于檢測服務器的構架我們選擇了C語言在Linux平臺下開發,使用并發服務器的模型。并發服務器的思想是每一個客戶機的請求并不由服務器直接處理,而是服務器創建一個子進程來處理。
我們利用Linux下的Fork函數[3,4]來完成多進程處理功能。系統主進程建立套接字并綁定在主機特定端口上,然后對客戶端進行監聽。如果成功接收客戶端的連接,那么主進程利用Fork函數建立一個新的進程來為該客戶端提供特定的服務;同時,主進程仍然對端口地址進行監聽,等待下一個客戶端的連接。
在為單個客戶端服務的進程中,服務端為了提高效率和性能,采用了多線程對目標系統進行漏洞檢測處理操作,即在一個進程中同時并行地處理多個任務。我們在單個用戶服務進程中,安排了控制線程、通信線程和多個檢測掃描線程三種線程。這樣,利用多個掃描線程,同時每個檢測掃描線程中可以執行對一個或多個端口的安全檢測,提高了掃描效率和速度。
另外,為進一步提高漏洞檢測系統的性能,我們對目標系統檢測采取了兩個步驟來進行:①使用基于網絡型的端口掃描技術對目標系統進行初步的探測,得到系統開放的端口。②對已開放的端口采用模擬攻擊的方式,判斷該端口是否存在漏洞。如果在第①階段目標端口沒有開放,那么針對該端口的檢測將取消,以此來加快系統掃描速度。
在對開放端口模擬攻擊檢測的實現方式上,我們使用插件腳本的方式來進行。該方式實現原理類似于Ping命令,該插件腳本通過向目標系統的相應端口發送模擬攻擊的特定報文,然后根據返回值來分析判斷此主機端口是否存在漏洞。
2.2客戶端實現
由于漏洞檢測掃描參數設置具有很高的復雜性,漏洞種類繁多,同時根據系統設計的要求,為方便用戶的操作,我們設計的控制平臺(客戶端)運行于Windows系統,利用Windows圖形界面簡化參數的設置和系統的控制工作。所以,我們選擇了Visual C++開發環境進行客戶端程序設計。
客戶端在認證通過后,開始接收檢測服務器發送過來的各種漏洞檢測腳本說明信息,并顯示給用戶供用戶選擇。用戶根據顯示的腳本參數和說明選擇自己所需的腳本;同時設定攻擊目標系統的IP地址(或主機名)和端口號等參數,以及檢測平臺運行參數之后,利用TCP/IP,根據設計的STP發送命令消息給檢測服務器,要求服務端根據設置的參數建立檢測掃描任務,對目標系統進行檢測掃描。
檢測任務開始后,客戶端還能進行實時的接收服務器發送的消息,從中獲得檢測結果信息和進度信息反饋給用戶,便于用戶對檢測任務進行實時的控制。
另外,服務端還實現對掃描結果的報告和保存,方便操作者進行閱讀和總計,從而制定相應的安全策略。為方便操作者整理和定位各種漏洞、查找各種解決方案、檢測結果報告,結果報告包含了目標系統存在的漏洞數及其對應CVE國際標準編號等信息。
2.3腳本數據庫實現
根據漏洞檢測的漏洞更新和升級方法簡便、漏洞數量全面等要求,我們設計的漏洞檢測系統采用數據庫方式來保存檢測腳本及其相應的信息和必需的參數。這樣,操作平臺、控制平臺和數據庫可以運行在不同的主機上,給統一管理、升級、查閱等帶來了很多好處。
本系統采用MySQL數據庫來編寫數據庫端。在數據庫中,包含了腳本插件的描述信息和腳本模擬攻擊代碼以及CVE標準標號等信息。表1給出的是腳本數據庫的部分關鍵字段的內容。
3結束語
本文設計并實現的漏洞檢測系統通過與其他安全產品配合使用,如入侵檢測系統IDS、防火墻等,可方便地為用戶搭建一個安全的網絡系統。在實際測試中,該系統模型體現出以下優點:支持分布式掃描、具有靈活特性、方便非專業用戶使用;漏洞信息支持CVE國際標準,為已知的漏洞和安全泄露提供了一個標準化命名,使得使用者更容易協同和加強安全;漏洞特征的定義清晰合理,有利于安全漏洞的發現;同時,該漏洞檢測系統是根據存放于數據庫中的相應腳本來實現的,系統的可檢測漏洞的數量和升級速度具有靈活性,增加漏洞檢測腳本的數量方便、簡單,漏洞的數量、漏洞更新和升級的方法很容易被非專業人員掌握,漏洞庫升級的速度快,同時又為系統功能升級留有充足余地。今后,我們將在現有的基礎上不斷完善系統功能,并致力于在國內外市場推廣應用。
參考文獻:
[1]郎良,張玉清,錢秀檳,等.漏洞檢測與自動防御系統模型的研究與實現[C]. 中國計算機大會論文集,北京:清華大學出版社,2003.324-330.
[2]余精彩.網路漏洞掃描系統的必要性[EB/OL]. http://forum.icst.org.tw/phpBB2/viewtopic.php?p=10317, 2004-08-02.
[3]天夜創作室. Linux網絡編程技術[M]. 北京:人民郵電出版社, 2001.
[4]W Richard Stevens. UNIX環境高級編程[M].龍晉元.北京: 機械工業出版社, 2000.142 145.
[5]唐正軍. 網絡入侵檢測系統的設計與實現[M]. 北京:電子工業出版社,2002.1-3.
作者簡介:鄒志成,碩士研究生,主要研究方向為網絡安全、系統結構;高有行,教授,博導,主要研究方向為系統結構;戴祖峰,碩士研究生,主要研究方向為計算機網絡安全。
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。