RSS訂閱

2012年3月6日 星期二

nmap 安全性掃瞄器 (Using nmap security scanner)

Nmap為一免費、開放原始碼的網路安全性掃瞄工具,全名為 Network Mapper,這個工具起源於1997年網路安全專家 Gordon Lyon於Linux平台上所撰寫開發的連接埠掃瞄工具。歷經了十多年來的發展與改版,nmap目前已成為一個功能相當強大的網路掃描和主機探索工具,不但可以支援 Unix/Linux, Windows 與 Mac OS X 等主流的作業平台 ,而操作介面上也同時支援了傳統的命令列執行模式以及較友善的圖形介面二種,整個工具套件除了包括nmap本身主程式外,還可以額外下載一個與平台無關的圖形介面檢視器(Zenmap),彈性的資料傳送、轉送和除錯工具(Ncat),掃瞄結果比較工具(Ndiff)以及封包產生和回應分析(Nping)等輔助工具,可謂是一個相當全面化功能的掃瞄工具。

nmap工具的作者Gordon Lyon 將nmap定位為網路探索和安全性稽核工具,主要是用來掃描網路上的單一、多台電腦、甚至多個網段的主機設備以收集有用的資訊,並執行資訊彙整、安全監控、服務運作狀態檢測與漏洞偵測等任務。

實務上,nmap目前還被許多網路管理人員用來盤點網路主機和服務清單(Network inventory)、服務升級排程、監控主機和服務是否在線上等工作,另一方面,許多資安人員亦經常利用它來進行滲透測試(penetration test),而網路的駭客和有心人士也會使用它來非法探索並收集它人網路資訊以做為下一步驟攻擊的依據。

nmap另一項強大又彈性的功能是可以支援外掛Script 的方式 (內建安裝有數百個NSE檔案)來擴充及強化Nmap的掃描能力,甚至可擴充成為弱點掃描之用。

由於nmap功能相當強大而複雜,足夠撰寫一本厚厚的書籍,本文僅針對nmap工具的基本掃瞄、進階主機查詢、各種掃瞄類型以及如何規避防火牆和入侵防止系統偵測等基礎用法上做一簡單的介紹,並提供實例與實證的說明。  

使用nmap基礎認識

當您使用nmap執行大部份掃瞄類型時均需要特權使用者,因為nmap需要傳送和接收原始封包, 在大部份系統上這需要管理員特權才行,即使某些掃瞄類型並不需要特權執行,但利用特權執行掃瞄可能會獲得較快速與精準的結果,所以建議執行nmap掃瞄器時應該利用root或administrator等管理員權限之身份為佳,此外,由於nmap可支援命令列和圖形二種操作介面,您可以自行選擇適合或偏好的介面來進行掃瞄作業,不過若您需要顯示nmap網路掃瞄後的拓樸圖,則利用其圖形介面程式-Zenmap自然是首選,若您熟悉掃瞄參數或需要排程自動掃瞄,那麼請直接使用nmap命令列。

zenmap3A

nmap在掃瞄目標之前通常會先查詢目標系統,如果目標是本地子網路(Local Network)的系統,則會先送出ARP封包查詢是否存在及網卡卡號,但若並非本地子網路的目標系統,則會送出ICMP Echo請求以及連接埠80的TCP ACK封包來等待回應,如果目標系統並沒有回應ARP或Ping查詢,將會跳到下一個目標,如果已經沒有下一個目標,就會停止掃瞄執行作業。

nmap目前提供了超過100個命令列選項,豐富的掃瞄功能可謂相當強大而複雜, 有些掃瞄方式隱匿可規避防火牆偵測,有些掃瞄方法則是較積極(aggresive)快速,欲因制置宜而靈活應用需要依賴您對TCP/IP的熟悉度和經驗累積,底下僅針對重要選項加以介紹和說明做為初學者之指引。 

◆ 掃瞄單一主機

最簡單快速的掃瞄方式為單一目標系統掃描,如前段所述,假若不使用任何選項下的掃瞄,nmap會先透過arp或ping來確認掃瞄的目標是否為啟動的主機,然後再利用TCP SYN檢查著名的網路服務(連接埠)是否開啟,一切順利時可取得目標主機為啟動的而且其所開啟的連接埠和服務。

