Zeek日志分析入门
概述
Zeek(前身为Bro)是一个被动的网络安全监控工具,用于网络流量分析和日志记录。它生成丰富的日志数据,支持入侵检测、取证分析和审计。本文基于Troy Wojewoda的分享,介绍Zeek日志的基本概念、分析方法和实际应用。
Zeek日志基础
- 日志格式:Zeek默认生成制表符分隔值(TSV)格式日志,也支持JSON格式。TSV更适合命令行处理,而JSON便于集成到SIEM系统,但占用更多存储空间。
- 工具推荐:使用
zeek-cut
或Linuxcut
命令提取字段;jq
工具处理JSON日志。 - 常见日志类型:包括
conn.log
(连接日志)、dns.log
、http.log
、files.log
、ssl.log
等。conn.log
记录所有连接尝试,是其他日志的基础。
关键概念
- 唯一标识符:Zeek使用多种ID关联日志:
uid
:连接唯一ID,用于跨日志关联事件。fuid
:文件唯一ID,用于跟踪文件传输。- 主机和端口标识符:区分源(originator)和响应(responder)主机。
- 时间戳:记录为Unix epoch时间,精度到纳秒。注意:连接开始时间戳与应用层事件时间戳可能不同(例如TCP握手延迟)。
- 网络监控位置:部署位置影响日志数据。外部部署可捕获入站攻击,但NAT可能模糊内部主机;内部部署便于检测信标等出站活动。
日志分析技巧
- 字段提取:使用
zeek-cut -f <字段名>
或cut -f <列号>
快速提取特定字段(如IP、端口、协议)。 - 协议关联:通过
uid
关联conn.log
与协议日志(如DNS查询与响应在dns.log
中合并记录)。 - 文件分析:
files.log
记录文件传输,包括MIME类型、哈希值(SHA1、MD5)和PE文件分析。 - 加密流量:即使协议加密(如TLS/SSL),Zeek仍能记录握手信息(如版本、密码套件、SNI)。
实际应用
- 威胁检测:编写自定义脚本或使用SIEM规则,基于日志模式检测异常(如弱密码套件、可疑文件传输)。
- 审计与合规:检查环境中使用的协议版本(如TLS 1.0、SSH v1),识别安全风险。
- 取证分析:通过日志回溯网络活动,例如关联文件下载与HTTP请求。
高级功能
- 社区包:通过packages.zeek.org扩展功能,如JA3指纹用于TLS客户端识别。
- 自定义脚本:Zeek基于脚本语言,支持用户自定义日志字段和检测逻辑。
总结
Zeek提供深度网络可见性,其日志是安全运营的核心资源。通过掌握日志结构、标识符和工具使用,可有效提升威胁检测和响应能力。