淺談埠掃描原理

技术人的菜园子發表於2024-04-23

一、埠掃描簡介

埠掃描,顧名思義,就是逐個對一段埠或指定的埠進行掃描。透過掃描結果可以知道一臺計算機上都提供了哪些服務,然後就可以透過所提供的這些服務的己知漏洞就可進行攻擊。其原理是當一個主機向遠端一個伺服器的某一個埠提出建立一個連線的請求,如果對方有此項服務,就會應答,如果對方未安裝此項服務時,即使你向相應的埠發出請求,對方仍無應答,利用這個原理,如果對所有熟知埠或自己選定的某個範圍內的熟知埠分別建立連線,並記錄下遠端伺服器所給予的應答,透過檢視一記錄就可以知道目標伺服器上都安裝了哪些服務,這就是埠掃描,透過埠掃描,就可以蒐集到很多關於目標主機的各種很有參考價值的資訊。例如,對方是否提供FTP服務、WWW服務或其它服務。

二、埠狀態

Nmap探測一個埠時可能得到以下六種埠狀態:

open:埠是開放的。
closed:埠是關閉的。
filtered:埠被防火牆、IDS、IPS等遮蔽,無法確定其狀態。
unfiltered:埠沒有被遮蔽,但其是否開放需要進一步確定。
open|filtered:埠是開放的或被遮蔽。
closed|filtered :埠是關閉的或被遮蔽。

三、埠掃描方式

以下是三種常見的埠掃描方式:

1. 全連線掃描

全連線掃描是最傳統且最直接的方法。它完全模擬客戶端發起TCP連線的過程,透過執行完整的三次握手來確定埠是否開放。掃描器會呼叫作業系統級別的connect()函式來嘗試與目標主機的某個埠建立連線。如果埠開放並監聽連線,目標主機將回應一個ACK確認資料包,從而建立起連線。這種方式相對容易被防火牆和IDS(入侵檢測系統)捕獲。

2. 半連線掃描

半連線掃描,又稱SYN掃描,是為了減少痕跡和避免引起警報而設計的更隱蔽的掃描方式。掃描器只發起TCP連線的第一次握手,即傳送一個SYN資料包。如果目標埠開放,它會回應一個SYN+ACK資料包。這時,掃描器並不會完成第三次握手(即不傳送ACK),而是傳送一個RST(復位)資料包來終止連線。這樣就不需要建立完整的連線,降低了被檢測的風險。

3. 秘密掃描

“秘密掃描”通常指的是那些旨在最大程度地降低被目標系統察覺的掃描技術。除了SYN掃描之外,還有一些更隱蔽的掃描方式,例如FIN掃描、Xmas Tree掃描、Null掃描等,這些掃描方式透過傳送非標準的TCP資料包(如只有FIN標誌位的包或多個標誌位同時置位的包)來探測埠狀態,基於目標主機對這些異常資料包的不同響應來判斷埠是否開放。這些掃描方式的目的在於儘量減少在目標主機上產生的日誌資訊,以及避免觸發防火牆規則或入侵檢測系統的警報。

四、常用埠掃描方法及原理

1、TCP CONNECT SCAN

原理很簡單,與目標埠建立3次握手,如果成功建立則為open,收到RST則為close,此方法為全連線掃描。

2、TCP SYN SCAN

也稱為TCP半連線掃描,只傳送三次握手的第一次SYN報文段,如果收到ACK+SYN則為open,收到RST則為close,這種好處是不必等待三次握手完全完成,速度快且不容易被防火牆記錄進日誌。

探測結果及狀態如下:

3、TCP FIN/Xmas Tree/NULL SCAN

這幾種探測方式原理相同,只是傳送包的標誌位不同。

FIN掃描:FIN標誌位為1,其餘標誌位為0。

Xmas Tree掃描:也被稱為Christmas Tree(聖誕樹)掃描,它會設定FIN、URG和PSH標誌位為1,其餘標誌為0。

NULL掃描:所有標誌位都被設定為0。

根據規定,理論上不會將不設定SYN,RST,或者ACK位的報文傳送到開放埠,如果您確實收到了,丟棄該報文。當埠關閉時,任何不包含SYN,RST,或者ACK位的報文會導致一個RST返回。而當埠開放時,應該沒有任何響應。

探測結果及狀態如下:

4、TCP ACK SCAN

當傳送給對方一個含有 ACK 標誌的TCP報文的時候,接收方會認為發生了錯誤(因為tcp建立連線時第一次握手報文不含ACK標誌),接收方會返回含有RST標誌的報文,無論埠是開放或者關閉。所以,不能使用TCP ACK掃描來確定埠是否開放或者關閉。但是可以利用它來掃描防火牆的配置,用它來發現防火牆規則,確定它們是有狀態的還是無狀態的,哪些埠是被過濾的。

向服務端傳送一個帶有 ACK 標識的資料包,如果收到帶有 RST 標識的響應,則說明服務端存在狀態防火牆。當沒有收到任何響應或者收到ICMP錯誤響應時表明該埠處於filtered狀態。

5、TCP WINDOW SCAN

TCP 視窗掃描的流程類似於 ACK 掃描,都是向服務端傳送帶有 ACK 標識的資料包,不同的在於 TCP 視窗掃描會檢查收到的 RST 資料包中的視窗大小。

如果返回RST資料包說明沒有防火牆過濾,埠開放或關閉根據RST包中的視窗大小判斷。

如果 RST 資料包中的視窗大小不為零,則說明目標埠是開放的。如果 RST 資料包中的視窗大小為零,則說明目標埠處於關閉狀態。

探測結果及狀態如下:

6、UDP SCAN

UDP掃描比較簡單,一般如果返回ICMP port unreachable說明埠是關閉的,而如果沒有回應或有回應(有些UDP服務是有回應的但不常見)則認為是open,但由於UDP的不可靠性,無法判斷報文段是丟了還是沒有回應,所以一般掃描器會傳送多次,然後根據結果再判斷。這也是為什麼UDP掃描這麼慢的原因。

雖然因特網上最流行的服務執行在TCP協議上,但UDP服務被廣泛部署。 DNS,SNMP和DHCP(註冊埠53,161 / 162和67/68)是最常見的三種。 由於UDP掃描通常比TCP更慢且更困難,因此某些安全稽核員會忽略這些埠。 這是一個錯誤,因為可利用的UDP服務非常普遍,攻擊者肯定不會忽略整個協議。

UDP掃描透過向每個目標埠傳送UDP資料包來工作。 對於大多數埠,此資料包將為空(無有效負載),但對於一些更常見的埠,將傳送特定於協議的有效負載。 根據響應或缺少響應,埠被分配給四種狀態之一,如下表所示:

相關文章