# 什麼是NSL-KDD? ## 原始KDD資料集的問題 1.數據不平衡: * 某些類別(例如 normal 和 neptune 攻擊)佔據了絕大部分記錄,而其他類別(如 U2R 和 R2L 攻擊)數量極少。 * 導致模型容易傾向於常見類別,忽略稀有類別。 2. 冗餘樣本: * 許多樣本之間幾乎完全相同,對分類器的學習幾乎沒有貢獻,但增加了計算成本。 3.模型性能評估不準確: * 由於大量重複和容易分類的樣本,分類器在測試集上的表現過於「樂觀」。 * 很難準確比較不同機器學習模型的優劣。 關於NSL99可以查看 “M. Tavallaee, E. Bagheri, W. Lu, and A. Ghorbani, “**A Detailed Analysis of the KDD CUP 99 Data Set,**” Submitted to Second IEEE Symposium on Computational Intelligence for Security and Defense Applications (CISDA), 2009.” ## NSL-KDD NSL-KDD數據集是在KDD Cup 1999(KDD99)數據集的基礎上進行精練和優化而構建的,主要解決原始數據中存在的冗餘紀錄和類別不平衡的問題 * 它不包括train 集中的冗餘記錄,因此分類器不會偏向於更頻繁的記錄。 * 建議的測試集中沒有重複記錄;因此,學習者的表現不會受到對頻繁記錄具有更高檢出率的方法的影響。 * 從每個 difficultylevel 組中選定的記錄數與原始 KDD 數據集中的記錄百分比成反比。因此,不同機器學習方法的分類率差異範圍更大,這使得準確評估不同的學習技術更加高效。 * train 集和測試集中的記錄數是合理的,這使得在整個集上運行 Experiments 的成本很高,而無需隨機選擇一小部分。因此,不同研究工作的評價結果將是一致和可比的。 ### Difficulty Level 是什麼? 為了解決KDD Cup 1999的問題,NSL-KDD 資料集 引入了 Difficulty Level,其目的是衡量每條記錄對機器學習分類器的「分類難度」。這是通過以下方法實現的: #### 1. 定義 Difficulty Level Difficulty Level 是由一個基準分類器(如決策樹)對資料進行分類時,根據以下條件計算的: * 記錄是否被正確分類。 * 該記錄需要多少層分支(或計算量)才能正確分類。 #### 2. 具體步驟 1. 使用基準分類器(例如決策樹或簡單的機器學習模型)對資料進行分類: * 每條記錄的分類結果會被記錄下來。 2. 根據分類器的行為,為每條記錄分配一個難度等級: * 容易分類的樣本:被分類器輕鬆正確分類,難度等級低。 * 難分類的樣本:需要複雜的規則或被錯誤分類,難度等級高。 3. 將樣本按 Difficulty Level 分組,並對每組進行抽樣,確保難分類樣本被保留更多比例。 4. 對每條記錄分配一個 Difficulty Level: * 通常以數字表示(如 1, 2, 3 等),或與標籤(label)配合使用。 * 這些等級用於後續的資料抽樣和保留策略。 ### NSL-KDD 為什麼有 Difficulty Level NSL-KDD 的設計者引入 Difficulty Level 是為了解決原始 KDD Cup 1999 資料集的缺陷: 1. 提升分類器區分能力的評估準確性: * Difficulty Level 幫助強調困難樣本在資料集中的重要性。 * 它是根據基準分類器(例如決策樹)預測正確與否,以及分類難度的評估來計算的。 1. 減少冗餘數據: * 過於簡單且冗餘的樣本被移除,而高難度樣本被保留更多。 1. 適配多樣化的機器學習方法: * 引入 Difficulty Level 可以讓分類器的性能差異更加明顯,從而更有效地評估不同算法。 ### 為什麼 ARFF 檔案沒有 Difficulty Level ARFF 格式 的目的是為機器學習工具(例如 Weka)準備數據,並簡化模型訓練和測試的過程。因此: 1. ARFF 文件僅保留必要特徵和標籤: * 它的格式設計目的是清晰和簡潔。 * Difficulty Level 被視為輔助信息,而非模型所需的主要特徵,通常被排除。 1. Weka 和 ARFF 的特徵結構要求: * 在 ARFF 文件中,所有特徵應該是直接相關的數據特徵,而不是元數據(如 Difficulty Level)。 ### 為什麼 TXT 文件有 Difficulty Level TXT 文件 的格式設計通常包含更廣泛的輔助信息,因為它的使用場景更加靈活: 1. 輔助分析: * TXT 文件中的 Difficulty Level 可供研究者進行進一步分析,例如檢查特定難度樣本的分類效果。 1. 來源數據的完整性: * TXT 文件可能包含額外的列,例如 Difficulty Level,是用於標記樣本的分類難度等級。 1. 保留原始數據設計的透明性: * 在某些情況下,研究者需要完整的數據資訊,包括 Difficulty Level。 ### 小結 * ARFF 文件沒有 Difficulty Level 是因為它專為簡潔、高效的機器學習建模設計。 * TXT 文件保留 Difficulty Level,是為了輔助分析和數據集設計的透明性。 * 如果需要將兩者結合,可以通過數據處理工具(如 Pandas)進行合併和轉換。 --- NSL-KDD的資料集 * KDDTrain+.ARFF 完整的 NSL-KDD 訓練集,帶有 ARFF 格式的二進位標籤 * KDDTrain+.TXT 完整的NSL-KDD 訓練集,包括 CSV 格式的攻擊類型標籤和難度級別 * KDDTrain+_20Percent.ARFF KDDTrain+.arff 檔的 20% 子集 * KDDTrain+_20Percent.TXT KDDTrain+.txt 檔的 20% 子集 * KDDTest+.ARFF 完整的 NSL-KDD 測試集,帶有 ARFF 格式的二進位標籤 * KDDTest+.TXT 完整的NSL-KDD測試集,包括 CSV 格式的攻擊類型標籤和難度級別 * KDDTest-21.ARFF KDDTest+.arff 檔的子集,其中不包括難度級別為 21 的紀錄 * KDDTest-21.TXT KDDTest+.txt 檔的子集,其中不包含難度級別為 21 的記錄 --- Train ![KDDTrain1](https://hackmd.io/_uploads/r1XcHo0X1e.jpg) Test ![KDDTest1](https://hackmd.io/_uploads/HJKcroA7ke.jpg) 這兩張圖代表著 * 每條記錄都被多個學習器(learners)進行分類。 * 如果一條記錄被所有 21 個學習器(7 種不同的算法,各訓練 3 次)正確分類,則其 #successfulPrediction 值為 21,代表這條記錄非常容易分類。 * 如果一條記錄僅被少數學習器正確分類,則其 #successfulPrediction 值較低,代表這條記錄分類難度較高。 * 訓練集: * 約 98% 的記錄 被所有 21 個學習器正確分類(#successfulPrediction = 21)。 * 圖表中顯示,大多數記錄的難度等級為 21,只有少量記錄屬於難分類的範圍(例如,#successfulPrediction 在 0-20 之間)。 * 測試集: * 約 86% 的記錄 被所有學習器正確分類。 * 測試集中較多的記錄屬於中等或高難度分類範圍,難分類的記錄比訓練集更多。 ### 資料集內容 ##### KDDTest+.arff ``` 0,tcp,private,REJ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,229,10,0.00,0.00,1.00,1.00,0.04,0.06,0.00,255,10,0.04,0.06,0.00,0.00,0.00,0.00,1.00,1.00,anomaly ``` | 項目 | 內容 || |------|---------|-| | 1-9 | TCP連接的基本特徵|0,tcp,private,REJ,0,0,0,0,0| | 10-22| TCP連接的內容特徵|0,0,0,0,0,0,0,0,0,0,0,0,0| | 23-31| 基於時間的網路流量統計特徵|229,10,0.00,0.00,1.00,1.00,0.04,0.06,0.00| | 32-41| 基於主機的網路流量統計特徵|255,10,0.04,0.06,0.00,0.00,0.00,0.00,1.00,1.00| ### TCP連接的基本特徵 | 特徵名稱 | 描述 | 類型 | |----------------------|------------------------------------------------------------------------------------------|--------| | duration | 連線持續時間(秒) | 連續型 | | protocol_type | 協議類型(例如:tcp、udp、icmp) | 離散型 | | service | 目標端的網路服務(例如:http、telnet) | 離散型 | | flag | 連線狀態標誌(例如:SF、REJ) | 離散型 | | src_bytes | 從源主機到目的主機的資料位元組數 | 連續型 | | dst_bytes | 從目的主機到源主機的資料位元組數 | 連續型 | | land | 若連線來自/到相同的主機/埠則為 1,否則為 0 | 離散型 | | wrong_fragment | 錯誤片段的數量 | 連續型 | | urgent | 加急封包的數量 | 連續型 | ### TCP連接的內容特徵 | 特徵名稱 | 描述 | 類型 | |----------------------|------------------------------------------------------------------------------------------|--------| | hot | 訪問系統敏感檔案和目錄的次數 | 連續型 | | num_failed_logins | 登入嘗試失敗的次數 | 連續型 | | logged_in | 若成功登入則為 1,否則為 0 | 離散型 | | num_compromised | 被入侵狀態的次數 | 連續型 | | root_shell | 若獲取 root shell 則為 1,否則為 0 | 離散型 | | su_attempted | 若嘗試過 'su root' 命令則為 1,否則為 0 | 離散型 | | num_root | 以 root 身份進行的操作次數 | 連續型 | | num_file_creations | 檔案建立操作的次數 | 連續型 | | num_shells | 獲取 shell 的次數 | 連續型 | | num_access_files | 訪問控制檔案的操作次數 | 連續型 | | num_outbound_cmds | 在 FTP 會話中執行的外部指令數量(在此資料集中,此特徵的值皆為 0) | 連續型 | | is_host_login | 若登入屬於 'hot' 清單則為 1,否則為 0(如超級使用者或管理員登入) | 離散型 | | is_guest_login | 若為 guest 登入則為 1,否則為 0 | 離散型 | ### 基於時間的網路流量統計特徵 | 特徵名稱 | 描述 | 類型 | |----------------------|------------------------------------------------------------------------------------------|--------| | count | 過去兩秒內與當前連線具有相同目標主機的連線數 | 連續型 | | srv_count | 過去兩秒內與當前連線具有相同服務的連線數 | 連續型 | | serror_rate | 在過去兩秒內的連線中,出現 SYN 錯誤的比例 | 連續型 | | srv_serror_rate | 在過去兩秒內與相同服務的連線中,出現 SYN 錯誤的比例 | 連續型 | | rerror_rate | 在過去兩秒內的連線中,出現 RST 錯誤的比例 | 連續型 | | srv_rerror_rate | 在過去兩秒內與相同服務的連線中,出現 RST 錯誤的比例 | 連續型 | | same_srv_rate | 在過去兩秒內的連線中,與相同服務的連線比例 | 連續型 | | diff_srv_rate | 在過去兩秒內的連線中,與不同服務的連線比例 | 連續型 | | srv_diff_host_rate | 在過去兩秒內與相同服務的連線中,與不同主機的連線比例 | 連續型 | * count、serror_rate、rerror_rate、same_srv_rate、diff_srv_rate 這五個特徵屬於 same host 特徵,其前提是與當前連線具有相同目標主機的連線。 * 而 srv_count、srv_serror_rate、srv_rerror_rate、srv_diff_host_rate 這四個特徵屬於 same service 特徵,其前提是與當前連線具有相同服務的連線。 ##### 1. Same Host * 定義: * 描述的是與當前連接的 目標主機(Target Host) 有關的特徵。 * 前提條件: * 這些特徵只考慮與當前連接擁有相同目標主機(dst_host)的連接。 * 應用: * 幫助判斷特定主機是否可能成為攻擊目標。 * 偵測針對單一主機的攻擊行為,例如 DoS(拒絕服務攻擊)。 * 特徵: * count:過去兩秒內與當前連接具有相同目標主機的連接數。 * serror_rate:這些連接中出現 SYN 錯誤的比例。 * rerror_rate:這些連接中出現 RST 錯誤的比例。 * same_srv_rate:這些連接中與當前連接具有相同服務的比例。 * diff_srv_rate:這些連接中與當前連接具有不同服務的比例。 ##### 2. Same Service * 定義: * 描述的是與當前連接的 目標服務(Target Service) 有關的特徵。 * 前提條件: * 這些特徵只考慮與當前連接擁有相同服務(service)的連接。 * 應用: * 幫助判斷特定服務是否可能成為攻擊目標。 * 偵測針對某一類服務(如 HTTP、FTP)的攻擊,例如暴力破解密碼。 * 特徵: * srv_count:過去兩秒內與當前連接具有相同服務的連接數。 * srv_serror_rate:這些連接中出現 SYN 錯誤的比例。 * srv_rerror_rate:這些連接中出現 RST 錯誤的比例。 * srv_diff_host_rate:這些連接中與當前連接具有相同服務但不同主機的比例。 ### 基於主機的網路流量統計特徵 | 特徵名稱 | 描述 | 類型 | |----------------------|------------------------------------------------------------------------------------------|--------| | dst_host_count | 當前連線的目的主機在過去兩秒內的連線數 | 連續型 | | dst_host_srv_count | 當前連線的目的主機在過去兩秒內與相同服務的連線數 | 連續型 | | dst_host_same_srv_rate | 當前連線的目的主機在過去兩秒內,與相同服務的連線比例 | 連續型 | | dst_host_diff_srv_rate | 當前連線的目的主機在過去兩秒內,與不同服務的連線比例 | 連續型 | | dst_host_same_src_port_rate | 當前連線的目的主機在過去兩秒內,與相同源埠的連線比例 | 連續型 | | dst_host_srv_diff_host_rate | 當前連線的目的主機在過去兩秒內,與相同服務但不同主機的連線比例 | 連續型 | | dst_host_serror_rate | 當前連線的目的主機在過去兩秒內,出現 SYN 錯誤的比例 | 連續型 | | dst_host_srv_serror_rate | 當前連線的目的主機在過去兩秒內,與相同服務的連線中,出現 SYN 錯誤的比例 | 連續型 | | dst_host_rerror_rate | 當前連線的目的主機在過去兩秒內,出現 RST 錯誤的比例 | 連續型 | | dst_host_srv_rerror_rate | 當前連線的目的主機在過去兩秒內,與相同服務的連線中,出現 RST 錯誤的比例 | 連續型 | | label | 連線的標籤(正常或攻擊類型) | 離散型 | --- ## 參考資料 * [KDD99数据集的特征(Features)介绍](https://monrain.github.io/2021/01/17/KDD99数据集的特征(Features)介绍/) * [KDD99数据集与NSL-KDD数据集介绍](https://mathpretty.com/10244.html) * [KDD Cup 1999 Data](http://kdd.ics.uci.edu/databases/kddcup99/kddcup99.html) * [NSL-KDD Kaggle](https://www.kaggle.com/datasets/hassan06/nslkdd) * [A Detailed Analysis on NSL-KDD Dataset using various Machine Learning Techniques for Intrusion Detection](https://turcomat.org/index.php/turkbilmat/article/view/6333)