郭楚栩,施 勇,薛 質
(上海交通大學 電子信息與電氣工程學院,上海 200240)
在第三次工業革命——計算機及信息技術革命發展了50年的今天,第四次工業革命帶著人工智能、清潔能源、機器人技術、量子信息技術、可控核聚變、虛擬現實以及生物技術等新興技術,已經漸漸滲透到了人們的生活。無論是第三次還是第四次工業革命,都是依托于互聯網進行信息交互與交流,可見不管現在還是未來,對互聯網的研究都不會停止。在程序員積極為這個信息世界構建一磚一瓦的同時,有一部分人利用網絡漏洞對他人的計算機信息系統、基礎設施、計算機網絡或個人計算機設備進行攻擊。在計算機和計算機網絡中,破壞、揭露、修改、使軟件或服務失去功能、在沒有得到授權的情況下偷取或訪問任何一計算機的數據,都被視為對計算機和計算機網絡的攻擊[1]。常見的網絡攻擊可以分為4種類型:拒絕服務攻擊、利用型攻擊、信息收集型攻擊和假消息攻擊[2]。其中,信息收集型攻擊并不對目標本身造成危害,但往往被用來進一步入侵提供有用的信息。所以,信息收集型攻擊一般是網絡攻擊的初始步驟。信息收集型攻擊中最常見的是端口掃描。通常使用一些軟件向大范圍的主機連接一系列的TCP端口,掃描軟件報告它成功與主機所開放的端口進行連接。有網絡攻擊的存在時,會有其采取對應的防御措施。端口掃描的防御措施十分簡單,即檢測到哪個端口被端口掃描所攻擊,就關閉該端口來阻斷后續攻擊的繼續實行。但是,如何檢測是否被端口掃描,如何在一系列流量中區分攻擊流量和一般流量,成為一個值得研究的問題,即需要建立一個端口掃描的入侵檢測系統。
入侵檢測(Intrusion Detection),顧名思義是對入侵行為的發覺。它通過對計算機網絡或計算機系統中若干關鍵點收集信息并對其進行分析,從中發現網絡或系統中是否有違反安全策略的行為和被攻擊的跡象。入侵檢測在網絡防御過程中發揮著至關重要的作用,旨在幫助安全管理員預先了解入侵、攻擊和惡意軟件等惡意行為。擁有入侵檢測系統是保護關鍵網絡免受不斷增加的侵入性活動問題的強制性防線。
第四次工業革命的悄然發展,帶來了一項新興技術——人工智能。在人工智能技術發展的同時,使AI不斷學習的方法稱作機器學習。它最基本的做法是使用算法解析數據、從中學習,然后對真實數據集中的事件做出決策和預測。與傳統的為解決特定任務、硬編碼的軟件程序不同,機器學習是用大量的數據來“訓練”,通過各種算法從數據中學習如何完成任務。如何在一系列流量中區分攻擊流量和一般流量,可以使用機器學習的方法。簡單來說,就是從訓練集中提取端口掃描攻擊的流量特征,再讓計算機對真實數據集中的各種流量進行匹配,判斷其是否符合特定特征,進而判斷該流量是否為端口掃描攻擊。
按照不同的分類標準,端口掃描可以有不同的分類方法[1]。
1.1.1 水平掃描
水平掃描是指對某一端口有一定目的性的掃描,對不同計算機的同一端口進行多次掃描,如圖1所示。

圖1 水平掃描
1.1.2 垂直掃描
垂直掃描是指對某一計算機有一定目的性的掃描,對同一計算機的不同端口進行多次掃描,如圖2所示。

圖2 垂直掃描
端口掃描大體上可以分為水平掃描與垂直掃描兩種,而這兩種掃描方式都有明顯的特征,所以能依照這些特征檢測這兩類端口掃描。
對于水平掃描,由于是對不同主機的同一端口進行掃描,所以在掃描過程中目的主機IP數與目的端口數的比值遠大于1,即:

對于水平掃描,由于是對同一主機的不同端口進行掃描,所以在掃描過程中目的主機IP數與目的端口數的比值遠小于1,即:

