这个 Zeek 包提供对 Community ID 流哈希的支持,这是一种在网络监控器中标记流量流的标准化方式。加载该包后,它会在 conn.log 中添加一个 community_id 字符串字段。
注意
Zeek 6 及更高版本已包含 Community ID 支持。 使用这些 Zeek 版本时,您不再需要此包。 详情请参阅 相关文档。
该包实现了一个 BiF 来执行哈希逻辑,因此需要二进制编译,所以它同时也是一个 Zeek 插件。以下是一个生成的 conn.log 示例:
#separator \x09
#set_separator ,
#empty_field (empty)
#unset_field -
#path conn
#open 2018-01-31-13-06-56
#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes conn_state local_orig local_resp missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents community_id
#types time string addr port addr port enum string interval count count string bool bool count string count count count count set[string] string
1071580904.891921 CPcWB54kqKkvkdNEXe 128.232.110.120 34855 66.35.250.204 80 tcp - 0.311104 496 1731 SF - - 2227 ShADadfF 6 816 6 2051 - 1:LQU9qZlK+B5F3KDmev6m5PMibrg=
#close 2018-01-31-13-06-56
该包在 Zeek 的 notice.log 中支持带连接上下文的 notice 使用 Community ID。如果您想使用此功能,请在您的 local.zeek 或类似的站点本地配置中添加以下行:
@load zeek-community-id/notice
当 Community ID 包本身未加载时,此行不产生任何效果。采用这种额外脚本的方式,可以确保不希望其 notice.log 中出现该 ID 的用户,其日志不会因多出一个始终无用的列而变得杂乱。
Community ID 规范目前设想支持若干协议组合,而 Zeek 对这些协议组合并不跟踪流级状态,因为其分析器不知道该如何处理这类流量。对于此类流,Zeek 永远不会触发该包所依赖的连接相关事件,因此 conn.log 中也不会有输出。(如果存在 Zeek 在流级别跟踪但该插件不支持的协议,则报告的 ID 将为空。)我们目前支持基于 IPv4 或 IPv6 的 TCP 和 UDP,以及 ICMPv4 和 ICMPv6。我们不支持其他传输层协议(如 SCTP),也不支持针对不受支持的传输层协议的通用 IP 地址对流。
该包的名称为 zeek-community-id;插件名称为 Corelight::CommunityID。您可以在相应的 Zeek 脚本 中查看该包的配置选项。
Community ID 包适用于自 2.6.4 起的任何 Zeek 版本。由于 Zeek 代码库自那时起经历了重大变化,该包提供了支持特定 Zeek 版本范围的兼容分支,在可读代码与安装及分支管理的便捷性之间取得平衡。
在 zeek/x.y 和 master 分支上,git 标签标记了 Community ID 的各个版本。例如,3.1.0 是 zeek/3.1 分支上的首个版本,适用于 3.1 系列中的任何 Zeek。面向 Zeek 3.1 系列的下一个 Community ID 版本将命名为 3.1.1,同样位于该分支上,之后依次为 3.1.2 等。(因此,这并非语义化版本控制。)
每个分支还会在 zkg.meta 中声明一个 Zeek 版本兼容窗口,因此若与不兼容的 Zeek 版本搭配,将不会被安装。例如,master 分支目前要求至少为 Zeek 3.2.0,且不设上限。
以下是 Zeek 版本、git 标签和 git 分支的对应关系摘要:
| Zeek 版本 | Git 标签 | Git 分支 |
|---|---|---|
| 2.6.4 - 3.0.x | 3.0.y | zeek/3.0 |
| 3.1.x | 3.1.y | zeek/3.1 |
| 3.2.x - master | 3.2.y | master |
该包包含 btests,用于验证插件加载,并将测试 pcap 交由 Zeek 处理,以检查基线化的 Zeek 控制台输出。您可以在 tests 目录中通过执行 btest -c btest.cfg 来运行这些测试。
如有问题和反馈,请通过 Zeek 邮件列表 或 Zeek Slack 与我们联系。欢迎提交 Github issue 和 PR。