機械学習を用いたネットワーク攻撃検出
説明
このプロジェクトは、機械学習技術を活用して、ポートスキャン、サービス拒否(DoS)、マルウェアなどのネットワーク攻撃を分類します。入力データは、Ciscoで使用される標準形式であるNetflow V9形式です。
分類は以下のモデルを使用して実行されます:
- K近傍法(KNN)
- RBF(動径基底関数)カーネルを使用したサポートベクターマシン分類器(SVC)
- 主成分分析(PCA)とサポートベクターマシン分類器(SVC)を用いたパイプライン
- バギング分類器(RBFカーネルを使用したSVCに基づく)
- ランダムフォレスト分類器
- Extra Trees分類器
- ニューラルネットワーク(MLPClassifier)
このプロジェクトは、PythonとJupyter Notebook、およびUMAP、Pandas、NumPy、Scikit-Learn、Matplotlib、Seabornを含むいくつかの人気ライブラリを使用して実装されています。
ノートブック
ノートブックは、GitHub上で直接閲覧するにはこちらからアクセスできます。あるいは、NbViewerを使用してこのリンクからノートブックにアクセスすることもできます。
プレゼンテーション
PDF形式のKeynoteプレゼンテーションはこちらからアクセスできます。
データセット
このプロジェクトで使用されるデータセットはNetFlow V9形式です(Ciscoによって文書化されており、こちらから入手できます)。データセットはtrain_net.csvとtest_net.csvの2つのファイルで構成されています。
train_net.csvファイルは、特定のアラートが発生する可能性が高い時期に関する情報を提供します。一方、test_net.csvファイルはテスト専用に使用され、モデルの性能を評価するためのターゲット変数は含まれていません。
このデータセットはかなり大規模です:
train_net.csv: 約400万パケット(14'066のユニークなネットワークホストから)
test_net.csv: 約200万パケット(6'186のユニークなネットワークホストから)
データセットの特徴
- FLOW_ID: フローを一意に識別するためのIDです。
- PROTOCOL_MAP: フローで使用されるプロトコルを表す文字列です。指定可能な値には、"ICMP"、"TCP"、"UDP"、"IGMP"、"GRE"、"ESP"、"AH"、"EIGRP"、"OSPF"、"PIM"、"IPV6-ICMP"、"IPV6-IP"、"IPV6-ROUTE"、"IPV6-FRAG"、"IPV6-NONXT"、"IPV6-OPTS"などがあります。
- L4_SRC_PORT: フロー内の送信元ポート番号です。指定可能な値は0〜65535の範囲です。
- IPV4_SRC_ADDR: フロー内の送信元IPv4アドレスです。ドット付き10進表記の文字列で表されます(例:"192.168.0.1")。
- L4_DST_PORT: フロー内の宛先ポート番号です。指定可能な値は0〜65535の範囲です。
- IPV4_DST_ADDR: フロー内の宛先IPv4アドレスです。ドット付き10進表記の文字列で表されます(例:"192.168.0.2")。
- FIRST_SWITCHED: フローが開始した時刻です。エポック(1970年1月1日)からの秒数で表されます。
- FLOW_DURATION_MILLISECONDS: フローの継続時間(ミリ秒単位)です。
- LAST_SWITCHED: フローが終了した時刻です。エポック(1970年1月1日)からの秒数で表されます。
- PROTOCOL: フローで使用されるプロトコルです。指定可能な値には、1 (ICMP)、6 (TCP)、17 (UDP) などがあります。
- TCP_FLAGS: フロー内で設定されたTCPフラグです。バイナリ文字列で表されます(例:"100101")。
- TCP_WIN_MAX_IN: 受信トラフィックのアドバタイズされた最大ウィンドウサイズ(バイト単位)です。
- TCP_WIN_MAX_OUT: 送信トラフィックのアドバタイズされた最大ウィンドウサイズ(バイト単位)です。
- TCP_WIN_MIN_IN: 受信トラフィックのアドバタイズされた最小ウィンドウサイズ(バイト単位)です。
- TCP_WIN_MIN_OUT: 送信トラフィックのアドバタイズされた最小ウィンドウサイズ(バイト単位)です。
- TCP_WIN_MSS_IN: 受信トラフィックの最大セグメントサイズ(バイト単位)です。
- TCP_WIN_SCALE_IN: 受信トラフィックのウィンドウスケール係数です。
- TCP_WIN_SCALE_OUT: 送信トラフィックのウィンドウスケール係数です。
- SRC_TOS: 送信元IPアドレスのType of Service(ToS)値です。
- DST_TOS: 宛先IPアドレスのType of Service(ToS)値です。
- TOTAL_FLOWS_EXP: 予期されるフローの総数です。
- MIN_IP_PKT_LEN: フロー内のIPパケットの最小長(バイト単位)です。
- MAX_IP_PKT_LEN: フロー内のIPパケットの最大長(バイト単位)です。
- TOTAL_PKTS_EXP: フロー内の予期されるパケットの総数です。
- TOTAL_BYTES_EXP: フロー内の予期されるバイトの総数です。
- IN_BYTES: フローで受信したバイト数です。
- IN_PKTS: フローで受信したパケット数です。
- OUT_BYTES: フローで送信したバイト数です。
- OUT_PKTS: フローで送信したパケット数です。
- ANALYSIS_TIMESTAMP: フローが分析された時刻です。エポック(1970年1月1日)からの秒数で表されます。
- ANOMALY: フローに異常が含まれているかどうかを示すバイナリフラグです(1 = true、0 = false)。
- : (トレーニングセットでのみ利用可能) 現在のフローで検出された攻撃の種類です。指定可能な値は以下のとおりです:
データセットの著者
Maria-Elena Mihailescu, Darius Mihai, Mihai Carabas, Mikolaj Komisarek, Marek Pawlicki, Witold Holubowicz, Rafal Kozik:
The Proposition and Evaluation of the RoEduNet-SIMARGL2021 Network Intrusion Detection Dataset. Sensors 21(13): 4319 (2021)
Kaggleリンク