CICFlowmeter是一款用於PCAP的封包特徵提取工具,其有助於將IDS推向由ML與DL算法的方向,在過去幾年由這款特徵提取工具發布的CICIDS2017/CICIDS2018/CICIDS2019資料集產出了相當多關於資訊安全的研究。
然而因為這款提取工具生成的資料集中在一些特徵上顯示出詭異的情況,令我對該工具表示懷疑,進而展開搜尋是否有人認為該資料集有問題。
最後找到了一篇論文,關於該資料集與提取工具分析的文獻:
Troubleshooting an Intrusion Detection Dataset: the CICIDS2017 Case Study
該論文指出了此工具設計上的缺陷,而且是針對封包結構的誤解引起的缺陷,並且對該工具提出了修改。同時研究指出該不平衡資料集引起的捷徑學習問題-捷徑學習如果使用dst port作為捷徑,很容易引起如cicids2019資料集的誤判。
本文將提供該修改後的工具用法並寫成說明方便後人使用。
該工具的連結:https://github.com/GintsEngelen/CICFlowMeter
打標工具的連結:https://github.com/GintsEngelen/WTMC2021-Code
首先,該工具是由JAVA編寫的,因此先安裝JAVA,請至Oracle官網安裝 JDK
建議使用IntelliJ IDEA進行編譯。安裝IntelliJ IDEA後再安裝Maven以安裝jnetpcap。
解析封包需要使用winpcap 由於winpcap已經停止支援,安裝NPCAP的時候請勾選使用winpcap api的選項。
開啟CICFlowmeter的project folder。
File->Settings->Maven 將Maven home指向安裝的Maven資料夾->OK
Gradle部分不須變更。接下來新增模型相依項。
由File->Project Structure->Modules進入畫面,新增JAR或目錄。
從 <project folder>/jnetpcap/<sys>/jnetpcap-1.4.r1425 中,將jnetpcap.dll與jnetpcap.jar加入。其中Empty Library對應windows的dll或是Linux的so。
這個部分需要一個一個加,以確定兩者都在裡面。
隨後可以開始編譯輸出了。
點一下右側的大象使用Gradle
找到distZip,點兩下之後如果沒有錯誤就會在
<project folder>\build\distributions 當中產出CICFlowMeter4.0.zip了。
解壓縮後使用bin當中的CICFlowMeter.bat即可開啟程式。
開啟後切換到offline模式
並將pcap資料夾與output資料夾設定好,就可以開始解析了。
這裡產生出來的資料是沒有標記的,時間戳使用的是UTC。
請參閱打標工具的文章,並將labelling_CSV_flows.py內的參數稍作調整,整體如下。
TIME_DIFFERENCE使用UTC與生成工具使用者的時差,而CICIDS2017是來自加拿大的New Brunswick,時區為UTC-3,因此官方提到的對應事件時間通通要減三小時。而時戳部分,CICFlowmeter產生的是:
DATE_FORMAT_DATASET = ‘%Y-%m-%d %H:%M:%S.%f’
而不是標記文件中的格式。
標記過程中如果有產生錯誤,請將資料集時戳中少數沒有小數點的部分補上 “.000000”,大致上周二、周三、周五都會有。