網路安全領域中,確認目標系統的開放服務和潛在漏洞至關重要,TCP 連線的建立和埠掃描技術正是實作這一點的關鍵。TCP 三次握手是建立可靠連線的基礎,它確保通訊雙方都準備好進行資料傳輸。埠掃描則用於識別目標系統上開放的埠,進而瞭解其提供的服務。Nmap 作為一款功能強大的網路掃描工具,提供多種掃描模式,例如 TCP Connect 掃描、TCP SYN 掃描和 UDP 掃描,可以根據不同需求選擇合適的模式。此外,Nmap 還支援版本偵測、作業系統偵測等功能,可以取得更詳細的目標系統資訊。Nmap 的指令碼引擎則提供了更高的靈活性,允許使用者自定義指令碼以滿足特定需求,例如漏洞掃描、服務探測等。瞭解這些技術和工具對於網路安全專業人員至關重要,可以幫助他們更有效地評估和防範網路安全風險。

TCP 連線與埠掃描:Nmap 工具的深度應用

在網路安全中,TCP 連線建立及埠掃描是不可或缺的技術。這些技術不僅能幫助我們瞭解目標系統的開放服務,還能揭示潛在的安全漏洞。本文將探討 TCP 連線的三次握手過程、埠狀態及 Nmap 工具的應用,並透過具體案例來說明這些技術的實際操作。

TCP 連線:三次握手

TCP(傳輸控制協定)連線建立過程通常稱為三次握手。這個過程確保了雙方都準備好進行資料傳輸。以下是三次握手的詳細步驟:

  1. 客戶端傳送 SYN 包:當客戶端希望與伺服器建立連線時,會傳送一個 SYN(同步序列編號)包。這個包包含一個隨機生成的序列號和其他必要的資訊,如視窗大小和最大段大小。

  2. 伺服器回應 SYN/ACK 包:收到 SYN 包後,伺服器會回應一個 SYN/ACK 包。這個包中的 ACK(確認)標誌位被設定為 1,表示確認收到客戶端的 SYN 包。此外,伺服器還會生成一個自己的序列號。

  3. 客戶端傳送 ACK 包:客戶端收到 SYN/ACK 包後,會回應一個 ACK 包,完成三次握手。這時,雙方都已準備好進行資料傳輸。

埠狀態

在進行埠掃描時,我們通常會遇到以下幾種埠狀態:

  • 開放(Open):如果掃描工具能夠成功建立與目標埠的連線,則該埠被標記為開放。例如,TCP 埠完成三次握手後被報告為開放。
  • 關閉(Closed):如果掃描工具嘗試連線某個埠並收到 RST 包(重置包),則該埠被標記為關閉。
  • 過濾(Filtered):如果沒有任何回應(包括 RST 包),則該埠被標記為過濾。這通常是因為防火牆或其他安全裝置阻擋了連線嘗試。

Nmap 工具:強大的網路掃描工具

Network Mapper(Nmap)是一個功能強大的網路掃描工具,能夠進行主機發現、埠掃描、服務和版本檢測、防火牆規避等操作。以下是 Nmap 的一些主要功能和常用引數:

常用引數

  • -sT:進行 TCP connect 掃描。
  • -sS:進行 TCP SYN 掃描(預設掃描模式)。
  • -T:設定掃描速度和噪音級別,有五種範本可選:偵查、偷偷、禮貌、正常、激進。
  • -Pn:跳過 Ping 測試,直接開始掃描。
  • -sU:進行 UDP 掃描。
  • -sV:檢測開放埠上的服務和版本。
  • -O:進行作業系統檢測。
  • -A:啟用激進掃描模式,包括 OS 檢測、版本掃描和指令碼掃描。
  • -p:指定要掃描的埠或埠範圍。

探索 Nmap 的詳細功能

要檢視 Nmap 支援的所有引數,可以在終端機中執行 nmap 命令。這將顯示所有可用的引數及其說明。以下是一些例子:

nmap -p 80 127.0.0.1      # 掃描 localhost 的 80 埠
nmap -p 1-100 127.0.0.1   # 掃描 localhost 的 1 到 100 埠
nmap -p- 127.0.0.1        # 掃描 localhost 的所有埠

必要性與應用情境

  1. 主機發現(Host Discovery):Nmap 可以透過 Ping 測試來發現網路上的活躍主機。
  2. 服務和版本檢測(Service and Version Detection):Nmap 能夠檢測開放埠上的服務和版本資訊,幫助我們瞭解目標系統的構成。
  3. 防火牆規避(Firewall Evasion):Nmap 提供多種掃描模式來規避防火牆和入侵檢測系統。

TCP Connect 掃描

