映射网络事件
编辑映射网络事件编辑
网络事件捕获一个设备与另一个设备通信的详细信息。发起方称为源,接收方称为目标。根据数据源的不同,网络事件可以包含地址、协议、标头和设备角色的详细信息。
本指南介绍了 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.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
等),因此您可以使用单个查询轻松搜索 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: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, ... } }