shell Windows nginx wordpress mysql 微软 linux 编程 google Ubuntu Firefox centos Android java php 程序员 开源 云计算 Python apache

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

2.4 網絡探測和安全審核工具nmap

對於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 . 源碼編譯安裝
從官方網站下載源碼包,然後編譯安裝即可。編譯安裝過程無需額外參數,操作如下:

[root@localhost ~]# tar jxvf nmap-6.40.tar.bz2
[root@localhost ~]# cd nmap-6.40
[root@localhost nmap-6.40]# make
[root@localhost nmap-6.40]# make install
至此,源碼編譯編譯方式安裝nmap完成。
2 . RPM包安裝
nmap官方也提供RPM格式的安裝包,直接從網站下載RPM格式的安裝包,然後進行安裝即可,操作過程如下:

[root@localhost ~]# wget http://nmap.org/dist/nmap-6.40-1.x86_64.rpm
[root@localhost ~]# rpm -Uvh nmap-6.40-1.x86_64.rpm
在完成安裝後,執行“namp -h”,如果能輸出幫助信息,表示安裝成功,否則根據錯誤提示重新安裝。
2.4.4 nmap的典型用法
前面提到了nmap主要包含四個方面的掃描功能,在詳細介紹每個功能之前,首先介紹nmap的典型用法。最簡單的nmap命令形式如下:

namp 目標主機
通過這個命令,可以確定目標主機的在線情況和端口的監聽狀態,如圖2-22所示。

image

由輸出可知,目標主機“192.168.12.189”處於“up”狀態,並且此主機上開放了22、21、3306端口,同時還偵測到每個端口對應的服務,在最後還給出目標主機網卡的MAC信息。
如果希望了解目標主機更多的信息,可以通過完全掃描的方式實現,nmap命令內置了“-A”選項,可以實現對目標主機進行主機發現、端口掃描、應用程序與版本偵測、操作系統識別等完整全面的掃描,命令形式如下:

nmap -T4 -A -v 目標主機
其中,“-A”選項用於開啟全面掃描;“-T4”指定掃描過程中使用的時序模板,總共有6個等級(0~5),等級越高,掃描速度越快,但也越容易被防火墻或者入侵檢測設備發現並屏蔽,所以選擇一個適當的掃描等級非常重要,這裏推薦使用“-T4”;“-v”參數可顯示掃描細節。圖2-23是nmap對某主機的全面掃描過程。

image

從圖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 [選項或參數] 目標主機
nmap常用的主機發現選項與含義如表2-7所示。

image

在這些選項中,比較常用的是“-sn”和“-Pn”,例如,查看某個網段有哪些主機在線,就需要使用“-sn”選項,而如果已經知道了目標主機在線,僅僅想掃描主機開放的端口時,就需要用“-Pn”選項。
2 . 使用實例
下面以探測www.abc.com主機的信息為例,簡單演示主機發現的用法。首先,在聯網的服務器上執行如下命令:

nmap  -sn -PE -PS22,80 -PU53 www.abc.com
執行結果如圖2-24所示。

image

在這個例子中,使用了“-PE”、“-ps”、“-PU”等參數,根據上面的介紹,“-PE”是以發送ICMP echo報文的形式進行主機探測的,“-PS”是以發送TCP SYN/ACK包的形式偵測主機信息的,而“-PU”則是以UDP的方式進行主機偵測的。為了清晰展示nmap的偵測方式和偵測過程,這裏通過抓包工具Wireshark動態監測nmap探測主機的過程,如圖2-25所示。

image

從圖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 [選項或參數] 目標主機
nmap端口掃描的常用選項與含義如表2-8所示。

image

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個端口處於關閉狀態。

image

2.4.7 nmap版本偵測
nmap的版本偵測功能主要用來確定目標主機開放的端口上運行的應用程序及版本信息,nmap的版本偵測支持TCP/UDP協議,支持多種平臺的服務偵測,支持IPV6功能,並能識別幾千種服務簽名,下面介紹nmap版本偵測的使用方法。
1 . 版本偵測的用法
nmap在版本偵測方面的命令選項非常簡單,常用的語法如下:

nmap [選項或參數] 目標主機
nmap在版本偵測方面的常用選項及含義如表2-9所示。


image

2 . 使用實例
下面以探測“23.76.232.59”主機上運行的應用程序的版本信息為例,簡單演示版本偵測的使用方法。首先,在聯網的服務器上執行如下命令:

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

image

從圖2-27中nmap的輸出可以看到每個端口對應的服務名稱以及詳細的版本信息,通過對服務器上運行服務的了解,以及對服務版本的探測,基本能判斷出來此服務器是否存在軟件漏洞,進而提醒運維管理人員進行端口關閉或升級軟件等操作,盡早應對可能出現的安全威脅。
2.4.8 nmap操作系統偵測
操作系統偵測主要是對目標主機運行的操作系統類型及版本信息進行檢測。nmap擁有豐富的系統指紋庫,目前可以識別近3000種操作系統與設備類型。下面介紹nmap操作系統偵測的使用方法。

操作系統偵測的用法
nmap在操作系統偵測方面提供的命令選項比較少,常用的語法如下:
nmap [選項或參數] 目標主機
nmap在操作系統偵測方面的常用選項及含義如表2-10所示。

image

  1. 使用實例
    下面以探測“192.168.12.118”和“192.168.12.119”主機的操作系統類型為例,簡單演示操作系統偵測的使用方法。首先,在聯網的服務器上執行如下命令:
    nmap -O --osscan-guess 192.168.12.118-119
    執行結果如圖2-28所示。

image

從圖2-28中可以看出,在指定了“-O”選項後,nmap命令首先執行了主機發現操作,接著執行了端口掃描操作,然後根據端口掃描的結果進行操作系統類型的偵探,獲取到的信息有設備類型、操作系統版本、操作系統的CPE描述、操作系統的細節和網絡距離。如果不能確定操作系統的版本,會猜測每個系統版本的可能性比率,例如對於“192.168.12.119”主機,nmap給出最可能的操作系統版本是VMware ESXi Server 5.0,而事實上,此主機確實安裝了這個版本的系統。由此可見,nmap的操作系統偵測功能是多麽的強大。

延伸阅读

评论