🗺️ 資安考證地圖

網路掃描與 Nmap:先把自家的每一扇門推過一遍

攻擊者進門前會先掃描找入口。負責盤點網路的人,要在取得授權後用同樣的方法先掃過自己,知道哪些服務開著、哪些根本不該開。

open/closed/filtered 怎麼判讀 用三向交握看懂 Connect、SYN、UDP 掃描 授權、速度與怎麼發現被掃描

💡 先搞懂問題:你真的知道自家網路開了什麼嗎?

一間公司的網路上少則幾十、多則上千台設備:伺服器、交換器、印表機、NAS、監視器,還有同事自己接上的無線基地台。資產清冊記錄的是「應該有什麼」,但網路上實際開著哪些服務,常常沒有人說得準。測試完忘了關的管理頁面、廠商維修時打開沒關的遠端桌面、出廠就預設開著的 Telnet,都可能躺在那裡好幾年。

攻擊者不會看你的清冊。他們會直接對網路送出探測,看誰有回應、回應了什麼;入侵內網之後,第一件事通常也是掃描周圍還有哪些主機和服務。所以防守方要在取得授權後,用同樣的方法先掃一遍自己,把「實際開著的」和「應該開著的」互相對照,兩者的差異就是要處理的曝露面(attack surface)。這個動作叫網路掃描(network scanning),最常用的開源工具是 Nmap(Network Mapper)。

一個比喻:新任管理員巡樓推門

想像你剛接下一棟辦公大樓的管理工作。管委會給了你一份書面同意書和一串鑰匙,請你把每層樓的每扇門都推推看,記下哪些門後有人在辦公。推門時會遇到三種情況:有人來應門;門後傳來一句「這裡沒人」;或是門口站著警衛把你攔下,你什麼回音都聽不到。

右邊這條走廊有三扇門,點點看每一扇推下去的反應。

走廊=一台主機 192.0.2.20 應門 → open:有服務在聽 回說沒人 → closed:主機在,沒服務 沒回音 → filtered:被擋,無法判斷
點任一扇門,看推下去會發生什麼。
回到資安,剛才的比喻對應的是:大樓是一個網段,每條走廊是一台主機(一個 IP 位址),門牌號碼是連接埠(port,0 到 65535,同一台主機靠它區分不同服務,例如 22 通常是 SSH、443 通常是 HTTPS),門後的房間是正在監聽的服務。推門就是送出探測封包:有人應門對應 open,回一句「沒人」對應 closed,被警衛攔下、聽不到回音對應 filtered(探測被防火牆等設備過濾掉)。管委會的同意書,就是掃描前一定要拿到的書面授權。
這個比喻容易讓人誤會的地方
  • 現實中推門幾乎不會把門推壞,但網路上有些老舊設備、工控控制器經不起大量探測,可能變慢甚至當機。所以掃描要控制速度與範圍,工控(OT)環境更要優先改用被動監聽。
  • 「沒有回音」不代表門後沒有房間。探測可能在半路就被防火牆丟掉,Nmap 只能說它無法判斷埠到底開沒開,所以才歸為 filtered,而不是 closed。
  • 管理員手上有同意書。沒有授權就去推別人家的門,即使沒進去,也可能觸法、違反網路服務合約,或被對方當成攻擊前兆處理。

🎮 互動實驗室

五個實驗室由淺入深:先看封包怎麼往返,再練判讀、記選項,最後處理一份盤點結果,並感受掃描速度的取捨。所有畫面都是頁內模擬,不會連到任何真實系統。

1三向交握播放器:三種掃描各收到什麼回應

正常建立一條 TCP 連線要三步,稱為三向交握(three-way handshake):想連線的一方送 SYN(我想連線),對方若有服務在聽就回 SYN/ACK(好,我也準備好了),發起方再送 ACK(收到)。掃描就是利用「對方怎麼回應第一個探測」來判斷埠的狀態。選一種掃描方式和目標埠的真實狀態,按「下一步」一個封包一個封包看。

掃描方式
目標埠實際上
掃描端 192.0.2.10 目標主機 TCP 22 按「下一步」開始
還沒送出任何封包。
目標上的服務看到—
防火牆/IDS 看到—
選好掃描方式與埠的狀態後,按「下一步」,封包會一個一個在兩條時間線之間移動。

2埠狀態判讀:看回應,下判定

