Моя мета - проаналізувати мережеві журнали (наприклад, Apache, syslog, аудит безпеки Active Directory тощо), використовуючи кластеризацію / виявлення аномалії для виявлення вторгнень.
З журналів у мене є багато текстових полів, таких як IP-адреса, ім’я користувача, ім’я хоста, порт призначення, порт джерела тощо (загалом 15-20 полів). Я не знаю, чи є якісь атаки в журналах, і хочу виділити найбільш підозрілі події (аутлієри).
Зазвичай виявлення аномалії позначає точки з низькою ймовірністю / частотою як аномалії. Однак половина записів журналів містить унікальну комбінацію полів. Отже, половина записів у наборі даних матиме найменшу можливу частоту.
Якщо я використовую виявлення аномалії на основі кластеризації (наприклад, знаходжу кластери, а потім вибираю точки, що знаходяться далеко від усіх центрів кластерів), мені потрібно знайти відстань між різними точками. Оскільки у мене 15-20 полів, це буде багатовимірний простір, де розмірами є ім’я користувача, порт, IP-адреса тощо. Однак відстань махаланобіса може бути застосована лише до нормально розподілених функцій. Це означає, що немає можливості знайти відстань між точками даних та побудувати кластери ...
Наприклад, давайте уявимо, що в наборі даних із 20 записів у мене є користувачі Аліса, Боб, Керол, Дейв, Єва та Франк. У базі даних може бути така кількість випадків: 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-адреса тощо тощо, не приносить нічого.
Тому я хотів би запитати, як обробляються текстові поля / функції, побудовані зазвичай для того, щоб зробити неможливим виявлення аномалії / випередження?
EDIT: структура даних.
У таблиці бази даних близько 100 стовпців, що містять інформацію з Active Directory Events. З цих 100 стовпців я вибираю найважливіші (з моєї точки зору): SubjectUser, TargetUser, SourceIPaddress, SourceHostName, SourcePort, Комп'ютер, DestinationIPaddress, DestinationHostName, DestinationPort, Action, Status, FilePath, EventID, WeekDay, DayTime.
Події - це події Active Directory, де EventID визначає, що було зареєстровано (наприклад, створення квитка Kerberos, вхід користувача, вихід з користувача тощо).
Зразок даних виглядає наступним чином:
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | ID | SubjectUser | TargetUser | SourceIPaddress | SourceHostName | SourcePort | Комп'ютер | ПризначенняIPadadress | DestinationHostName | DestinationPort | Дія | Статус | Файл | Шлях | EventID | WeekDay | DayTime | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 171390673 |? |? |? |? |? | domaincontroller1.domain.com | 1.1.1.1 | domaincontroller1.domain.com |? | / Аутентифікація / Перевірка | / Успіх | | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 173348232 | |? |? |? |? | domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |? | / Аутентифікація / Перевірка | / Успіх | | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 180176916 |? |? |? |? |? | domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |? | / Аутентифікація / Перевірка | / Успіх | | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 144144725 |? | John.Doe | 3.3.3.3 | domaincontroller3.domain.com | 2407 | domaincontroller3.domain.com | 3.3.3.4 | domaincontroller3.domain.com |? | / Аутентифікація / Перевірка | / Успіх | | 4624 | 3 | 12345 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - +
Всього у мене є близько 150 мільйонів подій. У різних подіях заповнюються різні поля, і не всі події пов'язані з входом / відходом користувача.