Zabbix

Zabbix是一个支持实时监控数千台服务器、虚拟机和网络设备的企业级解决方案,客户覆盖许多大型企业。

监控组件

  1. Zabbix Server
    Zabbix Server是所有配置、统计和操作数据的中央存储中心,也是Zabbix监控系统的告警中心。在监控的系统中出现任何异常,将被发出通知给管理员。
    Zabbix Server的功能可分解成为三个不同的组件,分别为Zabbix Server服务、Web后台及数据库。
  2. Zabbix Proxy
    Zabbix Proxy是在大规模分布式监控场景中采用一种分担Zabbix Server压力的分层结构,其多用在跨机房、跨网络的环境中,Zabbix Proxy可以代替Zabbix Server收集性能和可用性数据,然后把数据汇报给Zabbix Server,并且在一定程度上分担了Zabbix Server的压力。
  3. Zabbix Agent
    Zabbix Agent部署在被监控的目标机器上,以主动监控本地资源和应用程序(硬盘、内存、处理器统计信息等)。
    Zabbix Agent收集本地的状态信息并将数据上报给Zabbix Server用于进一步处理。

网络架构

对于 Zabbix Agent 客户端来说,根据请求类型可分为被动模式及主动模式:

  • 被动模式:Server 向 Agent 的 10050 端口获取监控项数据,Agent 根据监控项收集本机数据并响应。
  • 主动模式:Agent 主动请求 Server (Proxy) 的 10051 端口获取监控项列表,并根据监控项收集本机数据提交给 Server (Proxy)

在部署时,可以根据架构分为Server-Client架构(直接连接)、Server-Proxy-Client架构(proxy架构)、Master-Node-Client架构(Node架构):

  • Server-Client架构
    最为常见的Zabbix部署架构,Server与Agent同处于内网区域,Agent能够直接与Server通讯,不受跨区域限制。
    file
  • Server-Proxy-Client架构
    多数见于大规模监控需求的企业内网,其多用在跨机房、跨网络的环境,由于Agent无法直接与位于其他区域的Server通讯,需要由各区域Proxy代替收集Agent数据然后再上报Server。
    file
  • Master-node-client架构
    master-node-client架构是zabbix最复杂的监控架构,适用于跨网络、跨机房、设备较多的大型环境。每个node同时也是一个server端,node下面可以接proxy,也可以直接接client。node有自己的配置文件和数据库,其要做的就是将配置信息和监控数据向master同步。当master宕机后,node可以保证架构的完整性。
    该结构的网络架构基本和client型一致,可以理解为多节点多备份的client架构。

Agent配置文件

linux下默认路径/etc/zabbix/zabbix_agentd.conf
配置文件中包含的一些基本设置选项:

  • Server 参数
    Server 或 Proxy 的 IP、CIDR、域名等,Agent 仅接受来自 Server 参数的 IP 请求(白名单)。
  • ServerActive 参数
    Server 或 Proxy 的 IP、CIDR、域名等,用于主动模式,Agent 主动向 ServerActive 参数的 IP 发送请求。
  • StartAgents 参数
    zabbix 启动之后开启被动监控的进程数量,默认为3。如果设置为 0,即StartAgents=0,那么 zabbix 被动监控被禁用,并且不会监听 10050 端口。

存在风险的参数:

  • EnableRemoteCommands参数
    EnableRemoteCommands=1,是否允许来自Zabbix Server的远程命令,开启后可通过Server下发shell脚本在Agent上执行。
  • AllowRoot参数
    AllowRoot=1,linux默认以低权限用户zabbix运行,开启后以root权限运行zabbix_agentd服务。

历史漏洞

  • CVE-2016-10134 - SQL 注入漏洞
  • CVE-2017-2824 - 命令注入
  • CVE-2020-11800 - 命令注入

后利用

linux

默认账号为admin/zabbix
获取admin后可通过server端执行脚本的方式获取server服务器权限

agent端需开启EnableRemoteCommands参数才可执行命令,在服务器上可使用zabbix_get测试,在未开启命令执行时可以文件读取,如zabbix_get -s server -p 10050 -k "vfs.file.contents[/etc/passwd]",无法读取超过64KB的文件。

server端默认配置文件路径在/etc/zabbix/zabbix_server.conf,可通过读取该文件获取mysql数据库密码,进一步扩大攻击面

在分布式时,server、web、mysql可能不在同一台服务器中,当server与web在同一台服务器时可尝试提取并写入webshell,默认web路径为/usr/share/webapps/zabbix,提取是因为apache权限可能高于zabbix用户的权限。

win

windows启用agent时,默认将其作为服务安装,也就是权限为system,可以利用vfs.file.contents命令读取UNC路径,窃取Zabbix Agent机器的Net-NTLM hash。在工作组环境中,system用户的Net-NTLM hash为空,所以工作组环境无法利用。


"孓然一身 , 了无牵挂"