天天看點

《高性能Linux伺服器建構實戰:系統安全、故障排查、自動化運維與叢集架構》——2.4 網絡探測和安全稽核工具nmap

本節書摘來自華章計算機《高性能linux伺服器建構實戰:系統安全、故障排查、自動化運維與叢集架構》一書中的第2章,第2.4節,作者:高俊峰著, 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

對于nmap,相信很多安全運維人員并不陌生,它曾經在電影《黑客帝國》中出現過,是黑客和網絡安全人員經常用到的工具,本節重點介紹此工具的實作原理和使用技巧。

2.4.1 nmap和zenmap簡介

nmap是一個開源免費的網絡發現工具,通過它能夠找出網絡上線上的主機,并測試主機上哪些端口處于監聽狀态,接着通過端口确定主機上運作的應用程式類型與版本資訊,最後利用它還能偵測出作業系統的類型和版本。由此可見,nmap是一個功能非常強大的網絡探測工具,同時它也成為網絡黑客的最愛,因為nmap所實作的這些功能正是黑客入侵網絡的一個基本過程。站在安全運維的角度,隻有了解了黑客入侵的基本方式和過程,才能有目的、有針對性地進行安全防護,這也正是本節重點介紹nmap這個網絡嗅探工具的原因。

nmap是network mapper的縮寫,由fyodor在1997年建立,現在已經成為網絡安全必備的工具之一,目前最新的版本為nmap6.40,更多詳細資訊可以參考官方網站:www.nmap.org。nmap作為一個流行的安全工具,它的主要特點有:

非常靈活。nmap支援10多種掃描方式,并支援多種目标對象掃描。

支援主流作業系統。nmap支援windows、linux、bsd、solaris、aix、mac os等多種平台,可移植性強。

使用簡單。nmap安裝、使用都非常簡單,基本用法就能滿足一般使用需求。

自由軟體。nmap是在gpl協定下釋出的,在gpl license的範圍内可自由使用。

zenmap是nmap的gui版本,由nmap官方提供,通常随着nmap安裝包一起釋出。zenmap是用python語言編寫的,能夠在windows、linux、unix、mac os等不同系統上運作。開發zenmap的目的主要是為nmap提供更加簡單的操作方式。

2.4.2 nmap基本功能與結構

nmap功能非常強大,從它實作功能的方向性來劃分,主要有如下四個基本功能:

主機發現。

端口掃描。

應用程式及版本偵測。

作業系統及版本偵測。

這四個基本功能既互相獨立,又依次依賴,因為一般的網絡嗅探都是從主機發現開始的,在發現線上的主機後,接着需要進行端口掃描,進而通過掃描到的端口确定運作的應用程式類型及版本資訊,并最終确定作業系統的版本及漏洞資訊。另外nmap還提供了防火牆與入侵檢測系統的規避技巧,這個功能可以應用到基本功能的各個階段中。最後,nmap還提供了進階用法,即通過nse(nmap scripting language)腳本引擎功能對nmap基本功能進行補充和擴充。

2.4.3 nmap的安裝與驗證

nmap的安裝非常簡單,官方提供源碼編譯安裝和rpm包兩種方式,讀者可根據自己的喜好選擇安裝即可。這裡下載下傳的版本為nmap-6.40.tar.bz2,下面分别介紹兩種安裝方式。

1 . 源碼編譯安裝

從官方網站下載下傳源碼包,然後編譯安裝即可。編譯安裝過程無需額外參數,操作如下:

至此,源碼編譯編譯方式安裝nmap完成。

2 . rpm包安裝

nmap官方也提供rpm格式的安裝包,直接從網站下載下傳rpm格式的安裝包,然後進行安裝即可,操作過程如下:

在完成安裝後,執行“namp -h”,如果能輸出幫助資訊,表示安裝成功,否則根據錯誤提示重新安裝。

2.4.4 nmap的典型用法

前面提到了nmap主要包含四個方面的掃描功能,在詳細介紹每個功能之前,首先介紹nmap的典型用法。最簡單的nmap指令形式如下:

通過這個指令,可以确定目标主機的線上情況和端口的監聽狀态,如圖2-22所示。

《高性能Linux伺服器建構實戰:系統安全、故障排查、自動化運維與叢集架構》——2.4 網絡探測和安全稽核工具nmap

由輸出可知,目标主機“192.168.12.189”處于“up”狀态,并且此主機上開放了22、21、3306端口,同時還偵測到每個端口對應的服務,在最後還給出目标主機網卡的mac資訊。

