Moim celem jest analiza dzienników sieciowych (np. Apache, syslog, audyt bezpieczeństwa Active Directory itd.) Przy użyciu wykrywania klastrów / anomalii do celów wykrywania włamań.
Z dzienników mam wiele pól tekstowych, takich jak adres IP, nazwa użytkownika, nazwa hosta, port docelowy, port źródłowy itd. (Łącznie 15-20 pól). Nie wiem, czy w dziennikach są jakieś ataki, i chcę podkreślić najbardziej podejrzane zdarzenia (wartości odstające).
Zazwyczaj wykrywanie anomalii oznacza punkty o niskim prawdopodobieństwie / częstotliwości jako anomalie. Jednak połowa zapisów dziennika zawiera unikalną kombinację pól. Tak więc połowa rekordów w zestawie danych będzie miała najniższą możliwą częstotliwość.
Jeśli używam wykrywania anomalii opartego na grupowaniu (np. Znajduję klastry, a następnie wybieram punkty, które są daleko od wszystkich centrów klastrów), muszę znaleźć odległość między różnymi punktami. Ponieważ mam 15-20 pól, będzie to wielowymiarowa przestrzeń, w której wymiarami są nazwa użytkownika, port, adres IP i tak dalej. Jednak odległość Mahalanobisa można zastosować tylko do normalnie rozmieszczonych obiektów. Oznacza to, że nie ma możliwości znalezienia odległości między punktami danych i budowy klastrów ...
Na przykład wyobraźmy sobie, że mam użytkowników Alice, Bob, Carol, Dave, Eve i Frank w zestawie danych 20 rekordów. Mogą mieć następującą liczbę wystąpień w bazie danych: 2,5,2,5,1,5. Jeśli po prostu zamapuję nazwy użytkowników na liczby, np
Alice --> 1
Bob --> 2
Carol --> 3
Dave --> 4
Eve --> 5
Frank --> 6
Następnie mój rozkład prawdopodobieństwa dla nazw użytkowników będzie wyglądał następująco:
p (1) = 0,1, p (2) = 0,25, p (3) = 0,1, p (4) = 0,25, p (5) = 0,05, p (6) = 0,25
Oczywiście nie jest to normalna dystrybucja, a to również nie ma większego sensu, ponieważ mogłem mapować nazwy użytkowników w inny sposób ...
Zatem proste mapowanie pól takich jak nazwa użytkownika, akcja, numer portu, adres IP i tak dalej na liczby nic nie przynosi.
W związku z tym chciałbym zapytać, w jaki sposób pola tekstowe są przetwarzane / funkcje są zwykle konstruowane, aby umożliwić wykrywanie nieprawidłowości / wartości odstających bez nadzoru?
EDYCJA: struktura danych.
Mam około 100 kolumn w tabeli bazy danych, zawierających informacje ze zdarzeń usługi Active Directory. Z tych 100 kolumn wybieram najważniejsze (z mojego punktu widzenia): SubjectUser, TargetUser, SourceIPaddress, SourceHostName, SourcePort, Computer, DestinationIPaddress, DestinationHostName, DestinationPort, Action, Status, FilePath, EventID, WeekDay, DayTime.
Zdarzenia to zdarzenia usługi Active Directory, w których identyfikator zdarzenia określa, co zostało zarejestrowane (np. Utworzenie biletu Kerberos, logowanie użytkownika, wylogowanie użytkownika itp.).
Próbka danych wygląda następująco:
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | ID | SubjectUser | TargetUser | SourceIPaddress | SourceHostName | SourcePort | Komputer | DestinationIPaddress | DestinationHostName | DestinationPort | Akcja | Status | FilePath | EventID | WeekDay | DayTime | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 171390673 |? | | | | | domaincontroller1.domain.com | 1.1.1.1 | domaincontroller1.domain.com |? | / Uwierzytelnianie / Weryfikacja | / Sukces |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 173348232 |? | | | | | domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |? | / Uwierzytelnianie / Weryfikacja | / Sukces |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 180176916 |? | | | | | domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |? | / Uwierzytelnianie / Weryfikacja | / Sukces |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 144144725 |? | John.Doe | 3.3.3.3 | domaincontroller3.domain.com | 2407 | domaincontroller3.domain.com | 3.3.3.4 | domaincontroller3.domain.com |? | / Uwierzytelnianie / Weryfikacja | / Sukces |? | 4624 | 3 | 12345 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - +
Łącznie mam około 150 milionów wydarzeń. Różne zdarzenia mają wypełnione różne pola i nie wszystkie zdarzenia dotyczą logowania / wylogowywania użytkownika.