命令語法: nmap ipaddress或主機

nmap1

由於目前網路上已經存在越來越多的IPv6主機,所以nmap也可以支援透用 -6選項來執行IPv6主機的掃瞄作業,如下圖為掃瞄一台IPv6主機的結果:

nmap84A

◆ 掃瞄多部主機或子網路

有些時候,您希望一次可以掃瞄多台機器、整個子網路或數個子網路,則nmap提供數種彈性的用法。

首先若您希望nmap 可以掃瞄數部不連續IP位址的主機,則只要在命令列中一一輸入其IP位址或主機名稱,主機間以空白隔開即可,如下例所示:

nmap 192.168.0.1 192.168.0.100 192.168.0.200 或
nmap 192.168.0.1,100,200

nmap也可以讓您掃瞄某一個範圍IP位址的機器,例如:

nmap 192.168.0.1-100

若要掃瞄某個子網路的網路,nmap支援多種不同格式的網段撰寫方式,如下面的例子以CIDR表達方式、使用萬用字元或代表連續範圍的"-"符號均可接受:

nmap 192.168.0.0/24 或
nmap 192.168.0.*  或
nmap 192.168.1-10.*   (掃瞄192.168.1.* 到 192.168.10.*的機器)

您也可以利用 exclude 選項來排除網段內的某些範圍的機器

nmap 192.168.1.0/24 --exclude 192.168.1.100-120

防火牆保護下的目標系統查詢(special ping)方式

nmap預設上在掃瞄一開始時會先利用ping查詢來判斷遠端目標電腦是否為線上啟動中的機器,如果目標機器沒有回應ping請求就會跳過底下的掃瞄以節省時間,但現代主機和設備或網路環境下大多存在防火牆或封包過濾機制的保護,亦即會過濾有安全性疑慮的封包(例如ICMP),因此nmap的ping查詢封包也可能會被防火牆篩選掉而無法達成掃瞄目的或產生誤判,所以如果您發現ping 查詢可能被攔掉而無法探索,則您可以使用-sA 選項來判斷目標系統是否為防火牆保護下的系統,-sA選項執行了TCP ACK掃瞄並等待RST回應,如果沒有回應則表示已被過濾(filtered),反之如果真得收到RST回應,則標示為未過濾(unfiltered)。

另一方面,在防火牆下發現主機的方法,除了傳統的ping查詢易被過慮封鎖,若改採用比較特殊封包來查詢發現主機方法或許可行,而這些特殊的目標系統發現與查詢選項包括了:

目標發現查詢功能 選項 說明
不要查詢(No Ping) -Pn 不用任何查詢,即跳過ping查詢而直接當成已啟動的系統而逕行掃瞄,亦即不做主機探索,逕行執行連接埠掃描,由於現今的系統預設上均會啟用正面表列的防火牆環境下,因此-Pn已是相當常用的選項。
只執行ping掃瞄 -sP 當您想要非常快速的搜尋目標網路並查詢那些主機正在線上而無需知道目標所開啟的服務時這個選項是有用的(只發現不掃瞄),但若目標封鎖ICMP Echo請求時,這個選項將無法偵測啟動的主機,此外,-sP選項通常也無法與其它選項合用。下圖範例可知,-sP選項的結果只會顯示判斷為啟動主機的簡單清單,並無更進一步的連接埠與服務的資訊。
nmap86A
TCP SYN Ping -PS 傳送TCP SYN封包並等待目標回應,經常可用來發現那些會過濾掉標準ICMP Ping封包的目標系統
TCP ACK Ping -PA 傳送TCP ACK封包並等待目標回應以發現主機,也可用來發現那些會過濾掉標準ICMP Ping封包的主機
UDP Ping -PU 送出 UDP封包至目標系統,由下圖截取的封包可知本版本的nmap使用了UDP來源埠35842來查詢目標(不同版本的nmap使用的UDP 封包會有所不同),而現代的防火牆大多會過濾掉這種UDP探索封包。
nmap69
ICMP Timestamp Ping -PP 利用較特殊的ICMP Timestamp請求封包(以ICMP Type=13取代傳統的ICMP Type=8的Ping請求 )來找出啟動的目標系統。
nmap70
ICMP Address Mask Ping -PM nmap透過另一種少見的ICMPAddress Mask 請求封包(ICMP Type=17取代ICMP Echo請求 )來找出啟動的目標系統。
nmap71
IP Protocol Ping -PO 利用特殊的IP封包來發現主機,如果沒有指定特定的協定,則nmap將會傳送協定ID為1 (ICMP)、2 (IGMP)和 4 (IP-in-IP)的封包以企圖發現主機後再繼續掃瞄。
nmap72
ARP Ping -PR 當您掃瞄的目標為本地子網路時,nmap會自動透過ARP Ping的方式來查詢以判斷是否為啟動的機器,不過ARP Ping不能用於其它網段或遠端的探索查詢。