如果希望了解目标主機更多的資訊,可以通過完全掃描的方式實作,nmap指令内置了“-a”選項,可以實作對目标主機進行主機發現、端口掃描、應用程式與版本偵測、作業系統識别等完整全面的掃描,指令形式如下:

其中,“-a”選項用于開啟全面掃描;“-t4”指定掃描過程中使用的時序模闆,總共有6個等級(0~5),等級越高,掃描速度越快,但也越容易被防火牆或者入侵檢測裝置發現并屏蔽,是以選擇一個适當的掃描等級非常重要,這裡推薦使用“-t4”;“-v”參數可顯示掃描細節。圖2-23是nmap對某主機的全面掃描過程。

《高性能Linux伺服器建構實戰:系統安全、故障排查、自動化運維與叢集架構》——2.4 網絡探測和安全稽核工具nmap

從圖2-23中可以看出,整個掃描過程非常詳細:第一部分是對主機是否線上進行掃描;第二部分是對端口進行掃描,在預設情況下nmap會掃描1000個最有可能開放的端口,由于隻掃描到22、111、80三個端口處于打開狀态,是以在輸出中會有“997 closed ports”的描述;第三部分是對端口上運作的應用服務以及版本号進行統計,可以看到,掃描結果非常詳細地記錄了軟體的版本資訊;第四部分是對作業系統類型和版本進行探測,從掃描結果來看,還是非常準确的;第五部分是對目标主機的路由跟蹤資訊。

2.4.5 nmap主機發現掃描

主機發現主要用來判斷目标主機是否線上,其掃描原理類似于ping指令,通過發送探測資料包到目标主機,如果能收到回複,那麼認為目标主機處于線上狀态。nmap支援多種不同的主機探測方法,例如發送tcp syn/ack包、發送sctp包、發送icmp echo/timestamp/netmask請求封包等,使用者可在不同的環境下選擇不同的方式來探測目标主機。

1 . 主機發現的用法

nmap提供了豐富的選項以供使用者選擇不同的主機發現探測方式,使用文法如下:

nmap常用的主機發現選項與含義如表2-7所示。

《高性能Linux伺服器建構實戰:系統安全、故障排查、自動化運維與叢集架構》——2.4 網絡探測和安全稽核工具nmap

在這些選項中,比較常用的是“-sn”和“-pn”,例如,檢視某個網段有哪些主機線上,就需要使用“-sn”選項,而如果已經知道了目标主機線上,僅僅想掃描主機開放的端口時,就需要用“-pn”選項。

2 . 使用執行個體

下面以探測www.abc.com主機的資訊為例,簡單示範主機發現的用法。首先,在聯網的伺服器上執行如下指令:

執行結果如圖2-24所示。

《高性能Linux伺服器建構實戰:系統安全、故障排查、自動化運維與叢集架構》——2.4 網絡探測和安全稽核工具nmap

在這個例子中,使用了“-pe”、“-ps”、“-pu”等參數,根據上面的介紹,“-pe”是以發送icmp echo封包的形式進行主機探測的,“-ps”是以發送tcp syn/ack包的形式偵測主機資訊的,而“-pu”則是以udp的方式進行主機偵測的。為了清晰展示nmap的偵測方式和偵測過程,這裡通過抓包工具wireshark動态監測nmap探測主機的過程,如圖2-25所示。

《高性能Linux伺服器建構實戰:系統安全、故障排查、自動化運維與叢集架構》——2.4 網絡探測和安全稽核工具nmap

從圖2-25中可以看到,nmap所在的主機“192.168.12.188”向目标主機“61.185.133.234”發送了四個探測包,分别是icmp echo (ping)、22端口和80端口的tcp syn、53端口的udp包。但是僅僅收到了icmp echo (ping)和80端口的回複,22端口傳回了“rst”辨別,這說明22端口處于關閉狀态。不過nmap的原則是隻要能收到任何一種探測請求的回複,就認為此主機處于線上狀态。

2.4.6 nmap端口掃描

端口掃描是nmap最核心的功能,通過端口掃描可以發現目标主機上tcp、udp端口的開放情況。nmap在預設狀态下會掃描1000個最有可能開放的端口,并将偵測到的端口狀态分為6類,分别是:

open,表示端口是開放的。

closed,表示端口是關閉的。

filtered,表示端口被防火牆屏蔽,無法進一步确定狀态。

unfiltered,表示端口沒有被屏蔽,但是否處于開放狀态,還需要進一步确定。

open|filtered,表示不确定狀态,端口可能是開放的,也可能是屏蔽的。

