端口掃描工具
此條目需要補充更多來源。 (2015年1月25日) |
端口掃描工具(Port Scanner)指用於探測服務器或主機開放端口情況的工具。常被計算機管理員用於確認安全策略,同時被攻擊者用於識別目標主機上的可運作的網絡服務。
端口掃描定義是客戶端向一定範圍的服務器端口發送對應請求,以此確認可使用的端口。雖然其本身並不是惡意的網絡活動,但也是網絡攻擊者探測目標主機服務,以利用該服務的已知漏洞的重要手段。[1]端口掃描的主要用途仍然只是確認遠程機器某個服務的可用性。
掃描多個主機以獲取特定的某個端口被稱為端口清掃(Portsweep),以此獲取特定的服務。例如,基於SQL服務的計算機蠕蟲就會清掃大量主機的同一端口以在 1433 端口上建立TCP連接。[2]
類型
[編輯]TCP掃描
[編輯]最簡單的端口掃描工具使用操作系統原生的網絡功能,且通常作為SYN掃描的替代選項。Nmap將這種模式稱為連接掃描,因為使用了類似Unix系統的connect()
命令。如果該端口是開放的,操作系統就能完成TCP三次握手,然後端口掃描工具會立即關閉剛建立的該連接,防止拒絕服務攻擊。[3]這種掃描模式的優勢是用戶無需特殊權限。但使用操作系統原生網絡功能不能實現底層控制,因此這種掃描方式並不流行。並且TCP掃描很容易被發現,尤其作為端口清掃的手段:這些服務會記錄發送者的IP地址,入侵檢測系統可能觸發警報。
SYN掃描
[編輯]SYN掃描是另一種TCP掃描。端口掃描工具不使用操作系統原生網絡功能,而是自行生成、發送IP數據包,並監控其回應。這種掃描模式被稱為「半開放掃描」,因為它從不建立完整的TCP連接。端口掃描工具生成一個SYN包,如果目標端口開放,則會返回SYN-ACK包。掃描端回應一個RST包,然後在握手完成前關閉連接。[3]如果端口關閉了但未使用過濾,目標端口應該會持續返回RST包。
這種粗略的網絡利用方式有幾個優點:給掃描工具全權控制數據包發送和等待回應時長的權力,允許更詳細的回應分析。關於哪一種對目標主機的掃描方式更不具備入侵性存在一些爭議,但SYN掃描的優勢是從不會建立完整的連接。然而,RST包可能導致網絡堵塞,尤其是一些簡單如打印機之類的網絡設備。
UDP掃描
[編輯]UDP掃描也是可能的,儘管存在一些技術挑戰。 UDP是無連接協議,因此沒有等同於TCP SYN的數據包。但是,如果將UDP數據包發送到未打開的端口,目標系統將響應ICMP端口不可達的消息。大多數UDP端口掃描器都使用這種掃描方法,並使用缺少響應來推斷端口是否打開。但是,如果端口被防火牆阻止,則此方法將錯誤地報告端口已打開。如果端口不可達消息被阻塞,則所有端口將顯示為打開。這種方法也受到ICMP速率限制的影響。
另一種方法是發送特定於應用程序的UDP數據包,希望生成應用層響應。例如,如果DNS服務器存在,向端口53發送DNS查詢將導致響應。這種方法在識別開放端口方面更加可靠。然而,它僅限於應用程序特定的探測包可用時的端口掃描。一些工具(例如,NMAP)通常具有少於20個UDP服務的探針,而一些商業工具(例如,NESUS)有多達70個。在某些情況下,服務能在端口上被偵聽,但被配置為不響應特定的探測包.
ACK掃描
[編輯]ACK掃描是比較不常見的掃描類型之一,因為它不能確切地確定端口是打開的還是關閉的,但是可以確定端口是過濾的還是未過濾的。當嘗試探測防火牆及其規則集的存在性時,這尤其有用。簡單的包過濾將允許建立連接(帶有ACK位集的包),而更複雜的有狀態防火牆可能不允許。
窗口掃描
[編輯]由於其過時的特性,窗口掃描在確定端口是否打開或關閉時是相當不可靠的,已經很少使用。它生成與ACK掃描相同的數據包,在返回時檢查數據包的窗口字段是否被修改。當數據包到達目標時,如果端口是打開的,則設計缺陷試圖為數據包創建一個窗口大小,在數據包返回發送方之前用1標記數據包的窗口字段。在不支持這種實現的系統中使用這種掃描技術,窗口字段返回0,將打開的端口標記為關閉。
FIN掃描
[編輯]由於SYN掃描不夠隱蔽,防火牆通常會阻止SYN形式的數據包。FIN報文無需修改即可繞過防火牆。關閉的端口會用適當的RST包回復FIN包,而打開的端口則會忽略。這是TCP的一種典型行為,並在某些方面是不可避免的。