底下的範例,由於目標系統已經部署防火牆/入侵防止系統予以保護,因此預設的ICMP ping會被封鎖而無法順利掃瞄出啟動的機器,因此需要進一步嘗試較特殊類型的封包查詢方式,而利用TCP ACK、IP Protocol查詢方式也未獲得回應,最後經由TCP Syn Ping的查詢而收到回應封包,因此確認主機存在而順利完成掃瞄工作。

nmap53A

一旦懷疑或判斷有防火牆封包篩選封鎖而導致上述各種主機發現的查詢方法均告失效,則您可以直接利用 -Pn 選項(skip host discovery)以讓nmap跳過ping主機探索動作而逕行執行連接埠掃瞄作業。就實務經驗而言,單機掃瞄時,大部份情況下或許可以直接使用-Pn 選項將目標系統視為啟動,然後搭配適當的掃瞄方法直接掃瞄連接埠服務即可。

由下圖範例可知,一旦透過 -Pn選項就可以成功的顯示一部無法ping查詢主機所開啟的連接埠。

nmap2A

◆ 收集服務版本資訊

一般nmap掃瞄的結果會出現啟動的主機和其連接埠服務狀態訊息,但有時候您可能需要更進一步收集網路服務的版本資訊,則就得使用另一個相當有用的選項 –sV,下圖顯示了掃瞄出來的結果,不過掃瞄結果所顯示的服務版本資訊並不見的準確,因此僅能做為參考,失準的原因通常與目標系統是否有防火牆、NAT、入侵防止系統、代理伺服器以及管理員是否變更服務顯示的Banner、或是採用較新版本等一干因素有所關聯。

nmap49A

◆ 判斷作業系統類型 (OS Fingerprint)

若需要判別目標系統的作業系統類型,可使用 -O選項或更進一步使用 -A ( Aggressive scan)選項(相當於 -O -sC  --traceroute等選項合用),但這對於網際網路伺服器的判斷可能會面臨問題,因為許多企業組織均在啟用NAT協定的安全閘道器(防火牆、UTM)之後以私自指定IP的方式部署網際網路伺服器,所以所有在DNS登錄的網際網路服務均指向安全閘道器的外部介面,然後待會收到來自網際網路特定連接埠的流量時再轉送至內部特定網路伺服器連接埠(Server publish)、Destination NAT、Port Redirect、port forwarding、static translation),如下圖所示,當您企圖從網際網路上掃瞄一台www主機時,根據DNS註冊所指向的公開位址,nmap會將探索封包傳送至一部安全性閘道器(防火牆、寬頻路由器或其它啟用NAT協定的設備)來進行掃瞄作業,由於這部安全性閘道器所定義的連接埠轉送規則又會將不同服務流量轉送至內部不同伺服器(如圖80埠和25埠的流量轉送至不同的內部伺服器),導致根據不同連接埠流量所取得的OS fingerprint與版本資訊所分析出來的結果自然大不相同,因此收集到的資訊混含三部伺服器作業系統的資訊,判斷上自然較不易,總之,如果有懷疑目標有透過nat轉送連接埠流量下的伺服器環境,建議採用-A選項取得服務版本可加強判斷準確度。

nat1

