Zeek 的日志体系
Zeek 把流量解析成按协议划分的结构化日志:conn 记录会话元数据,dns 记录解析请求与应答,http 记录应用层请求,ssl 记录加密会话信息,files 记录传输的文件,notice 记录告警。每条记录带唯一标识 uid,同一次会话跨多个协议日志都能用 uid 串起来。相比原始抓包,它的优势是体积小、字段齐、可直接聚合查询;代价是不保存载荷,需要内容级证据时仍要回到 pcap。
日志与关联键
| 日志 | 关注字段 | 联动方式 |
|---|---|---|
| conn | uid、五元组、时长、字节数、conn_state | 以 uid 串联同一会话的各协议日志 |
| dns | query、answers、rcode | 按域名找发起主机,按 rcode 找解析失败 |
| http | method、host、uri、status_code、user_agent | 定位请求来源与异常路径 |
| ssl | server_name、issuer、ja3 | 证书与指纹比对,识别同一家族流量 |
| files | 文件名、哈希、来源会话 | 把文件与下载会话对应起来 |
| notice | 告警类型与相关 uid | 作为筛查入口,回到原始日志核实 |
基本信息
| 适用平台 | Linux/BSD 上的 Zeek 传感器,通常配合抓包点位部署 |
|---|---|
| 日志位置 | 默认在站点日志目录,按天轮转与压缩 |
| 读取工具 | zeek-cut 从 TSV 中抽取指定列,awk 也可直接处理 |
| 时间基准 | 日志中的时间戳为 epoch 秒(浮点),需换算显示 |
| 体积优势 | 比同流量的 pcap 小得多,适合长期留存 |
| 局限 | 不保存载荷,内容级证据仍需 pcap |
典型使用场景
- 按 uid 还原一次会话涉及的 DNS、HTTP、TLS 与应用行为
- 统计 conn_state 分布,识别扫描与失败连接密集的时间段
- 按 ja3 或证书指纹聚合,找出使用同类工具的受控主机
- 把 files 日志中的哈希与终端记录比对,确认文件落地范围
- 用 DNS 日志回溯域名解析时间,判断通信何时建立
- 为集中检索平台提供结构化输入,替代全文检索原始抓包
检索示例
检索示例
# 用 uid 串起一次会话:先找 conn,再查同 uid 的其他日志
zeek-cut uid id.orig_h id.resp_h id.resp_p duration orig_bytes resp_bytes conn_state < conn.log | head
# 统计连接状态分布:S0 大量出现通常意味着扫描或无响应连接
zeek-cut conn_state < conn.log | sort | uniq -c | sort -rn | head
# 按域名找发起主机
zeek-cut query id.orig_h rcode < dns.log | grep -F 'example-cdn.net' | head
# 异常请求路径与响应码
zeek-cut host uri status_code id.orig_h < http.log | awk '$3>=400' | head -20
# 加密会话的证书与 JA3 指纹
zeek-cut server_name issuer ja3 id.orig_h < ssl.log | head -20conn_state 取值与判读
| 取值 | 含义 | 判读要点 |
|---|---|---|
| S0 | 发起连接但无应答 | 大量出现多为扫描或目标未监听 |
| SF | 正常建立并正常结束 | 基线以它为主,异常要看对应协议日志 |
| REJ | 连接被拒绝 | 密集出现可能是端口扫描 |
| RSTO/RSTR | 重置相关状态 | 可对应被中断的会话或被阻断的连接 |
| OTH | 未完成握手等其他情形 | 需结合协议日志判断真实行为 |
先按 uid 串会话,再按域名或 IP 跨会话聚合。两轮聚合顺序颠倒时容易在大量记录里打转,效率显著下降。
conn 日志只记录元数据,载荷证据仍在 pcap 里。若 pcap 的采集点位与 Zeek 传感器时钟不一致,对齐时以 uid 为准,不要用绝对时间直接拼接。