第一章 網絡漏洞掃描器的設計與實現
漏洞掃描器是一種自動檢測遠程或本地主機安全性弱點的程序。通過使用漏洞掃描器,係統管理員能夠發現所維護的Web服務器的各種TCP端口的分配、提供的服務、Web服務軟件版本和這些服務及軟件呈現在Internet上的安全漏洞。從而在計算機網絡係統安全保衛戰中做到"有的放矢",及時修補漏洞,構築堅固的安全長城。
1.引言
隨著科學技術的飛速發展,21世紀的地球人已經生活在信息時代。20世紀人類兩大科學技術成果--計算機技術和網絡技術,均已深入到人類社會的各個領域,Internet把"地球村"的居民緊密聯係在一起,"天涯若比鄰"已然成為現實。互聯網之所以能這樣迅速蔓延,被世人接受,是因為它具備特有的信息資源。無論對商人、學者,還是對社會生活中的普通老百姓,隻要你進入網絡的世界,就能找到其隱藏的奧妙,就能得到你所需要的價值,而這其中種種的人類社會活動,它們的影響又是相互的。近年來Internet的迅速發展,給人們的日常生活帶來了全新的感受,"網絡生存"已經成為時尚,同時人類社會諸如政治、科研、經濟、軍事等各種活動對信息網絡的依賴程度已經越來越強,"網絡經濟"時代已初露端倪。
然而,網絡技術的發展在給我們帶來便利的同時也帶來了巨大的安全隱患,尤其是Internet和Intranet的飛速發展對網絡安全提出了前所未有的挑戰。技術是一把雙刃劍,不法分子試圖不斷利用新的技術伺機攻入他人的網絡係統,而肩負保護網絡安全重任的係統管理員則要利用最新的網絡技術來防範各種各樣的非法網絡入侵行為。事實已經表明,隨著互連網的日趨普及,在互連網上的犯罪活動也越來越多,特別是Internet大範圍的開放以及金融領域網絡的接入,使得越來越多的係統遭到入侵攻擊的威脅。但是,不管入侵者是從外部還是從內部攻擊某一網絡係統,攻擊機會都是通過挖掘操作係統和應用服務程序的弱點或者缺陷來實現的,1988年的"蠕蟲事件"就是一個很好的實例。目前,對付破壞係統企圖的理想方法是建立一個完全安全的沒有漏洞的係統。但從實際上看,這根本是不可能的。美國Wisconsin大學的Miller給出一份有關現今流行操作係統和應用程序的研究報告,指出軟件中不可能沒有漏洞和缺陷。因此,一個實用的方法是,建立比較容易實現的安全係統,同時按照一定的安全策略建立相應的安全輔助係統,漏洞掃描器就是這樣一類係統。就目前係統的安全狀況而言,係統中存在著一定的漏洞,因此也就存在著潛在的安全威脅,但是,如果我們能夠根據具體的應用環境,盡可能地早地通過網絡掃描來發現這些漏洞,並及時采取適當的處理措施進行修補,就可以有效地阻止入侵事件的發生。因此,網絡掃描非常重要和必要。
2.漏洞掃描器概述
漏洞掃描器是一種自動檢測遠程或本地主機安全性弱點的程序。通過使用漏洞掃描器,係統管理員能夠發現所維護的Web服務器的各種TCP端口的分配、提供的服務、Web服務軟件版本和這些服務及軟件呈現在Internet上的安全漏洞。從而在計算機網絡係統安全保衛戰中做到"有的放矢",及時修補漏洞,構築堅固的安全長城。
按常規標準,可以將漏洞掃描器分為兩種類型:主機漏洞掃描器(HostScanner)和網絡漏洞掃描器(NetworkScanner)。主機漏洞掃描器是指在係統本地運行檢測係統漏洞的程序,如著名的COPS、tripewire、tiger等自由軟件。網絡漏洞掃描器是指基於Internet遠程檢測目標網絡和主機係統漏洞的程序,如Satan、ISSInternetScanner等。
本文針對目前TCP/IP網絡和各種網絡主機的安全現狀,設計並實現了一個網絡漏洞掃描器,在實際使用中取得了很好的效果。
3.網絡漏洞掃描器的設計
3.1網絡漏洞掃描器的總體結構
我們設計的漏洞掃描器基於瀏覽器/服務器(B/S)結構,整個掃描器實現於一個Linux、UNIX和Windows操作係統相混合的TCP/IP網絡環境中,其總體結構如圖1所示,其中運行Linux的工作站作為發起掃描的主機(稱為掃描主機),在其上運行掃描模塊和控製平台,並建有漏洞庫。掃描模塊直接從掃描主機上通過網絡以其他機器為對象(稱為目標主機,其上運行的操作係統可以是UNIX、Linux、Windows2000/NT等)進行掃描。而控製平台則提供一個人機交互的界麵。
3.2網絡漏洞掃描器的掃描原理和工作原理
網絡漏洞掃描器通過遠程檢測目標主機TCP/IP不同端口的服務,記錄目標給予的回答。通過這種方法,可以搜集到很多目標主機的各種信息(例如:是否能用匿名登陸,是否有可寫的FTP目錄,是否能用Telnet,httpd是否是用root在運行)。在獲得目標主機TCP/IP端口和其對應的網絡訪問服務的相關信息後,與網絡漏洞掃描係統提供的漏洞庫進行匹配,如果滿足匹配條件,則視為漏洞存在。此外,通過模擬黑客的進攻手法,對目標主機係統進行攻擊性的安全漏洞掃描,如測試弱勢口令等,也是掃描模塊的實現方法之一。如果模擬攻擊成功,則視為漏洞存在。
在匹配原理上,該網絡漏洞掃描器采用的是基於規則的匹配技術,即根據安全專家對網絡係統安全漏洞、黑客攻擊案例的分析和係統管理員關於網絡係統安全配置的實際經驗,形成一套標準的係統漏洞庫,然後再在此基礎之上構成相應的匹配規則,由程序自動進行係統漏洞掃描的分析工作。
所謂基於規則是基於一套由專家經驗事先定義的規則的匹配係統。例如,在對TCP80端口的掃描中,如果發現/cgi-bin/phf或/cgi-bin/Count.cgi,根據專家經驗以及CGI程序的共享性和標準化,可以推知該WWW服務存在兩個CGI漏洞。同時應當說明的是,基於規則的匹配係統也有其局限性,因為作為這類係統的基礎的推理規則一般都是根據已知的安全漏洞進行安排和策劃的,而對網絡係統的很多危險的威脅是來自未知的安全漏洞,這一點和PC殺毒很相似。
實現一個基於規則的匹配係統本質上是一個知識工程問題,而且其功能應當能夠隨著經驗的積累而利用,其自學習能力能夠進行規則的擴充和修正,即是係統漏洞庫的擴充和修正。當然這樣的能力目前還需要在專家的指導和參與下才能實現。但是,也應該看到,受漏洞庫覆蓋範圍的限製,部分係統漏洞也可能不會觸發任何一個規則,從而不被檢測到。
整個網絡掃描器的工作原理是:當用戶通過控製平台發出了掃描命令之後,控製平台即向掃描模塊發出相應的掃描請求,掃描模塊在接到請求之後立即啟動相應的子功能模塊,對被掃描主機進行掃描。通過對從被掃描主機返回的信息進行分析判斷,掃描模塊將掃描結果返回給控製平台,再由控製平台最終呈現給用戶。
3.3CGI的應用
整個漏洞掃描係統利用了瀏覽器/服務器(B/S)架構,目的是為了消除由於操作係統平台的不同而給程序的運行帶來的差異,還為了能利用HTML提供的一係列功能,如超文本功能、靈活的版麵編輯功能來構建一個美觀靈活的人機接口。在該網絡漏洞掃描器的實現中,我們通過CGI技術來連接前台的瀏覽器和後台的掃描程序。
CGI是通用網關接口,作為一種規範,它允許Web服務器執行其他程序並將它們的輸出以相應的方式儲存在發給瀏覽器的文本、圖形和音頻中。CGI程序能夠提供從簡單的表單處理到複雜的數據庫查詢等各種功能,這大大增強了Web的動態處理能力和交互能力。服務器和CGI程序相結合能夠擴充和自定義WorldWideWeb的能力。
CGI過程的主要步驟如下:
瀏覽器將URL的第一部分解碼並聯係服務器;
瀏覽器將URL的其餘部分提供給服務器;
服務器將URL轉換成路徑和文件名;
服務器意識到URL指向一個程序,而非一個靜態的文件;
服務器準備環境變量,執行CGI程序;
程序執行,讀取環境變量和STDIN;
程序為將來的內容向STDOUT發送正確的MIME頭信息;
程序向STDOUT發送其輸出的其餘部分,然後終止;
服務器發現程序終止,關閉與瀏覽器的連接;
瀏覽器從程序中顯示輸出。
STDIN和STDOUT是標準輸入和標準輸出的助記符。對Web服務器,STDOUT送至CGI程序的STDIN,程序的STDOUT反饋回服務器的STDIN。在激活具有POST方法的CGI程序時,服務器使用它的STDOUT;對於GET方法,服務器不使用STDOUT。兩種情況下,服務器都要求CGI程序通過STDOUT返回信息。在我們的程序中選擇了POST方法。
3.網絡漏洞掃描器的實現
3.1掃描模塊的實現
整個網絡漏洞掃描器的核心部分是掃描模塊,它是由很多子模塊組成的,其結構如圖2所示。
3.1.1基本信息探測子模塊的實現
在設計時加入該模塊的目的是在調用掃描主模塊之前探測主機是否在線,以避免不必要的空掃描。該模塊的實現原理和常用的ping命令相似,方法是向目標主機發送ICMP回顯報文請求,根據返回值來分析判斷主機是否在線。所有安裝了TCP/IP協議的在線網絡主機,都會對這樣的ICMP回顯報文請求給與答複。雖然現在有些主機裝了個人防火牆,可以屏蔽掉這樣的ICMP回顯報文請求,但是我們這個掃描係統的對象是提供網絡服務的網絡主機,而這樣的主機是不應該屏蔽掉ICMP回顯報文請求的,因為這樣會讓一些用戶誤認為該主機不在線,從而喪失了作為網絡服務器的意義。為了降低網絡擁塞導致丟包的可能性,在實現中重複四次向目標主機發送ICMP回顯請求包。
該模塊不隻探測主機是否在線,而且能根據ICMP回顯應答報文的TTL(TTL是位於IP首部中的生存時間字段)值來粗略分辨出目標主機操作係統,為下一步的掃描提供依據,特別是在掃描模塊的調用和漏洞庫的選擇上。
該模塊在實現中和其他模塊不同的一個最大特點是:其他掃描模塊是針對應用層的,用一般的套接字即能完成網絡連接;而該模塊是針對於網絡層的,使用一種叫原始套接字的技術來實現。原始套接字(rawsocket)提供了一些使用TCP和UDP套接字不能實現的功能:可以訪問ICMP和IGMP等協議的數據包,可以讀寫內核不處理的IP數據包,可以創建自定義的IP數據首部。使用原始套接字可以編寫基於IP協議的高層網絡協議。
3.1.2端口掃描子模塊的實現
當基本信息探測子模塊得知目標主機在線時,端口掃描子模塊即被調用。該模塊將根據傳來的參數相應的掃描TCP的1~1024或者1~65535端口。掃描方式是利用TCP的完全連接方式,即利用TCPconnect掃描技術來設計掃描模塊,這是最基本的TCP掃描。通常通過調用套接口函數connect()連接到目標計算機上,完成一次完整的三次握手過程。如果端口處於偵聽狀態,那麼connect()就能成功返回。否則,這個端口不可用,即沒有提供服務。這個技術的一個最大的優點是不需要任何權限。係統中的任何用戶都有權利使用這個調用。另外的一個優點就是比其他掃描方式(如SYN掃描和FIN掃描等等)更穩定可靠。但這種方法的一個缺陷是:掃描方式不隱蔽。通常作為一個掃描器軟件的應用,TCP的connect會重複且大量地被集中使用,在被掃描的一端則會很容易發現這種掃描行為,目標計算機的log文件會顯示一連串的連接和連接是否出錯的服務消息,並且能很快地使它關閉;而且大多數防火牆也能屏蔽這種掃描,隨著防火牆技術的快速發展,其他的一些曾經被認為是很隱蔽的掃描方式也可能被防火牆發現並屏蔽掉。所以相對而言,TCPconnect掃描方式的這個缺陷已經被淡化了。而且,我們開發的掃描係統是從係統管理員的角度出發,因此上述的問題都是不存在的,除非他/她非法掃描他人網站主機。