下圖範例以-A選項收集開啟狀態的網路服務版本資訊並取得作業系統的指紋,經比對資料庫後可獲最高相似度的數個可能的作業系統,而OS是以一般平台列舉(Common Platform Enumeration ;CPE)名稱方式顯示。顯示中明顯的出最近似的作業系統為Windows Server 2003 ,若再從80連接埠的版本資訊得知為IIS 6.0,相互佐證的結果,幾乎可斷定這是一部Windows Server 2003的作業平台,不過一般網際網路的系統恐怕不會像本例一樣的明確易判斷,而是會多了幾分不確定性和模糊性,甚至無從判別。

nmap78A

◆ 快速掃瞄 (Fast Scanning)

Nmap預設掃瞄探詢了1000個最常見的連接埠,所以當您掃瞄整個網段時可能需要花費不少時間,有時候您需要比較快速的完成掃瞄作業,則可以使用 -F這個選項來進行快速掃瞄,由於快速掃瞄只會掃瞄100個連接埠,因此可以大幅降低耗費的時間,下圖實證的結果可知採用快速掃瞄通常會比一般掃瞄快上許多,但可能會增加遺漏率並且降低掃描的精準度。

nmap34A

nmap76

◆ 只掃瞄某特定的連接埠

有時候您只想要找出目標系統是否啟動某些特定的服務,則使用 –p 選項來指定所要掃瞄的連接埠即可,指定時使用連接埠數值或名稱皆可,如下圖所示只掃瞄 http, https, dns與smtp服務是否開啟中。

nmap87

◆ 顯示連接埠狀態的原因(Display Port State Reason)

--reason 參數可以顯示目前連接埠所呈現的狀態原因,如下圖示,當nmap使用--reason選項執行掃瞄時會額外出現一個"REASON" 欄位,可讓您知道連接埠目前處於此特殊狀態的原因,一般而言,回應為 syn-ack原因者表示這是一個正開啟的連接埠,回應以conn-refused或reset者通常是關閉狀態,未做任何回應者(no-response)可能被防火強牆予以封鎖掉了。

nmap43


◆ 時序範本(Timing Templates)

nmap提供了許多細緻化的選項來控制掃瞄時間和速度,IT人員通常可善用這些較低階的時間控制參數來加速掃瞄、或刻意放慢掃瞄以規避開入侵偵測系統、或者降低網路的負載量或改善掃瞄精確性,不過這些低階的時間控制參數為數眾多且不易了解,例如:--min-hostgroup、--max-retries、--host-timeout、--scan-delay、--max-rate、--defeat-rst-ratelimit、min-parallelism.....等,雖然這些選項強大並有效,卻不易使用,如何組合更是需花費時間來嘗試與經驗,所以nmap為了簡化時序參數的使用,特別提供了一個較簡單的用法,亦即設計了六個組合了不同時間控制參數的時序範本(Timing Templates)來方便應用,因且吾人只要透過-T選項選用較合適的範本來使用即可,而無需設定繁雜的低階時間參數。

一般而言,越慢的時序範本對網路的衝擊越低,也較能夠規避防火牆和入侵防止系統的偵測,而較快的時序範本則對網路的衝擊較高且準確度亦較低,底下列出了六個時序範本的名稱與說明。

範本 名稱 說明
-T0 paranoid 相當相當慢,因為每個傳送的封包通常至少會隔5分鐘,所以規避入侵防止系統偵測與追蹤,但您要有很好的耐心等待…….(實用性低)。
-T1 sneaky 可以用來規避入侵偵測系統。
-T2 polite 放慢掃瞄以耗費較少的頻寬和目標系統的資源,因此較不會干擾目標系統正常運作。
-T3 normal 預設的範本。
-T4 aggressive 在一個穩定快速的區域網路下可獲得較快的掃瞄效果。
-T5 insane 在可能犧牲精準度的條件下獲得最快速的掃瞄結果。

下圖範例使用T5選項來快速的掃瞄整個子網路。

nmap48A

◆ nmap 封包追蹤

使用--packet-trace參數將顯示掃瞄過程中所有傳送與接收封包的摘要資訊,這個選項可以用以診斷連線問題,不過這個選項的結果會快速捲過畫面,很難即時觀看,所以通常會搭配 -oN選項來將其儲存在另一個文字檔以方便事後檢視,此外,--packet-trace只顯示一些摘要訊息,並非整個封包,若您需要完整的封包內容則仍需使用wireshark或tcpdump等竊聽器工具。

