Моя цель - проанализировать сетевые журналы (например, 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-адрес и т. Д., С номерами ничего не приносит.
Поэтому я хотел бы спросить, как обрабатываются текстовые поля / функции, обычно создаваемые для того, чтобы сделать возможным обнаружение аномалии / выброса без присмотра?
РЕДАКТИРОВАТЬ: структура данных.
У меня есть около 100 столбцов в таблице базы данных, содержащей информацию из событий Active Directory. Из этих 100 столбцов я выбираю наиболее важные (с моей точки зрения): SubjectUser, TargetUser, SourceIPaddress, SourceHostName, SourcePort, компьютер, DestinationIPaddress, DestinationHostName, DestinationPort, действие, статус, FilePath, EventID, WeekDay, DayTime.
События - это события Active Directory, где EventID определяет, что было зарегистрировано (например, создание билета Kerberos, вход пользователя в систему, выход пользователя из системы и т. Д.).
Пример данных выглядит следующим образом:
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | ID | SubjectUser | TargetUser | SourceIPaddress | SourceHostName | SourcePort | Компьютер | DestinationIPaddress | DestinationHostName | DestinationPort | Действие | Состояние | FilePath | EventID | WeekDay | WeekTay | DayTime | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 171390673 | |? |? |? |? | domaincontroller1.domain.com | 1.1.1.1 | domaincontroller1.domain.com |? | / Authentication / Проверка | / Успех |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 173348232 |? |? |? |? |? | domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |? | / Authentication / Проверка | / Успех |? | 4624 | 1 | 61293 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - + | 180176916 | |? |? |? |? | domaincontroller2.domain.com | 2.2.2.2 | domaincontroller2.domain.com |? | / Authentication / Проверка | / Успех |? | 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 / Проверка | / Успех |? | 4624 | 3 | 12345 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- - +
Всего у меня около 150 миллионов событий. В разных событиях заполнены разные поля, и не все события связаны с входом / выходом пользователя из системы.