以這兩種掃描檢測的思路為基礎,延伸出了多種檢測方法,如基于閾值的掃描檢測、算法類型掃描檢測、基于規則的掃描檢測以及可視化手段的掃描檢測等[2]。
常規檢測方法均依賴于人工對算法的調參或者是對圖像的觀察,費時費力,而興起的機器學習算法能解決該問題。2018年,Daniel Fraunholz等人提出了如圖3所示的模型[3]。

圖3 Daniel Fraunholz等人提出的入侵檢測模型
該入侵檢測模型主要分為嗅探器和分類器兩個大模塊。其中,分類器就是使用機器學習算法對嗅探器處理好的流量進行入侵檢測,該檢測包括端口掃描以及其他異常流量如DDos攻擊等。該模型將正常流量和異常流量整合為序列進行訓練與測試,而本文僅在流量中檢測端口掃描的異常流量,所以只需要簡單地對流量包本身進行訓練與測試即可。建立端口掃描檢測系統流程,如圖4所示。

圖4 端口掃描檢測系統流程
目前,對入侵檢測系統的研究已經比較全面且廣泛,相關算法也較為齊全,但是絕大部分研究僅僅是對從pcap文件提取的特征進行分析分類,如對KDD Cup 99數據集進行分類[4],而基于原始pcap文件進行檢測的研究甚少。為了實現對流量進行分析的功能,需要收集PortScan流量和正常流量,并基于此進行分析。
但是,盡管現有的入侵流量的特征數據集數量很多,但是這些數據集中的數據僅僅是已提取好的特征,卻無法獲得其原始pcap文件。通過調研找到CICIDS2017數據集[5],此數據集為加拿大信息安全研究所于2017年收集所得,其中記錄了5天內各種入侵行為的流量包,并以pcap文件形式呈現。它的端口掃描以NMAP進行實施,包括多種端口掃描形式,涵蓋項目要求的端口掃描類型。
在CICIDS2017中,端口掃描流量集中于周五,且在特定的兩個IP間進行端口掃描(攻擊源IP為172.16.0.1,攻擊目標IP為192.168.10.50)。提取CICIDS2017文件中的端口掃描時間段的流量,此流量中包括了正常流量和端口掃描流量。但是,鑒于端口掃描僅存在于兩個固定IP間的通信中,且此兩IP在此期間的全部通信均為端口掃描,因此提取端口掃描流量較為容易。
考慮到pcap文件為二進制文件,機器學習算法對此文件很難進行直接處理。借鑒大多數入侵檢測及其相關研究,大多入侵檢測系統處理對象為不同特征組成的流量序列,而非pcap文件。因此,對于端口掃描流量和正常流量的最初處理為從pcap文件中提取相應特征。
利用wireshark及其命令行操作,可提取pcap流量文件中各條流量包的基本特征,包括IP、端口和協議等。因此,利用wireshark對流量的基本特征進行提取,命令行命令如下:
tshark -r PortScan.pcap -T fields -e ip.src -e ip.dst -e tcp.srcport -e tcp.dstport -e udp.srcport-e udp.dstport -e ip.proto -e frame.time -e frame.time_epoch -e _ws.col.Length -e frame.time_delta >PortScan.csv
命令行中提取特征的中英對照表如表1所示。