nmap46A

◆ nmap 基本和進階掃瞄選項

nmap支援許多不同類型的掃瞄方式,這些特殊類型的掃瞄或許在不同的情境下可以規避防火牆的封鎖,也許有助於提升判斷上的精準度,您必需對TCP/IP有一定的熟悉度再加以多方嘗試後才能知道如何因地制宜的使用這些掃瞄選項,下表整理了這些選項的使用和說明。

進階掃瞄功能 選項 說明
無連接埠掃描(No port scan) -sn 唯有主機探索(Host discover),不做連接埠掃描,使用ARP、ICMP Echo Request、TCP 80/443、ICMP Timestamp request等封包進行主機探索
TCP SYN 掃瞄 -sS TCP SYN掃瞄為特權使用者(root, administrator)預設的掃瞄選項,向目標系統的1000個最普遍的TCP連接埠傳送TCP SYN封包,一旦目標連接埠回應SYN/ACK封包即可確認提供了此項服務,再回應RST中斷連線建立,所以此種掃瞄方式並沒有完整的建立TCP連線以避免被記錄,因而又稱為半開放掃瞄(half-open)或隱匿掃瞄 (stealth scanning),常搭配 -Pn 選項使用,不過此種方法並不保證成功,因為許多現代的防火牆和入侵防止系統均能夠偵測到SYN掃瞄。
TCP Connect 掃瞄 -sT TCP Connect 掃瞄為非特權使用者預設的掃瞄選項,此種掃瞄法乃直接連接到目標電腦而無任何隱匿, 所以此種方法會被目標系統記錄並偵測篩選出來。
UDP 掃瞄  -sU 許多著名的網路服務大多使用TCP傳輸層協定,但也有不少知名的服務採用UDP協定,所以為了完整了解目標系統的全貌,除了TCP掃瞄之外,還需要使用-sU選項來進行UDP掃瞄才能拼湊出目標系統所提供的所有服務。
nmap54A
TCP NULL 掃瞄 -sN TCP NULL 掃瞄指示nmap傳送無啟用任何TCP旗標(no TCP flags enabled)的封包進行掃瞄,一般而言,關閉的連接埠可能會回應RST封包,開啟的連接埠通常並不會回應此類型的封包,此種掃瞄方法的的目的並不在找出目標系統所提供的服務資訊,而是在欺騙防火牆和或目標系統,藉由是否有回應來找出可利用的漏洞,下圖範例顯示了目標系統並沒有回應此種TCP旗標為0的封包。
nmap56A
TCP FIN 掃瞄  -sF -sF選項是另一種傳送非預期封包到目標的探索技術,利用傳送開啟 TCP FIN位元的封包企圖看目標系統是否回應TCP ACK封包來探索目標系統的漏洞,或者企圖穿透某些防火牆,正常的電腦系統上關閉的連接埠會回應RST封包,而開啟的連接埠通常會丟棄此類型的封包,下圖說明了此種現象
nmap58A
Xmas 掃瞄 -sX -sX 選項執行Xmas掃瞄,nmap傳送啟用URG、FIN和PSH三個位元的封包,由於若將六個旗標用不同的顏色表達,啟用不同位置的三個旗標位元,就像點亮聖誕樹上不位位置不同顏色的電燈泡,因此命名為Xmas掃瞄方法,由於某些簡單的無狀態防火牆(Stateless firewall)只檢查SYN位元是否啟動做為篩選的依據,因此Xmas可能能夠順利穿越這種防火牆系統,此外,對大心人士而言,大量的 Xmas封包可能形成有效的阻斷服務(DoS)攻擊。但現代的IDS/IPS或防火牆應該可以輕易的偵測到此種掃瞄封包。
nmap60A
TCP ACK 掃瞄 -sA 用以判斷目標系統是否為防火牆保護,而且防火牆為狀態(可追蹤連線並封鎖非預期的ACK封包)或非狀態(只封鎖連入的TCP SYN封包)類型,-sA選項掃瞄傳送ACK封包到目標系統,如果傳回RST則標示為 "unfiltered"如果無任何回應則標示為"filtered"
nmap61A
Window 掃瞄 -sW -sW 選項與上述的TCP ACK掃瞄類似,但會同時分析回應的RST封包內的TCP Window Size欄位以判斷連接埠的狀態是開啟或關閉,但這個方法來判斷連接埠狀況不一定準確,因為並非所有系統的TCP堆疊所回應的RSK封包 Window欄位會提供有用的判斷資訊。
nmap68A
Custom TCP 掃瞄 --scanflags --scanflags旗標用以執行自訂TCP(Custom TCP)掃瞄,因為它允許使用者自行定義TCP旗標位元的內容,換之,您可以任意組合六個旗標--SYN、ACK、PSH、URG、RST、FIN的啟用狀態並傳送至目標系統進行掃瞄,如下圖範例,使用者自行啟用 SYN、URG和PSH三個位元旗標來進行掃瞄作業。
nmap63A
IP Protocol 掃瞄  -sO -sO選項執行IP協定掃瞄,可用來顯示目標系統支援的IP協定,而現代網路常見的協定有ICMP、TCP、UDP,所以選項有助於判斷下一階段可對目標系統實施那一種協定的掃瞄作業。
nmap65A

