Zeek 简介
zeek 是一个被动的开源网络流量分析器,可深入检查网络连接上的所有流量以查找可疑活动的迹象。因其可扩展性强、可开箱即用等特点,被称为 “流量分析里的瑞士军刀”。
不同于 Snort 等基于流量签名检测的入侵检测系统(IDS),zeek 是基于网络连接来分析可疑行为的。具体地说,Zeek 会对每个网络中传输的数据包,从中提取出发送端的 IP 和端口以及接收端的 IP 和端口,从而通过四元组定义一个网络连接,并且将具有相同四元组的数据包收集在一起,再通过对应的 TCP、UDP 协议解析,对数据包进行排序重组,最后将其中携带的应用层数据交由应用层协议解析器,从而提取出数据包中所包含的所有内容,包括但不限于:应用层协议字段、传输的文件内容、协议记录等。
但是,了解Zeek的关键在于认识到,即使该系统具有开箱即用的强大功能,但从根本上来说,它还是一个可完全自定义和扩展的流量分析平台:Zeek为用户提供了特定于域的 Turing-完整的脚本语言用于表达任意分析任务。从概念上讲,您可以将Zeek视为 “特定于网络流量的 Python”:就像Python一样,该系统具有大量的预构建功能(“标准库”),但您不仅限于系统附带的功能,但可以通过编写自己的代码使Zeek以新颖的方式使用。实际上,Zeek的所有默认分析(包括所有日志记录)都是此类脚本的结果。没有硬编码到系统核心中的特定分析。
特征
Zeek通过其脚本语言支持广泛的分析。即使没有进一步的自定义,它也具有强大的功能集。
-
部署方式
- 在标准UNIX风格的系统(包括Linux,FreeBSD和MacOS)上的商用硬件上运行。
- 通过网络分接头或监视端口进行完全被动的流量分析。
- 用于捕获数据包的标准libpcap接口。
- 实时和离线分析。
- 集群支持大规模部署。
- 统一管理框架,可用于独立和群集设置。
- 在BSD许可下开源。
-
分析
- 全面记录活动,以进行离线分析和取证。
- 与应用程序层协议无关的端口分析。
- 支持许多应用程序层协议(包括DNS,FTP,HTTP,IRC,SMTP,SSH,SSL)。
- 分析通过应用层协议交换的文件内容,包括用于指纹识别的MD5 / SHA1计算。
- 全面的IPv6支持。
- 隧道检测和分析(包括Ayiya,Teredo,GTPv1)。Zeek将隧道解封装,然后继续分析其内容,就好像没有适当的隧道一样。
- 在协议分析过程中进行全面的健全性检查。
- 支持IDS样式的模式匹配。
-
脚本语言
- 图灵完备的语言,用于表达任意分析任务。
- 基于事件的编程模型。
- 特定于域的数据类型,例如IP地址(透明地处理IPv4和IPv6),端口号和计时器。
- 广泛支持随着时间的推移跟踪和管理网络状态。
-
界面
- 默认输出为结构良好的ASCII日志。
- ElasticSearch和DataSeries的备用后端。正在准备其他数据库接口。
- 外部输入实时集成到分析中。正在准备实时数据库输入。
- 外部C库,用于与外部程序交换Zeek事件。带有Perl,Python和Ruby绑定。
- 能够从脚本语言内部触发任意外部进程。
历史
Architecture
下图说明了Zeek群集的主要组件。
有关Zeek流程的连接方式,它们如何运行以及如何相互通信的更多特定信息,请参阅 Broker Framework文档。
Tap
Tap 是一种机制,用于拆分数据包流,以使副本可用于流量检查。示例包括交换机上的监视端口和光纤网络上的光分路器。
Frontend
Frontend 是一种离散的硬件设备或主机技术,可将流量分成许多流或流。Zeek二进制文件不执行此工作。有多种方法可以完成此任务。
Manager
Manager 是一个Zeek流程,它使用 Zeek 通信协议从群集中其余节点接收日志消息和通知(请注意,如果使用单独的 Logger 节点,那么 Logger 将接收所有日志,而不是 Manager)。
Logger
Logger 是一个可选的Zeek进程,它使用Zeek通信协议从群集中其余节点接收日志消息。让 Logger 代替 Manager 接收日志的目的是为了减轻管理员的负担。如果不需要 Logger,则 Manager 将改为接收日志。
Proxy
代理是Zeek进程,可用于卸载数据存储或任何任意工作负载。一个群集可能包含多个代理节点。Zeek随附的默认脚本使用的代理最少,因此仅使用一个代理就足够了,但是自定义使用它们来分区数据或工作负载提供了更大的群集可扩展性,而不仅仅是在单个集中式Manager节点上执行类似任务。
充当代理的Zeek进程在CPU或内存上的使用并不十分困难,并且用户经常在与管理器相同的物理主机上运行代理进程。
Worker
工作进程是Zeek进程,用于嗅探网络流量并对重组后的流量进行协议分析。活动集群的大部分工作都在工作程序上进行,因此,工作程序通常代表集群中正在运行的大部分Zeek进程。由于所有协议解析和大多数分析都将在此处进行,因此建议您使用负担得起的最快内存和CPU核心速度。对工作器中的磁盘没有特殊要求,因为几乎所有日志记录都是在远程对管理器进行的,并且通常很少写入磁盘。