Nmap 回報的不是「埠開沒開」這麼簡單的是非題,而是它根據回應能確定到什麼程度。下面每一題描述一次探測和收到的回應,請你替 Nmap 下判定。

第 1 題
每按一個判定,下方會說明這個回應代表什麼、為什麼 Nmap 只能判到這個程度。

3選項配對:Nmap 常見選項 ↔ 意義

先點上排一個選項,再點下方你認為對應的意義。配對正確會固定下來並變成綠色。這裡只練「選項代表什麼」,不組合成完整指令。

還沒選任何選項。

4盤點結果處置:哪些服務不該開?

以下是一份虛構的內網盤點結果。掃描已取得資訊主管的書面授權,時段是週六 22:00 到 24:00,事先通知了監控中心;掃描從員工網段的一台盤點工作站發起。請把每一筆發現和資產清冊對照,選出最合適的處置。

每一列左邊是清冊上登記的用途,右邊是掃描實際看到的服務。兩者對不上的地方,就是要處理的曝露面。

5掃描速度的取捨:快、被發現、設備吃不消

Nmap 用時間範本 -T0 到 -T5 控制探測的間隔與同時送出的數量。拉動滑桿、改變掃描的埠數與目標類型,看估計時間、被 IDS 注意到的可能性,以及目標設備的負擔怎麼變。(數值為教學示意,不是實測)

埠數
目標
一分鐘內送出的探測(示意) 0 秒 60 秒
估計耗時(單台主機)—
被 IDS 注意到的可能性
目標設備負擔
漏判(逾時誤判)風險

📘 原理補完:把推門接回封包

一、防守方的掃描是一套流程,不是一個指令

比喻裡的管理員先拿到同意書才巡樓,真實的掃描也一樣:授權、範圍與時段在前,送出封包在中間,對照清冊與處置在後。少了前段,掃描可能被當成攻擊、打斷業務;少了後段,掃完的報告只會躺在資料夾裡。點下圖每個步驟看它要回答的問題。

點任一步驟看說明。前三步是準備,中間三步是實際掃描,最後兩步把結果變成改善。

授權文件至少要寫清楚:誰核准、目的、可以掃的網段與排除清單(例如不能碰的產線設備或第三方託管主機)、允許的時段、使用的工具與強度、聯絡窗口與出事時的停止條件。掃描前通知監控中心(SOC),他們才能把這段期間的告警對上已核准的作業,而不是誤判成攻擊,或反過來把真正的攻擊當成「應該是在做盤點」。雲端或託管的主機還要看服務商的規範,有些需要事先申請。

二、主機探索:先找出誰在線上

一個 /24 網段有 256 個位址,逐一掃 1000 個埠很費時,所以 Nmap 預設會先做主機探索(host discovery),只對有回應的主機掃埠。依官方文件,有特權的使用者跨網段探索時,預設會送出 ICMP Echo 請求、對 443 埠的 TCP SYN、對 80 埠的 TCP ACK 與 ICMP 時間戳記請求,任何一個有回應就算存活;目標在同一個乙太網段時則改用 ARP 詢問。切換下圖看不同情況。

兩個相關選項常被搞混。-sn 是「只做主機探索、不掃埠」,適合先快速了解網段裡有哪些設備;-Pn 則相反,是「跳過主機探索」,把每個指定的位址都當成存活直接掃埠。當目標的防火牆擋掉 ping 之類的探測,預設探索會誤判它不在線上而漏掃,這時才需要 -Pn,代價是對大量不存在的位址也白白送出探測,時間會拉長很多。

三、連接埠的狀態:Nmap 其實有六種說法

比喻只講了三種反應,Nmap 官方定義了六種狀態。後三種都代表「Nmap 無法完全確定」,這不是工具不夠聰明,而是回應本身不足以區分。下圖整理 TCP 與 UDP 掃描時,每種回應會被判成什麼,點選或切換看說明。

點任一列看這種回應的意思。
狀態官方意義(白話)常在什麼情況出現
open有應用程式正在這個埠接受 TCP 連線或 UDP 資料。SYN 掃描收到 SYN/ACK;UDP 收到服務回應。是盤點的重點,也是攻擊者要找的入口。
closed探測到得了這個埠、主機也有回應,但沒有應用程式在聽。收到 RST,或 UDP 收到 ICMP 埠不可達。代表主機存在,而且這個埠目前沒有被防火牆擋。
filtered封包過濾讓探測到不了埠,無法判斷開或關。重送後仍無回應,或收到特定的 ICMP 不可達錯誤。通常是防火牆或路由器的過濾規則。
unfiltered埠到得了,但無法判斷開或關。主要出現在 ACK 掃描(-sA),常用來推測防火牆規則,不是一般盤點會看到的結果。
open|filtered無法判斷是開著還是被過濾。UDP 掃描沒收到任何回應時最常見:可能服務收到了但不回話,也可能探測被丟掉。
closed|filtered無法判斷是關著還是被過濾。只在少數特殊掃描方式(如 IP ID idle 掃描)出現,考試知道有這個狀態即可。

