我的目标是使用群集/异常检测(用于入侵检测)分析网络日志(例如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,计算机,DestinationIPaddress,DestinationHostName,DestinationPort,操作,状态,FilePath,EventID,WeekDay,DayTime。
事件是Active Directory事件,其中EventID定义了记录的内容(例如,创建Kerberos票证,用户登录,用户注销等)。
数据样本如下所示:
+ ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -+ | ID | SubjectUser | TargetUser | SourceIPaddress | SourceHostName | SourcePort |计算机| DestinationIPaddress | DestinationHostName | DestinationPort | Action |状态| FilePath | 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 | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -+
总共我有1.5亿个事件。不同的事件具有不同的字段,并且并非所有事件都与用户登录/注销有关。