映射网络事件编辑

网络事件捕获一个设备与另一个设备通信的详细信息。发起方称为源,接收方称为目标。根据数据源的不同,网络事件可以包含地址、协议、标头和设备角色的详细信息。

本指南介绍了 ECS 中可用于网络相关事件的不同字段集,并提供了将它们映射到 ECS 最佳实践的指导。

源和目标基线编辑

当事件包含有关发送和接收主机的信息时,捕获这些值的基线将是目标字段。

某些事件还可以指示每个主机在交换中的角色:客户端或服务器。当此信息可用时,客户端服务器字段应与目标字段一起使用。在/目标下映射的字段和值应复制到客户端/服务器下。

网络事件映射示例编辑

下面是一个 DNS 网络事件。源设备 (192.168.86.222) 发出 DNS 查询,充当客户端,而 DNS 服务器是目标 (192.168.86.1)。

请注意,如果这是一个完整的映射示例,此事件包含将填充其他字段的详细信息(例如DNS 字段)。这里省略了这些附加字段,以便专注于网络详细信息。

{
  "ts":1599775747.53056,
  "uid":"CYqFPH3nOAa0kPxA0d",
  "id.orig_h":"192.168.86.222",
  "id.orig_p":54162,
  "id.resp_h":"192.168.86.1",
  "id.resp_p":53,
  "proto":"udp",
  "trans_id":28899,
  "rtt":0.02272200584411621,
  "query":"example.com",
  "qclass":1,
  "qclass_name":"C_INTERNET",
  "qtype":1,
  "qtype_name":"A",
  "rcode":0,
  "rcode_name":"NOERROR",
  "AA":false,
  "TC":false,
  "RD":true,
  "RA":true,
  "Z":0,
  "answers":["93.184.216.34"],
  "TTLs":[21209.0],
  "rejected":false
}
源和目标字段编辑

首先,填充源.*目标.*字段集

  "source": {
    "ip": "192.168.86.222",
    "port": 54162
  }
  "destination": {
    "ip": "192.168.86.1",
    "port": 53
  }
客户端和服务器字段编辑

回顾原始事件,它显示源设备是 DNS 客户端,目标设备是 DNS 服务器。在目标下映射的值分别复制并映射到客户端服务器下。

  "client": {
    "ip": "192.168.86.222",
    "port": 54162
  }
  "server": {
    "ip": "192.168.86.1",
    "port": 53
  }

映射这两对字段集可以通过两种方式查询可见同一网络事务。

  • source.ip:192.168.86.222 返回来自192.168.86.222的所有事件,而不管其在事务中的角色如何。
  • client.ip:192.168.86.222 返回主机192.168.86.222充当客户端的所有事件。

目标服务器字段也是如此。

  • destination.ip:192.168.86.1 返回发送到192.168.86.1的所有事件。
  • server.ip:192.168.86.1 返回192.168.86.1充当服务器的所有事件。

需要注意的是,虽然目标字段的值在单个网络事务中的事件之间可能会颠倒,但客户端服务器的值通常不会颠倒。下表演示了涉及两个客户端和一个服务器的两个 DNS 事务如何分别映射到source.ip/destination.ipclient.ip/server.ip

表 1. 源/目标

source.ip destination.ip 事件

192.168.86.222

192.168.86.1

DNS 查询请求 1

192.168.86.1

192.168.86.222

DNS 应答响应 1

192.168.86.42

192.168.86.1

DNS 答案请求 2

192.168.86.1

192.168.86.42

DNS 答案请求 2

表 2. 客户端/服务器

client.ip server.ip 事件

192.168.86.222

192.168.86.1

DNS 查询请求 1

192.168.86.222

192.168.86.1

DNS 应答响应 1

192.168.86.42

192.168.86.1

DNS 查询请求 2

192.168.86.42

192.168.86.1

DNS 应答响应 2

相关字段编辑

related.ip字段在一个数组中捕获事件中存在的所有 IP。

  "related": {
    "ip": [
      "192.168.86.222",
      "192.168.86.1",
      "93.184.216.34"
    ]
  }

相关字段旨在方便透视。由于这些 IP 地址可以出现在许多不同的字段中(source.ipdestination.ipclient.ipserver.ip等),因此您可以使用单个查询轻松搜索 IP,无论它出现在哪个字段中,例如related.ip:192.168.86.222

网络事件不仅限于使用related.ip。如果事件中存在主机名或其他主机标识符,则还应填充related.hosts

使用事件字段进行分类编辑

在考虑事件分类字段时,使用最能对源网络事件进行分类的允许值来填充类别类型字段。

  "event": {
    "category": [
      "network"
    ],
    "type": [
      "connection",
      "protocol"
    ],
    "kind": "event"
  }

大多数event.category/event.typeECS 对本身就是完整的。但是,event.category:networkevent.type:protocol的配对是一个例外。当这两个字段/值对都用于对事件进行分类时,还应填充network.protocol字段。

  "network": {
    "protocol": "dns",
    "type": "ipv4",
    "transport": "udp"
  }
结果编辑

将到目前为止涵盖的所有内容放在一起,我们得到了一个最终的 ECS 映射事件。

{
  "event": {
    "category": [
      "network"
    ],
    "type": [
      "connection",
      "protocol"
    ],
    "kind": "event"
  },
  "network": {
    "protocol": "dns",
    "type": "ipv4",
    "transport": "udp"
  },
  "source": {
    "ip": "192.168.86.222",
    "port": 54162
  },
  "destination": {
    "ip": "192.168.86.1",
    "port": 53
  },
  "client": {
    "ip": "192.168.86.222",
    "port": 64734
  },
  "server": {
    "ip": "192.168.86.1",
    "port": 53
  },
  "related": {
    "ip": [
      "192.168.86.222",
      "192.168.86.1",
      "93.184.216.34"
    ]
  },
  "dns": { ... }, 
  "zeek": { "ts":1599775747.53056, ... } 
}

同样,这里没有深入探讨 DNS 字段,但为了完整性起见,将其包含在内。

原始字段可以选择保留为自定义字段。