TCP Connect 掃描是 Nmap 中的一種常見掃描模式。它透過完成 TCP 三次握手來確定目標埠是否開放。

nmap -sT -p 80 127.0.0.1

內容解密:

這段程式碼使用 Nmap 執行 TCP Connect 掃描,目標是 localhost 的 80 號埠。-sT 標誌指定使用 TCP Connect 模式;-p 標誌指定要掃描的埠。當 Nmap 收到目標回應時,它會完成三次握手並報告該埠是否開放。

TCP SYN 掃描

TCP SYN 探測是一種更快速且更隱秘的掃描方式,因為它不完成整個三次握手過程。

nmap -sS -p 80 127.0.0.1

內容解密:

這段程式碼使用 Nmap 執行 TCP SYN 探測,目標也是 localhost 的 80 號埠。-sS 標誌指定使用 SYN 探測模式;-p 標誌指定要掃描的埠。由於 SYN 探測不完成整個三次握手過程,它比 TCP Connect 探測更快速且更難被防火牆檢測到。

UDP 探測

UDP 是一種無狀態協定,因此 UDP 探測相對不穩定但速度更快。

nmap -sU -p 53 127.0.0.1

內容解密:

這段程式碼使用 Nmap 執行 UDP 探測,目標是 localhost 的 DNS (53 號)埠。-sU 標誌指定使用 UDP 模式;-p 標誌指定要掃描的 UDP 點數。由於 UDP 無狀態特性, UPD 檢查更靈活, 不受同步/序列號限制, 不完整且容易被防火牆阻擋,但快速且低風險。

拓展與未來趨勢

隨著網路安全技術的不斷進步,Nmap 和其他類別似工具也在不斷更新和改進。未來可能會看到更多根據人工智慧和機器學習技術的自動化漏洞檢測工具出現,這些工具將能夠更快速、更精確地發現網路中的潛在威脅。

總結來說,TCP 三次握手和 Nmap 工具是網路安全領域中不可或缺的技術。透過深入瞭解這些技術及其應用場景,玄貓認為我們可以更有效地保護我們的網路系統免受各種攻擊。

欄位題註記清除前進步驟

  • 全面移除:其他標記字眼
  • 清除圖片連結及圖片說明
  • 裝飾文字樣式語法全面移除
  • 檢視全文規範性修改

Port 掃描與版本偵測

Nmap 版本偵測

Nmap 這個強大的網路掃描工具,不僅能提供開放、關閉或過濾的埠狀態,還能識別常見服務與其對應的埠號。然而,當我們進行埠掃描時,如何確認某個特定埠正在執行的服務?以 HTTP 為例,如果我們想確認埠 80 是否運作在一個網頁伺服器上,我們可以手動連線該 IP 地址並進行檢查。不過,這種方式過於繁瑣且浪費時間。為何不依賴 Nmap 提供的版本偵測功能來自動取得這些資訊呢?

為了獲得更多有關開放埠上的服務和程式資訊,Nmap 提供了版本偵測功能。這項功能利用多個探測方法(probes),這些探測方法在 nmap-services-probes 組態檔案中定義。如果你想檢視目前的探測方法集合,可以在 Kali Linux 的 /usr/share/nmap/ 目錄下找到 nmap-services-probes 檔案。

當 Nmap 執行版本偵測時,它會使用目標埠的探測組態,然後分析回應。這些回應會與已知的回應列表進行比對,以識別各種服務、應用程式及其版本。在這個過程中,Nmap 會識別以下資訊:

  • 服務協定:Nmap 會嘗試識別開放埠上執行的服務,例如 SMB、HTTP 等。
  • 應用程式名稱:Nmap 會嘗試識別在該埠上執行的應用程式,例如 Active Directory、FTP 等。
  • 版本號:Nmap 會探測執行中的應用程式版本號,讓你能夠快速檢視該特定應用程式及其版本的潛在漏洞。
  • 裝置型別:Nmap 會嘗試識別目標裝置是列印伺服器還是路由器等。
  • 作業系統:Nmap 會報告所使用的作業系統及其版本。

以下是使用 Nmap 的 -sV 選項執行版本偵測後的一些範例輸出:

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 b3:0d:36:6e:98:09:ee:14:5d:b5:f6:96:f5:a4:a2:a9 (RSA)
|   256 bf:b9:e8:e9:f8:a9:75:1a:43:a7:b1:a5:0f:d1:a6:e3 (ECDSA)
|_  256 f8:ef:e7:e2:e8:a2:a9:a4:e5:e1:c7:a9:e9:f8:1b:d6 (ED25519)
80/tcp   open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
443/tcp  open  ssl/http Apache httpd (SSL-enabled) (OpenSSL)
|_ssl-date: TLS randomness does not represent time

段落標題:內容解密