四、Connect、SYN、UDP 三種掃描差在哪

實驗室 1 已經看過封包怎麼走,這裡把差異與原因說清楚。Connect 掃描(-sT)請作業系統用一般的 connect() 建立連線,三向交握完整走完,得到答案後再把連線關掉;它不需要特殊權限,所以是一般使用者權限時的預設。缺點是連線真的建立過,目標上的服務可能記錄一筆「有人連進來又什麼都沒說就走了」,而且比 SYN 掃描多送封包。

SYN 掃描(-sS)由 Nmap 自己組出 SYN 封包送出,需要原始封包(raw packet)權限,也就是系統管理員或 root,有權限時它就是預設。收到 SYN/ACK 就知道埠開著,接著掃描端的作業系統因為沒有發起過這條連線,會自動回一個 RST,交握的第三步從來沒有發生,所以叫半開掃描(half-open)。因為連線沒有完成,一般應用程式通常不會留下連線紀錄;但 IDS 與防火牆看的是封包,大量的 SYN 一樣看得到,「半開比較隱密」只是相對於應用程式日誌而言。

UDP 掃描(-sU)面對的是沒有交握的協定。服務若回了 UDP 資料就是 open;主機回 ICMP 埠不可達(type 3、code 3)就是 closed;什麼都沒收到只能判 open|filtered。它明顯比 TCP 慢,因為許多作業系統會限制 ICMP 錯誤訊息的發送速率(官方文件舉例,Linux 2.4.20 核心每秒只送一個「目的地不可達」),Nmap 只好放慢腳步。官方也提醒,DNS(53)、SNMP(161/162)、DHCP(67/68)等常見服務都跑在 UDP 上,只掃 TCP 就會漏掉一整塊曝露面;UDP 掃描可以和 SYN 掃描在同一次執行中一起做。

比較Connect
-sT
SYN
-sS
UDP
-sU
完成交握是否(回 RST)無交握
需要權限不用管理員/root管理員/root
服務日誌較可能留紀錄通常不會視服務而定
速度較慢快最慢
不確定性低低高(open|filtered)
遇到開著的埠,往返幾個封包? Connect SYN SYN/ACK ACK RST 連線建立過,服務看得到 SYN SYN SYN/ACK RST 第三步沒發生,連線沒建立 UDP 探測 回應 或沒回應 綠色=掃描端送出,灰色=目標

五、門後是什麼:服務版本與作業系統偵測

回到推門比喻,知道門開著還不夠,管理員還想知道門後是會計室還是機房、用的是哪一年的設備。一般埠掃描結果裡的服務名稱(例如 22/tcp 顯示 ssh),其實只是 Nmap 依埠號查表猜的;如果有人把網站開在 22 埠,表上照樣寫 ssh。服務版本偵測(-sV)會對開著的埠送出一系列探測,和它的服務探測資料庫比對回應,辨識出通訊協定、軟體名稱與版本號,有時還能看出主機名稱與裝置類型。作業系統偵測(-O)則是看 TCP/IP 堆疊本身的細微差異,例如初始序號的產生方式、TCP 選項的支援與排列、初始視窗大小,和已知指紋資料庫比對,官方文件指出至少找到一個開著和一個關著的 TCP 埠時準確得多。點下圖三層看它們各自回答什麼。

點任一層看說明。

這兩項的限制也要記住。作業系統偵測是「猜」,會附上可信度,中間有防火牆或負載平衡器時可能猜錯;版本偵測送的探測比單純掃埠多,也比較容易在服務日誌留下紀錄。更重要的是,Nmap 告訴你「這台跑 OpenSSH 某版本」,但不會告訴你這個版本有哪些已知漏洞、風險多高,那是 Nessus、OpenVAS 這類弱點掃描器的工作。Nmap 也有 NSE 腳本引擎(--script)可以對特定服務做進一步檢查,但主要定位仍是找主機、埠與服務。

