蔣明峰 陳馬申屹 湯慧敏



關鍵詞:端口掃描;socket;Metasploit;永恒之藍;Nmap
中圖分類號:TP393 文獻標識碼:A
文章編號:1009-3044(2023)08-0077-03
0 引言
0.1 研究背景與意義
隨著信息技術的發展,計算機安全問題得到越來越多的重視。黑客可以通過漏洞獲取任何他們想要的資料,如之前Windows的“永恒之藍”和“永恒之黑”漏洞以及最近發現的大型漏洞log4j2,如果我們不注重相應的安全防護,黑客就會順著這些缺口入侵。對于入侵的最佳的防護措施就是及時進行漏洞修復,打好安全補丁,設置好防火墻等。黑客進行入侵時很多是從開放的端口入侵,因此對于端口的開放與否需要更加謹慎,無論在進行漏洞測試的過程中是為了找合適的入口,還是為了準確找到位置進行修補,端口掃描都是非常重要的一環。在進行Metasploit模擬漏洞攻擊的時候使用Nmap進行端口掃描,發現掃描的過程過于緩慢,這是由于掃描結果會包含很多用不到的信息且無法過濾導致。為了提高端口掃描的效率,利用Python寫了簡易的端口掃描器,用于提高端口掃描的效率,更好地進行漏洞測試實驗。
0.2 國內外網絡掃描技術研究現狀
端口掃描被歸類為網絡掃描技術,掃描是為了信息的收集,主要分為四類。其他三類分別是主機存活掃描、操作系統指紋識別和漏洞掃描,其中操作系統指紋識別和端口掃描用于收集信息,漏洞掃描用于保障網絡安全。端口掃描、主機存活掃描和操作系統指紋識別使用Nmap都能夠較好地實現,漏洞掃描較為實用的軟件是Nessus,可以在設置好字典的情況下輸入指定主機即可分析系統中可能存在的漏洞并進行安全性分析,根據這些信息保障安全。
除了Nmap之外,由Durumeric領導密歇根大學研究團隊開發的軟件Zmap也是很好的掃描工具。Zmap是基于無狀態的掃描技術,無須進行完整的三次握手,因此速度上較Nmap 會更快,缺點是不能掃描Ipv6,且不能進行內網等的掃描。之后的掃描工具就是Masscan,相比之前的兩種工具,速度更上一個層次,除了無狀態的掃描技術外,發包速度也更快,缺點是無法探測端口服務和操作系統[1]。
網絡掃描無論是在漏洞分析還是安全維護上都有著相當重要的作用,因此只要網絡還在發展,網絡掃描技術也就會隨著一起發展,以便防止漏洞在網絡中隨處可見,更好地保障我們的安全。
本文闡述了如何使用Python實現端口掃描功能,利用Python提供的socket模塊實現端口掃描功能、判斷與分析端口的開放與否,其中使用了并行化技術,利用python中的multiprocessing.dummy中的pool來實現多線程操作,提高了效率,并將基于Python實現的端口掃描器從速度、準確率等角度與Nmap進行比較,最后應用于Metasploit進行簡單的漏洞測試,演示若存在危險端口時如何進行入侵,提醒人們提高對于網絡安全的防護。
1 背景知識介紹
1.1 端口掃描原理及常見掃描方式
端口是設備用于和外界進行通信的出口,最開始僅有物理端口。隨著互聯網的發展,人們為了實現遠程連接又發展出了虛擬端口,用戶僅需通過IP和端口就能確定一臺主機的信息出口,從而進行信息的接收和發送。端口掃描則是通過設定好相應的內容后發送給目標端口,如ICMP包等,用以判斷端口的開放與否以及計算機所提供的服務類型,黑客也能通過此手段來獲取這些服務存在的漏洞從而進行攻擊。同樣的,我們也可通過此方式來掃描本機或是遠程主機的端口開放情況,從而分析可能存在的系統漏洞,進行相應的防護措施。
根據設置的參數不同,可以進行不同的掃描方式。其中參數-sS表示的是SYN掃描,也稱為半開放掃描,不需要建立完整的TCP連接,僅需兩次握手即可進行掃描,相對記錄較少,比較隱蔽,但需要較高的權限。-sT表示的是TCP掃描,TCPconnect()函數調用傳輸層的API通過三次握手與指定端口建立連接,可以同時掃描多個用戶且不需要管理員權限,但由于三次握手會導致記錄更多,痕跡較為明顯[2]。-sU表示UDP掃描,用于掃描UDP端口。除了這三者以外還有FIN掃描、ACK掃描等,其也是通過TCP建立連接時所用到的參數作為標志位,根據收到相應的報文(或者是有無報文)來判斷端口的開放與否。
1.2 socket
socket又稱套接字,是TCP或是UDP用于區分不同應用程序并且實現連接的工具。套接字的參數有IP、端口號和傳輸協議,根據傳輸協議的不同,UDP和TCP的套接字分為三元組和五元組,三元組僅需目標IP和端口號,五元組則是使用雙方的IP和端口號,通信雙方發送的信息中后面加上socket用以識別目標以及對應的應用程序。詳細過程如圖1所示.
1.3 永恒之藍漏洞
“永恒之藍”漏洞利用Windows 操作系統SMB服務漏洞獲取系統的最高權限,對應微軟公司編號MS17-010,后被不法分子改造制作了wannacry勒索病毒,利用Windows操作系統445端口存在的漏洞進行傳播,并且具有自我復制、主動傳播性[3]。
1.4 Metasploit
Metasploit是一個免費的框架,由于其自身攜帶了許多軟件的漏洞攻擊模塊,因此可用于模擬漏洞攻擊、驗證漏洞、安全性分析等。Metasploit最大的優勢在于采用模塊化理念設計,包含了很多利用代碼和安全測試工具且被不斷更新。它可以在同一個平臺上利用各種不同的代碼進行安全測試,可以根據需要將安全測試過程中不同階段使用的攻擊代碼自由組合,而不需要針對每一個漏洞去寫一整套完整的代碼,因此它可以在不同的目標環境中快速地執行完整的安全測試[4]。
2 Python 實現端口掃描
2.1 基本功能實現
Python實現端口掃描是利用socket模塊來實現。先判斷連接方式,SOCK_STREAM是TCP連接,處理面向字節流的傳輸,SOCK_DGRAM是UDP連接,處理面向數據包的傳輸。接著輸入需要查詢的IP,若輸入的是域名,則通過socket.gethostbyname來獲取域名所對應的IP,然后通過socket.connect_ex函數傳輸目標IP以及端口號,根據返回值判斷端口是否開啟,若返回值為0,則端口是開啟的,否則是關閉的,若是需要全端口掃描則循環65536次即可。端口掃描功能流程圖如圖2所示。
2.2 利用多線程提高執行效率
若是單線程進行端口掃描,則需要循環65536次依次執行該函數進行連接,效率過低,耗時太長,因此需要采用多線程的方式提升效率。利用python中的multiprocessing.dummy中的pool來實現多線程操作,先開線程池,然后通過調用apply_async函數進行多線程的函數執行。根據不同的cpu線程可開的數量不同,雖然多開線程能有效提高程序的執行效率,但在執行過程中過多的線程可能會導致電腦的運行卡頓甚至崩潰。這里進行一個比較,將線程分別設置為1000和2000,可以看到速度有明顯的提升,但1000的時候電腦仍運行流暢,2000時電腦出現明顯卡頓。運行時間通過datatime模塊,用運行結束的時間減去運行前的時間得出程序執行時間。多線程流程圖如圖3所示。
這里先用python實現的掃描器對服務器進行全端口掃描,運行結果圖如圖4所示。
再用nmap的三種不同方式對服務器進行掃描,運行結果圖如圖5所示。
可以看出利用多線程且簡化功能后相比于Nmap掃描的速度還是有了很大的提升。
2.3 基于python的端口掃描器與Nmap 對比
Python用socket進行端口掃描的方式與Nmap基本相同,都是先通過TCP(UDP) 與端口連接,根據自身發送內容的回應判斷端口是否開啟。根據自身需求進行修改,將不需要的內容去掉之后掃描的時間為18秒左右,而Nmap由于能判斷操作系統、端口類型等時間耗費較長,全端口掃描可能耗時需要1-2分鐘,且若不能成功建立連接可能出現無法掃描完成的情況,在socket中設立了超時則自動跳過,根據測試將時間改為0.3秒,能夠更加方便快捷地掃描全端口。但由于速度提升上去的原因,無法識別端口的服務類型、識別操作系統,且線程無法再往上加,在性能和速度都考慮的情況下已是最快時間,若要更全的信息還是要通過Nmap進行掃描。
3 端口掃描器在Metasploit 安全測試中的應用
由于Kali Linux系統自帶Metasploit的原因,本實驗是基于Kali Linux系統所做。這里以永恒之藍的測試為例,實驗環境為Vmware搭建的虛擬機,靶機為Windows7操作系統。先通過指令msfconsole 打開攻擊程序,查詢可得永恒之藍的攻擊模塊名為ms17_010,通過指令“use auxiliary/scanner/smb/smb_ms17_010”使用該攻擊模塊,通過options發現需要設置的參數有監聽IP以及對應的端口,通過set指令進行修改。由于靶機是搭建的虛擬機,IP已知,通過端口掃描器掃描出開放的端口后即可通過此端口進行測試,設置好參數后執行run命令即可進行攻擊,成功后即可奪取靶機的控制權,可在控制臺中進行查看文件、文件上傳等一系列的操作。
在測試的過程中發現攻擊成功需要滿足兩點:①靶機的系統需要在漏洞的允許范圍內,由于系統在不斷更新,管理員也會在發現后及時修補該漏洞,因此只有在較低的版本可以實現攻擊,高版本則會修復此漏洞,無法進行攻擊。②靶機需要關閉防火墻,否則端口掃描無法直接探測出開啟端口,需要繞過防火墻后才能掃出;即使是在掃出端口的情況下,防火墻也能夠阻止Metasploit的攻擊,而如何在不進入系統的情況下關閉防火墻也是一大問題。因此通過Metasploit既將端口掃描器在實例中運用,又進行了攻擊,對相應的漏洞進行了安全性測試。
4 總結
本文基于Python實現了端口掃描的功能,并利用Metasploit運用在安全測試實例中,最后與常見的端口掃描器Nmap進行對比,分析兩者實現功能的不同與優缺點,進一步了解了端口掃描機制以及漏洞安全性測試相關的知識還有漏洞的危害性,加強了網絡安全意識。