上述範例輸出顯示了埠、狀態、服務以及相關版本資訊。以 HTTP 作為例子,當目標主機開放了埠 80,並且該埠上的服務被識別為 Apache HTTP Server 的某一特定版本時,這樣的資訊對於後續的安全評估和漏洞分析非常有價值。

深度掃描:更多細節

除了 -sV(版本偵測)選項外,還有一個 -A(深度掃描)選項可以提供更多深入資訊。-A 標誌通常會被廣泛使用,因為它會啟動多種增強掃描功能如作業系統偵測、服務版本偵測、指紋比對等。

以下是使用 -A 標誌執行掃描後的一些範例輸出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-01 10:30 UTC
Nmap scan report for example.com (192.168.1.1)
Host is up (0.0016s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE    VERSION
22/tcp   open   ssh       OpenSSH 7.6p1 Ubuntu (protocol 2.0)
| ssh-hostkey:
|   2048 b3:0d:36:6e:98:09:ee:14:5d:b5:f6:96:f5:a4:a2:a9 (RSA)
|   ...
80/tcp   open   http      Apache httpd
|_http-server-header:
443/tcp open   ssl/http   Apache httpd (SSL-enabled)
Device type:
Device details:
Running OS:
OS details:
Uptime guess:
Network Distance:
Service Info:

TRACEROUTE
HOP RTT     ADDRESS
...
OS and Service detection performed.
Please report any incorrect results at https://nmap.org/submit/.

Nmap done at Sun Oct ....

段落標題:內容解密

從上述輸出可以看出,-A 標誌提供了更詳細的資訊,包括主機的作業系統和裝置型別等。這些細節對於後續的安全評估和漏洞分析非常重要。

Ping 掃描

除了使用 Nmap 做埠掃描之外,我們也可以利用它進行快速發現線上主機。使用簡單的 Ping 掃描(-sP 標誌)以及指定子網域(subnet),Nmap 能夠快速報告所有線上的主機:

Starting Nmap ...
Host is up (latency ...).
Nmap scan report for ...
Host is up ...
...

段落標題:內容解密

Ping 掃描能夠幫助我們快速發現網路中的所有線上主機,並對其進行更深入的掃描和分析。

Nmap 指令碼引擎

除了基本的埠掃描功能外,Nmap 藉助其指令碼引擎(Scripting Engine)提供了更多能力。指令碼引擎使用 Lua 作為程式語言,讓我們可以建立自定義指令碼。預設情況下,Nmap 已經包含許多分類別指令碼:

  • Safe:不影響目標的指令碼
  • Intrusive:可能影響目標的指令碼
  • Vuln:用於漏洞掃描
  • Exploit:嘗試利用漏洞
  • Auth:企圖繞過執行中的服務身份驗證
  • Brute:暴力破解執行中的服務憑證
  • Discovery:查詢執行中的服務以取得更多網路資訊

要使用指令碼來執行掃描時,可以使用以下命令引數:

--script=<SCRIPT-NAME>

例如:

--script=<SCRIPT-NAME1>,<SCRIPT-NAME2>

有些指令碼可能需要額外引數:

--script-help <SCRIPT-NAME>

段落標題:內容解密

指令碼引擎可以顯著提升 Nmap 的功能性和靈活性。透過利用這些指令碼,我們可以根據具體需求進行高度自定義化的掃描。

漏洞掃描

漏洞掃描是道德駭客攻擊中的重要環節之一。它旨在發現可能被利用以獲得初始存取許可權、提升許可權、遠端執行程式碼等潛在漏洞。

雖然市面上有許多漏洞掃描工具,但許多都價格昂貴且針對企業市場設計。在此篇章中我們將專注於 Kali Linux 中可執行的開源漏洞掃描工具。

Nmap 漏洞掃描

在使用 Nmap 測試漏洞時有兩個流行的指令碼可供選擇:一個是 vulners 指令碼(預設包含),另一個是 vulscan 指令碼(需手動安裝)。

vulners 指令碼

vulners 指令碼可以幫助我們高亮顯示已知漏洞及其相關劫持技巧:

nmap -sV --script=vulners TARGET

vulscan 指令碼安裝與使用

要安裝並使用 vulscan 指令碼需要以下步驟:

git clone https://github.com/scipag/vulscan scipag_vulscan
sudo ln -s `pwd`/scipag_vulscan /usr/share/nmap/scripts/vulscan

安裝完成後即可在 /usr/share/nmap/scripts/ 中看到 vulscan 指令碼檔案。此外 vulscan 提供了一些額外功能來自定義資料函式庫:

--script-args vulscandb=your_own_db

段落標題:內容解密

兩者都為 I.T 安全人員提供了強大且便捷的資源來找出系統中潛在的安全漏洞。