什么是zeek
Zeek是一个被动的开源网络流量分析器。许多运营商将Zeek用作网络安全监视器(NSM),以支持对可疑或恶意活动的调查。Zeek还支持安全领域以外的各种流量分析任务,包括性能评估和故障排除。
新用户从Zeek获得的第一个好处是描述网络活动的大量日志。这些日志不仅包括网络上看到的每个连接的全面记录,还包括应用程序层记录。这些包括所有HTTP会话及其请求的URI,密钥标头,MIME类型和服务器响应,带回复的DNS请求,SSL证书,SMTP会话的关键内容,以及更多。默认情况下,Zeek将所有这些信息写入结构良好的制表符分隔或JSON日志文件中,这些文件适合使用外部软件进行后处理。用户还可以选择让外部数据库或SIEM产品使用,存储,处理和显示数据以进行查询。
除了日志外,Zeek还具有用于一系列分析和检测任务的内置功能,包括:
从HTTP会话中提取文件
通过与外部注册表进行接口来检测恶意软件
报告网络上可见的易受攻击的软件版本
识别流行的网络应用程序
检测SSH暴力破解
验证SSL证书链
…
除了“开箱即用”提供如此强大的功能外,Zeek还是一个完全可定制且可扩展的流量分析平台。Zeek为用户提供了一种特定于域的图灵完备的脚本语言,用于表达任意分析任务。将Zeek语言视为“特定于域的Python”(或Perl):就像Python一样,该系统具有大量的预建功能(“标准库”),但用户也可以使用Zeek通过编写自定义代码以新颖的方式。实际上,Zeek的所有默认分析(包括日志记录)都是通过脚本完成的。没有将具体的分析硬编码到系统的核心中。
Zeek在商品硬件上运行,因此提供了昂贵的专有解决方案的低成本替代方案。Zeek在许多方面都超过了其他网络监视工具的功能,这些功能通常仍然局限于一小组硬编码的分析任务。Zeek不是经典的基于签名的入侵检测系统(IDS);尽管Zeek的脚本语言也支持这种标准功能,但它促进了范围广泛的非常不同的方法来查找恶意活动。这些包括语义滥用检测,异常检测和行为分析。
各种各样的站点都部署了Zeek来保护其基础设施,包括许多大学,研究实验室,超级计算中心,开放科学社区,大型公司和政府机构。Zeek专门针对高速,大容量网络监控,现在越来越多的站点正在使用该系统来监控其10GE网络,其中一些站点已经转移到100GE链路。
Zeek通过支持可扩展的负载平衡来适应高性能设置。大型站点通常运行“ Zeek群集”,其中高速前端负载平衡器在适当数量的后端PC上分配流量,所有这些PC在其各自的流量切片上运行专用的Zeek实例。中央管理器系统协调该过程,在后端同步状态,并为操作员提供中央管理界面,用于配置和访问汇总的日志。Zeek的集成管理框架ZeekControl开箱即用地支持此类群集设置。
Zeek的群集功能支持单系统和多系统设置。这是Zeek的可扩展性优势的一部分。例如,管理员可以在一个系统内尽可能长时间地扩展Zeek,然后在必要时透明地添加更多系统。
简而言之,Zeek经过优化,可以解释网络流量并根据该流量生成日志。它并未针对字节匹配进行优化,尝试使用Suricata之类的入侵检测系统将为寻求签名检测方法的用户提供更好的服务。Zeek也不是Wireshark的协议分析器,它试图在帧级别描述网络流量的每个元素,也不是一种以数据包捕获(PCAP)形式存储流量的系统。相反,Zeek位于代表小型但高保真度网络日志的“happy medium”(happy medium:避免任何极端情况的好选择或条件)上,从而使人们对网络流量和使用情况有了更好的了解。
0x01b 为什么选择zeek
Zeek为希望更好地了解其基础结构使用方式的安全和网络团队提供了许多优势。
安全团队在尝试检测和响应可疑和恶意活动时通常依赖于四种数据源。这些包括第三方来源,例如执法机构,同行,商业或非营利组织的威胁情报组织;网络数据; 基础架构和应用程序数据,包括来自云环境的日志;和端点数据。Zeek主要是一个用于收集和分析第二种数据形式(网络数据)的平台。但是,所有这四个要素都是任何安全团队计划的重要组成部分。
查看来自网络的数据时,分析人员可以使用四种类型的数据。根据网络安全监视范式的定义,这四种数据类型是完整内容,事务数据,提取的内容和警报数据。使用这些数据类型,可以分别记录流量,汇总流量,提取流量(或更准确地说,提取文件形式的内容)并判断流量。
收集和分析四种类型的网络安全监视数据至关重要。问题成为确定实现此目标的最佳方法之一。值得庆幸的是,作为NSM平台的Zeek可以收集至少两种(以某种方式三种)这些数据形式,即交易数据,提取的内容和警报数据。
Zeek以其交易数据而闻名。默认情况下,当运行并被告知监视网络接口时,Zeek将生成一组紧凑,高保真,带有丰富注释的事务日志集。这些日志以不受评判的政策中立方式描述了在线上看到的协议和活动。该文档将花费大量时间描述最常见的Zeek日志文件,以便读者熟悉该格式并将其应用于其环境。
由于Zeek具有文件提取功能,它还可以轻松地从网络流量中分割文件。然后,分析师可以将这些文件发送到执行沙箱或其他文件检查工具,以进行其他调查。Zeek具有执行传统的以字节为中心的入侵检测的功能,但该工作最适合于开源Snort或Suricata引擎之类的程序包。Zeek还具有其他功能,可以通过其通知机制以警报的形式提供判断。
Zeek并未针对从完整内容数据收集的角度将流量写入磁盘进行优化,并且最好由满足该要求的软件来完成该任务。
除了Zeek可以本地收集和生成的网络数据形式之外,Zeek还具有 用于一系列分析和检测任务的内置功能,以及其作为完全可定制和可扩展的流量分析平台的地位。Zeek还具有吸引力,因为它能够在商品硬件上运行,从而使所有类型的用户至少能够以低成本方式试用Zeek。
0x01c 架构
在很高的层次上,Zeek在体系结构上分为两个主要组件。它的事件引擎(或核心)将传入的数据包流减少为一系列更高级别的事件。这些事件以与策略无关的方式反映了网络活动,即,它们描述了已看到的内容,而不是原因或意义是否重大。
例如,线路上的每个HTTP请求都变成一个相应的 http_request事件,该事件带有所涉及的IP地址和端口,所请求的URI以及所使用的HTTP版本。但是,该事件未传达任何进一步的解释,例如该URI是否对应于已知的恶意软件站点。
事件引擎组件包括多个子组件,特别是包括以下内容的包处理管道:输入源,包分析,会话分析和文件分析。输入源从网络接口摄取传入的网络流量。数据包分析处理较低级别的协议,从链路层一直开始。会话分析处理应用程序层协议,例如HTTP,FTP等。文件分析剖析了通过会话传输的文件的内容。事件引擎提供了一个插件架构,可以从Zeek核心代码库的外部添加其中的任何一个,从而可以根据需要扩展Zeek的功能。
与事件相关的语义是由Zeek的第二个主要组件脚本解释器派生的,该脚本解释器执行一组用Zeek的自定义脚本语言编写的事件处理程序。这些脚本可以表示站点的安全策略,例如,当监视器检测到不同类型的活动时要采取的操作。
更一般而言,脚本可以从输入流量中得出任何所需的属性和统计信息。实际上,Zeek的所有默认输出都来自发行版中包含的脚本。Zeek的语言带有广泛的特定于域的类型和支持功能。至关重要的是,Zeek的语言允许脚本随时间保持状态,从而使脚本能够跟踪并关联跨连接和主机边界观察到的内容的演变。Zeek脚本可以生成实时警报,还可以根据需要执行任意外部程序。人们可能会使用此功能来触发对攻击的主动响应。
0x02 用Zeek监控
检测和响应工作流程
如前几节所述,Zeek进行了“开箱即用”的优化,以提供四种类型的网络安全监视数据中的两种。Zeek无需任何主要配置,就可以以日志的形式提供交易数据和提取的内容数据,这些日志汇总了遍历网络的协议和文件。Zeek还可以以通知的形式提供一定程度的警报数据,并且分析师可以根据需要修改Zeek以创建自定义警报。但是,专用的入侵检测引擎(例如Suricata或Snort)可能更合适。最后,Zeek不会以pcap格式收集全部内容数据,尽管其他开源项目确实提供了该功能。
从广义上讲,事件检测和响应始于收集安全数据,然后对其进行分析。在分析阶段,如果没有明确的恶意活动警报,调查人员可以进行两个广泛的调查类别:“匹配”和“狩猎”。匹配是指查询和检查安全数据以获取已知危害指标的迹象。狩猎意味着在没有妥协迹象的情况下进行工作,而是依靠建立一种假设来假设对手活动可能如何在安全数据中体现出来。匹配是一种可以轻松自动化的活动。狩猎是一项难以自动化的活动,因为它依赖于网络安全“实验”的创建来产生结果,并且往往需要一点人的直觉。
在一般情况下,一些安全团队认为狩猎涉及查询数据以寻找破坏迹象。这实际上只是一个搜索功能,即在收集的数据中查找“预期不良”的匹配项。真正的狩猎涉及更多的科学方法,该方法要求拟定假设,在样本和生产数据中测试假设,然后完善流程,直到产生结果或被证实。产生结果的调查方法Zeek数据在匹配或搜寻操作中起作用。分析师可以查询Zeek事务日志的存储以获取危害指标,并在看到IP地址,用户名或HTTP用户代理字符串或Zeek的数百个元素中的任何单个或组合匹配时开始进行安全调查。来自网络流量。
除了匹配和搜寻范式之外,分析人员还可以在“事件检测警报”工作流中使用Zeek。在这种情况下,IDS将创建警报,以引起安全团队成员的注意。由于IDS警报通常只关注细节,因此分析人员需要佐证数据才能确定警报是否代表正常,可疑或恶意活动。分析师可以将IDS警报“透视”到Zeek生成的各种日志中。如果IDS警报提供了Zeek支持的社区标识(社区ID),则分析人员可以轻松地将IDS警报绑定到特定的Zeek日志。根据Zeek提供的数据,分析师可能能够解决此事件。至少,分析人员可以访问初始IDS通知之外的数据,从而可以加快警报验证和验证过程。
最后,在任何其他外部刺激因素的提示下,分析人员可以使用Zeek数据来改进验证过程。例如,分析人员可能注意到系统上正在运行一个奇怪的进程,这由其端点检测和响应(EDR)或防病毒代理报告。或者,分析人员可能会收到来自用户或同伴的报告,该报告涉及面向Internet的Web服务器上的可疑活动。在这两种情况下,有权访问Zeek数据的分析师都可以通过查询存储其Zeek日志的存储库来寻求学习有关系统的所有信息。这种安全设计模式具有巨大的好处,因为它不会影响可疑资产的最终状态。不接触可能受到威胁的系统有两个好处。第一的,入侵者破坏了资产,仍然没有意识到安全团队正在对其进行调查。其次,由于分析人员正在使用设备外存储的日志,因此资产的取证完整性保持不变。
0x02a 仪器与采集
Zeek旨在监视实时网络流量。尽管Zeek可以处理以PCAP格式保存的数据包捕获,但是大多数用户都部署Zeek以获得对网络使用模式的近实时洞察。管理员通过告诉Zeek“嗅探”一个或多个网络接口,并基于在这些网络接口上看到的网络流量,生成事务日志,见解和提取的文件内容,来运行Zeek。
一些用户可能选择在用于一般计算目的的单台计算机上运行Zeek,以监视进出该单台计算机的网络流量。该系统可能是用于商务目的的办公笔记本电脑,被选择用于Zeek的实验。这是熟悉Zeek创建的日志的简单方法。这种方法类似于出于相同的教育目的在自己的计算机上运行Tcpdump或Wireshark。
但是,大多数用户仅在出于网络安全监视目的而选择的计算机上运行Zeek。安全人员将该计算机称为“传感器”,他们专门选择,配置和部署该计算机以监视网络流量。他们在环境中选择一个位置,该位置可以为多台计算机提供可见性,并使用Zeek部署传感器以对该网段进行检测。
0x02b 储存和审查
当Zeek通过监视一个或多个实时网络接口或通过处理捕获文件中存储的流量来摄取网络流量时,它会创建各种日志和其他工件。默认情况下,Zeek将该数据写入通过其配置文件指定的存储位置。Zeek具备以多种格式编写日志并执行某些日志管理过程(如压缩和存档)的功能。
分析师通过查看Zeek生成的日志来使用Zeek数据。审阅方法可以像使用与底层操作系统打包在一起的文本处理工具一样简单。根据日志的格式,用户可能会应用更专业的处理工具,其中一些可以在Zeek中使用。在许多情况下,Zeek管理员会将日志发送到专门的存储并查看应用程序。这些通常统称为安全和信息事件管理(SIEM)平台。这些日志管理和SIEM平台中的某些可作为开源产品获得,而其他则可通过商业途径获得。