closed|filtered,表示不确定狀态,端口可能是關閉的,也可能是屏蔽的。

在端口掃描方式上,nmap支援10多種探測方法,最常用的有“tcp syn scanning”,這是預設的端口掃描方式,另外還有“tcp connect scanning”、“tcp ack scanning”、“tcp fin/xmasscanning”、“udp scanning”等探測方式。具體使用哪種探測方式,使用者可自己指定。

1 . 端口掃描的用法

nmap提供了多個選項以供使用者來指定掃描方式和掃描端口,使用文法如下:

nmap端口掃描的常用選項與含義如表2-8所示。

《高性能Linux伺服器建構實戰:系統安全、故障排查、自動化運維與叢集架構》——2.4 網絡探測和安全稽核工具nmap

2 .使用執行個體

下面仍以探測www.abc.com主機的資訊為例,簡單示範端口掃描的使用方法。首先,在聯網的伺服器上執行如下指令:

nmap -su -ss -f www.abc.com

執行結果如圖2-26所示。

在圖2-26中,參數“-ss”表示使用tcp syn方式掃描tcp端口,“-su”表示掃描udp端口,“-f”表示使用快速掃描模式,掃描最可能開放的前100個端口(tcp和udp各100個端口),由輸出可知,有21個端口處于開放或者屏蔽狀态,其他179個端口處于關閉狀态。

《高性能Linux伺服器建構實戰:系統安全、故障排查、自動化運維與叢集架構》——2.4 網絡探測和安全稽核工具nmap

2.4.7 nmap版本偵測

nmap的版本偵測功能主要用來确定目标主機開放的端口上運作的應用程式及版本資訊,nmap的版本偵測支援tcp/udp協定,支援多種平台的服務偵測,支援ipv6功能,并能識别幾千種服務簽名,下面介紹nmap版本偵測的使用方法。

1 . 版本偵測的用法

nmap在版本偵測方面的指令選項非常簡單,常用的文法如下:

nmap在版本偵測方面的常用選項及含義如表2-9所示。

《高性能Linux伺服器建構實戰:系統安全、故障排查、自動化運維與叢集架構》——2.4 網絡探測和安全稽核工具nmap

下面以探測“23.76.232.59”主機上運作的應用程式的版本資訊為例,簡單示範版本偵測的使用方法。首先,在聯網的伺服器上執行如下指令:

執行結果如圖2-27所示。

《高性能Linux伺服器建構實戰:系統安全、故障排查、自動化運維與叢集架構》——2.4 網絡探測和安全稽核工具nmap

從圖2-27中nmap的輸出可以看到每個端口對應的服務名稱以及詳細的版本資訊,通過對伺服器上運作服務的了解,以及對服務版本的探測,基本能判斷出來此伺服器是否存在軟體漏洞,進而提醒運維管理人員進行端口關閉或更新軟體等操作,盡早應對可能出現的安全威脅。

2.4.8 nmap作業系統偵測

作業系統偵測主要是對目标主機運作的作業系統類型及版本資訊進行檢測。nmap擁有豐富的系統指紋庫,目前可以識别近3000種作業系統與裝置類型。下面介紹nmap作業系統偵測的使用方法。

作業系統偵測的用法

nmap在作業系統偵測方面提供的指令選項比較少,常用的文法如下:

nmap在作業系統偵測方面的常用選項及含義如表2-10所示。

《高性能Linux伺服器建構實戰:系統安全、故障排查、自動化運維與叢集架構》——2.4 網絡探測和安全稽核工具nmap

使用執行個體

下面以探測“192.168.12.118”和“192.168.12.119”主機的作業系統類型為例,簡單示範作業系統偵測的使用方法。首先,在聯網的伺服器上執行如下指令:

執行結果如圖2-28所示。

《高性能Linux伺服器建構實戰:系統安全、故障排查、自動化運維與叢集架構》——2.4 網絡探測和安全稽核工具nmap

從圖2-28中可以看出,在指定了“-o”選項後,nmap指令首先執行了主機發現操作,接着執行了端口掃描操作,然後根據端口掃描的結果進行作業系統類型的偵探,擷取到的資訊有裝置類型、作業系統版本、作業系統的cpe描述、作業系統的細節和網絡距離。如果不能确定作業系統的版本,會猜測每個系統版本的可能性比率,例如對于“192.168.12.119”主機,nmap給出最可能的作業系統版本是vmware esxi server 5.0,而事實上,此主機确實安裝了這個版本的系統。由此可見,nmap的作業系統偵測功能是多麼的強大。