◆ nmap規避防火牆的特殊技術

防火牆、入侵防止系統或整合性威脅控管設備(UTM)等部署於週邊網路(Perimeter Network)的安性閘道器大多可用防範或阻止nmap此等工具無法獲取保護系統的精準資訊,不過Nmap也包括了一些特殊的功能可用來規避這些設備的偵測和封鎖技術,但欲規避或越過這些防禦技術仍需要花時間多方嘗試才會成功,底下介紹Nmap的特殊的防火牆規避技術:

功能 選項 說明及用法
分段的封包(fragmented packets) -f 將探索封包分段成許多較小的8位組的封包資料來傳送,這個切割封包傳送的做法對現今的防火牆而言並沒有太大的效用,不過對於一些老舊或設定不當防火牆仍可能產生一些規避的效果並令其較難以篩選封包。

nmap2AA

指定特定大小的MTU --mtu --mtu選項類似於-f選項,只不過可以讓您指定掃瞄時所使用的最大傳輸單位(MTU),這將創造許多切割的封包以讓防火牆混淆,下面範列中採用--mtu 16選項以令nmap使用16位元組的小封包來進行掃瞄 (MTU必需是八的倍數)
nmap20A
採用誘騙 (Use a Decoy) -D -D選項用來誘騙掃瞄(Decoy Scanning),當使用誘騙掃瞄時,nmap將根據您在命令列上的指定來假造額外的封包送至目標系統,以便讓目標系統以為有多部系統同時正在掃瞄,如此一來將可讓真正的掃瞄來源混在多個假造封包之中而難以被追蹤。
使用 -D選項可以直接在選項後輸入要偽裝的IP群,也可以搭配 RND來隨機產生偽裝的IP,例如下圖範例一由nmap隨機產生五個假造的IP同時向目標系統掃瞄,而真正的來源則混於其內,第二個範例則是明確的指定想要假造的IP位址。
nmap22A

nmap25A
若使用過多的假造來源IP可能會導致網路擁塞而降低掃瞄的準確性,此外,有些防火牆也可篩選檢查假造封包的能力,因此這個假造多來源傳送的技巧亦不見得可達到偽裝掃瞄的目的。
透過閒置殭屍電腦偽裝掃瞄 (Idle Zombie Scan) -sI 利用一部網路上閒置的電腦來掃瞄目標系統,此種方法乃是利用一部可預測其產生的 Sequence ID來掃瞄目標,但為了能夠掃瞄成功,您需要在網路上找到一部在掃瞄過程中真正為閒置狀況的殭屍電腦,關於這點可利用一些其它的滲透測試工具來協助,例如下圖先利用Metasploit Framework這個工具找到可以利用的電腦後,再利用nmap 的-sI選項來實施閒置殭屍電腦偽裝掃瞄。
nmap23
指定特定來源連接埠(Manual Specify a Source Port) --source-port或
-g
nmap預設會隨機指定來源埠以探究目標系統,但使用-source-port 或 -g選項則可以手動指定探索時使用的來源連接埠,這個技術可能可以用來突破一些由於設定不當而會盲目接受特定來源埠連入流量的的防火牆,一般而言,指定來源連接埠20、53或67為成功率較高的連接埠
nmap27A
附加隨機資料 (Append Random Data) --data-length 由於nmap通常會傳送特定大小的封包來進行探索,所以某些安全性閘道器會篩選掉這些可預期大小的nmap傳送封包,而--date-length選項可附加額外大小的資料於探索封包內,因此就可以成功的規避掉這些篩選機制,例如下圖範例中,要求每個探索封包附加上30個額外的位元組資料再傳送至掃瞄的目標系統。
nmap42A
隨機順序掃瞄目標(Randomize Target Scan Order) --randomize-hosts 當掃瞄多部電腦時,採用隨機順序的掃瞄方式可能可以避開某些防火牆或入侵偵測系統偵測到掃瞄動作,所以下圖範例利用--randomize-hosts 選項以隨機化的順序進行掃瞄探索而非循序性的順序。
nmap37A
假造MAC位址 (Spoof MAC Address ) --spoof-mac --spoof-mac選項用來偽裝一個乙太網路介面的實體位址(Media Access Control;MAC) 以避免被目標系統記錄或追蹤,選項後可使用三種不同的值:
  • 0:nmap將隨機產生MAC位址
  • 特定MAC位址:如 01:02:03:04:05:06
  • 廠商名稱:產生某廠商所註冊的網卡卡號,如:3COM、Apple、Dell

    nmap36A

  • 傳送錯誤的總和檢查碼(Send Bad Checksums ) --badsum TCP/IP協定使用總和檢查碼來確保傳輸資料的完整性,利用--badsum選項刻意傳送不正確總和檢查碼的封包可能會讓某些設定不當的系統產生回應,因而探索到有意義的資訊。
    nmap40A

    ◆ 掃瞄與連線問題診斷

    nmap掃瞄的結果有時可能與預期不符,甚至出現錯誤的結果,這時可利用nmap所提供了-v與--debug選項來幫助診斷問題,首先透過 -v選項以顯示詳細的輸出(Verbose Output ),如下圖範例-v選項會顯示詳細結果,讓您可看到掃瞄的過程,這有助於問題診斷,必要時,您還可以使用二次 -v選項 (-v -v或-vv )來取得更詳細的資訊。

    nmap81

    --debug(或-d)選項為另一個可用來診斷連線問題的選項,它提供相當多的追蹤與除錯資訊以讓我們了解掃瞄過程中是否在那一個階段出了問題,debug可選項可以定1-9個等級以增加或降低輸出的訊,下圖顯示了除錯選項顯示時序設定和相當冗長詳細的掃瞄過程資料。

    nmap83

    結語

    nmap為目前開放原始碼下頗受歡迎和功能強大的網路探索暨掃瞄工具,相較起一般簡單的安全性探索工具,它擁有更強大和複雜的功能性,因為它可以支援許多進階的網路掃描與偵測技術,並存在多種可規避防火牆、路由器等設備偵測的技術,能夠協助我們找出可能的網路安全漏洞並提供主機或伺服器的系統版本、應用程式名稱版本與所使用的服務與連接埠…等等各種資訊,不過實務上若要能夠有效而靈活的應用這個工具並不容易,您需要對TCP/IP相當精熟,並多方實證,累積經驗才能夠善用其不同選項的組合以規避和穿越不同的篩選設備,甚至需進一步學習撰寫nmap指令檔(Nmap Scripting Engine)以能夠自動和自訂其掃瞄工作。

    nmap這個任何人均可以輕易免費取得的工具使用上有如刀之兩刃,不僅可協助網管人員探索、收集盤查、分析並監控各種網路資訊,亦可為資安專業人員實施滲透測試上的重要工具,但對心存不存的駭客而言,誤用此工具卻也能非法或不道德的恣意探索並收集其攻擊可利用的資訊,為善為惡存乎一心,就資安專業人員而言,如同孫子兵法有云:"知己知彼,百戰不殆",因此當您了解了nmap的各種掃瞄類型和技術之後,應該也更能夠知曉如何正確的設定與建立防火牆規則以避免被有心人士探索取得有利於攻擊的資訊。

    讀者回響 (aohongchen@yahoo.com)