使用机器学习进行用户识别

数据挖掘 机器学习 特征选择 监督学习
2022-03-12 07:50:32

我对机器学习很陌生,我的任务是找到可以让我识别用户的属性。

我有一组训练数据,其中包含大约 48,000 个实例,其中每个实例都标有用户 ID。这些数据是 TCP 会话,其中包含关于目标、源、ttl、开始时间、结束时间、目标 IP 地址等的数据。

我的任务是找到属性,以便在给定不同的 TCP 流以相同格式形成相同的用户组时,我将能够用适当的用户 ID 标记它们。

数据集中有 10 个用户。

我的问题是最好的方法是什么,我尝试使用 weka 运行机器学习算法的数量,但我无法正确配置它们,例如我尝试使用 K-means 但结果不符合标记的用户 ID。

1个回答

根据您的问题,我解释说您已从具有 TCP 会话相关数据的日志中提取数据,您提到的一些字段是:源/目标 IP 地址、TTL、开始时间、结束时间。您正在尝试隔离此网络流量以隔离属于 10 台唯一客户端计算机的流量。

有几种方法可以解决此客户端流量隔离问题。但首先您需要确定哪些变量在不同情况下最有意义,因为没有描述网络设置,我将列出不同的可能场景:

  1. 客户端在没有干预防火墙/代理的情况下到达服务器:在这种情况下,每个客户端都有一个唯一的源 IP 地址,这应该有助于在没有进一步分析的情况下隔离流量。
  2. 代理背后的客户端过滤流量并更改 IP 地址,以便为进入服务器的所有流量设置网关的唯一 IP 地址。在这种情况下,您可以使用以下组合:

    a) 通过 TCP/IP 数据包属性隔离客户端:TTL、SYN 数据包大小、TCP 窗口大小等属性可以识别客户端操作系统。例如 - Linux 和 Mac-OSX 的默认起始 TTL 值为 64,而 windows 的默认值为 128,其他如 Cisco/Solaris 2.x 有 255。因此您可以按操作系统类型粗略地隔离流量。

    b) 由于在客户端和服务器之间放置的每一个路由器,TTL 减 1,所以即使你有 2 台 windows 机器,但是放置在一个由多台路由器隔开的网段中,那么 TTL 数将小于 1其他 Windows 客户端。

    c) 通过 TCP 标头中的序列号和确认号进一步识别唯一会话。目标服务器的每个确认号可以与来自该会话的客户端的后续数据包的 seq 号相关。这将允许您隔离同时连接到同一服务器的用户,例如到 stackexchange.com 的 10 个不同会话。

    d) 如果您可以获得更多 Web 服务器日志详细信息,则用户代理字符串和 HTTP cookie 等属性可以帮助您识别客户端。

    e) 在某些情况下,随机源端口号。对于访问不同 dest 的不同客户端,客户端使用的 TCP 会话可能会重叠。同时,您可以放心地假设这些是来自两个不同客户端的流量。

这仍然会给您带来在不同时间点为不同服务器隔离流量的问题。为此,您可以通过以下方式分析数据:

  1. 使用 ISN 识别客户端:每个操作系统生成随机初始序列号都有一定的逻辑,如果您有大量可用的 ISN 号样本,那么您可以识别随机数生成器的属性以精确定位客户端。此 ISN 生成过程已被用于 DoS 欺骗攻击,并且许多操作系统从那时起对其进行了加强,但这仍可能为唯一识别机器提供一些线索。
  2. 分析 SSL 握手以通过其属性识别客户端,例如在 SSL 设置握手期间交换的支持的密码套件信息等。有关此技术的详细信息,请参阅本文
  3. 源端口号 通常是按递增顺序分配的,不可能每台机器都同时启动并且具有相同的 TCP 流量;这有助于唯一地识别客户。
  4. TCP/IP 时间戳:大多数操作系统会增加 TCP 标头中的时间戳,并且只要系统启动,它就会不断增加。由于系统可能在不同的时间打开,它有助于隔离客户端,即使它们具有完全相同的操作系统和浏览器版本。有关模式的详细信息,请参阅此 RFC
  5. 一些代理我使用额外的 HTTP 标头(Via、X-Forwarded-For)来指示请求数据的确切客户端主机名或地址。这提供了一种识别客户端的直接方法,但前提是您可以从数据包中访问 HTTP 标头信息。

在使用所有这些方法分离流量之后,您可以使用网络流量时间序列分析从他们使用的周期性中识别不同的用户。例如,可以识别每天早上 8:15 登录工作并在某些特定网站上查看 5 分钟的人的重复模式,并将该客户与其他人唯一隔离。

只有在详细探索数据集后才能确定更多假设和方向。

一旦您对这项准备工作感到满意,您就可以计算并添加所有这些特征以及其他直接指标,以训练一个多项分类器来预测这 10 个用户 ID。您可以使用随机森林、LogitBoost 或神经网络作为启动器。如果一个变量没有被识别为对分类很重要,则丢弃它以减少特征的总数。

对于新流量,您需要生成所有这些特征,然后使用最终训练的模型按用户对流量进行分类。