六、速度與老舊設備:為什麼 OT 不能照掃

時間範本 -T0 到 -T5 依序叫 paranoid、sneaky、polite、normal、aggressive、insane。依官方文件,-T0 與 -T1 主要是為了避開 IDS,逐一送出探測、每個間隔 5 分鐘與 15 秒;-T2 每個探測間隔 0.4 秒,用來減少頻寬與目標負擔;-T3 是預設;-T4 適合快速而穩定的網路;-T5 假設網路極快,願意犧牲一些準確度換速度。越快的範本,逾時等待越短、重送次數越少,遇到反應慢的設備就可能把開著的埠誤判掉。

老舊的印表機、網路設備,尤其是工控環境的 PLC、RTU,網路堆疊往往很陽春,短時間湧進大量探測或看不懂的封包,可能變慢、重開甚至當機。Nmap 官方也承認,確實有寫得不好的應用程式與 TCP/IP 堆疊會被特定掃描弄當。在 OT 場域,停機直接影響生產與人身安全,所以盤點要優先用被動方式:從交換器鏡像埠收流量,分析有哪些設備、用哪些協定、平常誰和誰通訊,建立基線。真的需要主動測試,也只在非生產環境、測試台或維修時段進行,並降低強度、限縮範圍。更多 OT 的特性可參考 物聯網與工控安全。

七、換到防守方的位置:怎麼發現自己被掃描

掃描會留下痕跡,差別只在留在哪裡、有沒有人看。最明顯的特徵是同一個來源在短時間內碰觸大量不同的埠或主機,而且大多數是被拒絕或沒有完成的連線。這些痕跡會出現在防火牆的拒絕紀錄、IDS 的掃描偵測告警、NetFlow 裡大量又短又沒傳資料的連線,以及服務日誌裡「連線後什麼都沒送就中斷」的紀錄。下圖是一份虛構的防火牆日誌,把每筆連線依時間與目的埠畫成點,切換看看掃描長什麼樣子。

慢速掃描能躲過「幾秒內超過多少個埠」這類短時間門檻,但每個探測仍然會被記錄,把日誌集中到 SIEM、用較長的時間窗做關聯,還是有機會抓到。內網裡出現大範圍掃描更要警覺:在 MITRE ATT&CK 中,入侵後掃描內部網路找服務屬於探索(Discovery)戰術,對應的技術是 Network Service Discovery(T1046),常是橫向移動的前兆。例如某台員工電腦突然對整個網段的 445、135 埠發起大量連線,就該當成可能被入侵的主機來調查。防火牆與 IDS 的角色可參考 防火牆、DMZ 與 IDS/IPS,日誌怎麼集中與關聯可參考 日誌管理與 SIEM。

八、容易混淆的地方

✅ 自我檢測

以下是原創情境題,點選答案後會立即顯示對錯與解析。

🎯 重點整理:考前 30 秒

  1. 為什麼掃自己:攻擊者會先掃描找入口,防守方要用同樣方法盤點「實際開著的服務」,和資產清冊對照,找出不該開或不該對所有人開的服務。
  2. 授權在前:掃描前取得書面授權,寫清楚範圍、排除清單、時段、工具強度與聯絡窗口,並通知監控單位;只掃自己有權限的網路。
  3. 埠狀態:SYN/ACK 是 open,RST 是 closed,沒回應或特定 ICMP 不可達是 filtered;UDP 沒回應只能判 open|filtered,ICMP 埠不可達(type 3、code 3)是 closed。
  4. 三種掃描:-sT 完成三向交握、不需特權;-sS 半開,收到 SYN/ACK 後回 RST、需管理員權限、是有權限時的預設;-sU 掃 UDP,慢且不確定性高,但 DNS、SNMP、DHCP 不能漏。
  5. 選項對照:-p 指定埠(-p- 全部 65535 個),-sV 服務版本,-O 作業系統,-Pn 跳過主機探索,-sn 只做主機探索,-T0~-T5 由慢到快。
  6. 速度與 OT:越快越容易被 IDS 發現、越可能壓垮老舊設備、也越可能漏判;OT 環境優先被動監聽,主動測試只在非生產環境或維修時段且降低強度。
  7. 偵測與定位:同一來源短時間碰大量埠是掃描特徵;內網出現大範圍掃描屬 ATT&CK 探索階段,要調查來源主機。Nmap 找埠與服務,Nessus 等弱掃器才比對已知漏洞。