2013年12月20日 星期五

掃port利器開外掛 輕鬆擴充nmap掃描能力

活用四百個現成script 變身弱點掃描等眾多工具
掃port利器開外掛 輕鬆擴充nmap掃描能力

如果想知道主機目前正在運作的服務,相信多數的網管人員腦海裡浮現的第一個解決方案,應該就是利用Nmap掃描軟體來掃描系統。自Nmap軟體推出以來,挾著其優異的掃描能力及免費的優點,早已成為掃描軟體的代名詞。

網管人員通常都是利用Nmap掃描軟體來進行服務掃描,藉以探知目前系統上運作的服務內容,但事實上Nmap的掃描能力遠不止於此,利用其外掛Script的方式,即可將Nmap變身為弱點掃描軟體(可掃描某種類型的弱點)或擴充其他掃描功能(例如掃描網站伺服器上是否有備份檔)。

對此,本文除了介紹Nmap傳統的應用外(如掃描通訊埠),也將示範如何使用Nmap所提供的外掛Script檔案來擴充Nmap的掃描能力。在本文中所使用的軟體套件,如表1所示。

表1 本文所使用的軟體套件 


安裝Nmap 

先至Nmap官方網站(http://nmap.org/dist/nmap-6.40.tar.bz2)下載安裝檔,本文使用的版本為6.40。解壓縮後,利用原始碼的編譯方式:



組態Nmap,並設定安裝的目錄(/usr/local/nmap)。若讀者不想將檔案安裝在某個目錄中,就不需要指定--prefix參數,直接執行「./configure」指令將Nmap安裝到系統的標準目錄內。

然後,先執行指令「make」編譯Nmap原始碼,再執行「make install」指令安裝Nmap相關的程式至指定的目錄,本例為「/usr/local/nmap」。在安裝完成後,可檢查「/usr/local/nmap/bin/」目錄。

Nmap所提供的相關執行檔,如表2所示。

表2 Nmap所提供的相關執行檔 


此外,也可檢查「/usr/local/nmap/share/nmap/scripts」目錄下副檔名為nse的檔案,此類檔案即為Nmap所提供的外掛Script檔案。

在安裝好Nmap軟體後,接著簡單說明通訊埠掃描的原理。一般來說,通訊埠掃描所使用的掃描技術不外乎全連接與半連接的掃描方式。

所謂的全連接,即為一般正常連接的探測方式,利用與遠端主機通訊埠完成三向交握(Three-way Handshake)來確認遠端主機的通訊埠是否處於開啟(Open)的狀態。三向交握的運作方式如圖1所示。
1. 當來源端主機欲跟目的端主機建立連線時,會先發 出SYN封包至目的端。
2. 目的端主機收到後,即會回覆SYN/ACK封包。
3. 當來源端主機收到SYN/ACK封包,將回覆ACK 封包給目的端主機。
4. 上述三個動作皆正常完成後,才會建立連線。進行 資料傳輸。


▲圖1 三向交握。

如果能與遠端主機順利完成三向交握並與通訊埠完成連線,代表該服務埠是處於開啟的狀態。反之,則代表服務埠處於關閉的狀態。此種掃描方式即稱為全連接掃描。

這就像要測試網站伺服器是否正常時,即可利用瀏覽器連接網站伺服器一樣,如果可以正常地瀏覽網頁,代表該網站伺服器的通訊埠已經開啟。

因為全連接掃描的方式是利用正常的網路通訊行為來進行測試,所以此種掃描的方式會被防火牆或是IDS(入侵偵測系統)記錄下來,極為容易被資安設備所偵測出來,因而又發展出「半連接」掃描技術。

所謂半連接的掃描技術,是指在未與通訊埠完成正常的網路通訊行為(例如三向交握)時,即由該通訊埠的回覆來判別結果。常用的半連接掃描技術如下所述: 

.SYN封包掃描 
在上述的三向交握機制中,當傳送端主機要傳送資訊至接收端主機時,會先發出SYN封包到接收端主機,一旦接收端主機接收到之後,會回覆SYN/ACK封包給傳送端主機,而後傳送端主機將再回覆ACK封包至接收端主機,至此連線階段建立,方可開始傳送資訊。 

而SYN封包掃描即是在發出SYN封包至對方主機後,如果對方主機有正常地回應SYN/ACK封包,即表示埠(Port)是開啟的情況,並立即發出RST封包,切斷該次連線。由於並未完整地完成三向交握連線,所以防火牆或IDS(入侵偵測系統)並不會記錄該次的連線。 

.SYN/ACK封包掃描技術 
SYN/ACK掃描是利用繞過三向交握第一步的SYN封包傳送,而直接利用傳送SYN/ACK封包至目的主機上的埠口,由於TCP協定具有連接性的性質,當目的埠口接收到此封包後,如果它是開啟的狀態,就知道此封包並不是合法的封包(因為沒有相對應SYN封包),而直接丟棄(Drop)。 

但如果目的埠口是關閉的狀態,則會回傳RST封包(直接重置該連線),SYN/ACK掃描即可利用此種特性來確認埠是否在開啟的狀態。 

.FIN封包掃描技術 
FIN掃描是利用繞過三向交握第一步的SYN封包傳送,而直接利用傳送FIN封包至目的主機上的埠口。 

當目的埠口接收到此封包後,如果它是開啟(Open)的狀態,就知道此封包並不是合法的封包(因為沒有相對應SYN封包),而直接丟棄(Drop),但如果目的埠口是關閉的狀態,則會回傳RST封包(重置該連線),FIN掃描即可利用此種特性來確認埠口是否處於開啟的狀態。 

可以利用下列指令來掃描被探測主機所開啟的埠及服務資訊(圖2): 


▲圖2 利用SYN掃描來探測被探測主機所開啟埠資訊。

以下列出常用的Nmap通訊埠掃描參數,詳見表3所示。 

表3 Nmap常用通訊埠掃描參數 

藉由上述的相關參數,即可以輕易地掃描出遠端主機目前通訊埠的服務狀況,甚至其服務的程式名稱以及版本等敏感資訊都能夠輕易地掃描出來。介紹完Nmap的傳統應用,接下來便為讀者說明如何利用Nmap掃描軟體外掛的Script功能來增強Nmap自身的掃描能力。 

Script簡介 

就如同其他類似的掃描軟體(例如病毒掃描軟體)常會使用外掛程式的方式來增強其掃描能力,好比防毒軟體用這個方法來更新自身病毒碼,而著名的弱點掃描軟體Nessus就藉此來更新外掛。 

在Nmap軟體上即提供NSE程式語言(某種Script語言)來為自身編寫相關的Script程式,以便提供額外的掃描能力。搜尋Nmap安裝目錄下的「/share/nmap/scripts/」,即可查閱相關的Script。 

具有程式能力的管理人員,甚至可改寫該Script以更加符合自己的需求。但其實僅需使用如下的語法即可使用Script的功能(其中的targetIP為欲掃描的IP位址): 


舉例來說,「nmap --script=http-backup-finder 127.0.01」即是表示使用名稱為「http-backup-finder」的Script來掃描本機(127.0.0.1)。若未設定「--script-args」參數,則表示使用預設參數。 

另外,也可利用萬用字元(*)來載入相關的Script,如下例即表示載入HTTP相關的Script來進行掃描: 


接著,介紹幾個可用於掃描網站伺服器相關漏洞的Script用法。 

http-backup-finder 

一般在程式開發時,經常會直接在網站伺服器上修改網頁程式,而某些編輯器或開發工具在修改程式的當下,會為了安全的理由而新建一個原先程式的暫存檔或備份檔。 

以UltraEdit編輯器為例,在修改完原先的程式後,將在同目錄下產生一個副檔名為.swap的暫存檔案。程式設計師往往會忽略此類檔案,而將此類檔案置於網站上,因而造成潛在的資安問題。 

Nmap則提供了一個相當好用的Script,名稱為「http-backup-finder」。利用此Script可用來搜尋網站上相關的備份檔。 

表4列出了「http-backup-finder」Script的相關參數。 

表4 http-backup-finder相關參數 

圖3所示為執行的範例(..bak為備份檔案),其中的「-p 80」代表僅針對通訊埠80的服務進行掃描,如果讀者的網站伺服器有支援SSL功能,便可設定通訊埠為443(-p 443)。 

▲圖3 http-backup-finder執行範例。

http-auth 

在很多的情況下,所開發的網頁程式需要權限的控管,而在HTTP通訊協定中其實也有提供許多利用認證的方式來控管網頁。 

當設定完成相關的網頁認證後,也可利用Nmap所提供的「http-auth」Script來掃描網頁,以確定所使用的網頁認證的認證方式。此Script僅提供一個參數,如下所述: 


圖4為執行範例,其中的「Basic realm」為其所使用的網頁認證型式。 

▲圖4 http-auth執行範例。

http-email-harvest 

在個人資料保護法通過後,國人對於個人的隱私也越來越重視。也因此網站管理者對於網站所公開的資訊也必須相當注意,以免在無意間洩漏了個人的相關資訊,例如E-mail資訊經常在管理人員的疏忽下而被置放在網站的公開資訊中。 

Nmap提供了「http-email-harvest」Script,可用來擷取網站內的E-mail資訊,以便得知網站中有多少的E-mail相關資訊。「http-email-harvest」Script提供了如表5所示的參數。 

表5 http-email-harvest使用參數 

▲圖5 http-email-harvest執行範例。


如圖5為「http-email-harvest」Script的執行範例,利用這個Script可以取得網站中已公開的E-mail相關資訊。 

http-brute 

一般網站經常會利用HTTP通訊協定中的基本認證來對相關的網頁進行控管,如果帳號及密碼設定得過於簡單,就非常可能被暴力破解法所破解(利用猜測帳號密碼的方式進行攻擊)。 

Nmap也提供了一種利用猜測帳號密碼來測試基本認證的方式,可用來測試基本認證中的帳號…密碼強度是否足夠。「http-brute」Script所提供的參數如表6所述。 

表6 http-brute可用參數 

如圖6為執行範例,其中的指令為針對本機上的基本認證網頁,以暴力猜測法的方式來測試是否可取得帳號及密碼等資訊。 

▲圖6 以暴力猜測法來測試是否能夠取得帳號及密碼。

http-methods 

http-methods這個Script主要是應用來檢測網站伺服器上所支援的方法(Method),常用的方法如表7所述。 

表7 http-methods常用方法 

執行指令如圖7所示,可以檢查網站伺服器上是否有危險的方法。 

圖7 檢查網站伺服器上是否存在著危險的方法。

在一般正常上線運作的網站伺服器中,是不應該開啟DELETE與PUT方法,因為此兩種方法都會提供惡意的使用者上傳或刪除網路伺服器內檔案的權限。 

但在實務經驗上,經常會發現有些網站伺服器在開發程式的階段,為了方便而開啟了DELETE與PUT等相關方法,但在程式開發完成正式上線之後,卻忘了關閉這些危險的方法,因而讓惡意使用者可以利用這些方法對網站伺服器上的檔案造成極大的危害。 

結語 

本文僅說明幾個常用的Script,事實上這個版本的Nmap具備了四百多個的Script,提供不同的掃描思惟。就「弱點掃描」的角度而言,筆者認為其中有幾個Script(如偵測預設檔案、備份檔案等),就可用來與市面上幾個較有知名度的弱點掃描軟體互補,提供系統更周全的資安健檢,此部分就請有興趣的讀者繼續研究吧! 

本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案。現任職於台灣學術網路危機處理中心(TACERT)。著有「資訊安全原理與實驗」。
TACERT官方網址:http://cert.tanet.edu.tw/

轉載自《網管人》