Zabbix
Zabbix是一个支持实时监控数千台服务器、虚拟机和网络设备的企业级解决方案,客户覆盖许多大型企业。
监控组件
- Zabbix Server
Zabbix Server是所有配置、统计和操作数据的中央存储中心,也是Zabbix监控系统的告警中心。在监控的系统中出现任何异常,将被发出通知给管理员。
Zabbix Server的功能可分解成为三个不同的组件,分别为Zabbix Server服务、Web后台及数据库。 - Zabbix Proxy
Zabbix Proxy是在大规模分布式监控场景中采用一种分担Zabbix Server压力的分层结构,其多用在跨机房、跨网络的环境中,Zabbix Proxy可以代替Zabbix Server收集性能和可用性数据,然后把数据汇报给Zabbix Server,并且在一定程度上分担了Zabbix Server的压力。 - 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通讯,不受跨区域限制。
- Server-Proxy-Client架构
多数见于大规模监控需求的企业内网,其多用在跨机房、跨网络的环境,由于Agent无法直接与位于其他区域的Server通讯,需要由各区域Proxy代替收集Agent数据然后再上报Server。
- 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为空,所以工作组环境无法利用。
Comments | NOTHING