Mein Ziel ist es, Netzwerkprotokolle (z. B. Apache, Syslog, Active Directory-Sicherheitsüberwachung usw.) mithilfe von Clustering / Anomalieerkennung für Intrusion Detection-Zwecke zu analysieren.
Aus den Protokollen habe ich viele Textfelder wie IP-Adresse, Benutzername, Hostname, Zielport, Quellport usw. (insgesamt 15-20 Felder). Ich weiß nicht, ob es einige Angriffe in den Protokollen gibt, und möchte die verdächtigsten Ereignisse (Ausreißer) hervorheben.
Normalerweise markiert die Anomalieerkennung die Punkte mit geringer Wahrscheinlichkeit / Häufigkeit als Anomalien. Die Hälfte der Protokollsätze enthält jedoch eine eindeutige Kombination von Feldern. Die Hälfte der Datensätze im Datensatz hat also die niedrigstmögliche Häufigkeit.
Wenn ich die auf Clustering basierende Anomalieerkennung verwende (z. B. Cluster suchen und dann Punkte auswählen, die weit von allen Clusterzentren entfernt sind), muss ich den Abstand zwischen verschiedenen Punkten ermitteln. Da ich 15 bis 20 Felder habe, wird es ein mehrdimensionaler Bereich sein, in dem die Dimensionen Benutzername, Port, IP-Adresse usw. sind. Die Mahalanobis-Entfernung konnte jedoch nur auf normalverteilte Merkmale angewendet werden. Dies bedeutet, dass es keine Möglichkeit gibt, den Abstand zwischen Datenpunkten zu ermitteln und Cluster zu erstellen ...
Stellen wir uns zum Beispiel vor, ich habe Benutzer Alice, Bob, Carol, Dave, Eve und Frank im Datensatz von 20 Datensätzen. Sie können die folgende Anzahl von Vorkommen in der Datenbank haben: 2,5,2,5,1,5. Wenn ich Benutzernamen einfach Zahlen zuordne, z
Alice --> 1
Bob --> 2
Carol --> 3
Dave --> 4
Eve --> 5
Frank --> 6
Dann sieht meine Wahrscheinlichkeitsverteilung für Benutzernamen wie folgt aus:
p (1) = 0,1, p (2) = 0,25, p (3) = 0,1, p (4) = 0,25, p (5) = 0,05, p (6) = 0,25
Dies ist natürlich keine Normalverteilung, und dies macht auch wenig Sinn, da ich Benutzernamen auf andere Weise zuordnen könnte ...
Eine einfache Zuordnung von Feldern wie Benutzername, Aktion, Portnummer, IP-Adresse usw. zu Nummern bringt also nichts.
Daher möchte ich fragen, wie die Textfelder verarbeitet / Merkmale normalerweise konstruiert werden, um eine unbeaufsichtigte Erkennung von Anomalien / Ausreißern zu ermöglichen.
EDIT: Datenstruktur.
Ich habe ungefähr 100 Spalten in der Datenbanktabelle, die Informationen von Active Directory-Ereignissen enthalten. Aus diesen 100 Spalten wähle ich die wichtigsten (aus meiner Sicht) aus: SubjectUser, TargetUser, SourceIP-Adresse, SourceHostName, SourcePort, Computer, DestinationIPaddress, DestinationHostName, DestinationPort, Aktion, Status, FilePath, EventID, WeekDay, DayTime.
Ereignisse sind Active Directory-Ereignisse, bei denen EventID definiert, was protokolliert wurde (z. B. Erstellung eines Kerberos-Tickets, Benutzeranmeldung, Benutzerabmeldung usw.).
Das Datenbeispiel sieht folgendermaßen aus:
+ --------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | ID | SubjectUser | TargetUser | SourceIPaddress | SourceHostName | SourcePort | Computer | DestinationIPaddress | DestinationHostName | DestinationPort | Aktion | Status | FilePath | EventID | WeekDay | DayTime | + --------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 171390673 |? |? |? |? |? | domaincontroller1.domain.com | 1.1.1.1 | domaincontroller1.domain.com |? | / Authentifizierung / Überprüfen | / Erfolg |? | 4624 | 1 | 61293 | + --------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 173348232 |? |? |? |? |? | domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |? | / Authentifizierung / Überprüfen | / Erfolg |? | 4624 | 1 | 61293 | + --------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 180176916 |? |? |? |? |? | domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |? | / Authentifizierung / Überprüfen | / Erfolg |? | 4624 | 1 | 61293 | + --------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 144144725 |? | John.Doe | 3.3.3.3 | domaincontroller3.domain.com | 2407 | domaincontroller3.domain.com | 3.3.3.4 | domaincontroller3.domain.com |? | / Authentifizierung / Überprüfen | / Erfolg |? | 4624 | 3 | 12345 | + --------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - +
Insgesamt habe ich ungefähr 150 Millionen Veranstaltungen. Bei verschiedenen Ereignissen sind unterschiedliche Felder ausgefüllt, und nicht alle Ereignisse beziehen sich auf die Benutzeranmeldung / -abmeldung.