导语:Zeek网络安全监控器为网络流量分析提供了一个强大的开源平台,但是,从它的网络优势来看,Zeek缺乏对主机级语义的访问,例如负责观察到的任何连接的进程和用户帐户。
Zeek网络安全监控器为网络流量分析提供了一个强大的开源平台,但是,从它的网络优势来看,Zeek缺乏对主机级语义的访问,例如负责观察到的任何连接的进程和用户帐户。全新的Zeek代理通过将Zeek与你的端点接口直接连接来填补这一空白,从而提供了对制定安全决策非常有价值的语义上下文。代理通过自定义探测收集端点数据,也可以通过与osquery接口将其大部分表提供给Zeek来收集端点数据。
研究人员在自由的BSD许可下以开源代码的形式发布Zeek代理,转至发布页面,然后立即在你的macOS和Linux端点上尝试; Windows支持即将推出!请通过在GitHub上提交问题或在新的Zeek Slack上加入#zeek-agent频道与研究人员分享你的想法、请求和其他反馈。
Zeek工作原理
传统上,网络安全监控器仅接收主机(端点)之间被动拦截的网络流量。尽管该优势非常强大(网络不会说谎!),但它无法提供完整的情况,而且要了解谁在端点上执行操作的更广泛的背景可能是具有挑战性的。这种方法使得分析加密的通信尤其具有挑战性:由于被动监控无法评估通信的实际内容,因此防御者通常对其合法性一无所知。
Zeek代理通过向主机活动添加端点级别的有利位置来弥补这一差距,与Zeek本身一样,与策略无关的代理不会执行任何检测。相反,它收集主机端事件流(“新进程”、“打开的套接字”、“用户登录”),并将这些事件提供给Zeek的标准处理管道,在那里这些事件对Zeek脚本可用,就像传统的网络派生事件一样。通过在同一个事件抽象中表示网络和主机活动,该设置允许用户部署Zeek的所有强大机制来交叉关联这两个有利位置。例如,Zeek现在可以标记与启动它们的端点端服务(例如,sshd)的网络连接。该代理还可以让Zeek创建记录端点信息的新日志,如本示例所示:
Zeek网络连接和监听端口的日志,其中包含来自端点的相关进程上下文(由Zeek代理提供)
2018年,斯特芬·哈斯(Steffen Haas)在汉堡大学开发了该代理的初始原型。该原型最初称为zeek-osquery,是代理方法的有力演示,但是它具有某些技术限制,无法进行生产使用。
何为zeek-osquery?
入侵检测系统(IDS)可以分析网络流量以寻找攻击和入侵的迹象。但是,加密通信限制了它们的可见性,高级攻击者还试图逃避其检测。为了克服这些限制,我们使用来自主机的其他数据扩展了网络IDS(NIDS)的范围。为此,研究人员提出了一个集成的开源zeek-osquery平台,该平台将Zeek IDS与osquery主机监视器结合在一起。zeek-osquery平台可以大规模收集、处理和关联主机和网络数据,例如将网络流归因于流程和用户。该平台可以使用自己的检测脚本灵活地扩展,既可以使用已经关联的内容,也可以使用其他动态获取的主机数据。分布式部署使其可以扩展到任意数量的osquery主机。评估结果表明,单个Zeek实例可以管理870多个osquery主机,并且可以将超过96%的TCP连接实时分配给主机端应用程序和用户。
在2019年,Corelight聘请了加密安全团队Trail of Bits来更新和改进Haas的zeek-osquery软件原型。虽然原型是作为一组补丁直接开发的,这些补丁直接在osquery内核中实现了功能,但是Trail of Bits提出了一种不同的方法,该方法更适合于长期开发,并且更适合现有部署。新版本开始于将现有代码移植到osquery扩展中,该扩展可以独立打包和传播。最终,此过程演变为全新的重写,以生成可以以独立方式和与osquery一起运行的全新代理。该代理程序的内置数据源利用与osquery相同的基础过程监控功能,但在某种程度上与Linux系统配置为实际使用的方式更加兼容。Trail of Bits还设计了代理程序,以便在将来可以方便地支持更多的定制数据源。
Zeek代理的工作方式
与osquery一样,代理使用SQLite库以数据库形式提供系统信息。表插件发布实际数据,并在启动期间进行分配和注册。在导出报告模式和生成数据所需的方法之后,内部框架将创建所需的SQLite表抽象并将其附加到数据库。
大多数数据源将在查询时检查系统,并在该特定时间点报告其发现。但是,即使没有执行查询,某些表仍可能希望继续监听系统活动。这通常称为事件表,它通常使用线程/回调在后台连续记录系统事件。 process_events表的工作原理与此完全相同,它允许Zeek脚本查看过去的进程执行情况。
如果扩展名恰好是在同一系统上安装并运行的,则可以从osquery导入其他数据源。通过这种设计,所有内容似乎都来自一个统一的数据库,从而允许用户将内置表和osquery表无缝连接在一起。
一旦代理连接到Zeek服务器实例,就可以通过脚本访问这些表。可以通过运行单次SQL语句来请求数据,也可以作为计划的查询来请求数据,该查询自动运行并按指定的时间间隔报告数据。
在Zeek端,脚本通过定义相应的SQL查询来完全控制从代理请求的数据。结果连续不断地流入Zeek,透明地转换成标准的Zeek事件,处理程序可以挂接到这些事件中,就好像这些事件来自网络流量一样。
如何开始
Zeek代理文档总结了如何构建和安装代理,在Zeek端,你可以通过Zeek的软件包管理器安装新的Zeek Agent框架。有关安装和使用的更多信息,请参见这个文档。有关代理请求信息的Zeek脚本的示例,请参阅此脚本,该脚本将进程活动转换为Linux上的Zeek日志。
Zeek代理接下来会做什么?
目前,研究人员非常欢迎有关可用性、功能和部署模型的Zeek代理反馈。另外,研究人员很想知道Zeek社区提出了什么用例,并鼓励用户发布利用代理功能的Zeek软件包。该代理是一个开源项目,因此研究人员也感谢代码的贡献。
今后,研究人员将继续扩展该代理。因为研究人员刚刚完成了macOS的初始移植,并且也在努力获得Windows支持。研究人员将扩展Zeek端代理脚本框架,并在Zeek的基础通信系统Broker中添加一个多跳路由层,以便在多个端点之间部署Zeek代理。
本文翻译自:https://blog.trailofbits.com/2020/03/23/announcing-the-zeek-agent/如若转载,请注明原文地址: