Nmap 的初學者手冊

3月 16th, 2010 由 Nica Leave a reply »
譯者:Nica < nicaliu at gmail dot com >
有沒有想過攻擊者如何得知系統開了哪些通訊埠 ? 或者說:他們如何在不詢問站台管理者的情況下,得知電腦裡正在執行的服務有哪些 ? 其實你也可以,透過一個叫作 Nmap 的便利小程式就能作到,而且還可以作得更多!
Nmap 的用途是什麼 ? 它是 network mapper 的簡寫,名符其實就是執行網路掃描功能的一組工具。可以用來作安全性掃描,簡單辯識出主機正在執行的服務有哪些,採集主機作業系統與應用程式的 “指紋 (fingerprint)”,瞭解主機使用的防火牆型態,還可以迅速列出本地端網路的詳細清單。簡單來講,它就是一個你應該瞭解的優質工具。
就因為它很有名,當你對 Nmap 有點瞭解後,會發現【電影裡演的那些背景技術】 都是作得到的。
本文筆者將介紹使用 Nmap 的基本概念,舉些例子讓你快速瞭解。
取得 Nmap 與其基本用法
你可以在主流 Linux 分支套件裡找到 Nmap。Nmap 最近一次釋出是在 2010 年初,所以最近版本 5.21 可能不在現行穩定版釋出裡。你可以在下載頁裡找到原始碼及一些二進制套件。
Nmap 的基本語法就是 Nmap Scan Type Options target。假設你想知道主機正在使用的作業系統為何,可以這麼作:
nmap -O target.host.com
【譯註:選項 -O 為英文字母 O (大寫)】
注意:Nmap 需有 root 權限才能執行掃瞄,這個動作可能會花個幾分鐘,請耐心等待。完成時會看到類似下面這樣的東西:
——————————————————————
Starting Nmap 5.21 ( http://nmap.org ) at 2010-02-27 23:52 EST
Nmap scan report for 10.0.0.1
Host is up (0.0015s latency).
Not shown: 997 closed ports
PORT      STATE SERVICE
53/tcp    open  domain
5009/tcp  open  airport-admin
10000/tcp open  snet-sensor-mgmt
MAC Address: 00:11:24:6B:43:E2 (Apple Computer)
Device type: WAP|printer
Running: Apple embedded, Canon embedded, Kyocera embedded, Xerox embedded
OS details: VxWorks: Apple AirPort Extreme v5.7 or AirPort Express v6.3; Canon imageRUNNER printer (5055, C3045, C3380, or C5185); Kyocera FS-4020DN printer; or Xerox Phaser 8860MFP printer
Network Distance: 1 hop
OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.21 seconds
————————————————————–
如你所見,Nmap 提供了詳盡的資料,上例推測系統正執行中的作業系統為何。筆者乃是在 Apple Airport Extreme 路由器上執行上述掃瞄。除此之外,Nmap 還告訴我這個裝置只跳一個網路節點就連到了,以及裝置的 MAC 位址、NIC 的製造商、開啟的通訊埠,以及花多少時間進行掃瞄等資訊。
下面這個是另一次掃瞄,目標是執行 Ubuntu 9.10 的桌面環境的機器:
——————————————————————
Starting Nmap 5.21 ( http://nmap.org ) at 2010-02-28 00:00 EST
Nmap scan report for 10.0.0.6
Host is up (0.0039s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
MAC Address: 00:17:08:2A:D6:F0 (Hewlett Packard)
Device type: general purpose
Running: Linux 2.6.X
OS details: Linux 2.6.19 – 2.6.31
Network Distance: 1 hop
OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 3.40 seconds
————————————————————-
這裡可以看到系統使用 HP NIC (此乃 HP 工作站主機)、執行 Linux kernel:版本介於 2.6.19 與 2.6.31 之間。有時無法透過 Linux 版本取得確切的作業系統辯識碼。
練習用的主機
上述使用的例子,是用我自已的本地端路由器與工作站之一作為測試 – 因為我有權限掃瞄它們。你可以掃瞄任何主機沒錯,但不建議你一直/多次掃瞄沒有控制權或無權掃瞄的主機。Nmap 的使用者可以測試 scanme.nmap.org 主機 – 只要不作任何居心不良的測試或 Denial of Service (DoS) 攻擊就可以。
有些管理者並不歡迎這些不在預期的掃瞄,所以請詳加考量,限制只掃瞄自有網路上的主機或你有權限掃的那些。也有可能Nmap 進階掃瞄功能的限制會出現在你 ISP 服務條款上,請斟酌使用。
多主機
用 nmap 可以一次掃瞄數台主機。若使用 IP address,則可指定像 10.0.0.1-6 或 10.0.0.0/24 這樣的區段。10.0.0.1-6 會掃瞄 10.0.0.1, 10.0.0.2, 10.0.0.3 至 10.0.0.6 的主機。而 /24 這樣的特殊指定方式則會掃瞄從 10.0.0.0 至 10.0.0.255 整個區段的主機。舉例來說,要掃 10.0.0.1 至 10.0.0.42 的所有主機,知曉它們的作業系統為何,我會用 umap -O 10.0.0.1-42。
如以主機名稱取代 IP address,則是使用空白鍵區隔,像這樣:
nmap -O host1.target.com host2.target.com
檢查開啟的通訊埠
若完全不給 Nmap 任何選項,僅指出要查的主機,會掃瞄出所有開啟的通訊埠,並回報開啟中的那些,以及它們各在上面跑什麼服務。例如,執行 nmap target.hostname.com 可能產出類似如下結果:
———————————————————–
Interesting ports on target.hostname.com (10.0.0.88):
Not shown: 1711 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
3306/tcp open  mysql
Nmap done: 1 IP address (1 host up) scanned in 0.228 seconds
————————————————————–
此處可以看到有三個通訊埠開啟:22, 80 與 3306,分別執行了 SSH, HTTP 與 MySQL。nmap 認識六種狀態:open, closed, filtered, unfiltered, open|filtered 與 closed|filtered。這些狀態不言自明,讀者看 Nmap docs 就能對這些狀態有進一步瞭解。若 Nmap 能夠辯識出執行中的服務,就會回應在 SERVICE 欄位裡。
若還想要更多資訊,在命令列加上一個或兩個 -v 選項可以讓資訊再更詳盡。例如,用 nmap -vv host.target.com 可產生如下資訊:
——————————
Initiating Ping Scan at 11:44
Scanning 10.0.0.28 [1 port]
Completed Ping Scan at 11:44, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 11:44
Completed Parallel DNS resolution of 1 host. at 11:44, 0.00s elapsed
Initiating Connect Scan at 11:44
Scanning host.target.com (10.0.0.28) [1714 ports]
Discovered open port 22/tcp on 10.0.0.28
Discovered open port 80/tcp on 10.0.0.28
Discovered open port 3306/tcp on 10.0.0.28
Completed Connect Scan at 11:44, 0.08s elapsed (1714 total ports)
Host host.target.com (10.0.0.28) appears to be up … good.
Interesting ports on host.target.com (10.0.0.28):
Not shown: 1711 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
3306/tcp open  mysql
Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.104 seconds
————————————————————–
Nmap 透過冗長選項 (-v) 提供更多一些的資訊。
服務掃瞄
若你真的對主機所執行的服務那麼好奇,還可以試試 -sV 選項。此舉將作稍具侵略性的掃瞄,試著找出指定主機裡所執行之服務的版本,也或許更有助於瞭解它究竟跑的是什麼作業系統。例如,我在測試主機執行了 nmap -sV,得到如下回應:
——————————————————————-
Starting Nmap 5.21 ( http://nmap.org ) at 2010-02-28 00:15 EST
Nmap scan report for test.host.net (XX.XXX.XXX.XX)
Host is up (0.090s latency).
Not shown: 965 closed ports, 33 filtered ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 4.7p1 Debian 8ubuntu1.2 (protocol 2.0)
80/tcp open  http    Apache httpd 2.2.8 ((Ubuntu) PHP/5.2.4-2ubuntu5.10 with Suhosin-Patch)
Service Info: OS: Linux
Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.43 seconds
————————————————————–
如你所見,Nmap 可以採集封包的指紋,然後辯識執行於 SSH 與 HTTP 通訊埠上的軟體版本。這裡可以看到,系統已被辯識出為 Ubuntu 的機器,上面跑的是 Apache 2.2.8 與 OpenSSH 4.7pl。這些資訊在很多情況下會有用。迅速的 Nmap 掃瞄可以辯識出執行中的系統是否未上 patch,進而瞭解它是否有已知的漏洞可以進行破壞。
我的網路裡有哪些主機
是否不確定你的網路裡有哪些主機在跑 ? 試試 nmap -sP,這個指令會執行 ping 指令掃瞄指定網路。例如 nmap -sP 10.0.0.0/24 將掃瞄 256 台機主機,從 10.0.0.0 至  10.0.0.255,看它們是不是正在運作中,然後再作回報。你也可以用指定區段的方式來作,像是 nmap -sP 10.0.0.1-15。
Zenmap
如果這些指令對你來說都太麻煩了,Nmap 還提供圖形使用者介面 (GUI) 讓使用者用以建置與執行命令。這個套件叫 Zenmap,你可以在這個 GUI 套件下指定目標、執行掃瞄、顯示結果,甚至儲存與對另一次的結果相互比較。
當你開啟 Zenmap 時,可以給定一個掃瞄目標,在再 profile 中選擇一個給這台目標主機掃,包括基本的 ping 掃瞄、快速掃瞄,較強化的掃瞄 – 包括 UDP 服務諸如此類的。Zenmap GUI 是熟悉 Nmap 的好方法,但最好還是要瞭解從命令列上如何使用 Nmap – 如果你的工作常要用到它的話。
未來,我們將會介紹更深入的 Nmap 使用方式,以及你可能會希望 Nmap 為你作的特定任務。希望本篇概述可讓讀者對 Nmap 能作的事有良性的認知,並有助於你開始使用 Nmap。
原文出處:

Advertisement

尚無回應

(Required)
(Required, will not be published)