一文了解端口掃描工具——Masscan
一、Masscan介紹
Masscan是一款高速端口掃描工具,具備出色的掃描效率和大規模掃描的能力,支持TCP和UDP協議的掃描,并能夠根據用戶的需求指定多個目標和端口。同時,Masscan還采用了網絡性能優化技術,充分利用操作系統的資源和多核處理能力,實現了卓越的掃描效率和吞吐量。使用Masscan能夠幫助用戶快速了解目標主機的服務和漏洞情況,并提供靈活的輸出格式和報告,方便進一步的分析和處理。
Masscan的特點:
1)高速掃描:Masscan以其高速的掃描能力而著稱,號稱可以在5分鐘內掃描整個互聯網,從一臺機器每秒傳輸1000萬個數據包。
2)繞過限制:Masscan繞過操作系統的網絡堆棧限制,直接發送原始數據包,提高掃描效率,并允許更多的自定義掃描選項。
3)異步發送:通過異步發送數據包,Masscan能夠同時發送多個數據包,實現并發掃描,進一步加快掃描速度。
4)靈活的輸出格式:Masscan支持多種輸出格式,包括文本、XML和JSON,方便結果分析和后續處理。
二、Masscan的技術原理
Masscan是由Robert David Graham開發的網絡端口掃描工具,其技術原理基于異步傳輸和自定義的TCP/IP協議棧。相比傳統的端口掃描工具,Masscan采用并行異步傳輸的方式,充分利用現代計算機的多核處理能力和高速網絡接口,使得掃描速度大幅提升。
2.1 自定義TCP/IP協議棧
為了實現更高的掃描性能,Masscan采用了自定義的TCP/IP協議棧。相比使用操作系統提供的標準套接字接口,自定義協議棧允許更直接的數據包處理和更靈活的配置,Masscan可直接操作底層網絡層,繞過操作系統的限制和缺陷,從而顯著減少了系統調用的開銷,并提高了掃描效率。
為了更好的理解,首先先來復習下正常的TCP三次握手建立鏈接的過程:
圖1 TCP的三路握手
1)客戶端發送SYN標志位為1,seq為x的包給服務器端,發送完畢之后客戶端進入SYN_SEND狀態。
2)服務器端發回確認包ACK應答,回應一個SYN(seq=y)ACK(ack=x+1)報文,發送完畢,服務器端進入SYN_RCVD狀態。
3)客戶端收到道服務器端回應的SYN報文,回應一個ACK(ack=y+1)報文,發送完畢后,客戶端進入ESTABLISHED狀態,當服務器端接收到這個包時,也進入ESTABLISHED狀態,開始數據傳輸。
與傳統的TCP三次握手相比,Masscan自定義TCP握手過程只需要兩個數據包,不建立一個完全的TCP連接,而是首先發送SYN數據包到目標端口,然后等待接收。如果接收到SYN-ACK包,則說明該端口是開放的,此時發送一個RST結束建立過程即可,否則,若目標返回RST,則端口不開放。如下圖所示:
圖2 Masscan半開放TCP掃描流程
同時,Masscan的自定義協議棧使用了特定的數據包格式。為了實現快速掃描,Masscan使用了非常緊湊的數據包格式,減少了數據包的大小和數量,從而減少了網絡傳輸的開銷。這樣可以在單位時間內發送更多的數據包,提高掃描速度。
2.2 異步傳輸
Masscan使用異步傳輸技術,允許同時發送多個數據包而無需等待前一個數據包的響應。這種并發傳輸方式極大地提高了掃描效率,使得Masscan能夠以驚人的速度處理大量目標主機。
一般情況下進行端口掃描,通過傳統的TCP握手過程,需要進行三次握手來建立連接:客戶端發送SYN數據包,服務器返回SYN+ACK數據包,最后客戶端發送ACK數據包。這樣的握手過程相對較慢,一臺機器就算把65536個端口全部用來掃描速度也不快,不適合高速掃描。
Masscan的半開放掃描方式,不需要等待建立鏈接,通過驅動不斷對目標發包,服務器返回包經過驅動被接受,Masscan根據返回包攜帶的信息判斷來源的IP和端口,不需要通過端口到端口建立完整的鏈接,這樣發出請求后,不再阻塞等待,而是接受到包之后,通知另外的程序判斷來源,充分利用計算機多核處理能力和高速網絡接口。
同時Masscan的自定義協議棧允許并行處理多個數據包的響應。使用多線程的方式來實現異步掃描。它將掃描任務劃分為多個子任務,并由多個線程并行執行這些子任務。每個線程負責發送和接收數據包,并在數據包返回時進行處理。通過多線程的方式,Masscan能夠同時發送和處理大量數據包,從而極大地提高了掃描效率。
三、Masscan使用
3.1 高速掃描
Masscan以驚人的速度進行掃描,能夠在數分鐘內掃描大量ip和端口。這使得Masscan成為大規模網絡掃描和漏洞探測的理想選擇。但是需要注意的是,如果發包量要超過20萬/秒,網卡要求10Gbps。除此之外,還需要PF_RING ZC驅動。
通過--rate可以設置掃描速度在虛擬機上測試環境中,不到1Gbps的帶寬條件下,掃描速度為16萬/秒的發包率。
3.2 支持多種協議
Masscan支持多種掃描模式,包括TCP和UDP端口掃描,以及SCTP和ICMP掃描。用戶可以根據需要選擇合適的掃描模式進行目標主機的掃描。
1)掃描TCP端口:
使用 -p 參數指定要掃描的TCP端口范圍,例如:
Masscan -p1-65535 192.168.0.0/16 #掃描192.168.0.0/16網段內所有的TCP端口。
2)掃描UDP端口:
使用 -pU 參數指定要掃描的UDP端口范圍,例如:
Masscan -pU:1-65535 192.168.0.0/16 #掃描192.168.0.0/16網段內所有的UDP端口。
3)掃描SCTP端口:
使用 -pS 參數指定要掃描的SCTP端口范圍,例如:
Masscan -pS:1-65535 192.168.0.0/16 #掃描192.168.0.0/16網段內所有的SCTP端口。
4)掃描ICMP:
使用 -pI 參數指定要掃描的ICMP類型范圍,例如:
Masscan -pI:8-0 192.168.0.0/16 #掃描192.168.0.0/16網段內所有的ICMP類型。
5)掃描ACK、SYN、FIN等標志位:
使用 -pA 參數指定要掃描的標志位類型范圍,例如:
Masscan -pA:SAF 192.168.0.0/16 #掃描192.168.0.0/16網段內所有帶有SYN、ACK和FIN標志位的數據包。
6)掃描指定端口和協議:
可以同時指定多個協議和端口,例如:
Masscan -p80,443,8080 -pU:53 192.168.0.0/16 #同時掃描TCP端口80、443和8080,以及UDP端口53。
Masscan默認情況下只會掃描TCP端口,如果需要掃描其他協議的端口,則需要使用相應的參數進行指定。同時,使用Masscan進行端口掃描可能會對網絡造成一定的負載。
3.3 靈活的配置
Masscan允許用戶靈活地配置掃描參數,包括目標端口范圍、掃描速率、數據包大小等。用戶可以根據具體情況進行優化,以獲得最佳的掃描性能和效果。
常見的掃描參數配置:
1)掃描目標設置:
-iL <file>:從文件中讀取要掃描的目標列表。
<IP range>:直接指定要掃描的IP地址范圍。
2)速率和超時設置:
--rate <packets per second>:設置掃描速率,即每秒發送的數據包數量。
--timeout <time>:設置每個端口的掃描超時時間。
3)IP和端口過濾:
--exclude <IP range>:排除特定的IP地址范圍,不進行掃描。
--excludefile <file>:從文件中讀取要排除的IP地址列表。
--banners:獲取開放端口的服務banner信息。
4)輸出格式
-oX filename :輸出到filename的XML。
-oG filename :輸出到filename在的grepable格式。
-oJ filename :輸出到filename在JSON格式。
5)其他設置:
randomize-hosts:隨機掃描目標IP,增加掃描的隨機性。
--nmap:生成與Nmap相似的輸出格式。
--rotate:使用多個源IP地址進行掃描。
--shard <total shards>/<this shard>:將掃描任務分割為多個片段,同時運行多個Masscan實例
如果不想輸入命令,可以通過創建配置文件,然后用加載配置文件的方式運行。配置文件的內容如下所示:
rate = 100000
output-format = xml
output-status = all
output-filename = scan.xml
ports = 0-65535
range = 0.0.0.0-255.255.255.255
excludefile = exclude.txt
掃描時,用 -c 加載配置文件 即可完成掃描。
3.4 跨平臺支持
Masscan支持在多種操作系統平臺上運行,包括Linux、Windows和macOS等。這使得用戶能夠在不同環境下靈活地使用Masscan進行端口掃描。
四、常用端口掃描工具比較
網絡端口掃描在網絡安全評估和漏洞探測中扮演著關鍵角色。目前常用的掃描工具有Masscan、Nmap和Zmap,它們各自有著獨特的特點和優勢:
特點 | Masscan | Nmap | Zmap |
掃描 速度 | 極快,可以快速掃描整個互聯網 | 快速,但相對Masscan較慢 | 快于Nmap,但仍稍遜于Masscan |
支持的協議 | TCP、UDP、SCTP、ICMP(部分類型) | TCP、UDP、ICMP、SCTP、ARP等多種協議 | TCP、UDP、ICMP |
靈活性和定制性 | 參數選項較少,用于快速掃描 | 提供豐富的參數選項,可定制化掃描任務 | 靈活的參數選項,支持定制化掃描任務 |
平臺支持 | 主要支持Linux和macOS,有Windows版本 | 跨平臺,支持Windows、Linux、macOS等 | 跨平臺,支持Windows、Linux、macOS等 |
社區和支持 | 相對較小的用戶社區 | 龐大的用戶社區和活躍的開發團隊 | 龐大的用戶社區和活躍的開發團隊 |
用途 | 適用于快速互聯網規模的資產發現和漏洞探測 | 適用于深入的目標掃描和漏洞評估 | 適用于大規模的互聯網掃描 |
以上三種掃描工具各有利弊,工具的選取應該結合具體情況決定,通常情況下需要幾種工具結合使用。
Zmap和Masscan采用了無狀態的掃描技術,掃描速度非常可觀。在信息收集的初級階段,可以使用Zmap或Masscan進行目標的情勢了解;
掃描單一端口的情況考慮使用Zmap,而多端口的情況下Masscan則更為快速。
在做完初步了解之后,則應該使用功能更加豐富的Nmap進行進一步的詳細掃描。
五、總結
Masscan是一款在大規模端口掃描領域具有獨特優勢的工具,它的高速和靈活性使得它成為網絡安全評估和漏洞探測中不可或缺的利器。然而,在使用Masscan進行掃描時,我們必須時刻牢記合法授權和合規性,以確保其在維護網絡安全的同時不會對互聯網造成不利影響。