表1 命令行中特征提取中英對照表
2.3.1 特征初步處理
考慮到pcap文件的流量協議不同,提取出的特征集存在特征缺失的情況,十分不利于后續的分析。因此,對于從pcap轉換而來的特征序列,需要對數據進行清洗。
清洗主要包括兩個方面:
(1)根據流量的協議,確定相應的IP端口;
(2)提出特征存在缺失的流量,特別是IP缺失的流量。
2.3.2 流量的整合
由于某兩IP及其相應端口間的通信往往是連續的且多次的,因此將單個流量包作為一次通信行為是不可取的。本系統將間隔不超過某一時間段的兩個相同IP和端口組合的主機之間的流量視為同一通信行為。此時間段(time_epoch)可根據實際情況進行限制(代碼中time_epoch=1.2)。
2.3.3 ICMP協議分析
由于TCP、UDP均工作在傳輸層,而ICMP工作在網絡層,因此將是否有ICMP協議工作視為一種特征加以考慮。
2.3.4 基于主機和時間的統計特征
主要根據一般端口掃描行為的特點,即同一源IP持續對同一目的IP的不同端口進行訪問。據此,檢查某一經過整合的目標流量包,對此目標流量包之前的1 000個(單位個數)流量包進行檢查分析,檢測是否具有相同的源IP和目的IP,并檢查端口和協議情況,從而得到統計特征。同時,由于IDS僅防衛某一主機的安全,因此僅對目標包的目的IP為此主機IP的目標包進行檢測,具體特征如下。
line_same_src:單位數量的流量包中,目的IP為此主機IP的流量數量;
line_same_src_not_protocol:與目標包有相同的目的IP、不同的目的端口、相同的源IP、不同的協議的包的數量(且目的端口不可重復);
line_same_src_not_protocol_repeat:與目標包有相同的目的IP、不同的目的端口、相同的源IP、不同的協議的包的數量(且目的端口可重復);
line_same_src_same_protocol:與目標包有相同的目的IP、不同的目的端口、相同的源IP、相同的協議的包的數量(目的端口不可重復);
line_same_src_same_protocol_repeat:與目標包有相同的目的IP、不同的目的端口、相同的來源IP、相同的協議的包的數量(目的端口可重復)。
為了進一步檢查目標流量與之前流量間的統計關系,并且考慮慢掃描情況,再對目標流量前2 s內(單位時間)的流量包進行檢測。其他具體內容和規則與單位個數內的檢測一致,具體特征如下。
second_same_src:單位時間的流量包中,目的IP為此主機IP的流量數量;
second_same_src_not_protocol:與目標包有相同的目的IP、不同的目的端口、相同的源IP、不同的協議的包的數量(且目的端口不可重復);
second_same_src_not_protocol_repeat:與目標包有相同的目的IP、不同的目的端口、相同的源IP、不同的協議的包的數量(且目的端口可重復);
second_same_src_same_protocol:與目標包有相同的目的IP、不同的目的端口、相同的源IP、相同的協議的包的數量(目的端口不可重復);
second_same_src_same_protocol_repeat:與目標包有相同的目的IP、不同的目的端口、相同的來源IP、相同的協議的包的數量(目的端口可重復)。
綜上,目前提取的特征共15個,如表2所示。

表2 整合后的特征中英對照
基于以上所得特征,利用機器學習算法對以上特征形成的特征向量進行分類。本代碼生成的特征數量有限,特征總數為15。考慮到深度學習主要適用于圖像語音等單個大型文件的分類。對于特征較少的單一文件,使用傳統機器學習方法即可。因此,整理統計數據并送入分類模型中進行檢測,其中模型包括樸素貝葉斯、決策樹、隨機森林和邏輯回歸。
將70%的數據作為訓練數據,30%的數據作為測試數據。分類測試效果如表3所示,其中Decision Tree較好,所以之后的測試均使用該機器學習算法。

表3 各種機器學習模型的測試效果表
需要注意,本次模型訓練使用的是一小部分CICIDS2017數據,之后進行測試時使用的是完整CICIDS2017數據所建立的模型。
使用兩臺均為Ubuntu18.04 64位虛擬機,其中一臺作為攻擊主機使用Nmap工具對另一臺被攻擊主機進行端口掃描(采用各種不同的攻擊方式),被攻擊主機使用wireshark工具采集流量,同時打開網頁觀看視頻與文章,以此產生正常流量來作端口掃描流量的背景流量。對于采集好的流量,放入之前訓練好的機器學習模型中進行測試,測試結果如表4所示。

表4 對于各種掃描類型的測試效果
可見,不管是何種掃描類型,該模型檢測能力均表現優良。
近年來,互聯網領域中機器學習日益火熱,而端口掃描檢測為基本的信息安全防御手段,將兩者相結合是未來發展的必然趨勢。本文基于2018年Daniel Fraunholz等人提出了的入侵檢測模型,提出了一種基于機器學習的端口掃描檢測系統。系統的特征提取參考了KDD Cup 99數據集中數據的特征提取,其中的模型訓練集基于CICIDS2017數據集,最后模型測試結果優良,能夠廣泛運用到多種不同類型的掃描檢測中。然而,對慢掃描[8]與分布式掃描等在短時間內無大流量的掃描方式還缺乏檢測手段,將會是一下階段嘗試攻克的課題。