我的目标是使用集群/异常检测来分析网络日志(例如,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、Computer、DestinationIPaddress、DestinationHostName、DestinationPort、Action、Status、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 亿个事件。不同的事件填写不同的字段,并非所有事件都与用户登录/注销有关。