異常検出のための機能を準備/構築する方法(ネットワークセキュリティデータ)
私の目標は、侵入検出の目的でクラスタリング/異常検出を使用して、ネットワークログ(Apache、syslog、Active Directoryセキュリティ監査など)を分析することです。 ログから、IPアドレス、ユーザー名、ホスト名、宛先ポート、送信元ポートなどのテキストフィールドがたくさんあります(合計15〜20フィールド)。ログに攻撃があるかどうかはわかりませんが、最も疑わしいイベント(異常値)を強調表示したいと思います。 通常、異常検出は、確率/頻度が低いポイントを異常としてマークします。ただし、ログレコードの半分には、フィールドの一意の組み合わせが含まれています。したがって、データセット内のレコードの半分は、可能な限り低い頻度になります。 クラスタリングに基づく異常検出を使用する場合(たとえば、クラスタを見つけてから、すべてのクラスタの中心から離れているポイントを選択する)、異なるポイント間の距離を見つける必要があります。私は15〜20個のフィールドを持っているので、ユーザー名、ポート、IPアドレスなどの次元の多次元スペースになります。ただし、マハラノビス距離は正規分布の特徴にのみ適用できます。これは、データポイント間の距離を見つけてクラスターを構築する方法がないことを意味します... たとえば、20レコードのデータセットに、ユーザーAlice、Bob、Carol、Dave、Eve、Frankがいるとします。それらは、データベース内で次の数の発生を持つ可能性があります:2,5,2,5,1,5。ユーザー名を数字に単にマッピングする場合、例えば Alice --> 1 Bob --> 2 Carol --> 3 Dave --> 4 Eve --> 5 Frank --> 6 次に、ユーザー名の確率分布は次のようになります。 p(1)= 0.1、p(2)= 0.25、p(3)= 0.1、p(4)= 0.25、p(5)= 0.05、p(6)= 0.25 もちろん、これは正規分布ではなく、ユーザー名を別の方法でマッピングできるため、これもあまり意味がありません... したがって、ユーザー名、アクション、ポート番号、IPアドレスなどのフィールドを番号に単純にマッピングしても、何も起こりません。 したがって、教師なしの異常/外れ値の検出を可能にするために、テキストフィールドがどのように処理/機能が通常構築されるかについてお聞きしたいと思います。 編集:データ構造。 データベーステーブルに約100列あり、Active Directoryイベントからの情報が含まれています。この100列から(私の観点から)最も重要なのは、SubjectUser、TargetUser、SourceIPaddress、SourceHostName、SourcePort、Computer、DestinationIPaddress、DestinationHostName、DestinationPort、Action、Status、FilePath、EventID、WeekDay、DayTimeです。 イベントはActive Directoryイベントであり、EventIDはログに記録されたもの(たとえば、Kerberosチケットの作成、ユーザーログオン、ユーザーログオフなど)を定義します。 データサンプルは次のようになります。 + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -+ | ID …