私の目標は、侵入検出の目的でクラスタリング/異常検出を使用して、ネットワークログ(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 | SubjectUser | TargetUser | SourceIPaddress | SourceHostName | SourcePort | Computer | DestinationIPaddress | DestinationHostName | DestinationPort | Action | Status | FilePath | EventID | WeekDay | DayTime | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -+ | 171390673 |?|?|?|?|?| domaincontroller1.domain.com | 1.1.1.1 | domaincontroller1.domain.com |?| / Authentication / Verify | / Success |?| 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -+ | 173348232 |?|?|?|?|?| domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |?| / Authentication / Verify | / Success |?| 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -+ | 180176916 |?|?|?|?|?| domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |?| / Authentication / Verify | / Success |?| 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -+ | 144144725 |?| John.Doe | 3.3.3.3 | domaincontroller3.domain.com | 2407 | domaincontroller3.domain.com | 3.3.3.4 | domaincontroller3.domain.com |?| / Authentication / Verify | / Success |?| 4624 | 3 | 12345 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -+
全部で1億5,000万のイベントがあります。異なるイベントには異なるフィールドが入力されており、すべてのイベントがユーザーのログオン/ログオフに関連しているわけではありません。