网络事件映射
编辑网络事件映射
编辑网络事件捕获一个设备与另一个设备通信的详细信息。发起方称为源,接收方称为目标。根据数据源的不同,网络事件可以包含地址、协议、报头和设备角色的详细信息。
本指南描述了 ECS 中用于网络相关事件的不同字段集,并提供了关于将其映射到 ECS 的最佳实践的指导。
源和目标基线
编辑当事件包含有关发送和接收主机的详细信息时,捕获这些值的基线将是 源 和 目标 字段。
某些事件还可以指示每个主机在交换中的角色:客户端或服务器。如果此信息可用,则应除了source
和destination
字段之外,还使用客户端和服务器字段。source
/destination
下映射的字段和值应复制到client
/server
下。
网络事件映射示例
编辑下面是一个 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.*
和destination.*
字段集。
"source": { "ip": "192.168.86.222", "port": 54162 }
"destination": { "ip": "192.168.86.1", "port": 53 }
客户端和服务器字段
编辑回顾原始事件,它显示源设备是 DNS 客户端,目标设备是 DNS 服务器。source
和destination
下映射的值分别复制并映射到client
和server
下。
"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
和server
字段也适用。
-
destination.ip:192.168.86.1
返回所有目标为192.168.86.1
的事件。 -
server.ip:192.168.86.1
返回所有192.168.86.1
充当服务器的事件。
需要注意的是,虽然单个网络事务中事件之间的source
和destination
字段的值可能会反转,但client
和server
的值通常不会反转。下表展示了两个涉及两个客户端和一个服务器的 DNS 事务如何映射到source.ip
/destination.ip
与client.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.ip
、destination.ip
、client.ip
、server.ip
等),因此无论它出现在哪个字段,您都可以使用单个查询(例如related.ip:192.168.86.222
)轻松搜索该 IP。
网络事件不仅限于使用related.ip
。如果事件中存在主机名或其他主机标识符,也应填充related.hosts
。
使用事件字段进行分类
编辑在考虑事件分类字段时,使用各自允许的值填充category
和type
字段,这些值最能对源网络事件进行分类。
"event": { "category": [ "network" ], "type": [ "connection", "protocol" ], "kind": "event" }
大多数event.category/event.type ECS 配对本身就已完整。但是,event.category:network
和event.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, ... } }